根文件系统构建

根文件系统简介        

        根文件系统也叫做rootfs。

        rootfs分为三部分:“根”“文件”“系统”。根文件系统就是一堆的文件、比如软件、配置文件等,这些文件是Linux运行所必需的,将它们组合在一起就构成了根文件系统。

        根文件系统是一个“文件夹”,此文件夹有许多个文件,这些文件是Linux运行所必需的,但是无法放到内核里面去。比如命令、库、配置文件等等。所以这些软件需要我们自己构建。

        /就是Linux根文件系统。

  1. 编译 BusyBox 构建根文件系统
  1. 修改 Makefile,添加编译器

修改ARCH和CROSS_COMPILE(适用绝对路径)打开 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 中文字符支持

     打开文件 busybox- 1.29.0/libbb/printable_string.c,找到函数 printable_string接着打开文件 busybox-1.29.0/libbb/unicode.c,进行修改程序,禁止字符大于 0X7F 的时候设置为‘?’。

        (3)配置 busybox

使用make defconfig进行默认配置

接着使用make menuconfig进行图形化配置我们可以进一步选择自己想要的功能。

Location:

-> Settings

        -> Build static binary (no shared libs)

进行动态编译,静态编译不要选择,否则DNS无法进行域名解析。

Location:

        -> Settings

                -> vi-style line editing commands//选择

Location:

        -> Linux Module Utilities

                -> Simplified modutils

默认会选中“Simplified modutils”,这里我们要取消勾选!

继续配置如下路径配置项:

Location:

        -> Linux System Utilities

                -> mdev (16 kb) //确保下面的全部选中,默认都是选中的

最后就是使能 busybox unicode 编码以支持中文,配置路径如下:

Location:

        -> Settings

                -> Support Unicode //选中

                               -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中

        busybox 的配置就到此结束了,大家也可以根据自己的实际需求选择配置其他的选项,不过对于初学者笔者不建议再做其他的修改,可能会出现编译出错的情况发生。

        使用make; make install CONFIG_PREFIX=/home/.../linux/nfs/rootfs命令将busybox的编译结果存放到/home/.../linux/nfs/rootfs目录下,其中CONFIG_PREFIX的作用是将编译结果存放到指定目录下。

2.向根文件系统添加 lib 库

(1)向 rootfs 的“/lib”目录添加库文件

        在rootfs目录下创建lib库,lib 库文件从交叉编译器中获取,进入到/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib目录下,将此目录下所有的*so*和.a文件都拷贝到 rootfs/lib 目录中

拷贝命令如下:

        cp *so* *.a /home/...linux/nfs/rootfs/lib/ -d

继续进入如下目录中:

        /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib 此目录下也有很多的的*so*.a 库文件,我们将其也拷贝到 rootfs/lib 目录中。

命令如下:

        cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/lib/ -d

这样就完成了lib库的拷贝。

(2)向 rootfs 的“usr/lib”目录添加库文件

        在 rootfs usr 目录下创建一个名为 lib 的目录,将如下目录中的库文件拷贝到 rootfs/usr/lib 目录下:

        /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/ usr/lib

将此目录下的 so .a 库文件都拷贝到 rootfs/usr/lib 目录中

命令如下:

        cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -d

至此,根文件系统的库文件就全部添加好

cd rootfs         //进入根文件系统目录
du ./lib ./usr/lib/ -sh         //查看 lib usr/lib 这两个目录的大小

        3.创建其他文件夹

在根文件系统中创建其他文件夹,如 devprocmntsystmp root 等。

        4.完善根文件系统

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

rcS 是个 shell 脚本,Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件的脚本文件。

#!/bin/sh  

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib

export PATH LD_LIBRARY_PATH

mount -a

mkdir /dev/pts

mount -t devpts devpts /dev/pts



echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

创建好文件/etc/init.d/rcS 以后一定要给其可执行权限!

        (2)创建/etc/fstab 文件

rootfs 中创建/etc/fstab 文件,fstab Linux 开机以后自动配置哪些需要自动挂载的分区。

#<file system> <mount point> <type> <options> <dump> <pass> 
proc   /proc 	proc 	defaults	 0 	0 
tmpfs  /tmp 	tmpfs 	defaults 	 0 	0 
sysfs   /sys 	sysfs 	defaults	 0	0

        (3)创建/etc/inittab 文件

#etc/inittab

::sysinit:/etc/init.d/rcS

console::askfirst:-/bin/sh

::restart:/sbin/init

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

::shutdown:/sbin/swapoff -a

至此,根文件系统创建成功。

        5.根文件系统其他功能测试

        (1)软件运行测试

        使用交叉编译器编译一段程序,运行在ARM开发板上,使用命令:arm-linux-gnueabihf-gcc hello.c -o hello完成编译,通过命令:./hello进行运行,观察是否运行出结果。

        (2)中文字符测试

        要先设置 SecureCRT 的编码格式,将其设置为UTF-8 编码。在根文件系统下创建具有中文字符的目录、文档,使用cat命令查看内容显示是否正常。

        (3)开机自启动测试

        当开机进入根文件系统的时候会运行/etc/init.d/rcS这个shell 脚本,在这个脚本里添加自启动内容,重新启动开发板观察是否运行添加的自启动内容。

        (4)外网连接测试

        使用ping www.baidu.com命令来ping一下百度网址,发现不能ping通。之所以出现这个错误提示是因为 www.baidu.com 的地址解析失败了,并没有解析出其对应的 IP 地址。我们需要配置域名解析服务器的 IP 地址。

rootfs 中新建文件/etc/resolv.conf,并输入如下内容:
nameserver 114.114.114.114

nameserver 192.168.1.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值