lv12 根文件系统12

目录

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.mzph.cn/news/239751.shtml

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

相关文章

新零售模式:重新定义商业未来

随着科技的飞速发展,我们的生活方式正在经历着前所未有的变革。其中,新零售模式正逐渐成为商业领域的新热点,它正在重新定义我们的购物方式,并为企业带来更多的商业机会。 一、新零售模式概述 新零售模式是指将互联网、大数据、…

在 Windows 中关闭指定端口的方法

方法一&#xff1a;使用命令行&#xff08;Command Prompt&#xff09; 查找端口占用情况 打开命令提示符&#xff08;Command Prompt&#xff09;并输入以下命令来查找占用指定端口的进程&#xff1a; netstat -aon|findstr "<port_number>" 这里的 <p…

[已解决] Ubuntu远程桌面闪退+登录显示“远程桌面由于数据加密错误 , 这个会话将结束“

两个月前&#xff0c;由于跑代码在Ubuntu配置环境&#xff0c;乱七八糟的下载了很多东西&#xff0c;导致了一系列问题..... 问题1 Ubuntu远程桌面闪退 实验室有两台服务器&#xff0c;IP后三位分别为141和142&#xff0c;其中141在输入密码后立即闪退&#xff0c;142可以正常…

Linux下 自定义多线程并发快速压缩解压缩脚本

文章目录 自定义多线程压缩解压缩脚本使用 Linux下 自定义多线程并发快速压缩解压缩脚本 Linux下常用的tar工具无法支持并行 压缩和解压&#xff0c;对于大量小文件的解压缩&#xff0c;可借助pigz工具实现多线程并行工作&#xff0c;实现更为高效的压缩和解压缩。 自定义多线…

【分享】4个方法打开PDF文件

PDF是很多人工作中经常使用的电子文档格式&#xff0c;但是可能有些刚接触的小伙伴不知道用什么工具来打开PDF文件&#xff0c;今天小编就来分享一下4种常用的工具。 1. 使用浏览器 只要有电脑基本都会安装一到两款浏览器&#xff0c;其实浏览器也可以用来打开PDF文件。 只需…

B2122 单词翻转

B2122 单词翻转 [B2122 单词翻转]&#xff08;https://www.luogu.com.cn/problem/B2122?contestId150480 B2122 单词翻转 题意 输入一串字符&#xff0c;将它倒着输出&#xff0c;但是&#xff0c;单词之间要换行&#xff0c;才能输出。 思路 先写for循环&#xff0c;在往上…

python 用OpenCV 将图片转视频

import os import cv2 import numpy as npcv2.VideoWriter&#xff08;&#xff09;参数 cv2.VideoWriter() 是 OpenCV 中用于创建视频文件的类。它的参数如下&#xff1a; filename&#xff1a;保存视频的文件名。 fourcc&#xff1a;指定视频编解码器的 FourCC 代码&#xf…

经常使用的排序算法

一、直接插入排序 #include <stdio.h>void insert_sort(int arr[], int n){int i, j, tmp;for (i 1; i < n; i){tmp arr[i];j i - 1;while (j > 0 && arr[j] > tmp){ // 将要插入的元素与数组中的元素比较&#xff08;从后向前比&#xff09;arr[j …

Redis可视化工具Redis Desktop Manager mac功能特色

Redis Desktop Manager mac是一款非常实用的Redis可视化工具。RDM支持SSL / TLS加密&#xff0c;SSH隧道&#xff0c;基于SSH隧道的TLS&#xff0c;为您提供了一个易于使用的GUI&#xff0c;可以访问您的Redis数据库并执行一些基本操作&#xff1a;将键视为树&#xff0c;CRUD键…

【springboot】功能合集

目录 全局监听请求&#xff1a;HandlerInterceptor创建拦截器类添加拦截器拦截器类调用Service服务 全局异常处理&#xff1a;ExceptionHandler统一处理业务异常自定义JsonResult 全局跨域配置&#xff1a;WebMvcConfigurer静态(static)方法中调用接口&#xff08;Service层&am…

PDF.js介绍以及使用

一、PDF.js是什么 PDF.js是一个JavaScript库&#xff0c;可以在现代Web浏览器中渲染和显示PDF文件。它的主要作用是将PDF文件转换为HTML5格式&#xff0c;以便在浏览器上进行展示和交互。 PDF.js的主要功能包括&#xff1a; 在浏览器中显示PDF&#xff1a;PDF.js使用HTML5的…

hab_virtio hypervisor 虚拟化

Linux的 I / O 虚拟化 Virtio 框架 简而言之&#xff0c;virtio是半虚拟化管理程序中设备上的抽象层。virtio由Rusty Russell开发以支持他自己的虚拟化解决方案lguest。本文从准虚拟化和仿真设备的介绍开始&#xff0c;然后探讨的细节virtio。重点是virtio2.6.30内核发行版中的…

Pytorch:torch.sum()函数用法

torch.sum() 先看看官网描述&#xff1a;https://pytorch.org/docs/stable/generated/torch.sum.html#torch.sum 函数torch.sum有两种形式&#xff1a; 第一种&#xff1a;   torch.sum(input, *, dtypeNone) → Tensor .   Returns the sum of all elements in the inp…

【华为数据之道学习笔记】6-4 打造数据供应的“三个1”

数据服务改变了传统的数据集成方式&#xff0c;所有数据都通过服务对外提供&#xff0c;用户不再直接集成数据&#xff0c;而是通过服务获取。因此&#xff0c;数据服务应该拉动数据供应链条的各个节点&#xff0c;以方便用户能准确地获取数据为重要目标。 数据供应到消费的完整…

Deployment Controller详解(上)

上一篇在《Kubectl 部署无状态应用》中介绍了如何使用 Deployment 部署五个 hello world 实例时&#xff0c;我们并没有详细探讨 Deployment Controller 的各项功能。因此&#xff0c;本文将深入介绍 Deployment Controller 的作用以及它能够完成的任务。 本文来自官方文档梳理…

深入理解依赖反转原则(DIP)

依赖反转原则是一个比较重要的架构原则&#xff0c;从定义上看是要依赖于抽象&#xff0c;不要依赖于细节&#xff0c; 这个听起来很简单&#xff0c;好像加个接口就完事了&#xff0c;大家的service都是一个接口配一个实现类&#xff0c;是不是依赖倒置呢&#xff1f;很显然不…

第11章 GUI Page417~418 步骤五 支持方框 使用宏定义

运行效果&#xff1a; 原来的创建item的方式&#xff1a; 使用宏定义的方式&#xff1a;

Java之LinkedList核心源码解读

LinkedList核心源码解读 LinkedList 是一个基于双向链表实现的集合类&#xff0c;经常被拿来和 ArrayList 做比较 LinkedList 插入和删除元素的时间复杂度&#xff1f; 头部插入/删除&#xff1a;只需要修改头结点的指针即可完成插入/删除操作&#xff0c;因此时间复杂度为 O…

PHP数组定义和输出

数组就是一组数据的集合&#xff0c;把一系列数据组织起来&#xff0c;形成一个可操作的整体。 PHP中的数组与Java的数组不一样&#xff0c;需要有key&#xff08;键&#xff09;和value&#xff08;值&#xff09;&#xff0c;相当于Java中数组和键值对的结合。 数组的定义 …

redis 从0到1完整学习 (六):Hash 表数据结构

文章目录 1. 引言2. redis 源码下载3. dict 数据结构4. 哈希表扩容与 rehash5. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;red…