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

本节主要学习系统镜像打包,然后将打包文件烧录到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.mzph.cn/news/681646.shtml

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

相关文章

Hive的相关概念——架构、数据存储、读写文件机制

目录 一、架构及组件介绍 1.1 Hive整体架构 1.2 Hive组件 1.3 Hive数据模型(Data Model) 1.3.1 Databases 1.3.2 Tables 1.3.3 Partitions 1.3.4 Buckets 二、Hive读写文件机制 2.1 SerDe 作用 2.2 Hive读写文件流程 2.2.1 读取文件的过程 …

线性时间非比较类排序之基数排序

基数排序 基数排序是桶排序的扩展,因此又称“桶子法”,它是通过键值的部分信息,将要排序的元素分配至某些“桶”中,以达到排序的作用。 1. 算法思想 将各元素按位数切割成不同的数字,然后分别根据每个位数的比较结果…

【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 &#x1f680…

C#使用密封类密封用户信息

目录 一、涉及到的知识点 1.密封类定义 2.何时使用密封类 3.使用密封类的注意事项 二、实例1 三、实例2 1.源码 2.生成效果 在C#中,密封类(sealed class)是一种不能被其他类继承的类。它用于防止其他类继承它的功能和属性。 一、涉…

深度解析 Netty 架构与原理

一共 28661字,耐心看完。 在阅读本文前最好有 Java 的 IO 编程经验(知道 Java 的各种 IO 流),以及 Java 网络编程经验(用 ServerSocket 和 Socket 写过 demo),并对 Java NIO 有基本的认识&…

linux---内存管理

一 虚拟内存 即使是现代操作系统中,内存依然是计算机中很宝贵的资源,看看你电脑几个T固态硬盘,再看看内存大小就知道了。 为了充分利用和管理系统内存资源,Linux采用虚拟内存管理技术,利用虚拟内存技术让每个进程都有…

计算机网络——09Web-and-HTTP

Web and HTTP 一些术语 Web页:由一些对象组成对象可以是HTML文件、JPEG图像,JAVA小程序,声音剪辑文件等Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)通过URL对每个对象进行引用…

权限提升:利用Linux错配提权

目录 Linux权限基础 Linux用户权限 Linux文件权限 特殊的Linux文件权限 Linux本机信息收集 Linux错配提权 crontab计划任务提权 SUID提权 Linux权限基础 Linux用户权限 在Linux中,根据权限的不同,大致可以分为三种:超级用户&#x…

npm install 安装依赖如何加速

在使用npm安装依赖时,有几种方法可以加速这一过程,尤其是在面临网络限制或npm官方源速度慢的情况下。以下是一些常用的加速技巧: 1. 使用国内镜像源 国内有几个镜像源可以提供更快的下载速度,例如淘宝npm镜像。你可以通过以下命…

通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)

main.cpp #include "widget.h" #include "second.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();//实例化第二个界面Second s;QObject::connect(&w, &Widget::my_jump, &…

Linux线程库封装

一 MyThread.hpp #pragma once #include<pthread.h> #include<iostream> #include<unistd.h> #include<string> #include<ctime>typedef void (*callback_t)(); static int num 1; //任务和线程绑定 class Thread {static void* Routine(void …

力扣精选算法100道——矩阵区域和 (前缀和专题)

目录 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f388;实现代码 &#x1f388;了解题意 给定一个大小为 m x n 的矩阵 mat 和一个整数 k&#xff0c;你需要计算一个新的矩阵 answer&#xff0c;其中每个 answer[i][j] 表示矩阵 mat 中以坐标 (i, j) 为中心、边…

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称&#xff1a;Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus&#xff0c;这是一个利用新一代可编程交换机…

CSS 评分器星星效果

<template><view class="rating"><!-- 5颗星 --><input value="5" name="rating" id="star5" type="radio"><label for="star5"></label><!-- 4颗星 --><input val…

【后端高频面试题--设计模式下篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--设计模式下篇 后端高频面试题--设计模式上篇设计模式总览模板方法模式怎么理解模…

探索机器学习:定义、算法及应用领域

目录 前言1 机器学习的定义2 机器学习算法2.1 监督学习2.2 无监督学习2.3 强化学习 3 机器学习的应用3.1 智能搜索3.2 医疗诊断3.3 无人驾驶 结语 前言 机器学习&#xff0c;源自Arthur Samuel的定义&#xff0c;赋予计算机通过领域学习的能力&#xff0c;使其在不需要明确程序…

【王道数据结构】【chapter5树与二叉树】【P158t10】

已知二叉树以二叉链表存储&#xff0c;编写算法完成&#xff1a;对于树种每个元素值为x的结点&#xff0c;删除以它为根的子树&#xff0c;并释放相应的空间 #include <iostream> #include <queue> typedef struct treenode{char data;struct treenode *left;struc…

2月7日作业

分别通过select、多进程、多线程实现一个并发服务器 #include <myhd.h> #define IP "192.168.250.100" #define PORT 8888 int deal_cli_msg(int newfd,struct sockaddr_in cin) {char buf[128] "";while(1){bzero(buf,sizeof(buf));int res recv…

使用Word Embedding+Keras进行自然语言处理NLP

目录 介绍&#xff1a; one-hot&#xff1a; pad_sequences: 建模: 介绍&#xff1a; Word Embedding是一种将单词表示为低维稠密向量的技术。它通过学习单词在文本中的上下文关系&#xff0c;将其映射到一个连续的向量空间中。在这个向量空间中&#xff0c;相似的单词在空间…

2024年智能算法优化PID参数,ITAE、ISE、ITSE、IAE四种适应度函数随意切换,附MATLAB代码...

PID 参数整定就是确定比例系数&#xff08;Kp &#xff09;、积分系数&#xff08;Ki&#xff09;和微分系数&#xff08;Kd &#xff09;的过程&#xff0c;以便使 PID 控制器能够在系统中实现稳定、快速、准确的响应。 本期的主题 采用四种2024年的智能优化算法优化PID的三个…