会员
周边
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
kirito
不积硅步,无以至千里,不积小流,无以致江海。
博客园
首页
新随笔
联系
管理
订阅
合集-从零开始写树莓派操作系统
Lesson01-利用Makefile创建内核镜像文件kernel8.img
摘要:编写树莓派内核映像的过程可以等同于gcc的编译过程:预处理、编译、汇编、链接,后面还会加一步:将可执行文件转换成二进制的镜像文件。 在MakeFile里的构建过程分为3步: 1.将.c文件经过预处理、编译、汇编生成.o文件,将.S文件经过汇编生成.o文件。 2.将.o文件经过链接生成.elf可执行文
阅读全文
posted @
2024-09-13 21:51
蔚蓝蔷薇
阅读(155)
评论(0)
推荐(0)
Lesson02-设计链接脚本linker.ld
摘要:链接脚本主要是将.o目标文件链接成可执行文件,里面包含了程序各个段在内存中的布局。 SECTIONS { #用于启动的程序 .text.boot : { *(.text.boot) } #程序段 .text : { *(.text) } #只读数据 .rodata : { *(.rodata) }
阅读全文
posted @
2024-09-13 22:04
蔚蓝蔷薇
阅读(69)
评论(0)
推荐(0)
Lesson03-设计启动用的汇编程序boot.S
摘要:上一节的链接脚本中定义了text.boot段,这一节中就用汇编语言实现。 #include "mm.h" ;定义段名 .section = "text.boot" ;定义全局变量 .global _start _start: ;获取处理器的id mrs x0, mpidr_el1 ;判断id号是否为
阅读全文
posted @
2024-09-13 22:10
蔚蓝蔷薇
阅读(52)
评论(0)
推荐(0)
lesson04-设计初始化bss段、读写寄存器值的汇编函数
摘要:在内核启动时需要将bss段的所有数据清0,这里就需要memzero函数。 .global memzero ;全局可见 memzero: str xzr, [x0], #8 subs x1, x1, #8 b.gt memzero ret 内核启动时需要经常读写soc内部寄存器的值,这里就需要用到对应
阅读全文
posted @
2024-09-13 22:22
蔚蓝蔷薇
阅读(78)
评论(0)
推荐(0)
lesson05-设计主函数实现串口的初始化和运行
摘要:根据boot.S里的内容,最后会跳转到kernel_main里,在这里会进行设置gpio引脚配置串口的初始化,然后循环运行,不断打印接受到的内容。 //主函数 void kernel_main() { //串口初始化 uart_init(); //串口发送hello world uart_send_
阅读全文
posted @
2024-09-13 22:37
蔚蓝蔷薇
阅读(95)
评论(0)
推荐(0)
公告