Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC
1、第1次将“rootfs”打包
1)、打开第1个终端,准备在“mnt”目录下创建挂载目录“rootfs”;
输入“ls回车”
输入“cd /mnt回车”
输入“ls回车”,查看“mnt”目录下的文件和文件夹
输入“sudo mkdir rootfs回车”,在“mnt”目录下新建一个“rootfs”
输入密码“123456回车”
输入“ls回车”,查看“mnt”目录下的文件和文件夹

2)、打开第2个终端,准备在“/linux/rootfs”目录下创建磁盘“rootfs.ext4”
输入“ls回车”
输入“cd linux回车”,切换到“linux”目录
输入“ls回车”,查看“linux”目录下的文件和文件夹
输入“mkdir rootfs回车”,新建“rootfs”目录
输入“ls回车”,查看“linux”目录下的文件和文件夹
输入“cd rootfs回车”,切换到“rootfs”目录
输入“ls回车”,查看“/home/zgq/linux/rootfs”目录下的文件和文件夹
输入“dd if=/dev/zero of=rootfs.ext4 bs=1M count=1024回车”,分配1G空间给“rootfs.ext4”
输入“mkfs.ext4 -L rootfs rootfs.ext4回车”,将“rootfs”格式化
输入“ls -l回车”,查看“rootfs”目录下的文件和文件夹

“rootfs.ext4”有1073741824个字节=1G字节
3)、挂载磁盘
输入“sudo mount rootfs.ext4 /mnt/rootfs/回车”,将“rootfs.ext4”挂载在“/mnt/rootfs/”目录下

4)、回到第1个打开的终端,查看是否挂载成功;
输入“cd rootfs/回车”,切换到“/mnt/rootfs/”
输入“ls回车”,查看“rootfs”目录下的文件和文件夹

5)、准备打包的文件,将“/home/zgq/linux/nfs/rootfs/”目录下的“所有文件和文件夹”拷贝到“/mnt/rootfs/”的目录中
回到第2个打开的终端,输入“cd /home/zgq/linux/nfs/rootfs/回车”,切换到“/home/zgq/linux/nfs/rootfs/”目录
输入“ls回车”,查看“rootfs”目录下的文件和文件夹
输入“sudo cp * /mnt/rootfs/ -drf 回车”,执行拷贝

6)、回到第1个打开的终端,卸载磁盘
输入“ls回车”,查看“rootfs”目录下的文件和文件夹,发现该文件夹有新文件
输入“cd ..回车”,返回到“mnt”目录
输入“ls回车”,查看“mnt”目录下的文件和文件夹
输入“sudo umount rootfs回车”卸载掉“rootfs”
输入密码“123456回车”
输入“ls回车”,查看“mnt”目录下的文件和文件夹
输入“cd rootfs回车”,切换到“rootfs”目录
输入“ls回车”,查看“rootfs”目录下的文件和文件夹,发现该文件夹为空;

7)、回到第2个打开的终端,查看打包好的文件
输入“cd /home/zgq/linux/rootfs回车”,切换到“/home/zgq/linux/rootfs”目录
输入“ls回车”,查看“rootfs”目录下的文件和文件夹

这个rootfs.ext4就是打包好的文件
8)、使用FileZilla将“rootfs.ext4”下载到“windows”中

9)、将“rootfs.ext4”拷贝到“C:\Program Files\STMicroelectronics\images\my-tfa”目录中

2、将“bootfs”重新打包
1)、准备打包文件:
输入“cd /home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31”
输入“cp arch/arm/boot/uImage /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝;
输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝
查看目录下的“uImage”和“stm32mp157d-atk.dtb”有多少字节:
输入“cd /home/zgq/linux/atk-mp1/linux/bootfs/回车”切换到“/home/zgq/linux/atk-mp1/linux/bootfs/”目录
输入“ls -l回车”,列出“bootfs”目录下的文件和文件夹
输入“dd if=/dev/zero of=bootfs.ext4 bs=1M count=10回车”
使用“dd命令”创建一个名为“bootfs.ext4”的磁盘;
“of”指定磁盘名字为“bootfs.ext4”;
“bs”指定磁盘输入/输出块大小为1MB;
“count”指定磁盘的块数量为 10个;
输入“mkfs.ext4 -L bootfs bootfs.ext4回车”
使用“mkfs.ext4”将“bootfs.ext4磁盘”格式化为“ext4”格式。
输入“sudo mount bootfs.ext4 /mnt/bootfs/回车”,
使用“mount命令”将“bootfs.ext4”磁盘挂载到“/mnt/bootfs”目录下;
输入密码“123456回车”
输入“sudo cp uImage stm32mp157d-atk.dtb /mnt/bootfs/回车”
将“uImage”和“stm32mp157d-atk.dtb”拷贝到“/mnt/bootfs/”目录中;
输入“sudo umount /mnt/bootfs回车”,使用“umount”卸载掉“bootfs”
输入“ls -l回车”,列出“bootfs”目录下的文件和文件夹

2)、使用FileZilla将“bootfs.ext4”下载到“windows”中

3)、将“bootfs.ext4”拷贝到“C:\Program Files\STMicroelectronics\images\my-tfa”目录中
3、使用“Notepad++”修改“tf-a.tsv”
1)、修改后,见下图:

2)、保存“tf-a.tsv”,关闭文件。
4、烧录
1)、关闭虚拟机,防止开发板连接到虚拟机
2)、将开发板上拨码开关拨到“000”位置
3)、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;
4)、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;
5)、双击“STM32CubeProgrammer”图标

6)、选择上图中的USB,然后点击“Connect”
7)、点击“刷新”,直到出现USB1,表示连接成功。
8)、点击“Open file”,找到
“C:\Program Files\STMicroelectronics\images\my-tfa”目录下“tf-a.tsv”打开。
9)、点击“Browse”,打开
“C:\Program Files\STMicroelectronics\images\my-tfa”目录。
10)、点击“选择文件夹”

11)、点击“Download”

12)、点击“确定”
13)、将拨码开关设置为“010”
14)、按下开发板的“复位按钮”,重新启动开发板。
5、从EMMC启动测试
1)、在串口查看EMMC是否烧录了“uImage”和“stm32mp157d-atk.dtb”
输入“ext4ls mmc 1:2回车”查看EMMC分区2“内核镜像”有哪些文件和目录

发现“uImage”和“stm32mp157d-atk.dtb”
2)、输入“ext4ls mmc 1:3回车”查看EMMC分区3“根文件系统”有哪些文件和目录

3)、设置“bootcmd和bootargs”这两个环境变量,从EMMC启动linux系统
输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
输入setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p3 rootwait rw'
输入saveenv,保存“bootcmd和bootargs”的值
输入boot,启动 Linux 系统
4)、查看运行结果:
mmcblk0: p1
Waiting for root device /dev/mmcblk1p3...
mmc1: new high speed MMC card at address 0001
mmcblk1: mmc1:0001 8GTF4R 7.28 GiB
mmcblk1boot0: mmc1:0001 8GTF4R partition 1 4.00 MiB
mmcblk1boot1: mmc1:0001 8GTF4R partition 2 4.00 MiB
mmcblk1rpmb: mmc1:0001 8GTF4R partition 3 512 KiB, chardev (242:0)
mmcblk1: p1 p2 p3
EXT4-fs (mmcblk1p3): recovery complete
EXT4-fs (mmcblk1p3): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:19.
devtmpfs: mounted
Freeing unused kernel memory: 1024K
Run /sbin/init as init process
Please press Enter to activate this console.
从MMC启动正确;
6、设置从网络启动
设置“bootcmd和bootargs”这两个环境变量,从网络启动linux系统
输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从网络启动linux系统
输入“setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.2.180:/home/zgq/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.178:192.168.2.180:192.168.2.1:255.255.255.0::eth0:off'
回车”
输入: saveenv,保存bootcmd的值
输入: boot,启动 Linux 系统
7、busybox缺点:
1)、构建的根文件系统不完善。比如基本的 lib 库都是我们自己复制交叉编译器的,需要我们自己做很多其他工作。
2)、busybox本身支持的第三方库,软件很少。比如 tslib 就没有,那么就需要我们自己去下载源码,然后编译,移植。第三方依赖问题严重,很难处理。
3)、busybox,因为太简陋,功能少,不适合做项目开发,只适合于学习。
做项目,不适合使用busybox构建根文件系统。
没办法,还要学习其它构建根文件系统的工具。跟着正点原子,走点弯路,不知道他们为什么这么做。也许有好处,人生哪有那么一帆风顺的!!!
相关文章:
Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC
1、第1次将“rootfs”打包 1)、打开第1个终端,准备在“mnt”目录下创建挂载目录“rootfs”; 输入“ls回车” 输入“cd /mnt回车” 输入“ls回车”,查看“mnt”目录下的文件和文件夹 输入“sudo mkdir rootfs回车”,在“mnt”…...
Linux进程间通信(三)-----System V消息队列
消息队列的概念及原理 消息队列实际上就是在系统当中创建了一个队列,队列当中的每个成员都是一个数据块,这些数据块都由类型和信息两部分构成,两个互相通信的进程通过某种方式看到同一个消息队列,这两个进程向对方发数据时&#x…...
Elasticsearch:混合搜索是 GenAI 应用的未来
在这个竞争激烈的人工智能时代,自动化和数据为王。 从庞大的存储库中有效地自动化搜索和检索信息的过程的能力变得至关重要。 随着技术的进步,信息检索方法也在不断进步,从而导致了各种搜索机制的发展。 随着生成式人工智能模型成为吸引力的中…...
态、势、感、知的偏序、全序与无序
在态势感知中,"态"、"势"、"感"和"知"可以被理解为描述不同层次的概念。而在偏序、全序和无序方面,它们可以有不同的关系,简单地说,偏序关系表示部分的可比较性,全序关系表示…...
【从Python基础到深度学习】 8. VIM两种状态
一、安装 sudo apt install vim 二、VIM两种模式 - 命令状态/编辑状态 1.1 进入/退出VIM 进入VIM vim 退出vim :q <enter> 2.2 根目录下添加配置文件 window下创建vimrc类型文件内容如下: set nu set cursorline set hlsearch set tabstop4 使用Wins…...
java微服务面试篇
目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…...
OpenAI 生成视频模型 Sora 论文翻译
系列文章目录 前言 视频生成模型作为世界模拟器 本技术报告的重点是 (1) 将所有类型的视觉数据转换为统一表示,以便对生成模型进行大规模训练的方法,以及 (2) 对索拉的能力和局限性的定性评估。 该报告不包括模型和实现细节。 许多先前的工作使用各种方…...
2.13日学习打卡----初学RocketMQ(四)
2.13日学习打卡 目录: 2.13日学习打卡一.RocketMQ之Java ClassDefaultMQProducer类DefaultMQPushConsumer类Message类MessageExt类 二.RocketMQ 消费幂消费过程幂等消费速度慢的处理方式 三.RocketMQ 集群服务集群特点单master模式多master模式多master多Slave模式-…...
ZigBee学习——BDB
✨本博客参考了善学坊的教程,并总结了在实现过程中遇到的问题。 善学坊官网 文章目录 一、BDB简介二、BDB Commissioning Modes2.1 Network Steering2.2 Network Formation2.3 Finding and Binding(F & B)2.4 Touchlink 三、BDB Commissi…...
使用Docker快速部署MySQL
部署MySQL 使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123456 \mysql MySQL安装完毕!通过任意客户端工具即可连接到MySQL. 当我们执…...
力扣热题100_滑动窗口_3_无重复字符的最长子串
文章目录 题目链接解题思路解题代码 题目链接 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示…...
RM电控工程讲义
HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) 是一个回调函数,通常在STM32的HAL库中用于处理CAN(Controller Area Network)接收FIFO 0中的消息。当CAN接口在FIFO 0中有待处理的消息时,这个函数会被调用。 HAL库C…...
论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE
目录 人体姿态识别概述 论文框架 HPE分类 人体建模模型 二维单人姿态估计 回归方法 目前发展 优化 基于热图的方法 基于CNN的几个网络 利用身体结构信息提供构建HPE网络 视频序列中的人体姿态估计 2D多人姿态识别 方法 自上而下 自下而上 2D HPE 总结 数据集…...
C语言——oj刷题——杨氏矩阵
目录 1. 理解杨氏矩形的特点 2. 实现杨氏矩形查找算法 3. 编写示例代码 当我们谈到杨氏矩形时,我们指的是一种在二维数组中查找目标元素的高效算法。它是由杨氏(Yan Shi)教授提出的,因此得名为杨氏矩形。 杨氏矩形问题的场景是…...
C++ 50道面试题
1. static关键字 1.全局static变量 存储位置:静态存储区,在程序运行期间一直存在 初始化: 未手动初始化的变量自动初始化为0 作用域: 从定义之处开始,到文件结束,仅能在本文件中使用 2.局部static变量…...
寒假学习记录14:JS字符串
目录 查找字符串中的特定元素 String.indexOf() (返回索引值) 截取字符串的一部分 .substring() (不影响原数组)(不允许负值) 截取字符串的一部分 .slice() (不影响原数…...
【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】
一、题目 (一) 赛题原文 2024 MCM Problem C: Momentum in Tennis In the 2023 Wimbledon Gentlemen’s final, 20-year-old Spanish rising star Carlos Alcaraz defeated 36-year-old Novak Djokovic. The loss was Djokovic’s first at Wimbledon…...
无人驾驶LQR控制算法 c++ 实现
参考博客: (1)LQR的理解与运用 第一期——理解篇 (2)线性二次型调节器(LQR)原理详解 (3)LQR控制基本原理(包括Riccati方程具体推导过程) (4)【基础…...
Karnaugh map (卡诺图)
【Leetcode】 289. Game of Life According to Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” The board is made up of an m x n grid of cells, wh…...
C# CAD 框选pdf输出
在C#中进行AutoCAD二次开发时,实现框选(窗口选择)实体并输出这些实体到PDF文件通常涉及以下步骤: public ObjectIdCollection GetSelectedEntities() {using (var acTrans HostApplicationServices.WorkingDatabase.Transaction…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
