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

一.  简介

我们在编译 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.mzph.cn/news/195781.shtml

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

相关文章

NPS内网穿透教程

1.简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网ht…

【python爬虫】设计自己的爬虫 2. 数据保存封装 mongodb,mysql和elasticsearch

mongodb, mysql和elasticsearch 功能较相似,所以打算用一套接口将它们封装起来 基类StorageBase 如下: class StorageBase:def __init__(self, hostNone, portNone, databaseNone, tableNone, locationNone, accountNone, passwordNone,urlNone):self…

安卓1.0明显是基于linux内核开发的,安卓1.0是不是linux套壳?

安卓1.0明显是基于linux内核开发的,安卓1.0是不是linux套壳? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「安卓开发资料从专业入门到高级教程工具包」,点个关注&…

141. 环形链表

141. 环形链表 设置一个fast指针,一个slow指针,fast一次走两步,slow一次走一步。如果fast和slow相遇,则说明有环。反之没相遇则无环。 注意快慢指针的while循环条件是fast.next ! null && fast.next.next ! null /*** …

大数据集群增加数据盘,平衡数据盘HDFS Disk Balancer

大数据集群增加数据盘,平衡数据盘HDFS Disk Balancer 官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/HDFSDiskbalancer.html hdfs diskbalancer -execute /system/diskbalancer/nodename.plan.jsonhdfs diskbalancer -q…

StringJoiner使用详解

关于StringJoiner 1.介绍2.源码2.1 属性2.2 方法 3 举例StringJoiner做法3.1 只含间隔符3.2 含间隔符和前后缀3.3 merge合并两个joiner3.4 stringJoiner.setEmptyValue("xxx");3.5 综合举例length()方法 1.介绍 在JDK1.8之后,提供了一个StringJoiner类用来…

简谈oracle数据库的归档模式

一、oracle数据库归档模式简介 Oracle数据库归档模式是一种数据备份和恢复策略,它允许数据库记录所有数据库的更改操作(包括已提交和未提交的事务)并将其存储在归档日志中。这些归档日志可以用于在数据库发生故障时进行恢复,并提供点时间恢复(PITR)的能力。 在Oracle数…

ruoyi-vue 整合netty实现TCP/IP协议数据接收

支持持续接收数、可发送数据、可多端口连接。 废话少说,直接上代码! 如果写的可以,记得点个赞~ import com.alibaba.fastjson.JSON; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; imp…

PHP 刷新缓存区的问题!

PHP流式输出,在Nginx下可以正常刷新缓存区 , 但是在Apache下会等待循环全部执行完,才会刷新!有怎么解决? header(X-Accel-Buffering: no); // Nginx情况下必须加这一行header(Content-type: text/event-stream);header…

【刷题】【力扣牛客】反转链表的五种方式——Java

文章目录 前言方法一:构造新链表(构造新节点)方法二:构造新链表(不构造新节点)方法三:递归方法四:双指针方法五:遍历总结 力扣题目链接:206. 反转链表 牛客题…

IDEA2023找不到 Allow parallel run

我的idea版本:2023.1.4 第一步:点击Edit Configrations 第二步:点击Modify options 第三步:勾选Allow multiple instances 最后点击Apply应用一下 ok,问题解决!

SSM项目实战-登录验证成功并路由到首页面,Vue3+Vite+Axios+Element-Plus技术

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/sysUser.js import request from "../util/request.js";export const login (…

Mysql日志

文章目录 1. 日志类型2. bin log2.1 写入机制2.2 binlog与redolog对比2.3 两阶段提交 3. 中继日志 1. 日志类型 这 6 类日志分别为: 慢查询日志: 记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。 通用查询日志&am…

在sCrypt网站上铭刻Ordinals

sCrypt发布了一个新的Ordinals铭刻工具,连接Panda Wallet后即可使用。你可以观看我们录制的视频教程,获得更多细节。 铭刻工具同时支持BSV主网(mainnet)和测试网(testnet),你可以在我们的官方网…

手写VUE后台管理系统8 - 配置404NotFound路由

设置404页面 配置路由404页面 配置路由 这里配置了两个路由,一个是主页,另外一个则匹配任意路由显示为404页面。因为只配置了两个路由,如果路径没有匹配到主页,则会被自动导向到404页面,这样就可以实现整站统一的404页…

「Linux」使用C语言制作简易Shell

💻文章目录 📄前言简易shell实现shell的概念系统环境变量shell的结构定义内建命令完整代码 📓总结 📄前言 对于很多学习后端的同学来讲,学习了C语言,发现除了能写出那个经典的“hello world”以外&#xff…

142873-41-4脂质过氧化抑制剂1-星戈瑞

142873-41-4脂质过氧化抑制剂1 英文名称:Lipid peroxidation inhibitor 1 中文名称:脂质过氧化抑制剂 化学名称:2,4,6,7-四甲基-2-[(4-苯基哌啶-1-基)甲基]-3H-1-苯并呋喃-5-胺 CAS:142873-41-4 外观:固体粉末 分…

D2822ML 用于便携式录音机和收音机作音频功率放大器。采用 DIP8 SOP8 封装形式

D2822ML 用于便携式录音机和收音机作音频功率放大器。采用 DIP8 SOP8 封装形式 特点: 电源电压降到 1.8V 时仍能正常工作交越失真小 静态电流小可作桥式或立体声式功放应用外围元件少通道分离度高 开机和关机无冲击噪声软限幅

RT-Thread 内存管理

在计算机系统中,通常存储空间可以分为两种:内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快,能够按照变量地址随机访问,也就是我们通常所说的RAM(随机存储器),可以把它理解为电脑…

docker安装达梦数据库并挂在数据卷

离线包下载地址:请点击 1.在线下载 wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar2. 导入镜像 docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar3. 运行容器 docker run -d -p 5236:5236 --restartalwa…