Linux系统启动笔记

Linux系统从软件的角度分为4部分
1.引导加载程序
2.Linux内核
3.文件系统
4.应用程序
其中Bootloader是系统启动或复位以后执行的第一段代码。主要用于初始化处理器及外设然后调用Linux内核。




Bootloader的概念和作用
Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序。
完成对系统的初始化任务之后,它会将非易失性存储器中的Linux 内核拷贝到RAM中去,然后跳转到内核的第一条指令处继续执行,从而启动 Linux 内核。




Bootloader的执行过程
由于存储Bootloader的存储器不同,因而Bootloader的执行过程并不相同。
嵌入式系统中广泛采用的非易失性存储器通常是Flash,而Flash又分为Nor Flash和Nand Flash两种。Nor Flash支持芯片内执行(XIP,eXecute In Place)。而Nand Flash并不支持XIP,所以要执行Nand Flash上的代码,必须将其拷贝到RAM中去,然后跳到RAM中去执行。




Bootloader的功能
所有的Bootloader都具备以下功能:
1.初始化RAM
2.初始化串口
3.检测处理器类型
4.设置Linux启动参数
5.调用Linux内核映像




Linux启动过程
在Bootloader将Linux内核映像拷贝到RAM以后,可以通过下例代码启动Linux 内核:
call_linux(0, machine_type, kernel_params_base)
其中machine_tpye 是Bootloader检测出来的处理器类型,kernel_params_base 是启动参数在 RAM的地址。通过这种方式将 Linux启动。需要的参数从 bootloader传递到内核。
Linux内核有两种映像,一种是非压缩内核,叫Image,另一种是他的压缩版本,zImage。
对于ARM系列的处理器来说,zImage的入口程序即为arch/arm/boot/compressed/head.S。它依次完成以下工作:
开启 MMU 和 Cache
调用 decompress_kernel()解压内核
通过调用 call_kernel()进入非压缩内核Image的启动


Linux内核入口
Linux 非压缩内核的入口位于文件/arch/arm/kernel/head-armv.S  中的stext 段




start_kernel函数
start_kernel是所有Linux平台进入系统内核初始化后的入口函数。它主要完成剩余的与硬件平台相关的初始化工作。在进行一系列与内核相关的初始化后,调用第一个用户进程-init 进程并等待用户进程的执行,这样整个 Linux 内核便启动完毕。






根文件系统预备知识
bin :存放所有用户都可以使用的基本命令
sbin :存放的是基本的系统命令,用于启动系统修复系统
usr :存放的是共享、只读的程序和数据
proc:空目录,常作为proc文件系统的挂载点
dev:该目录存放设备文件和其它特殊文件
etc:存放系统配置文件包括启动文件
lib:存放共享库和可加载块,共享库用于启动系统、运行根文件系统中的可执行程序
boot:引导架子啊程序所使用的静态文件
home:用户主目录
mnt:用于临时挂载某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
opt:给主机额外安装软件做摆放的目录
root:root用户的主目录
tmp:存放临时文件,通常是空目录
var:存放可变的数据

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值