
开发板上电第一步是
启动固件,固件是出厂时固化好的,固件的作用是
初始化一下基本的 设备,以nand为例,固件irom初始化好sram后,将nand中的前4k的bootloader(一般为uboot)拷贝到sram中,sram再初始化另一些设备比如dram等等,然后运行剩下的bootloader,接下来就是引导linux
内核的启动了。bios在开发板相当与irom部分功能和uboot的前4k,内存时钟会在uboot中初始化的。uboot先做一些准备(比如设svc模式,关看门狗、中断、mmu等),然后设置内核参数表,然后跳到内核的地址运行,内核一般是压缩的,需要先解压,入口是stext,是在arch/arm/kernel/vmlinux.lds.S中定义的Arm linux 内核启动流程 还是从编译链接生成vmlinux的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel\arch\arm\kernel\head-armv.o因为 Linux 内核一般都会在 RAM 中运行,所以在调用 Linux 内核之前 bootloader 必须
设置和初始化 RAM,
上电或复位后从flash读取bootloader,通过bootloader 初始化 RAM,初始化串口,检测处理器类型,设置 Linux 启动参数,调用 Linux 内核映像。
在 bootloader 将 Linux 内核映像拷贝到 RAM 以后,可以通过下例代码启动 Linux 内核:
call_linux(0, machine_type, kernel_params_base)。machine_tpye是检测出的处理器类型,kernel_params_base是启动参数在 RAM 的地址。
评论列表(0条)