摘要: 根据boot.S里的内容,最后会跳转到kernel_main里,在这里会进行设置gpio引脚配置串口的初始化,然后循环运行,不断打印接受到的内容。 //主函数 void kernel_main() { //串口初始化 uart_init(); //串口发送hello world uart_send_ 阅读全文
posted @ 2024-09-13 22:37 蔚蓝蔷薇 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 在内核启动时需要将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 蔚蓝蔷薇 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 上一节的链接脚本中定义了text.boot段,这一节中就用汇编语言实现。 #include "mm.h" ;定义段名 .section = "text.boot" ;定义全局变量 .global _start _start: ;获取处理器的id mrs x0, mpidr_el1 ;判断id号是否为 阅读全文
posted @ 2024-09-13 22:10 蔚蓝蔷薇 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 链接脚本主要是将.o目标文件链接成可执行文件,里面包含了程序各个段在内存中的布局。 SECTIONS { #用于启动的程序 .text.boot : { *(.text.boot) } #程序段 .text : { *(.text) } #只读数据 .rodata : { *(.rodata) } 阅读全文
posted @ 2024-09-13 22:04 蔚蓝蔷薇 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 编写树莓派内核映像的过程可以等同于gcc的编译过程:预处理、编译、汇编、链接,后面还会加一步:将可执行文件转换成二进制的镜像文件。 在MakeFile里的构建过程分为3步: 1.将.c文件经过预处理、编译、汇编生成.o文件,将.S文件经过汇编生成.o文件。 2.将.o文件经过链接生成.elf可执行文 阅读全文
posted @ 2024-09-13 21:51 蔚蓝蔷薇 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 软件层 1.Freertos中消息队列的应用 消息队列与信号量的区别:消息队列可以传递数据 2.Freertos定时器的应用 创建定时器、设置时间、每次定时器达到计时时间,在回调函数中执行相应动作 3.Freertos关闭所有任务调度 相应api vTaskSuspendAll() xTaskRes 阅读全文
posted @ 2024-09-02 11:54 蔚蓝蔷薇 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ![](https://img2024.cnblogs.com/blog/1600133/202408/1600133-20240806003915301-1961776124.svg) 阅读全文
posted @ 2024-08-06 00:39 蔚蓝蔷薇 阅读(2) 评论(0) 推荐(0) 编辑
摘要: ![](https://img2024.cnblogs.com/blog/1600133/202408/1600133-20240806003839774-632245023.svg) 阅读全文
posted @ 2024-08-06 00:38 蔚蓝蔷薇 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ![](https://img2024.cnblogs.com/blog/1600133/202408/1600133-20240806003746101-1027904748.svg) 阅读全文
posted @ 2024-08-06 00:38 蔚蓝蔷薇 阅读(3) 评论(0) 推荐(0) 编辑
摘要: ![](https://img2024.cnblogs.com/blog/1600133/202408/1600133-20240806003443200-839526408.svg) 阅读全文
posted @ 2024-08-06 00:35 蔚蓝蔷薇 阅读(1) 评论(0) 推荐(0) 编辑