Linux第54步_根文件系统第1步_编译busybox并安装_然后添加“根文件系统”的库

学习编译busybox,并安装,然后添加“根文件系统”的库。有人说busybox构建根文件系统,只适合学习,不适合做项目

1、了解ubuntu的根文件系统

根文件系统的目录名为“/”,就是一个斜杠。

1)、输入“cd  /回车”,进入“根目录”

输入“ls回车”,就可以查看根目录下的文件和文件夹

2)、点击下图中的文件,就可以打开主文件夹,见下图:

3)、点击“其他位置

4)、双击“计算机”图标,得到下图:

2、了解BusyBox工具箱

BusyBox工具箱集成了大量的linux命令和工具,像ls、mv、ifconfig等命令,它都会提供。我们下载BusyBox的源码,经过配置BusyBox,选择自己想要的功能,最后编译即可。

路径为:“程序源码\06、BusyBox源码\busybox-1.32.0.tar.bz2

使用nfs挂载根文件系统

做好的根文件系统,放到ubuntu上,然后通过nfs服务来挂载。

3、创建rootfs目录用来存放我们的根文件系统

存放根文件系统的路径:“home/zgq/linux/nfs/rootfs”

打开第1个终端

输入“ls回车

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd nfs/回车”,切换到“nfs”目录

输入“ls回车”,列出“nfs”目录下的文件和文件夹

输入“mkdir rootfs回车”,创建rootfs”目录

输入“ls回车”,列出“nfs”目录下的文件和文件夹

4、创建busybox目录和获取busybox软件

使用“home/zgq/linux/busybox”用来存放busybox软件。

1)、打开第2个终端

输入“ls回车

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“mkdir busybox回车”,创建busybox”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

2)、使用FileZilla将BusyBox源码发送到“home/zgq/linux/busybox”。

见下图:

3)、输入“cd busybox/回车,切换到“busybox”目录

输入“ls回车”,列出“busybox”目录下的文件和文件夹

输入“tar -vxjf busybox-1.32.0.tar.bz2回车”,解压文件

4)、输入“ls回车”,列出“busybox”目录下的文件和文件夹

输入“cd busybox-1.32.0/回车,切换到“busybox-1.32.0”目录

输入“ls回车”,列出“busybox-1.32.0”目录下的文件和文件夹

5、修改busybox-1.32.0”目录下的Makefile

1)、在第2个终端,输入“vi Makefile回车

2)、输入“/CROSS_COMPILE ?=回车”,查找“CROSS_COMPILE ?=”,见下图:

3)、打开第3个终端,查找交叉编译器绝对路径

输入“ls回车

输入“cd /usr/local/arm/回车,切换到“/usr/local/arm/”目录

输入“ls回车”,列出“arm”目录下的文件和文件夹

输入“cd gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/回车,切换到“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabih”目录

输入“ls回车”,列出“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabih”目录下的文件和文件夹

输入“cd bin/回车

输入“pwd回车

交叉编译器绝对路径:

/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin

4)、回到打开的“Makefile”,在“CROSS_COMPILE ?=”添加内容如下:

/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-

见下图:

5)、输入“/ARCH ?=回车”,查找“ARCH ?=”,见下图:

6)、将“ARCH ?= $(SUBARCH)”屏蔽掉

添加“ARCH ?= arm

见下图:

7)、按“ESC键”,输入“:wq”,保存退出,得到下图:

6、设置busybox支持中文字符

1)、在第2个终端,输入“vi libbb/printable_string.c回车”,修改“busybox-1.32.0/libbb/printable_string.c”

2)、输入“/printable_string2回车”,查找“printable_string2”,得到下图:

修改后,见下图:

3)、按“ESC键”,输入“:wq”,保存退出

4)、在第2个终端,输入“vi libbb/unicode.c回车”,修改“busybox-1.32.0/libbb/unicode.c”

5)、输入“/unicode_conv_to_printable2回车”,查找“unicode_conv_to_printable2

修改后,见下图:

5)、按“ESC键”,输入“:wq”,保存退出

7、配置busybox

1)、在第2个终端,输入“make defconfig回车”,先执行“默认配置”来配置一下“busybox”工具;

设置“个性化配置”

2)、在第2个终端,输入“make menuconfig回车”,打开图形化配置界面

3)、移动“向下光标键”,找到“Settings”,按下“回车

移动“向下光标键”,找到“Build static binary

4)、按“N”,设置为“动态编译”

5)、移动“向下光标键”,找到“vi-style line editing commands

6)、按“Y”,见下图:

7)、按两次“ESC键”,得到下图:

8)、移动“向下光标键”,找到“Linux Module Utilities

9)、按“回车键”,移动“向下光标键”,找到“Simplified modutils”,得到下图:

10)、按“N”,不选中,见下图:

11)、按两次“ESC键”,移动“向下光标键”,找到“Linux System Utilities

12)、按“回车键”,移动“向下光标键”,找到“mdev (17 kb)”,得到下图:

13)、按“Y”,把“mdev (17 kb)”下面的全部选中,见下图红框:

14)、按两次“ESC键”,移动“向下光标键”,找到“Settings

15)、按“回车键”,移动向下光标键,找到“Support Unicode”,得到下图:

按“Y”,选中“Support Unicode

移动“向下光标键”,找到“Check $LC_ALL, $LC_CTYPE and $LANG environment variables

按“Y”,选中,见下图:

16)、按两次“ESC键”,移动向下光标键,找到“Save Configuration to an Alternate File”,查看是否有保存选项,见下图:

17)、按“ESC键”,直到出现下图:

18)、按“Y”,保存配置

在第2个终端,输入“make menuconfig回车

移动“向下光标键”,找到“Save Configuration to an Alternate File

见下图:

19)、按“回车键”,得到下图:

20)、将“.config”修改为“./configs/stm32mp1_atk_defconfig”,见下图:

21)、移动“向下光标键”至“Ok”,按“O”保存。

22)、按“ESC键”,直到出现下图:

23)、按“Y

注意:

如果我们想要用自己的配置文件,直接输入make stm32mp1_atk_defconfig回车

8、编译busybox

1)、在第2个终端,路径:“/home/zgq/linux/busybox/busybox-1.32.0/

输入“make回车

2)、在第2个终端,路径:“/home/zgq/linux/busybox/busybox-1.32.0/

输入“make install CONFIG_PREFIX=/home/zgq/linux/nfs/rootfs回车”,将busybox安装到“rootfs”目录下

3)、查看busybox工具

在第1个终端,输入“cd rootfs回车”,切换到“rootfs”目录

输入“ls回车”,列出“rootfs”目录下的文件和文件夹

输入“cd bin回车”,切换到“bin”目录

输入“ls回车”,列出“bin”目录下的文件和文件夹

4)、在第1个终端,路径:“/home/zgq/linux/nfs/rootfs/bin/

输入“cd ..回车”,列出“rootfs”目录下的文件和文件夹

输入“ls回车”,列出“rootfs”目录下的文件和文件夹

输入“cd sbin回车”,切换到“sbin”目录

输入“ls回车”,列出“sbin”目录下的文件和文件夹

5)、在第1个终端,路径:“/home/zgq/linux/nfs/rootfs/sbin/

输入“cd ..回车”,列出“rootfs”目录下的文件和文件夹

输入“ls回车”,列出“rootfs”目录下的文件和文件夹

输入“cd sbin回车”,切换到“sbin”目录

输入“ls回车”,列出“sbin”目录下的文件和文件夹

输入“cd ..回车”,列出“rootfs”目录下的文件和文件夹

输入“ls回车”,列出“rootfs”目录下的文件和文件夹

10、创建lib目录

1)、在第1个终端,路径:“/home/zgq/linux/nfs/rootfs/

输入“mkdir lib回车”,创建“lib”目录

输入“ls回车”,列出“rootfs”目录下的文件和文件夹

2)、打开第3个终端,查找交叉编译器lib库的绝对路径

输入“ls回车

输入“cd /usr/local/arm/回车,切换到“/usr/local/arm/”目录

输入“ls回车”,列出“arm”目录下的文件和文件夹

输入“cd gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/回车,切换到“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabih”目录

输入“ls回车”,列出“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabih”目录下的文件和文件夹

输入“cd arm-none-linux-gnueabihf/回车,切换到“arm-none-linux-gnueabihf”目录

输入“ls回车”,列出“arm-none-linux-gnueabihf”目录下的文件和文件夹

输入“cd libc/回车,切换到“libc”目录

输入“ls回车”,列出“libc”目录下的文件和文件夹

输入“cd lib/回车,切换到“lib”目录

输入“ls回车”,列出“lib”目录下的文件和文件夹

见下图:

此目录下有很多的“*so*”文件,这些就是库文件,将此目录下所有的“*so*”文件都拷贝到“/home/zgq/linux/nfs/rootfs/lib/”目录中。

注意:*是通配符

3)、打开第3个终端,输入“cp *so* /home/zgq/linux/nfs/rootfs/lib/ -d回车

后面的“-d”表示拷贝符号链接,这里有个比较特殊的库文件:1d-linux-armhfso.3,此库文件也是个符号链接,相当于Windows下的快捷方式。会链接到库1d-2.30.so上;

4)、打开第3个终端,输入“ls ld-linux-armhf.so.3 -l回车”查看此文件详细信息

ld-linux-armhf.so.3”后面有个“->”,表示其是个“软连接文件”,链接到文件“ld-2.30.so”。因为“ld-linux-armhf.so.3”是一个“快捷方式”,因此大小只有10B。

由于“ld-linux-armhf.so.3”不能作为符号链接,它在“根文件系统”中执行程序中无法执行。所以,我们需要 “ld-linux-armhf.so.3”完成逆袭,由“快捷方式”变为“本尊”。方法是重新复制 “ld-linux-armhf.so.3”,只是不复制软链接即可,先将“/home/zgq/linux/nfs/rootfs/lib/”中的“ld-linux-armhf.so.3”文件删除掉。

5)、打开第1个终端,输入“cd lib/回车

输入“ls -l ld-linux-armhf.so.3回车”,查看“ld-linux-armhf.so.3”文件

输入“rm ld-linux-armhf.so.3回车”,删除“ld-linux-armhf.so.3”文件

6)、打开第3个终端,输入“cp ld-linux-armhf.so.3 /home/zgq/linux/nfs/rootfs/lib/回车

7)、打开第1个终端,输入“ls -l ld-linux-armhf.so.3回车”,查看“ld-linux-armhf.so.3”文件

ld-linux-armhf.so.3”文件占“1279392”个字节。

8)、打开第3个终端,输入“cd ../../回车”,退回两次,返回到“arm-none-linux-gnueabihf”目录

输入“ls回车”,列出“arm-none-linux-gnueabihf”目录下的文件和文件夹

输入“cd lib/回车”,退回两次,返回到“lib”目录

输入“ls回车”,列出“lib”目录下的文件和文件夹

arm-none-linux-gnueabihf/lib目录下也有很多的的“*so*”和“.a”库文件,我们将其也拷贝到“/home/zgq/linux/nfs/rootfs/lib/”目录中。

9)、打开第3个终端,输入“cp *so* *.a /home/zgq/linux/nfs/rootfs/lib/ -d回车

10)、打开第1个终端,输入“ls回车”,查看“/home/zgq/linux/nfs/rootfs/lib/”文件

11)、打开第1个终端,输入“cd ..回车”,切换到“/home/zgq/linux/nfs/rootfs/

输入“ls回车”,切换到“rootfs”目录下的文件和文件夹

输入“cd usr/回车”,切换到“usr

输入“ls回车”,切换到“usr”目录下的文件和文件夹

输入“mkdir  lib回车”,在“usr”目录下,创建“lib”

输入“ls回车”,切换到“usr”目录下的文件和文件夹

将“/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/lib”目录下的文件拷贝到“/home/zgq/linux/nfs/rootfs/usr/lib”目录中

12)、打开第3个终端,输入“cd ..回车”,返回到“arm-none-linux-gnueabihf”目录

输入“ls回车”,查看“arm-none-linux-gnueabihf”目录的文件和文件夹

输入“cd libc/回车”,切换到“libc”目录

输入“ls回车”,查看“libc”目录的文件和文件夹

输入“cd usr/回车”,切换到“usr”目录

输入“ls回车”,查看“usr”目录的文件和文件夹

输入“cd lib/回车”,切换到“lib”目录

输入“ls回车”,查看“lib”目录的文件和文件夹

将此目录下的“so”和“.a”库文件都拷贝到“/home/zgq/linux/nfs/rootfs/usr/lib/”目录中

13)、打开第3个终端,输入“cp *so* *.a /home/zgq/linux/nfs/rootfs/usr/lib/ -d回车”,执行拷贝

14)、打开第1个终端,输入“cd lib/回车”,切换到“/home/zgq/linux/nfs/rootfs/usr/lib/”目录

输入“ls回车”,查看“lib”目录的文件和文件夹

15)、打开第1个终端,使用“du”命令来査看一下 rootfs/lib 和rootfs/usr/lib这两个目录的大小

输入“cd ../../回车”,退回两次,返回到“rootfs”目录

输入“du ./lib ./usr/lib/ -sh回车”,查看 lib和 usr/lib这两个目录的大小

16)、打开第1个终端,在“根文件系统”中创建其他文件夹,如 dev、proc、mnt、sys、tmp、etc 和 root等

输入“mkdir dev proc mnt sys tmp etc root回车

输入“ls回车”,查看“rootfs”目录的文件和文件夹

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

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值