第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 2.3【Linux系统移植之三】:使用BusyBox构建根文件系统(rootfs)

2.3【Linux系统移植之三】:使用BusyBox构建根文件系统(rootfs)

时间:2022-12-02 17:02:35

相关推荐

2.3【Linux系统移植之三】:使用BusyBox构建根文件系统(rootfs)

文章目录

一、搭建NFS服务器二、使用BusyBox构建跟文件系统2.1 修改顶层Makefile2.2 busybox中文支持2.3 配置busybox2.4 编译busybox2.5 向根文件系统添加lib库2.5.1 向{rootfs}/lib目录下添加库文件2.5.2 向{rootfs}/usr/lib目录下添加库文件2.6 创建其他文件夹三、测试文件系统(NFS挂载)3.1 设置uboot中环境变量3.2 命令解析四、完善文件系统4.1 创建{rootfs}/etc/init.d/rcS 文件4.2 创建{rootfs}/etc/fstab 文件4.3 创建{rootfs}/etc/inittab 文件

一、搭建NFS服务器

查看另一篇博客:《1.3、Ubuntu18.04搭建NFS服务器》

二、使用BusyBox构建跟文件系统

下载busybox源码:

【点此进入busybox官网】,网站链接为:/。进入官网后依次查找下述菜单,进入下载页面。

->Get BusyBox->Download Source

2.1 修改顶层Makefile

进入Makefile

vim Makefile

找到CROSS_COMPILE和ARCH,并进行修改

将CROSS_COMPILE ?=修改为 # 备注:后面的路径为交叉编译工具链安装路径CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

将ARCH ?= $(SUBARCH)修改为:ARCH ?= arm

2.2 busybox中文支持

该步骤可有可无,此处不再赘述。可以查阅正点原子《嵌入式驱动开发指南》的《根文件系统构建》章节。

2.3 配置busybox

执行下属命令,采用默认配置即可:

make defconfigmake menuconfig

采用动态编译,所以不要选中:

Location:-> Settings-> Build static binary (no shared libs)

选中:

Location:-> Settings-> vi-style line editing commands

不要选中:

Location:-> Linux Module Utilities-> Simplified modutils

确保mdev下面的子选项全部选中:

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

选中unicode编码,以支持中文选中unicode编码,以支持中文

Location:-> Settings-> Support Unicode //选中-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中

2.4 编译busybox

执行命令

make install CONFIG_PREFIX=/home/lsy/tools/lsy/nfs/rootfs

CONFIG_PREFIX参数指定生成的根文件系统保存的路径。

至此可以看到上述目录下已经生成了一个简单的文件系统,但是还需要添加一些其他文件完善rootfs。

2.5 向根文件系统添加lib库

2.5.1 向{rootfs}/lib目录下添加库文件

从交叉编译工具链的安装目录中拷贝lib库到rootfs的lib中。

在rootfs中创建lib文件夹

cd /home/lsy/tools/lsy/nfs/rootfsmkdir lib

拷贝{交叉编译工具链安装目录}/libc/lib/中的库文件到{rootfs}/lib目录下

备注1:“-d”表示拷贝符号链接,有个比较特殊的库文件: ld-linux-armhf.so.3,此库文件是个符号链接,相当于 Windows 下的快捷方式。

备注2:rootfs/lib目录中的d-linux-armhf.so.3是一个软连接,没用,所以先删除在将源文件拷贝进去

cd /usr/local/arm/gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/lib/ -drm /home/lsy/tools/lsy/nfs/rootfs/lib/ld-linux-armhf.so.3cp ld-linux-armhf.so.3 /home/lsy/tools/lsy/nfs/rootfs/lib/

拷贝{交叉编译工具链安装目录}/lib目录中的库文件到到{rootfs}/lib目录下

cd /usr/local/arm/gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/lib/ -d

2.5.2 向{rootfs}/usr/lib目录下添加库文件

在rootfs中创建lib文件夹

cd /home/lsy/tools/lsy/nfs/rootfs/usrmkdir lib

拷贝{交叉编译工具链安装目录}/libc/usr/lib

cd /usr/local/arm/gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/usr/lib/ -d

至此,库文件添加完成,输入如下命令复查文件库文件大小

#命令:cd /home/lsy/tools/lsy/nfs/rootfs/du ./lib ./usr/lib -sh#结果如下:57M./lib67M./usr/lib

2.6 创建其他文件夹

创建如下文件夹

cd /home/lsy/tools/lsy/nfs/rootfs/mkdir dev proc mnt sys tmp root

三、测试文件系统(NFS挂载)

3.1 设置uboot中环境变量

设置uboot中环境变量,命令如下

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.0.250:/home/lsy/tools/lsy/nfs/rootfs ip=192.168.0.100:192.168.0.250:192.168.0.1:255.255.255.0::eth0:off'saveenv

3.2 命令解析

命令解析

console=ttymxc0,115200解析:串口

root=/dev/nfs rw 解析:nfs,可读可写

nfsroot=192.168.0.250:/home/lsy/tools/lsy/nfs/rootfs 解析:192.168.0.250是nfs服务器IP,即:nfs文件系统所在linux机器的IP/home/lsy/tools/lsy/nfs/rootfs是rootfs保存的目录。

ip=192.168.0.100:192.168.0.250:192.168.0.1:255.255.255.0::eth0:off'解析:192.168.0.100为:开发板ipaddr192.168.0.250为:nfs服务器的IP192.168.0.1为:网关255.255.255.0为:子网掩码eth0为:网卡名称

四、完善文件系统

4.1 创建{rootfs}/etc/init.d/rcS 文件

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

创建rcs文件

cd /home/lsy/tools/lsy/nfs/rootfs/mkdir etc/init.d -p #注意路径是在rootfs目录下,即上步的cd命令一定要先执行,千万别敲成根目录了cd etc/init.d/touch rcSvim rcS

在rcs中加入如下代码:

#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATHLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/libexport PATH LD_LIBRARY_PATHmount -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -s

赋予rcS文件可执行权限

chmod 777 rcS

4.2 创建{rootfs}/etc/fstab 文件

创建fstab文件

cd /home/lsy/tools/lsy/nfs/rootfs/etc/touch fstabvim fstab

在文件中加入如下内容:

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

4.3 创建{rootfs}/etc/inittab 文件

创建inittab文件

cd /home/lsy/tools/lsy/nfs/rootfs/etc/touch inittabvim inittab

在文件中加入如下内容:

#etc/inittab::sysinit:/etc/init.d/rcSconsole::askfirst:-/bin/sh::restart:/sbin/init::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r::shutdown:/sbin/swapoff -a

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。