一.  简介

我们编译 busybox源码时,选择的是动态编译,所以,制作生成的 根文件系统中/bin或 /sbin目录软件运行时会调用到一些库文件的。库文件就是交叉编译器的库文件

前面我们编译 busybox源码时,选择动态编译,那么这时就需要用到动态文件。所以,根文件系统中需要存放动态文件当然你也可以编译成静态的,但是静态可执行文件会很大。

本文在之前编译生成的 根文件系统的基础上继续进行学习

二.   向根文件系统添加lib

1.  向 rootfs 的  “/lib目录添加库文件

打开 之前编译生成的根文件系统,我这里ubuntu系统下/linux/nfs_File/rootfs进入 rootfs根目录下,在 rootfs 文件夹创建一个为 “lib” 的文件夹命令如下

wangtian@wangtianvirtualmachine:~/linux/nfs_File/rootfs$ mkdir lib

lib 文件夹创建好了,库文件从哪里来呢?
lib 库文件从交叉编译器获取,即我们安装交叉编译器路径获取
交叉编译器里面有很多 的库文件,这些库文件具体是做什么的我们作为初学者肯定不知道,既然我不知道那就简单粗 暴的把所有的库文件都放到我们的根文件系统中。这样做出来的根文件系统肯定很大,但是我 们现在是学习阶段,还做不了裁剪。这就是为什么我们推荐大家购买512MB+8GB版本的EMMC 核心版,如果后面要学习 QT 的话那占用空间将更大,不裁剪的话 512MB 的 NAND 完全不 够用的!而裁剪又是需要经验的。

这里 交叉编译器安装路径为:

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

(1)  拷贝 /gcclinaro-4.9.4-2017.01-x86_64_armlinuxgnueabihf/armlinuxgnueabihf/libc/lib/目录下库文件

进入如下路径对应目录

 

wangtian@wangtian-virtualmachine:~$ cd /usr/local/arm/gcclinaro-4.9.4-2017.01-x86_64_armlinuxgnueabihf/armlinuxgnueabihf/libc/lib/

目录下有很多的*so*(*通配符).a 文件,这些就是库文件,将此目录下所有的*so*.a 文件都拷贝rootfs/lib 目录中,将该文件夹下的库文件都拷贝rootfs/lib目录下:

wangtian@wangtian-virtualmachine:/usr/local/arm/gcclinaro-4.9.4-2017.01-x86_64_armlinuxgnueabihf/armlinuxgnueabihf/libc/lib$ cp *so* *.a /home/wangtian/linux/nfs_File/rootfs/lib/ –d

后面的“d表示拷贝符号链接这里有个比较特殊的库文件:ld-linux-armhf.so.3,此库文件也是个符号链接,相当于 Windows 下的快捷方式。会链接到库 ld-2.19-2014.08-1-git.so 上,通过查看可知:

可以看出,ld-linux-armhf.so.3 后面有个->”,表示其是个软连接文件,链接到文件 ld-2.19-2014.08-1-git.so,因为其是一个快捷方式”,所以其大小只有 24B。但是,ld-linuxarmhf.so.3 不能作为符号链接,否则的话在根文件系统中执行程序无法执行

需要我们重新复制一次 ld-linuxarmhf.so.3文件,只是不复制软链接即可

先将
rootfs/lib
中的
ld-linux-armhf.so.3
文件删除掉,命令如下
wangtian@wangtian-virtualmachine:~/linux/nfs_File/rootfs/lib$ rm ld-linux-armhf.so.3
然后,重新进入到
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm
linux-gnueabihf/libc/lib
目录中,重新拷贝
ld-linux-armhf.so.3
命令如下

cp ld-linux-armhf.so.3 /home/wangtian/linux/nfs_File/rootfs/lib/

拷贝完成以后,再到
rootfs/lib
目录查看
ld-linux-armhf.so.3
文件详细信息,如下图所示

可以看出,此时
ld-linux-armhf.so.3
已经不是软连接了,而是实实在在的一个库文件,而且文件大小
724392B

(2)  拷贝 /gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/目录下库文件

进入如下目录中:

/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
rootfs/lib
目录的库文件就这些了。至此, rootfs/lib下库文件拷贝完成

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


rootfs

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

wangtian@wangtian-virtualmachine:~/linux/nfs_File/rootfs/usr$ mkdir lib

进入如下目录下:

cd /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 目录中,命令如下

wangtian@wangtian-virtualmachine:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib$ cp *so* *.a /home/wangtian/linux/nfs_File/rootfs/usr/lib/ -d

至此,根文件系统的库文件就全部添加好了,可以使用
du
命令查看一下
rootfs/lib
和 rootfs/usr/lib
两个目录的大小命令如下

可以看出
lib

  usr/lib
两个文件的大小分别为 
57MB

67MB
,加起来就是
57+67=124MB

非常大!
所以,正点原子
256MB

512MB

NAND
核心版就不是给初学者准备的,而是给大
批量采购企业准备的,还是那句话,初学者选择
EMMC
版本的。

三.  创建其他的文件夹

在根文件系统中创建其他文件夹,如
dev

proc

mnt

sys

tmp

root
等,创建完成以后,如下所示

目前来看,这个根文件系统好像已经准备好了,究竟有没有准备好,直接测一下就知道了!

原文地址:https://blog.csdn.net/wojiaxiaohuang2014/article/details/134759726

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38838.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注