嵌入式linux系统启动过程说明

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40597998/article/details/88050674

设备启动的整个过程可以分为:

上电----->启动uboot--->加载linux内核----->挂载rootfs----->执行应用程序

下面分步骤详细说明启动各阶段关键信息:

1、运行uboot

(1)设备上电后,CPU开始运行,通常CPU会从某一个固定的物理地址开始运行,这个物理地址一般是Flash芯片的起始物理地址,通常存放的是uboot,于是设备启动首先运行uboot。

                                                 ----------------->u-boot的版本信息

 

------------------------->开发板信息

------------------------------------------------>内存为64MB

8373edf884000000的内存主要用来放栈指针、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、执行rcSstart.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

 

展开阅读全文

没有更多推荐了,返回首页