lv12 根文件系统12

news2025/1/22 17:52:04

目录

1 根文件系统    

2 BusyBox

3 实验九

3.1 在 busybox 官网下载 busybox 源码(这里我们下载 busybox-1.22.1.tar.bz2)

3.2 拷贝 busybox 源码包到 ubuntu 的家目录下,解压并进入其顶层目录

3.3 进入 busybox 配置界面(与 Linux 内核配置方法一样)

3.4、 参考如下信息配置 busybox

3.5 编译 busybox

3.6 安装 busybox

3.7 进入到安装目录下查看生成的文件

3.8 将交叉编译工具链中的库文件拷贝到_install 目录下

3.9 删除库文件中的静态库

3.10 删除共享库中的符号表(需要在 root 用户下操作)

3.11 将资料中“移植相关文件”下的 etc 目录(配置文件)拷贝到当前目录下

3.12 给 etc/init.d/下的 rcS 脚本添加可执行权限

3.13 创建其他目录

3.14 删除原来的根文件系统

3.15 将自己制作的根文件系统拷贝到 NFS 的工作目录下测试


1 根文件系统    

根文件系统是内核启动后挂载的第一个文件系统系统引导程序会在根文件系统挂载后从中把一些基本的初始化脚本和服务等加载到内存中去运行

根文件系统内容

uImage不支持这些命令,只有挂载根文件系统,才能执行这些命令,挂载根文件系统的目的即让linux可以使用这些命令。

浅蓝色文件都是软链接文件,这些文件都是通过busybox编译的 

bin		shell命令(elf格式)(通过busybox编译生成)
dev		设备文件(内核启动后会将设备信息写入该目录)
etc		内核配置文件
lib		共享库(elf格式)(从交叉编译工具链中获取)
linuxrc	内核运行的第一个应用程序(通过busybox编译生成)
mnt		挂载目录(非必要)
proc		进程相关文件(内核启动后会将进程信息写入该目录)
root		超级用户家目录(非必要)
sbin   	系统管理shell命令(elf格式)(通过busybox编译生成)
sys		驱动相关文件(内核启动后会将驱动信息写入该目录)
usr		shell命令(elf格式)(通过busybox编译生成)

linuxrc是busybox生成的,是linux运行起来的第一个程序 

思考:

开发板上为什么需要这些库?

库是预先编写好的代码集合,其中包含了一系列函数和数据结构,可供开发者在开发过程中调用和使用。

开发板上需要一定要有动态库还是静态库?

一般动态库就可以,一般我们在ubuntu上编译静态库在ubuntu上有就可以了。

开发板上的库从哪里来?

不可以从ubuntu复制,

2 BusyBox

BusyBox将很多常用的工具集成到一个很小的可执行文件中,为普通用户提供大多数常用的命令,BusyBox实现的命令都是精简版的,很多扩展都不支持。BusyBox被称为Linux工具里的瑞士军刀

BusyBox的获取     https://busybox.net/downloads/

BusyBox 是一个开源软件工具集,它集成了大量的 Linux 工具和命令行实用程序,包括基本的文件操作、系统管理、网络工具、Shell 命令等等。BusyBox 被广泛用于嵌入式系统中,因为其轻便、高效、可移植性好等特点。

以下是 BusyBox 的一些特点:

  • 小巧:BusyBox 被设计成一个单一的二进制文件,整个工具集的大小只有几百KB,这使得 BusyBox 可以轻松地运行在资源有限的嵌入式设备上。

  • 高效:BusyBox 中的工具和命令行实用程序都被优化过,能够占用更少的系统资源,并提供更快的执行速度,这对于嵌入式设备来说非常重要。

  • 可定制性强:BusyBox 可以配置为支持不同的功能和选项,用户可以根据自己的需求选择需要的工具和命令行实用程序,从而最小化系统中的资源消耗。

  • 兼容性好:BusyBox 可以运行在各种不同的 Unix 和 Linux 系统上,并且其命令行语法与 GNU 工具相似,因此易于使用和学习。

  • 开源:BusyBox 采用 GPL 开源协议,可以免费使用和修改,也可以在其他开源项目中使用。

总之,BusyBox 是一个轻便、高效、可定制性强、兼容性好的工具集,被广泛用于嵌入式设备中,是嵌入式系统开发的重要工具。

实验九

根文件系统移植
【实验目的】
熟悉根文件系统的目录结构,构建自己的根文件系统
【实验环境】
ubuntu 14.04 发行版
FS4412 实验平台
交叉编译工具: arm-none-linux-gnueabi-
【注意事项】
实验步骤中以“ $ ”开头的命令表示在 ubuntu 环境下执行
【实验步骤】

3.1 在 busybox 官网下载 busybox 源码(这里我们下载 busybox-1.22.1.tar.bz2

https://busybox.net/downloads/

3.2 拷贝 busybox 源码包到 ubuntu 的家目录下,解压并进入其顶层目录

$ tar xvf busybox-1.22.1.tar.bz2
$ cd busybox-1.22.1/

3.3 进入 busybox 配置界面(与 Linux 内核配置方法一样)

$ make menuconfig

 

3.4、 参考如下信息配置 busybox

Busybox Settings --->
    Build Options --->
        [*] Build BusyBox as a static binary (no shared libs)
        [ ] Build with Large File Support (for accessing files > 2 GB)
        (arm-none-linux-gnueabi-) Cross Compiler prefix

配置完成后通过方向键选择‘Exit’退出,并保存配置信息

3.5 编译 busybox

$ make
编译完成后在源码的顶层目录下会生成 busybox 文件

3.6 安装 busybox

$ make install
安装完成后在源码的顶层目录下会生成 _install 目录

3.7 进入到安装目录下查看生成的文件

$ cd _install/
$ ls
如下图所示,在安装目录下生成了根文件系统中所需的 shell 命令文件

3.8 将交叉编译工具链中的库文件拷贝到_install 目录下

$ cp /home/linux/Linux_4412/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a
如下图所示,在安装目录下就有了根文件系统中所需的库文件

3.9 删除库文件中的静态库

$ sudo rm lib/*.a

3.10 删除共享库中的符号表(需要在 root 用户下操作

需要瘦身 ,不过我们切换到root,所以之前配置的环境交叉编译无法直接使用,需要补齐路径

$ sudo su
$ /home/linux/Linux_4412/toolchain/gcc-4.6.4/bin/arm-none-linux-gnueabi-strip lib/*
$ exit

3.11 将资料中“移植相关文件”下的 etc 目录(配置文件)拷贝到当前目录下

3.12 etc/init.d/下的 rcS 脚本添加可执行权限

$ chmod +x etc/init.d/rcS

3.13 创建其他目录

$ mkdir dev mnt proc root sys tmp var
如下图所示,至此我们就构建好了自己的根文件系统

3.14 删除原来的根文件系统

$ sudo rm -rf /opt/4412/rootfs/*

3.15 将自己制作的根文件系统拷贝到 NFS 的工作目录下测试

$ sudo cp -rf ./* /opt/4412/rootfs

4 练习


1.简述根文件系统中主要包含了哪些内容及包含这些内容的原因?
2.使用BusyBox制作的Linux工具有哪些特点,为什么嵌入式领域一般都使用BusyBox?

 

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

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

相关文章

国内chatGPT3.5升级到chatGPT4.0的教程

1、准备一个3.5的账号 2、准备一个美元虚拟信用卡 这里默认您是有账号的 1、注册办理卡 2、按图片步骤就可以开卡成功 3、卡片cvc在卡中心cvc安全码里面 4、登录ChatGPT 第三步:升级 Plus 完成了上面步骤 小白朋友连账号都么有的,可以使用谷歌邮箱直接在open…

如何快速实现地源热泵远程监控

地源热泵远程监控解决方案 一、项目背景 山东省潍坊市盛世花园小区地源热泵项目是一个先进的供暖与制冷系统,旨在为整个小区提供高效且节能的温控服务。该系统主要由地下管道网络、地源热泵单元以及室内分配系统组成。 针对现有的地源热泵系统的管理和监控问题&a…

用SQL语句创建数据库表的注意事项

1.所有的符号都要在英文状态下使用。 2.表的名称和字段尽量使用括起来。 3.AUTO_INCREMENT(自增) 4.字符串使用单引号 括起来 5.所有的语句后面加 , (英文的),最后一个不用加。 6.PRIMARY KEY() 主键,一般一个表只有一个唯一 的主键! …

Java--抽象工厂设计模式

抽象工厂设计模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责…

pip 常用指令 pip list 命令用法介绍

📑pip 常用命令归类整理 pip list 是一个用于列出已安装的 Python 包的命令。这个命令会显示出所有已安装的包,以及它们的版本号。 pip list 命令有以下参数 -o, --outdated:列出所有过时的包,即有新版本可用的包。-u, --uptod…

麒麟信安日志轮询分割操作说明

1、背景介绍 由于模块上面硬盘容量有限,需要定时清理系统日志。为了方便用户使用,在系统中设定自动日志轮询操作,让日志占用容量由操作系统自动管理,用户无需担心日志太多把硬盘容量占满。 2、操作说明 新建需要分割的日志logr…

汽车行业一些知识

一、汽车术语集合 1、 轴距(mm):汽车前轴中心至后轴中心的距离。 2、转弯半径(mm):汽车转向时,汽车外侧转向轮的中心平面在车辆支撑平面上的轨迹圆半径。转向盘转到极限位置时的转弯半径为最小转弯半径。 3、最大总质量(kg):汽…

Zookeeper-应用实战

Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。 ZooKeeper官方的Java客户端API。 第三方的Java客户端API,比如Curator。 ZooKeeper官方的客户端API提供了基本的操作:创建会话、创建节点、读取节点、更新数据、…

智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社交网络算法4.实验参数设定5.算法结果6.…

机器视觉系统选型-图像对比度

对于一个视觉系统来说,“黑白分明”的图像才是好图像。 选择适合的灯源, 使图像中待测特征反差最大化。

【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工程…

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…

【mongoose】 Model.create() no longer accepts a callback 报错解决

在最新版的 mongoose 操作 MongoDB 数据库的时候,当我们插入一条数据时候,会报错 :Model.create() no longer accepts a callback,看了很多文章都说是,版本太高,都妥协选择了降低回旧版本,但我就…

基于SSM的文化线上体验馆(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的文化线上体验馆(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvc MybatisVueLayu…

java调用打印机,自定义模板

前言😊 只要你能看懂中文就会用,直接CV直接改,讲究的就是CV大法的魅力!!! 须知🐱‍👤 我们需要了解图像尺寸和物理尺寸之间的转换关系。 在图像处理中,通常使用像素作为图…

Python实现模块热加载

为什么需要热加载 在某些情况,你可能不希望关闭Python进程并重新打开,或者你无法重新启动Python,这时候就需要实现实时修改代码实时生效,而不用重新启动Python 在我的需求下,这个功能非常重要,我将Python…

基础数据结构(2):栈

1.栈的定义 栈是仅限在表尾进行插入和删除的线性表,栈又被称为后进先出的线性表 1.1栈顶和栈底 栈是一个线性表,我们允许插入和删除的一端称为栈顶 栈底和栈顶相对,实际上栈底的元素不需要关心 1.2入栈和出栈 栈元素的插入操作叫做入栈&…

将遗留系统分解为微服务:第 2 部分

在当今不断发展的技术环境中,从整体架构向微服务的转变对于许多企业来说都是一项战略举措。这在报销计算系统领域尤其重要。正如我在上一篇文章第 1 部分应用 Strangler 模式将遗留系统分解为微服务-CSDN博客中提到的,让我们探讨如何有效管理这种转变。 …

反序列化漏洞原理、成因、危害、攻击、防护、修复方法

反序列化漏洞是一种安全漏洞,它允许攻击者将恶意代码注入到应用程序中。这种漏洞通常发生在应用程序从不安全的来源反序列化数据时。当应用程序反序列化数据时,它将数据从一种格式(例如JSON或XML)转换为另一种格式(例如…

C++ vector的模拟实现

一 vector的大致框架 1.1 框架 vector的成员变量不再是我们熟悉的size,capacity,而是变成了功能一致的三个指针:_start,_finish,_endofstorage,三个指针的作用如下: 同时,因为其本身指针的特性&#xff0c…