企业网站维护合同/百度seoo优化软件
文章目录
- 一、根文件系统中各个目录文件功能解析:
- 二、对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
相关文章:

系统移植(十一)根文件系统(未整理)
文章目录 一、根文件系统中各个目录文件功能解析:二、对busybox进行配置和编译(一)执行make help命令获取make的帮助信息(二)对busybox源码进行配置,配置交叉编译器(三)执行make men…...

mac中docker常用命令总结
在Mac中,Docker的常用命令可以总结如下表格: 命令用途docker run运行一个新的容器实例。可以指定镜像名来启动容器,并支持多种参数来调整容器的运行方式。docker ps列出当前正在运行的容器。可以通过添加-a参数来列出所有容器(包…...

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程) 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…...

Linux 4: Bash
1 Bash环境 1 命令执行的顺序 1 绝对路径、相对路径 2 alias 3 内置的builtin 4 $PATH找到的第一个命令 2 bash的登录信息,保存在哪里? 保存在/etc/issue. 3 bash的环境配置文件 1 如果是login shell,读以下,有优先级:如果…...

第十四天学习笔记2024.7.25
Git安装 1.安装git 2.创建git仓库 3.创建文件并且提交文件 (git add . 将文件提交到缓存)(git commit -m 说明)(git log 查看历史) 4.分支创建与解决分支冲突问题 创建主机(git 192.1…...

花几千上万学习Java,真没必要!(三十七)
IO 流: 读取数据到内存的过程:可以包括从硬盘、网络或其他存储设备中将数据加载到内存中,以便程序能够访问和处理这些数据。 写入数据到硬盘的过程:通常是将内存中的数据保存到硬盘或其他持久性存储设备中,以便长期存…...

SSA-GRU(自适应平滑自回归门控循环单元)预测模型及其Python和MATLAB实现
SSA-GRU(自适应平滑自回归门控循环单元)预测模型是结合了SSA(Singular Spectrum Analysis,奇异谱分析)和GRU(Gated Recurrent Unit,门控循环单元)模型的一种时间序列预测方法。以下是…...

【ROS】让你的回调函数并行起来
【前言】 众所周知,ROS中的所有回调函数,都由 ros::spin() 这个家伙来统一管理和唤醒。这里说的是所有通过ROS方式创建出来的回调函数,比如ros::Subscriber、ros::Timer等等的回调函数。 【举例】 我们先来看一个示例节点: #i…...

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

基于YOLOv8的道路裂缝坑洼检测系统
基于YOLOv8的道路裂缝坑洼检测系统 (价格88) 包含 【“裂缝”,“凹坑”】 2个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该系统可以根据数据训练出的yolov8的权重文件,运用在其他检测系…...

蓝鹏测径仪非标定制订制流程
测径仪通常属于非标定制设备,非标定制意味着这些设备不是按照标准规格批量生产的,而是根据特定的客户需求和应用场景设计和制造的。例如,某些测径仪可能需要特殊的测量范围、精度、传感器或软件来满足特定的工业检测要求。 测径仪非标定制的…...

vue基础3
1.推荐好用的第三方框架 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 1.moment.js 2.dayjs 2.收集表达数据 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><…...

LINUX -exec函数族
1、功能: *让父子进程来执行不相干的操作 *能够替换进程地址空间的代码.text段 *执行另外的程序,不需要创建额外的的地址空间 *当前程序中调用另外一个应用程序 2、执行目录下的程序: *指定执行目录下的程序 int execl(const char *path,…...

c++ 智能指针shared_ptr与make_shared
shared_ptr是C11引入的一种智能指针,它允许多个shared_ptr实例共享同一个对象,通过引用计数来管理对象的生命周期。当最后一个持有对象的shared_ptr被销毁时,它会自动删除所指向的对象。这种智能指针主要用于解决资源管理问题&…...

2024-HW最新漏洞整理及相应解决方案(二)
目录 前言: 漏洞 1.用友NC系统电采complainjudge接口的sql注入漏洞 2.用友U8 CRM产品存在SQL注入漏洞 3.WordPress LMS 插件任意文件上传漏洞 4.Oracle Fusion Middleware 安全漏洞CVE-2024-21181 5.WordPress plugin LearnPress 安全漏洞CVE-2024-6589 6.W…...

spring boot整合JPA兼容MySQL8和达梦数据库8
前言 Spring Boot是一个基于Spring框架的快速开发框架,它可以简化Spring应用的配置和部署过程。JPA(Java Persistence API)是Java持久化规范的一种实现,它提供了一种统一的方式来访问和管理数据库。MySQL和达梦数据库都是常用的关…...

规划决策算法(四)---Frenet坐标系
知乎:坐标系转换 1.Frenet 坐标系 什么是 Frenet 坐标系: 为什么使用 Frenet 坐标系: 通常情况,我们只会关注车辆当前距离左右车道线的距离,来判断是否偏离车道,是否需要打方向盘进行方向微调。而不是基于…...

大数据处理:大数据处理框架Hadoop、Spark
大数据处理是当代信息技术领域的一个重要分支,它涉及到海量数据的存储、管理和分析。为了高效地应对大数据处理的挑战,多种框架被开发出来,其中Hadoop和Spark是最为知名和广泛应用的两种。以下将详细介绍这两种框架以及它们在大数据处理中的应…...

网传的高频流量费会影响到个人用户的算法和策略T0吗?
先解答这个问题:高频的流量费这个确实是会影响你自己算法的交易的!但是,强调一个但是:有的券商是没有流量费的!小编今天就来带大家了解一下!第一:算法交易的应用场景! 算法交易的主…...

阿里云服务器 Ubuntu18.04 安装 mysql8.0并允许外部连接
参考教程: 官网教程 参考教程一 首先彻底删除mysql5.7 dpkg --list|grep mysql #查看 sudo apt-get remove mysql-common #卸载 sudo apt-get autoremove --purge mysql-server-5.7 #版本自己修改 dpkg -l|grep ^rc|awk {print$2}|sudo xargs dpkg -P #清除残留数…...

(Arxiv-2023)MobileDiffusion:移动设备上即时文本到图像生成
MobileDiffusion:移动设备上即时文本到图像生成 Paper Title:MobileDiffusion: Instant Text-to-Image Generation on Mobile Devices Paper是谷歌出品 Paper地址 图 1:MobileDiffusion 用于 (a) 文本到图像的生成。(b) Canny 边缘到图像、风…...

【七】Hadoop3.3.4基于ubuntu24的分布式集群安装
文章目录 1. 下载和准备工作1.1 安装包下载1.2 前提条件 2. 安装过程STEP 1: 解压并配置Hadoop选择环境变量添加位置的原则检查环境变量是否生效 STEP 2: 配置Hadoop2.1. 修改core-site.xml2.2. 修改hdfs-site.xml2.3. 修改mapred-site.xml2.4. 修改yarn-site.xml2.5. 修改hado…...

【Rust光年纪】深入了解Rust语言的关键库:功能特点与使用场景分析
探索Rust语言下的重要库:硬件接口控制和数据库操作全解析 前言 随着Rust语言在嵌入式开发和数据库操作领域的不断发展,越来越多的优秀库和工具涌现出来。本文将介绍一些用于Rust语言的重要库,包括硬件接口库、嵌入式硬件抽象层、ORM和查询构…...

矩估计与最大似然估计的通俗理解
点估计与区间估计 矩估计与最大似然估计都属于点估计,也就是估计出来的结果是一个具体的值。对比区间估计,通过样本得出的估计值是一个范围区间。例如估计馒头店每天卖出的馒头个数,点估计就是最终直接估计每天卖出10个,而区间估…...

性能调优本质:如何精准定位瓶颈并实现系统极致优化
目录 先入为主的反例 性能调优的本质 性能调优实操案例 性能调优相关文章 先入为主的反例 在典型的 ETL 场景中,我们经常需要对数据进行各式各样的转换,有的时候,因为业务需求太复杂,我们往往还需要自定义 UDF(User Defined Functions)来实现特定的转换逻辑。 但是…...

Git的命令
git add . 添加到暂存区 git commit -m 备注 提交 git branch 查看所有分支 git branch -d 分支名 删除分支 git push origin --delete 分支名 远程分支删除 git branch -a 查看删除后的分支 git clone 地址 例如https://gitee.com/whale456/demo.git git push origin m…...

WPF中使用定时器更新元素-DispatcherTimer
在WPF中使用定时器来更新UI元素是一种常见且有用的做法,特别是当你需要基于时间间隔来刷新数据或执行某些操作时。DispatcherTimer是WPF中用于在UI线程上执行周期性任务的理想选择,因为它确保了对UI元素的更新是线程安全的 例子程序 每隔0.5s 界面中的…...

计算机网络 - 理解HTTP与HTTPS协议的关键区别与安全性
作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言! 前言 在今天的互联网…...

【Spring Framework】使用XML配置文件配置Bean的实例化方式
在 Spring Framework 中,实例化 bean 的方式非常灵活,允许开发人员根据需求选择不同的方法。以下是几种常见的实例化 bean 的方式及其示例: 1. 通过无参构造函数实例化 这是最常见的方式,Spring 会使用 bean 的默认无参构造函数…...

模拟电子技术-实验四 二极管电路仿真
实验四 二极管电路仿真 一.实验类型 验证性实验 二.实验目的 1、验证二极管的单向导电性 2、验证二极管的稳压特性。 三.实验原理 二极管的单向导电性: 四、实验内容 1、二极管参数测试仿真实验 1)仪表仿真…...