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”目录的文件和文件夹

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣二叉树篇7

算法学习——LeetCode力扣二叉树篇7 236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 - 力扣(LeetCode) 描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点…

加速创新如何先从创意管理开始?

文章详细介绍了什么是创意管理以及它在组织中的重要性和最佳实践。创意管理是指在组织内捕捉、组织、评估和实施创意的过程。它通过建立一个结构化的系统,从员工、客户或其他利益相关者那里收集创意,并系统地审查和选择最有前景的创意进行进一步的开发或…

《区块链公链数据分析简易速速上手小册》第8章:实战案例研究(2024 最新版)

文章目录 8.1 案例分析:投资决策支持8.1.1 基础知识8.1.2 重点案例:股票市场趋势预测准备工作实现步骤步骤1: 加载和准备数据步骤2: 特征工程步骤3: 训练模型步骤4: 评估模型 结论 8.1.3 拓展案例 1:基于情感分析的投资策略准备工作实现步骤步…

【王道数据结构】【chapter5树与二叉树】【P159t14】

设有一棵满二叉树&#xff08;所有结点值均不同&#xff09;&#xff0c;已知其先序序列为pre&#xff0c;设计一个算法求其后序序列post #include <iostream> #include <stack> #include <queue> #include<string.h> typedef struct treenode{char da…

读十堂极简人工智能课笔记02_选对路径与犯错

1. 符号人工智能 1.1. 在符号处理中&#xff0c;单词被当成遵循一套规则、互相关联的符号 1.2. 符号人工智能让计算机能用单词来思考 1.3. 符号人工智能是最早、最成功的人工智能形式之一 1.4. 20世纪初的时候&#xff0c;伯特兰罗素、库尔特哥德尔和大卫希尔伯特等数学家就…

训练深度学习模型的过程

深度学习的训练过程是指通过大量的数据来调整神经网络的参数&#xff0c;以使其能够对输入数据进行准确的预测或分类. 训练神经网络的步骤 损失函数&#xff08;Loss Function&#xff09;是一个性能指标&#xff0c;反映神经网络生成接近期望值的值的程度。 损失函数直观上就…

书生浦语大模型实战营-课程笔记(1)

模型应用过程&#xff0c;大致还是了解的。和之前实习做CV项目的时候比起来&#xff0c;多了智能体这个环节。智能体是个啥&#xff1f; 类似上张图&#xff0c;智能体不太清楚。感觉是偏应用而不是模型的东西&#xff1f; 数据集类型很多&#xff0c;有文本/图片/视频。所以…

Vulnhub靶机:DC3

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;DC3&#xff08;10.0.2.56&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/dc-32,312…

洛谷C++简单题小练习day11—字母转换,分可乐两个小程序

day11--字母转换--2.14 习题概述 题目描述 输入一个小写字母&#xff0c;输出其对应的大写字母。例如输入 q[回车] 时&#xff0c;会输出 Q。 代码部分 #include<bits/stdc.h> using namespace std; int main() { char n;cin>>n;cout<<char(n-32)<…

代码+视频基于R语言进行K折交叉验证

我们在建立数据模型后通常希望在外部数据验证模型的检验能力。然而当没有外部数据可以验证的时候&#xff0c;交叉验证也不失为一种方法。交叉验验证&#xff08;交叉验证&#xff0c;&#xff23;&#xff36;&#xff09;则是一种评估模型泛化能力的方法&#xff0c;广泛应用…

StarUML无法安装扩展的解决方案

StarUML无法安装扩展解决方案 版本&#xff1a;StarUML3.2.2 遇到问题 Unable to access the extension registry, Please try again later. 解决方案 第一步 https://docs.staruml.io/user-guide/managing-extensions#install-extension官网给了怎么手动安装扩展器的方法…

(三十八)大数据实战——Atlas元数据管理平台的部署安装

前言 Apache Atlas 是一个开源的数据治理和元数据管理平台&#xff0c;旨在帮助组织有效管理和利用其数据资产。为组织提供开放式元数据管理和治理功能 &#xff0c;用以构建其数据资产目录&#xff0c;对这些资产进行分类和管理&#xff0c;形成数据字典 。并为数据分析师和数…

反无人机系统技术分析,无人机反制技术理论基础,无人机技术详解

近年来&#xff0c;经过大疆、parrot、3d robotics等公司不断的努力&#xff0c;具有强大功能的消费级无人机价格不断降低&#xff0c;操作简便性不断提高&#xff0c;无人机正快速地从尖端的军用设备转入大众市场&#xff0c;成为普通民众手中的玩具。 然而&#xff0c;随着消…

CFS三层靶机

参考博客&#xff1a; CFS三层内网靶场渗透记录【详细指南】 - FreeBuf网络安全行业门户 CFS三层靶机搭建及其内网渗透【附靶场环境】 | TeamsSix CFS三层网络环境靶场实战 - PANDA墨森 - 博客园 (cnblogs.com) CFS三层靶机实战--内网横向渗透 - 知乎 (zhihu.com) CFS靶机…

【Tomcat】:One or more listeners failed to start.报错解决方案

报错信息:One or more listeners failed to start. Full details will be found in the appropriate container log file. 具体就是web.xml此配置报错: 服务器启动错误Tomcat:One or more listeners failed to start.报错解决方案 IDEA:在使用IDEA运行SSM项目的时候 , Tomcat运…

【知识图谱--第四讲知识图谱的抽取与构建】

知识图谱的抽取与构建 实体识别与分类关系抽取与属性补全概念抽取事件识别与抽取 实体识别与分类 关系抽取与属性补全 概念抽取 事件识别与抽取

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch&#xff1a;与多个 PDF 聊天 | LangChain Python 应用教程&#xff08;免费 LLMs 和嵌入&#xff09;” 里&#xff0c;我详述如何使用 Streamlit&#xff0c;Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…

anomalib1.0学习纪实

回顾&#xff1a;细分、纵深、高端、上游、积累、极致。 回顾&#xff1a;资本化&#xff0c;规模化&#xff0c;国际化&#xff0c;大干快上&#xff0c;小农思维必死无疑。 春节在深圳新地中央&#xff0c;学习anomalib1.0。 一、安装&#xff1a; 1、常规安装 采用的是…

Python中的正则表达式(一)

在Python中&#xff0c;正则表达式是一种用于匹配和操作字符串的强大工具。正则表达式由一系列字符和特殊字符组成&#xff0c;用于定义搜索模式。 在Python中&#xff0c;我们使用内置的 re 模块来操作正则表达式。要使用正则表达式&#xff0c;我们首先需要导入 re 模块。 下…

springboot187社区养老服务平台的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…