Linux第53步_移植ST公司的linux内核第5步_系统镜像打包并烧录到EMMC

news2024/11/26 9:34:11

本节主要学习系统镜像打包,然后将打包文件烧录到EMMC测试。

1、创建bootfs文件夹

1)、打开第1个终端

输入“ls回车

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录

输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“mkdir bootfs回车”,创建bootfs”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

2)、将“uImage”和“stm32mp157d-atk.dtb”拷贝到“bootfs”目录中

打开第2个终端

输入“ls回车

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录

输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd my_linux/回车”,切换到“my_linux”目录

输入“ls回车”,列出“my_linux”目录下的文件和文件夹

输入“cd linux-5.4.31/回车”,切换到“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回车”,执行文件拷贝

3)、回到打开的第1个终端

输入“cd bootfs/回车切换到“bootfs”目录

输入“ls回车”,列出“bootfs”目录下的文件和文件夹

输入“ls  -l回车”,列出“bootfs”目录下的文件和文件夹

可知“uImage”和“stm32mp157d-atk.dtb”合计为7.035M字节。

2、新建ext4格式磁盘

回到打开的第1个终端

输入“dd if=/dev/zero of=bootfs.ext4 bs=1M count=10回车

使用“dd命令”创建一个名为“bootfs.ext4”的磁盘;

of”指定磁盘名字为“bootfs.ext4”;

bs”指定磁盘输入/输出块大小为1MB;

count”指定磁盘的块数量为 10个

因此,“bootfs.ext4磁盘”只能存放不超过10MB的文件,如果要存放的文件总大小超过10MB,那么就要适当调整count参数的大小。

输入“mkfs.ext4 -L bootfs bootfs.ext4回车

使用“mkfs.ext4”将“bootfs.ext4磁盘”格式化为“ext4”格式。

输入“ls回车”,列出“bootfs”目录下的文件和文件夹

见下图:

3、在mnt目录下创建bootfs目录,用于挂载bootfs.ext4磁盘

1)、打开第3个终端

输入“cd /mnt回车”,切换到mnt目录

输入“sudo mkdir bootfs回车”,然后输入密码“123456回车”,就创建了“bootfs”目录

输入“ls回车”,列出“mnt”目录下的文件和文件夹

2)、回到打开的第1个终端

输入“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/”目录中;

3)、回到打开的第3个终端

输入“cd bootfs/回车”,切换到“bootfs”目录

输入“ls回车”,列出“bootfs”目录下的文件和文件夹

4)、输入“cd ..回车”,退回到“mnt”目录

输入“sudo umount /mnt/bootfs回车”,使用“umount”卸载掉“bootfs”

5)、回到打开的第1个终端

输入“ls回车”,列出“/linux/atk-mp1/linux/bootfs”目录下的文件和文件夹

至此,“uImage”和“stm32mp157d-atk.dtb”就打包到bootfs.ext4

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

4、烧录到EMMC

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

2)、使用“Notepad++”修改“tf-a.tsv”

修改后,见下图:

3)、保存“tf-a.tsv”

4)、关闭虚拟机,防止开发板连接到虚拟机

5)、将开发板上拨码开关拨到“000”位置

6)、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;

7)、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;

8)、双击“STM32CubeProgrammer”图标

9)、选择上图中的USB,然后点击“Connect”

10)、点击“刷新”,直到出现USB1,表示连接成功。

11)、点击“Open file”,找到

C:\Program Files\STMicroelectronics\images\my-tfa”目录下“tf-a.tsv”打开。

12)、点击“Browse”,打开

“C:\Program Files\STMicroelectronics\images\my-tfa”目录。

13)、点击“选择文件夹”

14)、点击“Download”

15)、点击“确定”

16)、将拨码开关设置为“010”

17)、按下开发板的“复位按钮”,重新启动开发板。

5、在串口查看EMMC是否烧录了“uImage”和“stm32mp157d-atk.dtb”

1)、输入“ext4ls mmc 1:2回车”查看“boot分区”有哪些文件和目录

发现“uImage”和“stm32mp157d-atk.dtb”

2)、通过设置环境变量bootcmd的值,从EMMC启动linux系统

出现“STM32MP>”时,输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从EMMC启动linux系统

出现“STM32MP>”时,输入: saveenv,保存bootcmd的值

出现“STM32MP>”时,输入: boot回车,启动 Linux 系统

3)、烧录EMMC后,重新设置从网络启动linux系统

更新“tftpboot”目录中的“uImage”和“stm32mp157d-atk.dtb”

输入“ls回车

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录

输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd my_linux/回车”,切换到“my_linux”目录

输入“ls回车”,列出“my_linux”目录下的文件和文件夹

输入“cd linux-5.4.31/回车”,切换到“linux-5.4.31”目录

输入“ls回车”,列出“linux-5.4.31”目录下的文件和文件夹

4)、输入“cp arch/arm/boot/uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝;

输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝

出现“STM32MP>”时,输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从网络启动linux系统

出现“STM32MP>”时,输入: saveenv,保存bootcmd的值

出现“STM32MP>”时,输入: boot,启动 Linux 系统

下面还要解决:“VFS: Unable to mount root fs on unknown-block(0,0) ]

提示内核崩溃,VFS(虚拟文件系统)不能挂载根文件系统,因为根文件系统目录不存在。

如果“根文件系统”构建好了,就意味着我们已经拥有一个完整的、可以运行的最小系统,这就是linux系统移植的最后一步。

学习linux很无聊,不是安装,就是修改,不停地移植。还要有用过实时操作系统的应用功底,此外,并是意志坚定。马拉松式的慢跑,肯定有很多人坚持不下来,这就是它很难学的原因吧。

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

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

相关文章

【Linux取经路】文件系统之被打开的文件——文件描述符的引入

文章目录 一、明确基本共识二、C语言文件接口回顾2.1 文件的打开操作2.2 文件的读取写入操作2.3 三个标准输入输出流 三、文件有关的系统调用3.1 open3.1.1 比特位级别的标志位传递方式 3.2 write3.2.1 模拟实现 w 选项3.2.2 模拟实现 a 选项 3.3 read 四、访问文件的本质4.1 再…

leetcode(二分查找)34.在排序数组中查找元素的第一个和最后一个位置(C++详细解释)DAY11

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计…

多线程基础使用

提示:有关线程六大状态, 以及创建线程的五种方法 线程 线程线程状态NEWRUNNABLEBLOCKEDWAITINGTIMED_WAITINGTERMINATED 线程状态转化图线程创建使用方式ps 线程 线程状态 操作系统的线程主要有以下三个状态: 就绪状态(ready):线程正在等待使…

Uipath 实现Excel 文件合并

场景描述 某文件夹下有多个相同结构(标题列相同)的Excel 文件,需实现汇总到一个Excel文件。 常见场景有销售明细汇总,订单汇总等。 解决方案 对于非IT 人员则可使用Uipath 新式Excel活动,通过拖拉实现。也可以通过内存表或使用VB脚本&…

neo4j下载安装最新教程 2024.02

文章目录 neo4j简介neo4j与jdk版本对应neo4j历史版本 下载地址配置环境变量命令行启动验证安装结果 neo4j简介 Neo4j 是一个高性能的 NoSQL 图形数据库,它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j 也可以被看作是一个高…

相机图像质量研究(20)常见问题总结:CMOS期间对成像的影响--全局快门/卷帘快门

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

代码随想录算法训练营第三三天 | K次取反后最大化数组和、加油站、分发糖果

目录 K次取反后最大化的数组和加油站分发糖果 LeetCode 1005. K次取反后最大化的数组和 LeetCode 134. 加油站 LeetCode 135. 分发糖果 K次取反后最大化的数组和 局部最优:让绝对值大的负数变为正数,当前数值达到最大。 整体最优:整个数组和…

机器学习入门--门控循环单元(GRU)原理与实践

GRU模型 随着深度学习领域的快速发展,循环神经网络(RNN)已成为自然语言处理(NLP)等领域中常用的模型之一。但是,在RNN中,如果时间步数较大,会导致梯度消失或爆炸的问题,…

超详细的介绍Python语句

一、 常用命令 在介绍Python语句之前,先介绍一下几个有用的Python命令。 dir(模块名或类名或变量名或表达式名):获得当前模块、变量对应类型、表达式计算值对应类的属性列表 type(变量名或表达式名):获取变量或表达式计算值的对…

[嵌入式系统-14]:常见实时嵌入式操作系统比较:RT-Thread、uC/OS-II和FreeRTOS、Linux

目录 一、实时嵌入式操作系统 1.1 概述 1.2 什么“实时” 1.3 什么是硬实时和软实时 1.4 什么是嵌入式 1.5 什么操作系统 二、常见重量级操作系统 三、常见轻量级嵌入式操作系统 3.1 概述 3.2 FreeRTOS 3.3 uC/OS-II 3.4 RT-Thread 3.5 RT-Thread、uC/OS-II、Free…

第5讲前端静态登录页面实现

前端静态登录页面实现 引入全局样式: main.js导入样式文件: import /assets/styles/border.css import /assets/styles/reset.css加路由: const routes [{path: /login,name: login,component: () > import(../views/Login.vue)} ]App…

pytorch tensor维度变换

目录 1. view/reshape2. squeeze/unsqueeze3. expand 扩展4. repeat5 .t转置6. transpose7. permute 1. view/reshape view(*shape) → Tensor 作用:类似于reshape,将tensor转换为指定的shape,原始的data不改变。返回的tensor与原始的tensor…

LD-802D-X6

LD-802D-X6足浴按摩器,买个给老人家,解决泡脚越泡越冷,调节温度和定式问题, 按摩功能老人体验说太痒,转太快了,哈哈 下面是安装步骤使用说明 其实这包零件就是安装底部4个轮子,4个轮子的中间滚…

单片机学习笔记---LCD1602

LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符(比如日文的片假名),还可以有8个自定义字符 显示容量:…

基于GPT一键完成数据分析全流程的AI Agent: Streamline Analyst

大型语言模型(LLM)的兴起不仅为获取知识和解决问题开辟了新的可能性,而且催生了一些新型智能系统,例如旨在辅助用户完成特定任务的AI Copilot以及旨在自动化和自主执行复杂任务的AI Agent,使得编程、创作等任务变得高效…

gem5 garnet 合成流量: packet注入流程

代码流程 下图就是全部. 剩下文字部分是细节补充,但是内容不变: bash调用python,用python配置好configuration, 一个cpu每个tick运行一次,requestport发出pkt. bash 启动 python文件并配置 ./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py \--num-cpus…

计算机网络——12DNS

DNS DNS的必要性 IP地址标识主机、路由器但IP地址不好记忆,不便于人类用使用(没有意义)人类一般倾向于使用一些有意义的字符串来标识Internet上的设备存在着“字符串”——IP地址的转换的必要性人类用户提供要访问机器的“字符串”名称由DN…

解线性方程组(二)——Jacobi迭代法求解(C++)

迭代法 相比于直接法求解,迭代法使用多次迭代来逐渐逼近解,其精度比不上直接法,但是其速度会比直接法快很多,计算精度可控,特别适用于求解系数矩阵为大型稀疏矩阵的方程组。 Jacobi迭代法 假设有方程组如下&#xf…

【C++】实现Date类的各种运算符重载

上一篇文章只实现了operator操作符重载&#xff0c;由于运算符较多&#xff0c;该篇文章单独实现剩余所有的运算符重载。继续以Date类为例&#xff0c;实现运算符重载&#xff1a; 1.Date.h #pragma once#include <iostream> #include <assert.h>using namespace …

WebSocket | 基于TCP的全双工通信网络协议

文章目录 1、介绍2、示例2.1、分析2.2、代码开发2.3、功能测试 ​&#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步涉猎Python人工智能开…