了解并学习嵌入式linux根文件系统制作

1.准备工作
下载busybox工具说明:用于制作可执行命令工具集
2.开发环境
1)主机:redhat 9
2) 交叉编译工具路径:/usr/local/arm/3.3.2/ (用于编译busybox1.2.0)
把/usr/local/arm/3.3.2/bin路径添加到/etc/profile文件中
3)开发板:友善之臂sbc2410
4)开发板分别使用的linux2.4.18内核和linux2.6.14内核验证文件系统
3.建立目标板空根目录文件夹及根目录下的文件夹
[root@190 friendly-arm]# mkdir myroots
[root@190 friendly-arm]#pwd
/friendly-arm/myroots
[root@190 friendly-arm]#cd myroots
[root@190 myroots]#
[root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var
[root@190 myroots]# mkdir etc/init.d
进入etc/init.d目录下,建立一个脚本文件,并命名为rcs,用gedit打开,添加如下内容:
#! /bin/sh
path=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=s
prevlevel=n
umask 022
export path runlevel prevlevel
#
#trap ctrl-c &c only in this shell so we can interrupt subprocesses.
#
trap : int quit tstp
[root@190 myroots]# cd ../lib
也就是进入lib目录,添加相应的库文件,具体操作略。
4.移植busybox
进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox 。
[root@190 busybox-1.2.0]# make menuconfig
执行之后,将出现如下图所示的配置界面:
由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:
1) support for devfs
2) build busybox as a static binary ( no shared libs )//将busybox编译成静态链接
3) do you want to build busybox with a cross compile?
(/usr/local/arm/3.3.2/bin/arm-linux-) cross compile prefix//指定交叉编译器
4) init
5) support reading an inittab file//支持init读取/etc/inittab 配置文件
6) (x) ash选中ash //建立的rcs脚本才能执行
7)ash
8)cpcatlsmkdirmv //可执行命令工具的选择,自己看着办吧,需要用到的就选上
9) mount
10) umount
11) support loopback mounts
12) support for the old /etc/mtab file
13) insmod
14) support version 2.2.x to 2.4.x linux kernels
15) support version 2.6.x linux kernels
16) vi
以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。
配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:
[root@190 busybox-1.2.0] make target_arch=arm cross=arm-linux- \ prefix=/friendly-arm/myroots/ all install
安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下。
5.制作yaffs文件系统包
[root@190 friendly-arm]#mkyaffsimagemyrootsmyroots.img
6.下载根文件系统包到开发板上,并运行,其结果如图所示
7.补充
首先,本文档制作的根文件系统,是用mkyaffsimage打包成了yaffs镜像文件,也可以使用其他打包工具制作成其他形式的根文件系统,但必须是内核要有相应文件系统的支持,否则,将无法挂上根文件系统。
其次,我们可以根据项目需要,在相应的目录下,添加相应的文件,并配置相应的服务。如内核动态加载模块可放在lib下,在启动脚本里挂载相应的模块;在etc目录下,可移植tinyligin 登录界面应用程序,等等

首届“星河杯”隐私计算大赛正式启动报名!
紫米Z1旅行助手评测 对于喜欢外出旅行的朋友来说绝对是一台随身佳品
苹果的siri和三星的bixby,那个更加人工智能
如何在多模态的语境中利用Transformer强大的表达能力?
日本研发创可贴式皮肤传感器 可监测人体生命活动
了解并学习嵌入式linux根文件系统制作
蓝牙的灵敏度
如何在Vitis HLS GUI中使用库函数?
质量流量计对液体和气体的计量有哪些区别?
关于带AGPS功能的GPS模块的简单介绍
梁宝俊何飚唐永博2022中国联通合作伙伴大会演讲及发布文字实录
为什么电路板在航空航天行业中很重要
arduino ide编译过程
MOS管工作原理_MOS管失效原因分析
海信特研发别墅家系列中央空调 为消费者打造专属别墅的冬季舒适
温室大棚气象观测站的用途有哪些?
关于ATE Load Board的设计挑战及注意事项
IGBT模块缓冲电路的模型_igbt缓冲电路类型
农村供水工程如何实现标准化物联网管理
网上冲浪不爽?可能是你没用上华为云CDN