[国嵌攻略][101][根文件系统制作]
根文件系统
一个嵌入式Linux系统可以有多个文件系统,但必须有第一个文件系统,也就是根文件系统。系统启动后看到的目录和目录里面的文件就是文件系统。
建立根文件系统
1.创建目录
示例:
mkdir rootfs
cd rootfs
mkdir bin dev etc lib mnt proc sbin sys tmp usr var
mkdir usr/bin usr/lib usr/sbin lib/modules
2.创建设备文件
Linux系统中设备以文件的方式存在dev目录下,Linux系统启动时需要console文件和null文件。
示例:
cd dev
mknod -m 666 console c 5 1 -m 666属性,console设备文件名,c字符设备,5主设备号,1次设备号
mknod -m 666 null c 1 3
3.添加配置文件
配置文件与处理器架构无关
示例:
tar zxvf etc.tar.gz
cp etc/* rootfs/etc/
4.添加内核模块
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_install ARCH=arm INSTARLL_MOD_PATH=.../rootfs/
5.编译和安装busybox
5.1配置busybox
make menuconfig
busybox settings->build options->[*]build busybox as a static binary
busybox settings->build options->(arm-linux-)cross compiler prefix
busybox settings->installation options->[*]don’t use /usr
busybox settings->installation options->(.../rootfs)busybox installation prefix
5.2.编译busybox
make
5.2.安装busybox
make install
挂载根文件系统
1.文件系统类型
根据存储设备的硬件特性和系统需求,不同的文件系统有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为ram和flash,常用的基于存储设备的文件系统类型包括:jffs2,yaff2,ubifs,ramdisk等。
基于nand flash的文件系统:yaffs2,ubifs
基于norflash的文件系统:jffs2
基于内存的文件系统:ramdisk,initramfs
基于网络的文件系统:nfs
网络文件系统一般在开发阶段使用,内存文件系统的优势是启动速度快,nand flash文件的优势是可以保存用户数据,所在在实际产品中会采用内存文件系统和nand flash文件系统混用的情况。
2.使用initramfs挂载根文件系统
特点:
使用initramfs的优点在于启动速度快,缺点是无法修改文件系统里面的内容。一般在做成产品后使用。
2.1.在根文件系统下创建软链接
cd .../rootfs/
ln –s ./bin/busybox init
2.2.配置Linux内核
make menuconfig ARCH=arm
general setup->[*]initial ram filesystem and ram disk->(.../rootfs)initramfs source file(s)
2.3.编译Linux内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
2.4.设置启动参数
进入uboot设置环境变量
setenv bootargs noinitrd console=ttySAC0,115200
saveenv
2.5.下载内核文件
tftp 31000000 uImage
2.6.启动内核
bootm 31000000
3.使用nfs挂载根文件系统
特点:
使用nfs的优点在于可以通过网络直接修改文件系统里面的内容,缺点在于需要网络。一般在开发阶段使用。
3.1.配置内核
make menuconfig ARCH=arm
general setup->[ ]initial ram filesystem and ram disk
file systems->[*]network file systems->[*]root file system on nfs
3.2.编译Linux内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
3.3.设置启动参数
进入uboot设置环境变量
console=ttySAC0,115200 表示使用串口0,波特率是115200
root=/dev/nfs rw 表示使用根目录下的/dev/nfs设备作为文件系统,rw可读可写
nfsroot=192.168.1.101:.../rootfs 表示nfs服务器的地址和根文件系统的路径
ip=开发板IP地址:服务器IP地址:网关地址:地址掩码:开发板主机名:IP对应的网卡设备:动态域名获取
示例:
setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.101:.../rootfs ip=192.168.1.230:192.168.1.101:192.168.1.1:255.255.255.0::eth0:off
saveenv
3.4.配置NFS服务器
vim /etc/exports 修改NFS服务器路径
.../rootfs *(rw,sync,no_root_squash)
/etc/init.d/nfs restart 启动NFS服务器
3.5.下载内核文件
tftp 31000000 uImage
3.6.启动内核
bootm 31000000
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术