Linux系统移植——开发板烧写

news2024/9/20 6:55:39

目录:

目录:

一、什么是EMMC分区? 

1.1 eMMC分区

1.2 分区的管理

二、相关命令介绍:

2.1 mmc

2.1.1 主要功能

2.1.2 示例用法

2.2 fdisk

2.2.1 基本功能

2.2.2 交互模式常用命令

2.2.3 注意事项

三、U-BOOT烧写

3.1 mmc命令

3.2 fdisk

3.3 cp 命令

3.4 tftp 命令

3.5 update 命令

3.6 bootm命令

3.7 bootcmd命令

四、 根文件系统烧写

4.1 cp命令:

4.2 tftp命令:

4.3 mmc命令:

4.4 setenv命令:

4.5 saveenv命令


一、什么是EMMC分区? 

eMMC(Embedded MultiMediaCard)是一种嵌入式存储解决方案,通常用于移动设备、平板电脑和一些嵌入式系统中。eMMC将存储控制器和闪存存储器集成在一起,提供一种高效且成本较低的存储方式。

1.1 eMMC分区

eMMC分区 是指在eMMC存储设备上划分出的多个逻辑存储区域。这些分区可以用于不同的目的,例如:

1. 操作系统分区:存储操作系统文件和相关数据,通常是设备正常运行所必需的。

2. 数据分区:用于存储用户数据,例如应用程序、媒体文件(音乐、视频、照片)等。

3. 恢复分区:提供设备恢复功能,通常包含恢复工具和系统映像,以便在系统崩溃时进行恢复。

4. 引导分区:存储引导程序或引导加载程序,用于启动设备。

1.2 分区的管理

1. 分区表:eMMC设备通常使用分区表来管理这些分区。分区表包含有关每个分区的信息,如起始地址、大小和类型。

2. 文件系:每个分区通常会格式化为特定的文件系统(如FAT32、ext4等),以便于存储和管理文件。

eMMC分区是eMMC存储设备上的逻辑划分,允许不同类型的数据和应用在同一物理存储设备上有序管理。它提供了一种高效、集成且经济的存储方案,适用于多种设备和应用。

二、相关命令介绍:

2.1 mmc

mmc 命令是一个用于在 Linux 系统中与 MultiMediaCard(MMC)和 eMMC 存储设备进行交互的命令行工具。它通常在 U-Boot 启动加载程序或 Linux 内核的命令行界面中使用。

2.1.1 主要功能

1. 设备初始化:mmc init: 初始化指定的 MMC/eMMC 设备,以便可以进行后续的读写操作。

2. 读取数据:mmc read <addr> <blk#> <cnt>: 从指定的块号开始,读取一定数量的块到内存中的指定地址。

3. 写入数据:mmc write <addr> <blk#> <cnt>: 从内存中的指定地址开始,将一定数量的块写入到指定的块号。

4. 擦除数据:mmc erase <start_blk> <blk_cnt>: 擦除从指定起始块开始的指定数量的块。通常用于清除存储空间。

5. 获取设备信息:mmc info: 显示当前 MMC/eMMC 设备的详细信息,如型号、容量、版本等。

6. 分区管理:mmc part: 显示当前 MMC/eMMC 设备的分区信息。

7. 设置和获取参数:一些命令可以设置或获取 MMC/eMMC 的特定参数,如总线宽度、时钟频率等。

2.1.2 示例用法

初始化设备:

mmc init

读取数据:

mmc read 0x80000000 0 100


  这条命令将从 eMMC 的第 0 块开始读取 100 个块的数据到地址 0x80000000。

写入数据:

mmc write 0x80000000 0 100

将内存中地址 `0x80000000` 的数据写入 eMMC 的第 0 块开始的 100 个块。

擦除数据:

mmc erase 0 100

擦除从第 0 块开始的 100 个块的数据。

获取设备信息:

mmc info

通过这些功能,mmc 命令使用户能够方便地管理和操作 MMC/eMMC 存储设备。

2.2 fdisk

fdisk是一个用于管理磁盘分区的命令行工具,常用于Linux和其他类Unix操作系统。它提供了一套功能来创建、删除、修改和查看磁盘分区。以下是fdisk的一些基本功能和用法:

2.2.1 基本功能

1. 列出分区:

fdisk -l:列出系统中所有磁盘及其分区信息。

fdisk -l /dev/sdX:列出特定磁盘(例如/dev/sda)的分区信息。

2. 管理分区:

fdisk /dev/sdX:打开特定磁盘设备,进入交互式命令模式。

2.2.2 交互模式常用命令

  • n:新建分区。根据提示,可以选择创建主分区或扩展分区。
  • d:删除分区。选择要删除的分区编号。
  • p:打印当前分区表。
  • t:更改分区类型。可以为分区指定不同的文件系统类型编号。
  • w:写入更改并退出。保存对分区表所做的修改。
  • q:退出而不保存。放弃对分区表的修改。

2.2.3 注意事项

  • 备份数据:在对磁盘进行任何修改之前,确保备份重要数据,因为错误的操作可能会导致数据丢失。
  • 权限:需要root权限才能对磁盘进行分区修改。
  • 刷新分区表:有些操作系统需要重新启动才能识别新的分区表,或使用partprobe命令刷新分区表。

fdisk适用于MBR(Master Boot Record)分区表。如果使用GPT(GUID Partition Table),建议使用gdiskparted工具。

三、U-BOOT烧写

3.1 mmc命令

mmc erase 0 1000000 
  • 功能: 对 eMMC 存储设备进行擦除操作。
  • 解释: mmc:指的是 MultiMediaCard(MMC),它是一个用于访问 eMMC 存储的命令。erase此命令的操作是擦除指定的存储区域。0表示擦除操作的起始块地址。在 eMMC 存储中,块地址从 0 开始。1000000表示要擦除的块数。这里的 1000000 是以块为单位的数量。

3.2 fdisk

fdisk 2 3 0x100000:0x4000000 0x4100000:0x2f200000 0x33300000:0
  • 功能:用于管理磁盘分区。它允许用户创建、删除、调整和查看磁盘分区的信息。
  • fdisk:调用命令。

  • 2:这可能表示设备的编号或 ID,例如 /dev/sdb

  • 3:可能是表示操作的标识,或者是指定操作的分区编号。

  • 0x100000:0x4000000:第一个分区的起始地址和结束地址。

    • 0x100000 是起始地址(以字节为单位)。
    • 0x4000000 是结束地址(以字节为单位)。
  • 0x4100000:0x2f200000:第二个分区的起始和结束地址。

  • 0x33300000:0:第三个分区的起始地址,可能结束地址为 0 表示持续到磁盘末尾。

3.3 cp 命令

cp /mnt/hgfs/porting/env/ubootpak.bin /tftpboot/
  • 功能: 复制文件。
  • 解释: 这条命令将 ubootpak.bin 文件从 /mnt/hgfs/porting/env/ 目录复制到 /tftpboot/ 目录。确保你有足够的权限来访问和复制这些路径中的文件。

3.4 tftp 命令

tftp 0x48000000 ubootpak.bin
  • 功能: 使用 TFTP(Trivial File Transfer Protocol)传输文件。
  • 解释: 这条命令从 TFTP 服务器下载 ubootpak.bin 文件到设备内存的 0x48000000 地址。确保你的设备已配置好 TFTP 客户端和服务器,并且连接正常。

3.5 update 命令

update mmc 2 2ndboot 48000000
  • 功能: 更新闪存或存储设备上的某个部分(通常是引导加载程序或固件)。
  • 解释: 这条命令将内存地址 0x48000000 处的数据写入到 MMC 设备(多媒体卡)的特定部分。参数表明你可能在更新第二阶段的引导加载程序(2ndboot)。命令的正确性和具体功能依赖于特定的嵌入式平台和更新工具。

3.6 bootm命令

bootm 48000000
  • 功能: 是 U-Boot 中的一个命令,用于从内存中引导一个内核映像。
  • 解释:U-Boot 将会从内存地址 0x48000000 处加载内核映像,并尝试启动它。如果内核映像在这个地址上有效并且格式正确,U-Boot 会执行内核,开始 Linux 系统的启动过程。

3.7 bootcmd命令

setenv bootcmd mmc read 48000000 800 3000 \bootm 48000000

设置 bootcmd 环境变量,设置u-boot自动执行动作,使得在启动时会执行以下操作:

从 MMC 存储读取数据到内存地址 0x48000000

读取的起始位置是 MMC 中的第 800 个块,读取 3000 个块的数据。

然后使用 bootm 命令从这个地址启动内核。

setenv bootcmd:setenv 是设置环境变量的命令。

bootcmd 是要设置的环境变量的名称。这个变量通常包含启动时要执行的命令。

"mmc read 48000000 800 3000; bootm 48000000":这部分是设置给 bootcmd 的命令。

        mmc read 48000000 800 3000:这个命令从 MMC(多媒体卡)存储设备中读取数据。

                48000000 是数据将被读取到的内存地址。

                800 是 MMC 中的数据块的起始偏移(以块为单位)。

                3000 是要读取的块数(在这个例子中,读取 3000 个块)。

        ;:分号用于分隔多个命令,使得在一个命令执行完成后可以立即执行下一个命令。

        bootm 48000000:从内存地址 0x48000000 启动内核映像。

四、 根文件系统烧写

4.1 cp命令:

cp /mnt/hgfs/porting/env/rootfs_ext4.img /tftpboot/

1. cp:复制文件或目录的命令。

2. /mnt/hgfs/porting/env/rootfs_ext4.img:这是源文件的路径。该文件是 rootfs_ext4.img,通常是一个包含 Linux 根文件系统的镜像文件。

3. /tftpboot/:这是目标目录。在这里,文件将被复制到 TFTP(Trivial File Transfer Protocol)服务器的根目录。TFTP 服务器通常用于网络引导(PXE)和文件传输。 

4.2 tftp命令:

tftp 48000000 rootfs_ext4.img

1. tftp:这是 U-Boot 中用于下载文件的命令,使用 TFTP 协议。

2. 48000000:这是内存地址,表示将下载的文件(即 rootfs_ext4.img)存放在内存中的地址。具体来说,文件数据将被写入 0x48000000 这个内存位置。

3. rootfs_ext4.img:这是要下载的文件名,通常是一个包含 Linux 根文件系统的映像文件。

4.3 mmc命令:

mmc write 48000000 0x20800 0x32000

1. mmc write:这是 U-Boot 中的命令,用于将数据从内存写入 MMC 存储设备。

2. 48000000:这是数据要从中读取的内存地址。在这里,数据将从这个地址写入到 MMC 存储。

3. 0x20800:这是在 MMC 存储设备中写入数据的起始块的偏移(以块为单位)。0x20800 是十六进制值,表示写入位置。

4. 0x32000:这是要写入的块数。这里表示将从内存中写入 0x32000 个块的数据到指定的MMC地址。

4.4 setenv命令:

setenv bootargs "root=/dev/mmcblk0p2 rootfstype=ext4 console=ttySAC0 maxcpus=1 lcd=wy070ml tp=gslx680-linux

1. setenv:这是用于设置环境变量的命令。

2. bootargs:这是要设置的环境变量名称,通常用于定义内核启动时的参数。

3. 各个参数的解释:

       (1)root=/dev/mmcblk0p2:指定根文件系统所在的设备。在这里,根文件系统位于 MMC 设备的第一个分区(mmcblk0)的第二个逻辑分区(p2)。

       (2)rootfstype=ext4:指定根文件系统的类型,这里是 ext4,表示使用 ext4 文件系统格式。

       (3)console=ttySAC0:指定用于控制台输出的串口设备,这里是 ttySAC0,通常是嵌入式系统的一个串口。

       (4)maxcpus=1:表示仅启动一个 CPU 核心。这在某些情况下可以用于降低功耗或调试。

       (5)lcd=wy070ml:这是用于指定 LCD 显示器类型的参数,具体含义取决于系统配置。

       (6)tp=gslx680-linux:这是关于触摸屏(TP)驱动或配置的参数,指明使用 gslx680 触摸屏控制器的 Linux 驱动。 

4.5 saveenv命令

saveenv

通过执行 saveenv 命令,可以将当前的环境变量设置保存到闪存中。这意味着在系统下次启动时,这些变量将保留其值,而不会丢失。

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

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

相关文章

24小时监控识别潜在的非安全生产隐患的明厨亮灶开源了。

明厨亮灶视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。AI技术可以24小时…

【JS】旋涡数组

前言 实现如下图的旋涡数组&#xff0c;简单理解为遇到拐点自动拐弯&#xff0c;否则一直沿当前方向推进。 封装一个函数接收两个参数分别为行数以及列数&#xff0c;实现该旋涡数组。 思路 二维数组&#xff0c;初始填充0分别记录水平和垂直方向的坐标&#xff0c;并根据步…

学习记录702@计算机组成原理之计算机硬件组成细化

运算器 ACC是累加器ALU是逻辑和算数运算单元MQ是乘商寄存器 X是操作数寄存器各部分存储的值 控制器 PC是程序计数器&#xff0c;用来存放下一条应该执行程序的地址&#xff0c;与MAR地址寄存器相连&#xff0c;找到下一个要执行的程序的地址。IR指令寄存器&#xff0c;用来…

怎么利用XML发送视频彩信

传统的短信推广主要以文字为主&#xff0c;用户接收到的信息往往显得单调乏味。而视频彩信则不同&#xff0c;它结合了视频和音频的优势&#xff0c;通过生动的画面和悦耳的音乐&#xff0c;给用户带来强烈的视听冲击&#xff0c;从而极大地提高了用户的吸引力。 XML成功返回示…

某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏洞复现 [附POC]

文章目录 某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏…

聚鼎科技:现在开一家装饰画店铺究竟受欢迎吗

在这个时代&#xff0c;装饰画不仅仅是墙上的一抹色彩&#xff0c;它已经成为人们情感寄托、审美追求的象征。那么&#xff0c;现在开一家装饰画店铺究竟受欢迎吗? “家&#xff0c;是一幅画。”这句话道出了现代人对于家的期待与向往。在这个快节奏的时代&#xff0c;人们渴望…

8.13 哈希表中等 128 Longest Consecutive Sequence 138 Copy List with Random Pointer

128 Longest Consecutive Sequence class Solution { public:int longestConsecutive(vector<int>& nums) {//无序array整数数组&#xff0c;返回最长的连续的序列长度&#xff0c;首先这些数不按顺序//时间复杂度O(n)//使用哈希表&#xff0c;先存后遍历---->no …

web页面的性能测试

背景 测试大模型主要web页面的性能 使用工具 通过google自带的lighthouse测试页面的性能 各个参考指标 First Contentful Paint(FCP):测量在用户导航到页面后浏览器呈现第一段 DOM 内容所花费的时间。页面上的图像、非白色<canvas>元素和 SVG 被视为 DOM 内容&#…

C++STL之string类:基本使用及模拟实现

目录 一&#xff0c;前言 为什么要学习string类 C语言中的字符串 C中的字符串 STL(Standard Template Library) 里面的 string 类 二&#xff0c;string类的基本使用 文档的阅读 常见接口的基本使用 1&#xff0c;构造函数(constructor) 2&#xff0c;拷贝构造(copy …

程序员喜欢的7个免费公共API

本文将介绍七个程序员们喜爱的免费公共API&#xff0c;它们覆盖了从天气信息、翻译到数据分析、游戏等多个领域。这些API不仅易于使用&#xff0c;而且功能全面&#xff0c;能够帮助开发者快速实现项目需求&#xff0c;无论是个人学习、小项目开发还是商业应用&#xff0c;都能…

诸葛io孔淼:聚焦区域性银行,新一代自主可控的埋点分析平台

近日&#xff0c;由金科创新社主办的2024金融科技创新发展论坛顺利召开&#xff0c;诸葛智能创始人孔淼受邀出席并发表演讲&#xff0c;他表示&#xff0c;区域性银行需要构建新一代的数智化营销体系&#xff0c;驱动营销效率与经营效能增长。 孔淼指出&#xff0c;中小银行应…

Flink UDF注意幂等性,防止重复调用时出问题

编写Flink UDF 要注意幂等性&#xff0c;尤其不能直接修改入参&#xff01;理论上是一条数据只会执行一次UDF&#xff0c;但是实际执行过程中可能会对一条数据执行多次UDF&#xff0c;引起意想不到的问题。 例如有如下SQL&#xff1a; CREATE VIEW tmp_view AS SELECT a.…

Processing圆圈随鼠标运动

一.案例代码如下&#xff1a; import processing.pdf.*; import java.util.Calendar; boolean savePDF false; float tileCount 20; color circleColor color(0); int circleAlpha 180; int actRandomSeed 0; void setup(){ size(600,600); } void draw(){ if(savePD…

Python(TensorFlow)衍射光学层卷积算法模拟(英伟达GPU)

&#x1f3af;要点 &#x1f3af;衍射光学卷积算法模拟 | &#x1f3af;模拟或数字电子计算之前加入一层光学计算 | &#x1f3af;前馈卷积神经网络计算成像系统对输入图像进行分类 | &#x1f3af;相位掩模利用线性空间不变成像系统执行固有卷积 &#x1f4dc;用例 Python非…

【Unity/网络】Unity和内网穿透的网络测试 —— 以聊天室为例

这两天在做那个CodeMonky的胡闹厨房的案例&#xff0c;一直困扰我的是关于Lobby和Relay的相关网络服务&#xff0c;需要挂加速器并且延迟不低&#xff0c;所以我一直在寻找一些其他替代方案&#xff0c;想起来之前做一个UEC的网络枪战时做过一个内网穿透的方法&#xff0c;所以…

图论------Bellman-Ford算法求单源最短路径的优化

目录 前情回顾&#xff1a; 画图分析&#xff1a; 具体代码&#xff1a; 前情回顾&#xff1a; 大家是否还记得我们之前讲过的Bellman-Ford算法&#xff0c;如果忘记的话可以点击链接去复习一下&#xff1a;图论------贝尔曼-福德&#xff08;Bellman-Ford&#xff09;算法-…

C# NX二次开发-曲线延长和缩短

图示&#xff1a;延长曲线 代码&#xff1a;正值延长负值缩短 var cl workPart.Features.CreateCurvelengthBuilder(null);cl.CurvelengthData.ExtensionMethod NXOpen.GeometricUtilities.ExtensionMethod.Incremental;cl.CurvelengthData.ExtensionSide NXOpen.GeometricU…

C++ 内存布局 - Part1: typeid, typeinfo及单继承

1. typeinfo定义 typeinfo中存储的是关于类型的信息&#xff0c;可以通过typeid操作符获取&#xff0c;对于没有虚函数的场景&#xff0c;typeid返回的是编译器静态类型信息&#xff0c;对于一个基类类型指针&#xff0c;哪怕其真实指向是个派生类&#xff0c;如果没有虚函数&…

求解答matlab,具体问题如下:

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

数据埋点系列 6|数据驱动决策的实际应用:从理论到实践

在前面的系列文章中&#xff0c;我们深入探讨了数据驱动决策的各个方面。现在&#xff0c;是时候将这些知识付诸实践了。本文将通过一个虚构但贴近现实的案例&#xff0c;展示如何在一个组织中实施数据驱动决策&#xff0c;同时我们将讨论在这个过程中可能遇到的挑战和解决方案…