设备启动的整个过程可以分为:
上电----->启动uboot--->加载linux内核----->挂载rootfs----->执行应用程序
下面分步骤详细说明启动各阶段关键信息:
1、运行uboot
(1)设备上电后,CPU开始运行,通常CPU会从某一个固定的物理地址开始运行,这个物理地址一般是Flash芯片的起始物理地址,通常存放的是uboot,于是设备启动首先运行uboot。
----------------->u-boot的版本信息
------------------------->开发板信息
------------------------------------------------>内存为64MB
从8373edf8到84000000的内存主要用来放栈指针、uboot参数、全局变量、开发板信息、供申请内存、uboot存放
----------------------->开始运行u-boot
(2)u-boot分为两个部分,第一部分汇编代码先负责初始化CPU、PLL、DDR、Cache等硬件,让CPU和内存能够稳定运行,然后解压压缩格式的Image,并拷贝到到内存执行。第二部分C代码完成串口、flash、网口等驱动的加载,并构建一个shell环境来接受用户输入。在在这个阶段MMU没有初始化,所有的地址访问都是采用物理地址直接访问的。
---->串口初始化,标准输入、输出、标准错误可以使用
----------->按下任意键进入uboot的命令行
(3)在完成uboot初始化后, uboot会把压缩后的Linux内核镜像拷贝到内存中并解压,同时准备好内核的启动参数,至此uboot的任务完成,下一阶段是加载linux内核。
-->linux内核版本
-->内核类型、压缩格式
-->数据大小2.9MB
-->加载地址80010000
-->入口地址
-->解压内核,成功打印OK
2、加载linux内核
(1)Linux内核代码开始执行,会先进行内核各个子系统初始化,如果CPU带有MMU单元,完成对MMU的初始化。
------------------------------->开始加载内核
----------------------->linux内核版本信息(BSP组制作)(编译器版本信息)(SVN提交时间)
----------------------->时钟初始化(CCLK:1008MHz--->主频?)
----------------------->内核启动参数(规定输出串口号、波特率、init进程、文件系统格式等)----------------------->为后面挂载根文件系统提供参数
----------------------->内存管理
(2)然后初始化多个驱动程序
----------------------->蓝牙相关
----------------------->网络协议
3、挂载根文件系统
(1)接下来Linux内核会挂载根文件系统,要挂载的根文件系统是通过内核启动参数来获取的。
----------------------->挂载根文件系统成功(文件系统类型:jffs2)
----------------------->内核剩余可用内存
----------------------->根文件系统所用BusyBox版本信息
4、执行rcS和start.sh文件
Linux内核继续初始化各种类型的驱动程序,完成之后会启动第一个应用程序,它的进程ID为1。这个应用程序一般由内核启动参数传入,如果没有则会默认执行/sbin/init。init进程会读取配置文件/etc/inittab,根据配置文件的内容它会完成两个工作,执行rcS和启动Shell。至此,Linux系统已经启动完成,给用户提供了一个Shell的交互环境,后续的行为就取决于用户的输入或者系统特定应用的加载。
在rcS文件中执行------------------------------------------>
------------->打印当前时间表明执行了rcS文件
rcS文件中最后运行了脚本start.sh------------------->
执行完rcS,系统会接着执行start.sh脚本
首先执行---------------------------------------------------->
-------------------------->打印时间,表明当前执行了start.sh脚本
--------------------------------------------------->链接库文件
------------------------>设置权限
------------------------>初始化一些驱动模块
strat.sh最后执行----------------->
对应打印信息
----------->开启hicore