目录:
[1.1 eMMC分区](#1.1 eMMC分区)
[1.2 分区的管理](#1.2 分区的管理)
[2.1 mmc](#2.1 mmc)
[2.1.1 主要功能](#2.1.1 主要功能)
[2.1.2 示例用法](#2.1.2 示例用法)
[2.2 fdisk](#2.2 fdisk)
[2.2.1 基本功能](#2.2.1 基本功能)
[2.2.2 交互模式常用命令](#2.2.2 交互模式常用命令)
[2.2.3 注意事项](#2.2.3 注意事项)
[3.1 mmc命令](#3.1 mmc命令)
[3.2 fdisk](#3.2 fdisk)
[3.3 cp 命令](#3.3 cp 命令)
[3.4 tftp 命令](#3.4 tftp 命令)
[3.5 update 命令](#3.5 update 命令)
[3.6 bootm命令](#3.6 bootm命令)
[3.7 bootcmd命令](#3.7 bootcmd命令)
[四、 根文件系统烧写](#四、 根文件系统烧写)
[4.1 cp命令:](#4.1 cp命令:)
[4.2 tftp命令:](#4.2 tftp命令:)
[4.3 mmc命令:](#4.3 mmc命令:)
[4.4 setenv命令:](#4.4 setenv命令:)
[4.5 saveenv命令](#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 示例用法
初始化设备:
bash
mmc init
读取数据:
bash
mmc read 0x80000000 0 100
这条命令将从 eMMC 的第 0 块开始读取 100 个块的数据到地址 0x80000000。
写入数据:
bash
mmc write 0x80000000 0 100
将内存中地址 `0x80000000` 的数据写入 eMMC 的第 0 块开始的 100 个块。
擦除数据:
bash
mmc erase 0 100
擦除从第 0 块开始的 100 个块的数据。
获取设备信息:
bash
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),建议使用gdisk
或parted
工具。
三、U-BOOT烧写
3.1 mmc命令
cpp
mmc erase 0 1000000
- 功能: 对 eMMC 存储设备进行擦除操作。
- 解释: mmc:指的是 MultiMediaCard(MMC),它是一个用于访问 eMMC 存储的命令。erase 此命令的操作是擦除指定的存储区域。0 表示擦除操作的起始块地址。在 eMMC 存储中,块地址从 0 开始。1000000 表示要擦除的块数。这里的
1000000
是以块为单位的数量。
3.2 fdisk
cpp
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
命令
bash
cp /mnt/hgfs/porting/env/ubootpak.bin /tftpboot/
- 功能: 复制文件。
- 解释 : 这条命令将
ubootpak.bin
文件从/mnt/hgfs/porting/env/
目录复制到/tftpboot/
目录。确保你有足够的权限来访问和复制这些路径中的文件。
3.4 tftp
命令
bash
tftp 0x48000000 ubootpak.bin
- 功能: 使用 TFTP(Trivial File Transfer Protocol)传输文件。
- 解释 : 这条命令从 TFTP 服务器下载
ubootpak.bin
文件到设备内存的0x48000000
地址。确保你的设备已配置好 TFTP 客户端和服务器,并且连接正常。
3.5 update
命令
bash
update mmc 2 2ndboot 48000000
- 功能: 更新闪存或存储设备上的某个部分(通常是引导加载程序或固件)。
- 解释 : 这条命令将内存地址
0x48000000
处的数据写入到 MMC 设备(多媒体卡)的特定部分。参数表明你可能在更新第二阶段的引导加载程序(2ndboot)。命令的正确性和具体功能依赖于特定的嵌入式平台和更新工具。
3.6 bootm命令
bash
bootm 48000000
- 功能: 是 U-Boot 中的一个命令,用于从内存中引导一个内核映像。
- 解释 :U-Boot 将会从内存地址
0x48000000
处加载内核映像,并尝试启动它。如果内核映像在这个地址上有效并且格式正确,U-Boot 会执行内核,开始 Linux 系统的启动过程。
3.7 bootcmd命令
bash
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命令:
bash
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命令:
bash
tftp 48000000 rootfs_ext4.img
1. tftp: 这是 U-Boot 中用于下载文件的命令,使用 TFTP 协议。
2. 48000000: 这是内存地址,表示将下载的文件(即 rootfs_ext4.img)存放在内存中的地址。具体来说,文件数据将被写入 0x48000000 这个内存位置。
**3. rootfs_ext4.img:**这是要下载的文件名,通常是一个包含 Linux 根文件系统的映像文件。
4.3 mmc命令:
bash
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命令:
bash
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命令
bash
saveenv
通过执行 saveenv
命令,可以将当前的环境变量设置保存到闪存中。这意味着在系统下次启动时,这些变量将保留其值,而不会丢失。