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

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

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

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

相关文章

Python爬虫之自动化测试Selenium#7

爬虫专栏:http://t.csdnimg.cn/WfCSx 前言 在前一章中,我们了解了 Ajax 的分析和抓取方式,这其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax,我们仍然可以借助 requests 或 urllib 来实现数据爬取…

【数据分享】2020~2050年青藏高原未来LAI变化情景数据集

各位同学们好,今天和大伙儿分享的是2020~2050年青藏高原未来LAI变化情景数据集。如果大家有下载处理数据等方面的问题,可以添加我的微信交流~ 贾坤, 赵琳琳, 夏沐. (2023). 青藏高原未来LAI变化情景数据集(2020-2050). 国家青藏高…

app移动应用开发

1.案例7.安安的通讯助手 目标 组件设计 素材准备 所有组件的说明及属性设置(1) 所有组件的说明及属性设置(2) 所有组件的说明及属性设置(3)布局小技巧 行为逻辑设计 自动回复短信 短信收发器 组件 记录已收…

LeetCode72. Edit Distance——动态规划

文章目录 一、题目二、题解 一、题目 Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2. You have the following three operations permitted on a word: Insert a character Delete a character Replace …

编辑器的新选择(基本不用配置)

Cline 不用看网上那些教程Cline几乎不用配置。 点击设置直接选择Chinese, C直接在选择就行了。 Cline是一个很好的编辑器,有很多懒人必备的功能。 Lightly 这是一个根本不用配置的C编辑器。 旁边有目录,而且配色也很好,语言标准可以自己…

【前端设计】炫酷导航栏

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 html <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

c语言操作符(上

目录 ​编辑 原码、反码、补码 1、正数 2、负数 3、二进制计算1-1 移位操作符 1、<<左移操作符 2、>>右移操作符 位操作符&、|、^、~ 1、&按位与 2、|按位或 3、^按位异或 特点 4、~按位取反 原码、反码、补码 1、正数 原码 反码 补码相同…

Rust入门4——基本编程概念

文章目录 1. 变量与可变性2. 数据类型&#xff1a;标量类型3. 数据类型&#xff1a;复合类型4. 函数和注释 1. 变量与可变性 声明变量使用let关键字 默认情况下&#xff0c;变量是不可变的 声明变量时&#xff0c;在let后加上mut关键字&#xff0c;就可以使变量可变 常量在绑…

单片机学习笔记---DS18B20温度读取

目录 OneWire.c 模拟初始化的时序 模拟发送一位的时序 模拟接收一位的时序 模拟发送一个字节的时序 模拟接收一个字节的时序 OneWire.h DS18B20.c DS18B20数据帧 模拟温度变换的数据帧 模拟温度读取的数据帧 DS18B20.h main.c 上一篇讲了DS18B20温度传感器的工作原…

blender在几何节点中的这些变换中的旋转,其实可以是两种旋转顺序

看似xyz的旋转角度&#xff0c;但如果按照欧拉角来谈它的旋转&#xff0c;就大有学问了。 我们知道&#xff0c;在blender中有局部旋转和全局旋转。但其实这两者在某种情况下可以等价。 那就是&#xff0c;如果参照全局坐标系&#xff0c;按xyz的顺序进行欧拉旋转&#xff0c;…

Mac终端远程访问Linux

以ubuntu为例 一、查看ubuntu的ip地址 1、下载net-tools localhostubuntu-server:~$ sudo apt install net-tools 2、查看ip地址 localhostubuntu-server:~$ ifconfig ubuntu需要下载net-tools才能使用ifconfig localhostubuntu-server:~$ sudo apt install net-tools 二…

判断能否形成等差数列

1502. 判断能否形成等差数列 给你一个数字数组 arr 。 如果一个数列中&#xff0c;任意相邻两项的差总等于同一个常数&#xff0c;那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

Hive调优——count distinct替换

离线数仓开发过程中经常会对数据去重后聚合统计&#xff0c;而对于大数据量来说&#xff0c;count(distinct ) 操作消耗资源且查询性能很慢&#xff0c;以下是调优的方式。 解决方案一&#xff1a;group by 替代 原sql 如下&#xff1a; #7日、14日的app点击的用户数&#x…

[AIGC] Kafka 的 Rebalance 机制:保证分区的可靠性和高可用性

在分布式系统中&#xff0c;Kafka 是一种流处理平台&#xff0c;具有高吞吐量、低延迟和可扩展性等特点。在 Kafka 中&#xff0c;消费者组是一组消费者的集合&#xff0c;它们共同消费一个 topic 的所有分区。在消费者组中&#xff0c;每个分区只能由一个消费者消费&#xff0…

MySQL 基础知识(一)之数据库和 SQL 概述

目录 1 数据库相关概念 2 数据库的结构 ​3 SQL 概要 4 SQL 的基本书写规则 1 数据库相关概念 数据库是将大量的数据保存起来&#xff0c;通过计算机加工而成的可以进行高效访问的数据集合数据库管理系统&#xff08;DBMS&#xff09;是用来管理数据库的计算机系统&#xf…

解决‘vue‘ 不是内部或外部命令,也不是可运行的程序(设置全局变量)

发现是没有执行&#xff1a; npm install -g vue/cli 但是发现还是不行 此时&#xff0c;我们安装了 Vue CLI&#xff0c;但是在运行 vue ui 命令时出现了问题。这通常是因为全局安装的 Vue CLI 的路径没有被正确地添加到系统的环境变量中。 可以尝试以下几种方法来解决这个问…

C++ //练习 6.55 编写4个函数,分别对两个int值执行加、减、乘、除运算;在上一题创建的vector对象中保存指向这些函数的指针。

C Primer&#xff08;第5版&#xff09; 练习 6.55 练习 6.55 编写4个函数&#xff0c;分别对两个int值执行加、减、乘、除运算&#xff1b;在上一题创建的vector对象中保存指向这些函数的指针。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#x…

《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托&#xff08;Session Interface Delegates&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xf…

SelfAttention|自注意力机制ms简单实现

自注意力机制学习有感 观看b站博主的讲解视频以及跟着他的pytorch代码实现mindspore的自注意力机制&#xff1a;up主讲的很好&#xff0c;推荐入门自注意力机制。 import mindspore as ms import mindspore.nn as nn from mindspore import Parameter from mindspore import …

预处理详解(上)

1. 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSIC&…