开发板启动流程
bootloader--> 初始化硬件、加载内核-->kernel--> 初始化,挂载rootfs-->application
U-BOOT编译生成的映像文件
u-boot.map U-boot映像的符号表(方便源码的追踪)
u-boot U-Boot映像的ELF格式
u-boot.bin U-Boot映像原始的二进制格式(烧录用)(需加入BL1)
u-boot.srec U-Boot映像的S-Record格式
U-BOOT启动流程
板子上电第一个程序,做启动引导工作 初始化硬件、引导加载内核
2个阶段:汇编阶段 c阶段
汇编阶段:设置为SVC模式,关闭中断,MMU,看门狗等
基本硬件设备初始化//初始化时钟,串口,flash,内存见cpu/arm_cortexa8/start.s 的cpu_init_crit
自搬移到内存//copy_uboot_to_run 或relocate
设置栈//stack_setup
跳转到第二阶段代码入口即c阶段//ldr pc,_start_armboot
c阶段:大部分硬件初始化 + 搬移内核到内存 + 运行内核
2个搬移:u-boot自搬移,搬移uImage(内核),都由Flash搬移到内存中
2个初始化:基本硬件初始化:时钟串口flash内存等,大部分硬件初始化:SD卡网卡
关于内核启动流程:bootloader--->kernel--->rootfs--->app
自解压内核 decompess (arch/arm/boot/compressed/head.s)
运行内核汇编部分,并检测合法性(CPU类型机器类型)(head.s入口stext //arch/arm/kernel/head.s)
运行内核C部分 start_kernel (init/main.c)CPU,机器参数安装setup_arch,中断,定时,终端内存等最基本的初始化,创建核心进程kernel_init运行,启动多任务调度
挂载rootfs 文件系统
运行第一个应用程序init//linuxrc
bootloader小计
于 2022-04-19 00:54:17 首次发布