i.MX6ULL终结者Linux文件系统的构建完善根文件系统

1 创建/etc/init.d/rcS文件

rcS 是个 shell 脚本,Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件的脚本文件。在rootfs中创建/etc/init.d/rcS 文件,命令如下:
mkdir -p etc/init.d/
cd etc/init.d/
touch rcS
然后在rcS文件中输入如下内容(注意每行前面的行数不要输入,这里加上行数为了讲解代码):

1 #!/bin/sh 
2 
3 PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH 
4 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib 
5 export PATH LD_LIBRARY_PATH 
6 
7 mount -a 
8 mkdir /dev/pts 
9 mount -t devpts devpts /dev/pts 
10 
11 echo /sbin/mdev > /proc/sys/kernel/hotplug 
12 mdev -s

第 1 行,表示这是一个 shell 脚本。
第 3 行,PATH 环境变量保存着可执行文件可能存在的目录,这样我们在执行一些命令或者可执行文件的时候就不会提示找不到文件这样的错误。
第 4 行,LD_LIBRARY_PATH 环境变量保存着库文件所在的目录。
第 5 行,使用 export 来导出上面这些环境变量,相当于声明一些“全局变量”。
第 7 行,使用 mount 命令来挂载所有的文件系统,这些文件系统由文件/etc/fstab 来指定,所以我们一会还要创建/etc/fstab 文件。
第 8 和 9 行,创建目录/dev/pts,然后将 devpts 挂载到/dev/pts 目录中。
第 11 和 12 行,使用 mdev 来管理热插拔设备,通过这两行,Linux 内核就可以在/dev 目录下自动创建设备节点。关于 mdev 的详细内容可以参考 busybox 中的 docs/mdev.txt 文档。
如图 1.1所示:
在这里插入图片描述

图 1.1

创建好rcS文件后,赋予其可执行权限,命令如下:
chmod 777 rcS

2 创建/etc/fstab文件

fstab文件是在 Linux 开机以后自动配置哪些需要自动挂载的分区,格式如下:
<file system> <mount point> <type> <options> <dump> <pass>
<file system>:要挂载的特殊的设备,也可以是块设备,比如/dev/sda 等等。
<mount point>:挂载点必须为当期已经存在的目录。
<type>:文件系统类型,比如 ext2、ext3、proc、romfs、tmpfs 等等。
<options>:挂载选项,用于设置挂载参数,一般使用 defaults,也就是默认选项。
defaults:rw, suid, dev, exec, auto, nouser, and async。
auto:系统自动挂载。fstab默认就是这个选项。
noauto :开机不自动挂载。
nouser:只有超级用户可以挂载。
ro:按只读权限挂载。
rw:按可读可写权限挂载。
user:任何用户都可以挂载。
<dump>:为 1 的话表示允许备份,为 0 不备份,一般不备份,因此设置为 0。
<pass>:磁盘检查设置,为 0 表示不检查。根目录‘/’设置为 1,其他的都不能设置为 1,其他的分区从 2 开始。一般不在 fstab 中挂载根目录,因此这里一般设置为 0。
首先返回到文件系统根目录下(/home/topeet/work/busybox/busybox-1.29.0/rootfs),创建fstab文件,命令如下:
cd etc/
touch fstab
fstab文件内容如下:

# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# 	<file system> 	<mount point> 	<type> 	<options> 	<dump> 	<pass>
proc 			/proc 			proc 	defaults 	0 		0
sysfs 			/sys 			sysfs 	defaults 	0 		0
tmpfs 			/tmp 			tmpfs 	defaults 	0 		0

如图 2.1所示:
在这里插入图片描述

图 2.1

3 创建/etc/inittab文件

inittab 的详细内容可以参考 busybox 下的文件 examples/inittab。init 程序会读取/etc/inittab这个文件,inittab 由若干条指令组成。每条指令的结构都是一样的,由以“:”分隔的 4 个段组成,格式如下:
<id>:<runlevels>:<action>:<process>
<id>:登记项标识符,最多为4个字符。用于唯一地标识/etc/inittab文件中的每一个登记项。
<runlevels>:busybox没有用的这个选项。
<action>:动作关键字。用于指定init(M)命令或进程对相应进程(在“process”字段定义)所实施的动作。具体动作包括:
在这里插入图片描述

<process>:所要执行的shell命令.任何合法的shell语法均适用于该字段。
参考 busybox 的 examples/inittab 文件,我们也创建一个/etc/inittab文件,命令如下:
cd etc
touch inittab
inittab文件内容如下(注意每行前面的行数不要输入,这里加上行数为了讲解代码):
1 ::sysinit:/etc/init.d/rcS
2 console::askfirst:-/bin/sh
3 ::restart:/sbin/init
4 ::ctrlaltdel:/sbin/reboot
5 ::shutdown:/bin/umount -a -r
6 ::shutdown:/sbin/swapoff -a
第 1 行,系统启动以后运行/etc/init.d/rcS 这个脚本文件。
第 2 行,将 console 作为控制台终端,也就是 ttymxc0。
第 3 行,重启的话运行/sbin/init。
第 4 行,按下 ctrl+alt+del 组合键的话就运行/sbin/reboot,看来 ctrl+alt+del 组合键用于重启系统。
第 5 行,关机的时候执行/bin/umount,也就是卸载各个文件系统。
第 6 行,关机的时候执行/sbin/swapoff,也就是关闭交换分区。
如图 3.1所示:
在这里插入图片描述

图 3.1

4 生成文件系统镜像

经过前面的步骤我们已经制作完成了一个最小linux文件系统,然后我们在文件系统目录下(/home/topeet/work/busybox/busybox-1.29.0/rootfs)执行“sudo tar jcvf rootfs.tar.bz2 bin dev etc lib linuxrc mnt proc root sbin sys tmp usr”压缩命令,生成rootfs.tar.bz2文件系统镜像,如图 4.1所示:
在这里插入图片描述

图 4.1

运行的时候我们需要输入登录用户名的密码,然后回车,如图 4.2所示:
在这里插入图片描述

图 4.2

压缩完成后生成rootfs.tar.gz文件,我们把它通过MFG烧写工具烧写到开发板(镜像烧写可以参考第六章),烧写完成,开发板的拨码开关设置成正常启动,然后重新上电启动开发板,我们可以看到调试串口打印的信息,如图 4.3所示:

在这里插入图片描述

图 4.3

我们可以在调试串口终端输入“ls”命令,查看当前目录下的文件,运行结果如图 4.4所示:
在这里插入图片描述

图 4.4

至此,我们的Linux最小文件系统就创建完成了。在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值