一个完整的linux系统,通常包含了Uboot、kernel、设备树以及根文件系统。
UBoot
Uboot的全称 Universal Boot Loader,是一个主要用于嵌入式系统的引导加载程序,是一套在GNU通用公共许可证之下发布的自由软件。遵循GPL条款的开源项目
U-Boot的主要作用是用来启动操作系统内核,它分为两个阶段,即boot + loader, boot阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态, loader阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。
Linux内核
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 Linux内核是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:进程管理子系统、内存管理子系统、文件子系统、网络子系统、设备子系统等。
设备树
设备树用于描述一个硬件平台的硬件资源。这个“设备树”可以被bootloader(uboot)传递到内核, 内核可以从设备树中获取硬件信息。 相当于使用定制的设备树就可以操作不一样的硬件资源, 比如i2c,spi,mipi,mini-pcie,i2s等接口,都是通过设备树去配置使能才能去正常操作它们。
设备树以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根节点”, 挂载到本地总线的spi总线为树的“枝干”在设备树里称为“根节点的子节点”, spi总线下的spi设备不止一个,这些“枝干”又可以再分。
设备树的使用
在LubanCat-RK系列的板子中,每块板子都有很多的主设备树,位于 /boot/dtb 里
由于我们的通用镜像需要支持很多不同的板子,因此,我们通过开机读取设备id改变设备树,从而适配不同的板子
LubanCat-RK系列的板子的设备树由一个文件来指定,它是 /boot/rk-kernel.dtb ,如下图:
根文件系统
根文件系统是指操作系统的基本文件系统,它包含了操作系统的核心文件和目录。根文件系统在Linux中被称为”/“(斜杠),它是整个文件系统层次结构的顶级目录。
根文件系统通常被挂载在计算机的硬盘或固态硬盘上的一个分区上,这个分区被称为根分区。在Ubuntu安装过程中,你可以选择将根文件系统安装到特定的分区上,这样操作系统就可以在该分区上访问和管理系统文件。
根文件系统包含了许多重要的目录和文件,例如:
- /bin:包含了一些基本的可执行文件,如ls、cp和rm等。
- /boot:包含了启动系统所需的文件,例如内核和引导加载程序。
- /etc:包含了系统配置文件,如网络配置、用户管理和服务配置等。
- /home:包含了用户的个人目录,每个用户在此目录下有一个对应的子目录。
- /lib和/lib64:包含了系统所需的共享库文件。
- /sbin:包含了一些系统管理命令,只能由管理员运行。
- /usr:包含了系统的第二层次文件系统,包括了大部分用户安装的应用程序和文件。
- /var:包含了可变数据文件,如日志文件、数据库和缓存文件等。
这些目录和文件组成了Ubuntu根文件系统的基本结构,它们共同支持着操作系统的正常运行和管理。