目录
根文件系统
Linux内核
UBoot
嵌入式Linux开发有三个巨头需要我们关心:uBoot(通用启动系统),Linux Kernel(辅助我们管理硬件和软件的资源使用)和根文件系统(rootfs)。这三个事情是搞嵌入式Linux完全离不开的三个主题。
看官如果知道前面笔者的博客就知道。我们一种常见的搭配就是:使用uBoot告知我们的Linux内核镜像在哪一个位置,有没有设备树;uBoot自身作为硬件的最基本的初始化后,随即利用我们默认配置的命令行指令(比如说使用哪一个控制台作为输出,要不要进入调试模式启动KGDB来调试内核等等一系列操作)启动我们的Linux。其中,进入我们的Linux内核启动需要一个根文件系统来组织和提供一些启动服务的必要文件(从内核配置到启动时必须要的内核模块等等)。
根文件系统
根文件夹很可能你早就知道了:/
,我们的默认主文件系统就挂载在这里。一般而言,文件系统遵循FHS守则(当然也可以完全不遵守,笔者知道的Linux发行版中nix就是不遵守的)。这里的根文件系统则是将我们的必须的启动文件项目按照我们熟悉的文件系统的方式组织起来(复用?我的猜测是,毕竟我们不可能将一些次要的外部模块也加载进内存,我们玩的是嵌入式,资源并不丰富,不可能提供所有的东西在内存中!)
-
/bin:包含系统启动和基本操作所需的二进制可执行文件,例如
ls
、cp
、mv
等。 -
/sbin:包含系统管理员和系统启动过程需要的二进制文件,如
ifconfig
、shutdown
等。 -
/etc:包含系统配置文件,配置文件通常是文本文件,用于配置系统行为,如
/etc/fstab
(文件系统挂载表)。 -
/dev:包含设备文件,用于表示系统中的硬件设备,如硬盘、终端设备等。
-
/proc:一个虚拟文件系统,提供关于系统内核和进程的实时信息,如
/proc/cpuinfo
。 -
/home:通常用于存放用户数据的目录,每个用户有一个子目录(如
/home/user
)。 -
/lib:包含共享库文件和内核模块,系统程序通常需要这些库来运行。
-
/tmp:临时文件目录,存储临时文件。
-
/var:包含可变数据文件,如日志文件、缓存文件等。
-
/usr:包含系统程序和库,通常包含大部分的应用程序和共享资源。
一般的,我们使用BusyBox来制作我们的经典根文件系统
BusyBox,网址这边请,BusyBox就是一个超级无敌轻量的GNU使用工具集合,为我们的Linux内核的进一步启动提供必备的工具辅助等等。
Linux内核
大名鼎鼎的Linux内核!现在笔者写道这里的时候,我们的内核源代码网站已经将我们的内核版本预发布到6.12.5,而6.13已经呼之欲出。(虽然我所见到的大部分培训教程还搁那教4的内核甚至更老的内核)
The Linux Kernel Archives
Linux内核就跟Windows一样,提供了对硬件资源的抽象,对各种软件的施加以隔离,有秩序的交互,达到管理整个电子设备的目的。如果看官没有接触过操作系统,笔者建议优先理解操作系统,再来看看Linux会更有概念。笔者的建议是《操作系统导论》,或者,如果有对FreeRTOS原理有比较深刻理解的也可以看看Linux内核(尽管复杂程度完全无法类比)
UBoot
Universary Boot!也就是通用启动系统,实际上,我们一般都是拿UBoot启动我们的Linux,也就是起到了类似于我们PC机上的BIOS + Grub引导的效果,我们的BIOS使能好基本的硬件之后,就会把程序的执行流导入到启动Linux上了。