闲来无事,总结一下linux bootrom的启动流程:
环境:MIPS+linux+交换机
nor flash和nand flash
nor flash:引脚多;支持片内执行;
nand flash:引脚通过IO串行实现,不支持片内执行;
一.基本概念
对于linux的bootloader主要可以分为四个层次:
1.firmware+bootloader
采用固件和bootloader两部分的bootrom方式,在Marvell平台中,CPU中集成了bootrom芯片,实质上是nand flash,CPU上电启动过程中,先执行固件中的程序,然后再执行boot代码。由于固件中代码已经初始化了串口,因此我们开发boot中不需要顾及串口初始化。
2.linux内核参数传递
不止是linux,vxworks也一样,image参数主要通过bootloader进行传递,或者是系统默认的,在我们系统中,都是采用bootloader把参数设置好,向image传递固定数据结构的地址,image启动时就能够获取参数,并按照预定的方式启动。
3.文件系统
主要是基于Flash等内存设备上,包含linux运行时所用的应用程序、库等,比如说给开发提供的Shell、动态链接程序。
4.用户应用程序
存储在文件系统中,例如会在文件系统和内核总放置一个图形化界面,例如minigui。
linux 常见分区:
bootloader + boot parameter + linux kernel + boot filesystem
二.boot常见的启动阶段
在我们产品中,首先设置CPU status寄存器KX,SX,UX;然后读取是哪个CORE,决定走不同的分支;然后读取不同的芯片版本,决定走不同分支;并区分是软复位和硬复位;区分不同的CORE,初始化相应的TLB映射,并根据不同的CORE,计算每个CORE需要执行的代码段。
函数boar

本文详细介绍了MIPS架构下Linux系统的bootrom启动流程,从firmware和bootloader的交互,到Linux内核参数传递,再到文件系统和用户应用程序的加载。重点讨论了在启动阶段CPU状态设置、芯片版本识别、TLB映射初始化,以及如board_init_f()函数在启动过程中的作用。涉及关键函数包括timer_init、env_init、serial_init、console_init_f等。
最低0.47元/天 解锁文章
1328

被折叠的 条评论
为什么被折叠?



