根文件系统lib库添加与初步测试

news2024/11/18 1:33:11

一.  简介

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

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

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

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

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

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

wangtian@wangtian-virtual-machine:~/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)  拷贝 /gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/目录下库文件

进入如下路径对应的目录:
 

wangtian@wangtian-virtual-machine:~$ cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/

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

wangtian@wangtian-virtual-machine:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/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-virtual-machine:~/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-virtual-machine:~/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-virtual-machine:/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 等,创建完成以后,如下所示:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1283520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE之多线程编程(一):基础篇

文章目录 一、关于操作系统一、认识进程 process二、认识线程三、进程和线程的区别(重点!)四、Java的线程和操作系统线程的关系五、第一个多线程编程 一、关于操作系统 【操作系统】 驱动程序: 如:我们知道JDBC的驱动程…

【接口测试】POST请求提交数据的三种方式及Postman实现

1. 什么是POST请求? POST请求是HTPP协议中一种常用的请求方法,它的使用场景是向客户端向服务器提交数据,比如登录、注册、添加等场景。另一种常用的请求方法是GET,它的使用场景是向服务器获取数据。 2. POST请求提交数据的常见编…

笔记-模拟角频率和数字角频率的关系理解

先建议阅读前人此文(点击这里),有助于理解。 模拟频率:f 模拟角频率:Ω 数字角频率:ω 其中:在模拟信号中Ω 2πf 正弦波表示:sin(2πft) sin(Ωt) 数字信号就是离散的&#xff…

Facebook推广工具功能科普!

随着社交媒体的普及,Facebook已经成为全球使用最广泛的社交平台之一,对于广大营销人员来说,利用Facebook推广工具进行营销已经成为不可或缺的一部分。 那么,这些推广工具到底有哪些功能呢?本文将为您揭秘Facebook推广工具的强大…

Pytest 使用及调用方法

使用python -m pytest调用pytest 2.0版本新增 你可以在命令行中通过Python编译器来调用Pytest执行测试: python -m pytest [...] 通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。 可能出现的执行退出code 执行pytest可能…

公众号50个数量怎么操作?

一般可以申请多少个公众号?公众号申请限额在过去几年内的经历了很多变化。对公众号申请限额进行调整是出于多种原因,确保公众号内容的质量和合规性。企业公众号的申请数量从50个到5个最后到2个,对于新媒体公司来说,这导致做不了公…

移动端APP自动化测试框架-UiAutomator2基础

很早以前,我用uiautomatorjava实践过Android APP自动化测试,不过今天要提的不是uiautomator,而是uiautomator2。听起来uiautomator2像是uiautomator的升级版,但是这两款框架仅仅是名字上比较相似,实际上没有任何关联。…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图: 温度传感器原理图: 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图: 模拟量转相应温度公式: CubMx配置: Keil配置&…

深度学习算法:探索人工智能的前沿

目录 引言 第一部分:深度学习的基础 1.1 什么是深度学习? 1.2 神经网络的演化 第二部分:深度学习的关键技术 2.1 卷积神经网络(CNN) 2.2 循环神经网络(RNN) 2.3 长短时记忆网络&#xf…

Vue3集成ThreeJS实现3D效果,threejs+Vite+Vue3+TypeScript 实战课程【一篇文章精通系列】

Vue3集成ThreeJS实现3D效果,threejsViteVue3TypeScript 实战课程【一篇文章精通系列】 项目简介一、项目初始化1、添加一些依赖项 二、创建3D【基础搭建】1、绘制板子,立方体,球体2、材质和光照3、材质和光照和动画4、性能监控5、交互控制6、…

Liunx系统使用超详细(三)

本篇内容开始逐渐描述有关liunx的各种命令的使用方法! 目录 一、目录和文件区别 1.1目录: 1.2文件: 1.3总结: 二、Linux命令的写法 三、linux命令清屏 四、pwd命令 五、ls命令 5.1 ls: 5.2 ls -l&#xff1a…

【C++】异常处理 ⑧ ( 标准异常类 | 标准异常类继承结构 | 常用的标准异常类 | 自定义异常类继承 std::exception 基类 )

文章目录 一、抛出 / 捕获 多个类型异常对象1、标准异常类2、标准异常类继承结构3、常用的标准异常类 二、自定义异常类继承 std::exception 基类1、自定义异常类继承 std::exception 基类2、完整代码示例 - 自定义异常类继承 std::exception 基类 一、抛出 / 捕获 多个类型异常…

茄子科技张韶全:跨多云大数据平台DataCake在OceanBase的实践

11 月 16 日,OceanBase 在北京顺利举办 2023 年度发布会,正式宣布:将持续践行“一体化”产品战略,为关键业务负载打造一体化数据库。其中,在“数字化转型升级实践专场”,我们有幸邀请到了茄子科技大数据技术…

经验分享|MySQL分区实战(RANGE)

概述 分区概述 在 MySQL 中, InnoDB存储引擎长期以来一直支持表空间的概念。在 MySQL 8.0 中,同一个分区表的所有分区必须使用相同的存储引擎。但是,也可以为同一 MySQL 服务器甚至同一数据库中的不同分区表使用不同的存储引擎。 通俗地讲…

锂电池包膜机通过设备管理系统做好预测性维护的作用

在现代工业生产中,包膜机在锂电产业链中处于电池制造环节,是锂电池生产线上的关键设备之一。然而,随着生产规模的扩大和工作环境的复杂化,锂电池包膜机也面临着常见故障和维护需求。为了更好地管理和维护锂电池包膜机,…

Unity 关于SpriteRenderer 和正交相机缩放

float oldWidth 750f;float oldHeight 1334f;float newWidth Screen.width;float newHeight Screen.height;float oldAspect oldWidth / oldHeight;float newAspect newWidth / newHeight;//水平方向缩放float horizontalCompressionRatio newAspect / oldAspect;//垂直…

刷题系列——排序算法

参考:README - 十大经典排序算法 1)排序算法分为内部外部排序两种,这个之前并不了解,外部排序需要访问外存的这个就是指需要额外内存比如另一个list或者dict存储中间结果。 2)稳定性:排序后 2 个相等键值…

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇,基础篇点击:C#基础与进阶扩展合集-基础篇 一、进阶 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、值类型与引用类型 5、程序设置当前项目工作目录 6、获取App.config配置文件中的值 7、Linq常用语句 8、…

三种定时器的实现方式

一、Scheduled Schedule是Spring框架提供的一种简单的定时任务调度方法,通过注解的方式即可实现定时任务的调度。它适用于简单的定时任务需求,例如每隔一段时间执行一次任务或者在特定时间执行任务。Scheduled可以轻松地集成到Spring应用中,…

DeepVoice AI - Text To Voice

No sign-up, No API Keys, no recurr