理解嵌入式开发中BootLoader、内核和根文件系统之间的关系
一般来说,为了使开发板成功运行linux系统,我们需要完成以下三个方面的开发工作:
- bootloader(启动装载)
- kernel(内核)
- rootfs(根文件系统)
1. bootloader
对于bootloader,我们一般用u-boot来制作。
当开发板烧写了u-boot并启动后,你可以使用命令行来控制开发板进行一些简单硬件操作和配置(内存、网络、文件系统和启动等等),并且命令风格和linux很相似,所以也可以把u-boot看作一个封装了各种硬件外设驱动(裸机)的Shell程序。
由于u-boot集成了网络功能(如tftp工具),因此开发板在烧写好u-boot后,我们可以通过网络上传linux内核,将kernel镜像文件直接加载开发板内存中去,达到动态加载的目的,这样就不用非得先把kernel烧写到mmc和sd卡中再去加载和执行。使用u-boot可以直接将内存中的镜像文件写入mmc和sd卡,也可以从mmc和sd卡将镜像读到内存中。
2.kernel
kernel的启动依赖于bootLoader,因此需要用u-boot来引导和加载我们的内核镜像。使用u-boot的boot相关命令能够启动linux kernel。当kernel启动完毕的时候,u-boot就完成了它的任务,把命令行让给linux内核。
3.rootfs
kernel的正常运行要求有一个根文件系统rootfs,这个根文件系统存放了linux系统的一些重要文件、库、命令等,内核启动后需要对其进行挂载。