Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC

2024-02-15 17:52

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712104

相关文章

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化: