根文件系统内容制作

文件系统制作步骤

  1. 制作根文件系统的内容
    采用Busybox创建基本命令
    创建基本的目录 /lib /etc /var /tmp /dev /sys /proc等
    添加glibc基本动态库
    创建基本的设备节点
    添加启动配置和脚本程序 /etc/inittab /etc/fstab /etc/init.d/rcS
  2. 测试rootfs内容正确性
  3. 制作需要的rootfs类型的格式

BusyBox项目构建系统命令

Busybox是一个UNIX系统工具集,它将很多普通的UNIX工具集成到一个很小的可执行文件中,为普通用户提供大多数常用的命令;
BusyBox常用于制作linux命令 主要指令包括
cat, chmod, chown, cp, chroot, copi, date, dd, df, dmesg, dos2unix, du, echo, env, expr, find, grep, gunzip, gzip, halt, id, ifconfig, init, insmod, etc

创建根文件系统示例

  1. https://busybox.net/ 下载最新稳定版本的BusyBox

  2. 解压文件

    tar -vxf busybox-1.31.1.tar.bz2 
  1. 配置文件
    make -j6 menuconfig

  1. 编译并安装Busybox
    make -j6
    make install -j6        //在install之前,如果/_install目录下有rootfs目录,先删除。

安装成功后,生成以下目录。

linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ ls
bin  linuxrc  sbin  usr
  1. 拷贝共享库文件。
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ sudo cp -a /home/linux/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ .
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ du -h lib
284K	lib/ldscripts
15M	lib
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ sudo rm lib/*.a   #删除静态文件库,缩减体积
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ du -h lib
284K	lib/ldscripts
7.0M	lib

arm-none-linux-gnueabi-strip lib/*.so  # 如有必要还可以用此命令 裁剪共享库文件,减小体积
  1. 添加其他目录。重新进入到rootfs目录,生成相应的目录。
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ mkdir dev etc home mnt proc root sys tmp var
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ mkdir etc/init.d
  1. 添加/etc/inittab文件,文件内容如下。
::sysinit:/etc/init.d/rcS       #指定系统开始运行后,最开始运行的脚本,可修改但不建议
::askfirst:-/bin/login
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
ps:
/etc 目录下都是配置文件。这里配置的inittab 是linuxrc执行后最先执行的配置脚本文件之一
  1. 添加/etc/ init.d/rcS文件,文件内容如下。
#!/bin/sh

mount -a                                #挂载一切可以挂载的根文件系统
mkdir /dev/pts                          #挂载pts文件,可以让开发板启动后可以看到提示符[root@fs4412 ]#
mount -t devpts devpts /dev/pts         
echo /sbin/mdev > /proc/sys/kernel/hotplug #支持热插拔
mdev -s
#此处可添加一些个性化的内容 如insmod led.ko ./a.out 驱动的加载命令或程序的执行命令等等
hostname -F /etc/hostname

接下来添加该文件的可执行权限。

$ chmod +x etc/init.d/rcS
  1. 添加/etc/fstab文件,文件内容如下。 (指定挂载的根文件系统)
proc    /proc   proc    defaults        0       0
none    /tmp    tmpfs   defaults        0       0
none    /dev    tmpfs   defaults        0       0
sysfs   /sys    sysfs   defaults        0       0
  1. 添加/etc/group文件,文件内容如下。
root:x:0:root
  1. 添加/etc/passwd文件,文件内容如下。
root:x:0:0:root:/root:/bin/sh
  1. 添加/etc/shadow文件,文件内容如下。
root:BcPgSBqZz80dw:0:0:99999:7:::
  1. 添加/etc/hostname文件,文件内容如下。
fs4412
  1. 添加/etc/profile文件,文件内容如下。
LD_LIBRARY_PATH=/lib:/usr/lib
export LD_LIBRARY_PAHT                      

PATH=/bin:/sbin:/usr/bin:/usr:/sbin         # 配置环境变量
export PATH
export PS1=\\e[32m[\\u@\\h \\W\\a]\\$\\e[00;37m     # PS1后面的是终端显示的内容 如[root@fs4412 ]  可修改
  1. console设备节点
linux@ubuntu:~/Level10/day8/busybox-1.31.1/_install$ sudo mknod   dev/console  c  5  1     // 必须要有  console设备节点  
  1. 如仍不能正常NFS挂载根文件系统,尝试修改权限
chmod 777 /挂载的文件地址/rootfs