一、简介
根文件系统一般也叫做rootfs,Linux中的根文件系统更像是一个文件夹或者叫做目录(在我看来就是一个特殊的文件夹),在这个目录里面会有很多的子目录。根目录和子目录下会有很多的文件,这些文件是Linux运行所必需的,比如库、常用的软件和命令、设备文件、配置文件等。根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映象文件保存在根文件系统中,而系统引导程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
根文件系统的目录名字是‘/’,所以输入如下命令就可以进入根目录
cd / //进入根目录
根文件系统下的一些常用的子目录
1、/bin目录
bin文件就是可执行文件,一般都是一些命令,比如ls、mv等
2、/dev目录
dev是device的缩写,所以此目录下的文件都是和设备有关,此目录下的文件都是设备文件。
3、/etc目录
此目录下存放着各种配置文件
4、/lib目录
lib是library的简称,也就是库的意思。这些库文件是共享库,命令和用户编写的应用程序要使用这些库文件
5、/mnt目录
临时挂载目录,一般是空目录,可以在此目录下创建空的子目录,比如/mnt/sd、/mnt/usb
6、/proc目录
此目录一般是空的,当Linux系统启动以后会将此目录作为proc文件系统的挂载点,proc是个虚拟文件系统,没有实际的存储设备。proc里面的文件都是临时存在的。
7、/usr目录
要注意,usr不是user的缩写,而是Unix Software Resource的缩写,也就是Unix操作系统软件资源目录。一般系统安装完成以后此目录占用的空间最多
8、/var目录
此目录存放一些可以改变的数据
9、/sbin目录
此目录存放一些可执行文件,但是此目录下的文件或者说命令只有管理员才能使用,主要用户系统管理
10、/sys目录
系统启动以后此目录作为 sysfs 文件系统的挂载点,sysfs 是一个类似于 proc 文件系统的特殊文件系统,sysfs 也是基于 ram 的文件系统,也就是说它也没有实际的存储设备。此目录是系统设备管理的重要目录,此目录通过一定的组织结构向用户提供详细的内核数据结构信息
11、/opt
可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中。
二、BusyBox构建根文件系统
BusyBox是一个集成了大量的Linux命令和工具的软件,一般下载BusyBox的源码,然后配置BusyBox,选择自己想要的功能,最后编译即可。
可以下载1.29.0版本的BusyBox,一般我们在Linux驱动开发的时候是使用nfs挂载根文件系统的,当产品需要上市开卖的时候才烧写到EMMC中,所以需要在nfs服务器目录中创建名为rootfs的子目录。创建好的rootfs用来存放根文件系统
mkdir rootfs
tar -vxjf busybox-1.29.0.tar.bz2
1、修改Makefile
同 Uboot 和 Linux 移植一样,打开 busybox 的顶层 Makefile,添加 ARCH 和 CROSS_COMPILE
的值,如下所示:
CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
......
ARCH ?= arm
2、busybox中文字符支持
3、配置busybox
4、编译busybox
make
make install CONFIG_PREFIX=/home/zuozhongkai/linux/nfs/rootfs
5、向根文件系统添加lib库
在 rootfs 中创建一个名为“lib”的文件夹,命令如下:、
mkdir lib
进入如下路径对应的目录:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-
gnueabihf/libc/lib
此目录下有很多的*so*(*是通配符)和.a 文件,这些就是库文件,将此目录下所有的*so*和.a
文件都拷贝到 rootfs/lib 目录中,拷贝命令如下:
cp *so* *.a /home/mxh/linux/nfs/rootfs/lib/ -d
rm ld-linux-armhf.so.3
cp ld-linux-armhf.so.3 /home/zuozhongkai/linux/nfs/rootfs/lib/
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/lib/ -d
三、根文件系统功能测试
编译,以为我们是在ARM芯片上运行,所以要使用交叉编译器去编译,命令如下
arm-linux-gnueabihf-gcc hello.c -o hello
使用 arm-linux-gnueabihf-gcc 将 hello.c 编译为 hello 可执行文件
hello 是个 32 位的 LSB 可执行文件,ARM 架构的,并且是动态链接的。所以我们编译出
来的 hello 文件没有问题。将其拷贝到 rootfs/drivers 目录下,在开发板中输入如下命令来执行这
个可执行文件:
cd /drivers //进入 drivers 目录
./hello //执行 hello
让一个软件在后台运行的方法是加上&,比如 ./hello &就是让hello在后台运行,可以使用kill -9 pid(进程ID)关闭 。ps命令用于查看所有当前正在运行的进程
开机自启动
进入根文件系统的时候会运行/etc/init.d/rcS 这个 shell 脚本,因此我们可以在这个脚本里面添加自启动相关内容。添加完成以后的/etc/init.d/rcS 文件内容如下:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
runlevel=S
umask 022
export PATH LD_LIBRARY_PATH runlevel
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
#开机自启动
cd /drivers
./hello &
cd /
四、系统烧写
1、改造MfgTool
针对不同的核心板,确定系统文件相关名字
新建我们自己的.vbs文件
修改ucl2.xml文件
EMMC版本的系统文件命名
2、新建.vbs文件
直接复制 mfgtool2-yocto-mx-evk-emmc.vbs 文件即可,将新复制的文件重命名为 mfgtool2-
alientek-alpha-emmc.vbs,文件内容不要做任何修改,.vbs 文件我们就新建好了。
3、修改ucl2.xml文件
将imx6ull-alientek-emmc.dtb、u-boot-alientek-emmc.imx 和 zImage-alientek-emmc
这三个文件复制到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/firmware 目录中。将 imx6ull-alientek-emmc.dtb、u-boot-alientek-emmc.imx、zImage-alientek-emmc 和 rootfs-alientek-emmc.tar.bz2 这四个文件复制到mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/files 目录中。
点击“mfgtool2-alientek-alpha-emmc.vbs”打开 MfgTool 烧写系统,等待烧写完成,然后设
置拨码开关为 EMMC 启动,重启开发板