linux内核-4-rootfs构建移植

在嵌入式Linux中,根文件系统(rootfs)起着至关重要的作用。
这是内核启动后挂载的第一个文件系统,它包含初始化脚本和服务。
虽然计算机上的Ubuntu内核映像通常存储在/boot/vmlinuz中,但嵌入式系统通常将内核代码存储在专用NAND闪存或EMMC分区中,而不是rootfs中。
根文件系统和内核是独立的。
如果没有根文件系统,内核将无法正常工作并会显示Kernelpanic错误。

根文件系统主要由以下目录组成:

/bin:存放系统所需的可执行命令,如ls、cp、mv等。
/dev:包含设备节点文件。
/etc:存放配置文件。
/lib:存储Linux所需的库文件,并使它们可供命令和应用程序使用。
/mnt:用于连接外部存储的临时挂载目录。
/proc:虚拟文件系统,提供硬件信息和打印输出。
/usr:Unix操作系统软件资源目录。
/var:存储可变数据,例如日志文件。
/sys:sysfs文件系统挂载点,管理内核数据结构信息。

创建根文件系统时,通常会使用BusyBox,其中包含许多Linux命令。
首先从源代码编译并配置BusyBox,例如将其更改为支持中文编码,然后配置编译选项以避免静态编译引起的DNS问题。
构建完成后,将所需的库文件(如/lib和/usr/lib)添加到rootfs中,并创建dev、proc、mnt、sys、tmp和root等目录。
在测试过程中,您可以使用NFS挂载rootfs并通过更改bootargs设置挂载选项。
最后添加rcS、fstab、inittab、resolv.conf等配置文件,保证系统正常启动和网络设置。

小白自制Linux开发板三.Linux内核与文件系统移植

Linux内核移植和文件系统创建流程对于F1C100S/F1C200S,官方Linux源代码提供了对licheepinano的支持。
我们可以利用licheepinano配置文件来完成核心移植。
首先,到Linux系统官方网站下载最新的长期支持版本(推荐5.10.69)或者根据个人需求选择其他版本。
在新页面中,选择【摘要】,点击【标签】中的【...】进行加载。
下载完成后,将代码复制到您的Ubuntu虚拟机并解压缩。
接下来,配置编译过程。
在VS中打开Linux内核代码,找到Makefile并进行如下配置:指定Arm架构并使用已安装的编译工具。
更改Makefile中的ARCH和CROSS_COMPILE字段或直接向make命令添加适当的选项。
配置内核,将sunxi_defconfig替换为lichepi_nano配置文件,完成内核和设备树的编译。
为了确保TF卡设备树配置正确,我们需要修改suniv-f1c100s.dtsi和suniv-f1c100s-lichepi-nano.dts文件。
通过将代码添加到根节点来验证设备树是否正确识别硬件。
在编译过程中,由于Ubuntu系统的差异,可能会遇到编译错误,可以通过复制错误信息并安装缺少的组件来解决。
第一次编译可能需要很长时间。
完成后,将生成一个核心zImage文件和一个设备树文件suniv-f1c100s-lichepi-nano.dtb。
为TF卡设置分区,使用Gparted软件创建两个分区:一个存放内核文件和设备树文件,另一个存放根文件系统。
选择fat16和ext4格式并配置相应的卷标。
创建分区后,使用文件管理器查看两个已安装的分区。
将生成的内核文件和设备树文件复制到TF卡的BOOT部分。
插入开发板,重启后系统会自动进入内核启动阶段。
此时,需要确保文件系统挂载正确。
接下来执行文件系统迁移。
选择Buildroot工具创建文件系统,从官网下载buildroot2018.2.11版本并解压。
配置Targettoptions、Buildoptions、Toolchain和Systemconfiguration以确保系统兼容性。
运行文件系统构建命令并等待其完成。
将最终生成的rootfs.tar文件解压到TF卡的第二分区。
插入TF卡并输入root帐号。
系统将成功挂载根文件系统并进入交互式shell环境。
要解决命令行前出现#符号的问题,请修改/etc/profile文件以获得与常规Linux上相同的体验。
开发板运行时,必须执行正常的系统关闭命令,否则可能会损坏文件系统。
内核和文件系统移植完成后,我们就可以通过LinuxGPIO系统在小型开发板上实现LED照明实验了。
设置文件系统,更改适当的命令,编译rootfs并将其传输到开发板。
了解如何计算GPIO编号和值并使用shell命令控制LED指示灯。
最后,虽然目前灯光实验的实现比较简单,但代表了Linux内核功能的初步应用。
未来我们计划更新硬件,进行更深入的开发。
我们期待下一步的研究!