Linux系统中根文件系统构建基本方式
    1. 根文件系统布局
       
(嵌入式) (Linux) 根文件系统布局,建议还是按照FHS标准来安排,事实上大多数嵌入式Linux都是这样做的。但是,(嵌入式系统)可能并不需要桌面/服务器那样庞大系统的全部目录,可以酌情对系统进行精简,以简化Linux的使用。如嵌入式Linux文件系统中通常不会放置内核源码,因而存的 常不会放置内核源码,因而存的 常不会放置内核源码,因而存放源码的/usr/src目录是不必要的, 甚至连头文件也不需要,即/usr/include目录也不必要;但是/bin、/dev 、/etc、/lib 、/proc 、/sbin、/usr几个目录是不可或缺的。
     
所以,允许嵌入式 Linux 对系统目录结构进行精简,以适应具体用场合的需求,一个典型的嵌入式Linux根文件系统目录如下所示:
       (./_install) Destination path for 'make install' (NEW) 
    2-2-4. 编译安装
    退出保存后,执行编译make,大概几分钟后编译完成,执行make install,很快就会安装完成:
     
新建一个目录用来存放制作的根文件系统,可以命名为rootfs。将利用BusyBox生成的二进制文件及目录,即_install目录下的所有文件及目录复制到rootfs目录下。
    3. 构建根文件系统
    使用BusyBox编译后,仅有 bin、sbin、usr这 3个目录和软链接linuxrc,目录里都是二进制命令工具,这还不足以构成 一个可用的根文件系统,必须进行其它完善工作,才能构建一个可用的根文件系统。
    3-1. 完善目录结构
    根据典型嵌入式Linux根文件系统目录,在rootfs目录中创建其他目录
     
    $ mkdir dev etc lib proc sys tmp var     
    3-2. 添加C运行库文件
    库文件可直接从交叉工具链获取,一般在工具链的libc/lib/目录下。我这里是在ubuntu下安装的Linaro的交叉工具链:
   
    库文件是在/usr/(arm)-linux-gnueabihf/lib/目录下,拷贝动态链接库文件(.so文件)到新制作的根文件系统根目录下/lib目录里:
     
    $ cp -a  /usr/arm-linux-gnueabihf/lib/*so* ./lib/     
   
    这里只是拷贝动态链接库。一般开发程序使用动态编译需要板子上动态库的支持才能运行,所以拷贝动态库。而静态库一般在静态编译的时候用到,由于交叉编译的工作放在了PC上所以板子上不需要静态库,所以没有必要拷贝,这样还可以减小根文件系统的体积。
    一般使用gcc编译后的可执行文件、目标文件和动态库都带有调试信息和符号信息,这些在调试的时候用到,但是却增大了文件的大小。通常在PC上调试,或者调试时使用这些带有调试信息和符号信息的库文件,程序发布后使用去掉这些信息的库文件,可以大大缩小根文件系统的体积。这里我们去掉这些信息,方法是使用strip工具:
      linux内核文件放在哪
    $ arm-linux-gnueabihf-strip ./*     
    3-3. 添加初始化配置脚本
    初始化配置脚本放在在/etc目录下,用于系统启动所需的初始化配置脚本。BusyBox提供了一些初始化范例脚本,在examples/bootfloppy/etc/目录下。将这些配置文件复制到 ”目录下。将这些配置文件复制到 ”目录下。将这些配置文件复制到新制作的根文件系统etc目录
     
    cp -a ../busybox/busybox-1.29.3/examples/bootfloppy/etc/* etc/     
    添加后如图所示:
   
    3-3-1. 修改/etc/inittab文件
    /etc/inittab文件是init进程解析的配置文件,通过这个配置文件决定执行哪个进程,何时执行。将文件修改为:
     
    # 系统启动时:/etc/init.d/rcS# 系统启动按下En(te)r键时:-/bin/sh# 按下Ctrl+Alt+Del键
时:/sbin/reboot# 系统关机时:/sbin/swapoff -a:/bin/umount -a -r# 系统重启时:/sbin/init     
    以上内容定义了系统启动时,关机时,重启时,按下Ctrl+Alt+Del键时执行的进程。
    3-3-2. 修改/etc/init.d/rcS文件
     
    #! /bin/sh# 挂载 /etc/fstab 中定义的所有文件系统/bin/mount -a# 挂载虚拟的devpts文件系统用于用于伪终端设备/bin/mkdir -p /dev/pts/bin/mount -t devpts devpts /dev/pts# 使用mdev动态管理u盘和鼠标等热插拔设备/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug# 扫描并创建节点/sbin/mdev -s     
    3-3-3. 修改/etc/fstab文件
    /etc/fstab文件存放的是文件系统信息。在系统启动后执行/etc/init.d/rcS文件里/bin/mount -a命令时,自动挂载这些文件系统。内容如下:
     
    #                               proc                  /proc          proc     defaults       0         0sysfs                 /sys           sysfs    defaults       0         0tmpfs                 /tmp           tmpfs    defaults       0         0tmpfs                 /dev           tmpfs    defaults       0         0     

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。