一.标准linux启动过程图
对于linux启动流程分析,我们需要移植bootloader引导加载程序---移植linux内核---制作根文件系统镜像文件;
二.为什么进行系统移植?
对于不同的硬件平台,linux系统启动流程大体相同,但是资源需求有差异,所以需要对已有平台的linux系统的各种配置资源进行少量修改和裁剪,移植到已有的开发板上,使其在开发板上能运行;
三.移植bootloader引导加载程序(uboot移植)
1.uboot简介
- bootloader:引导加载程序统称;
- uboot是bootloader中,其中一种加载引导程序;
- 在嵌入式开发中,常用引导加载程序为uboot,相当于电脑bios;
2.uboot特点作用
-
uboot是一个开源分布式软件;
-
uboot支持多种硬件架构平台(ARM/X86/POWERPC/.........);
-
uboot是一个裸机开发程序;
-
uboot是一个短命鬼,主要引导内核进行启动,内核启动成功之后,生命周期就结束;
-
uboot引导内核进行启动时,会给内核传递两个参数(bootcmd/bootargs),bootcmd参数:自启动命令 ==> 进入自启动模式;bootargs参数:自启动参数 ==> 将ubuntu指定文件夹,挂载到开发板中;
四.移植linux内核
1.移植原因
uboot已经移植成功,uboot主要作用引导内核进行启动,会给内核传递两个参数(bootcmd / bootargs);
需要内核的五大功能:
- 内存管理(内存是计算机系统中最主要的资源,内存申请释放等),
- 文件管理(在Linux系统中一切皆是文件,通过文件系统格式进行ext2/ext3/ext4格式进行管理),
- 进程管理(进程是在计算机系统中资源分配的最小单元,进程创建/销毁/调度),
- 网络管理(内核支持各种网络标准协议和网络设备,通过网络协议栈,完成数据收发),
- 设备管理(Linux 系统中几乎每个系统操作最终都映射到一个或多个物理设备上,字符设备 / 块设备);
2.linux内核特点
- linux内核是开源的,内核中由C语言和汇编语言实现;
- linux内核支持多种硬件架构平台;
- linux内核具有很好的移植性和裁剪性;
- linux内核可以采用模块化方式进行编译;
五.制作根文件系统
1.什么是根文件系统?
- 根文件系统(rootfs):系统运行时,必须依赖的一些脚本和库相关文件;
- 根文件系统镜像文件(ramdisk.img):将rootfs以某种格式进行压缩;
2.为什么制作根文件系统?
内核已经成功,并且uboot可以引导内核进行启动成功,我们不能直接操作内核,内核空间属于3G~4G,应用层空间属于0G~3G , 用户是不可以直接操作内核空间;
在Linux系统中一切皆是文件,文件是计算机系统的软件资源,操作系统本身和大量的用户程序、数据都是以文件形式组织和存放的,我们可以通过控制rootfs文件,间接控制开发板;
3.制作工具
根文件系统制作网址:Index of /downloads
4.测试工具
通过nfs服务器进行测试,将~/nfs/rootfs目录挂载到开发板上,串口工具对~/nfs/rootfs操作;