对emmc进行分区

1.运行的前提是,pc机上sfdisk工具

为什么SD卡在Linux下/dev下的设备名叫mmcblk0p1?

SD/MMC 卡的设备构造差不多,MMC 应该是 SD 的前身,不过 MMC 当时的设计比SD 小一半。
所以,SD/MMC 的驱动通用,进一步的,Linux 的设备节点就延续了 MMC 的这个名字,后面的 blk 是块设备这个英文的简写, mmcblk 也就是“mmc/sd 块设备”,0 就是这个 mmc/sd 设备的顺序编号,p1 就是第一个分区。
 

 目前是分了3个区(EMMC-4G大小,可用空间大约3.9G,本次分区并全部使用)

150M   --mmcblk0p1 ,偏移量为10M开始

2G       --mmcblk0p2,偏移量为200M开始

1G      -- mmcblk0p3,偏移量为2200M开始

打开烧写脚本

#!/bin/sh

# partition size in MB

BOOT_ROM_SIZE=10   MBR数据区,10MB

ROOT_SYSTEM_SIZE=150  //分区磁盘大小

# call sfdisk to create partition table

# destroy the partition table

node=$1

dd if=/dev/zero of=${node} bs=1024 count=1 清除分区表MBR

sfdisk --force -uM ${node} << EOF

${BOOT_ROM_SIZE},${ROOT_SYSTEM_SIZE},83  //此处应该就是mmcblk0p1

,,83 将其他所有空间再分成一个区,,此处应该就是mmcblk0p2了。

EOF

83是Linux分区标识

Uboot和kernel是直接使用dd写入mmcblk0中的,而分区则是使用sfdisk进行的,空出了uboot和kernel的位置,从起始地址10MB开始的。
 

将shell脚本改好之后,进行程序烧写

烧写完成后重新启动linux系统

这就是表示emmc已经分好区了

很感激作者shell文档,在这里借用该作者的shell脚本:

https://blog.youkuaiyun.com/linglongqiongge/article/details/52262660?locationNum=13

https://blog.youkuaiyun.com/shell_albert/article/details/8425530

了解emmc分区原理参考文档:
 https://blog.youkuaiyun.com/u011975319/article/details/51803126/

 

 

<think>好的,我现在需要帮助用户解决如何通过USB获取EMMC固件并备份分区数据的问题。首先,我得回忆一下用户提供的引用内容,看看有哪些相关的信息可以利用。 用户提到的引用[1]提到,如果没有原厂固件但具备USB读取root权限,可以使用界面化工具来备份分区,虽然ADB指令也能完成,但工具更直观。同时,引用[2]指出分区列表选项在未root状态下不可用,所以需要root权限。引用[3]和[4]涉及Uboot模式下使用MMC指令读取分区,而引用[5]解释了Linux下EMMC分区结构,比如mmcblk0pX这样的节点。 首先,用户需要备份EMMC分区数据,这通常需要root权限,因为直接访问块设备节点需要较高的权限。根据引用[1]和[2],如果设备已经root,可以通过ADB或专用工具进行操作。但如果没有root,可能需要进入Uboot模式,通过MMC指令来读取,如引用[3]中的例子。 接下来,我需要考虑具体的步骤。首先,用户需要确认设备是否已获取root权限。如果已root,使用ADB备份会比较方便,比如使用dd命令或者界面工具。如果没root,可能需要通过Uboot模式,这通常需要硬件访问,比如使用串口或者其他方式进入引导加载程序,然后使用fdisk、mmc命令进行分区操作和数据读取,如引用[4]提到的uboot命令。 另外,用户提到通过USB连接,所以可能需要设备开启USB调试模式,并安装ADB驱动。然后通过ADB shell进入设备,执行备份命令。例如,使用dd将分区数据导出到文件,再通过pull命令拉取到电脑。 需要注意的是,操作分区有风险,可能导致设备变砖,所以需要谨慎,并确保每一步都正确。同时,引用[5]中的块设备节点结构可以帮助用户识别需要备份的具体分区,比如boot、system等对应的mmcblk0pX节点。 可能还需要检查设备是否解锁Bootloader,因为有些设备在未解锁的情况下不允许分区操作。此外,备份后的文件可能需要校验,确保完整性。 总结步骤应该是:1. 获取root权限;2. 连接USB并启用调试;3. 使用ADB或工具备份分区;4. 或者进入Uboot模式使用MMC指令。同时,用户需要确认每个分区的对应名称,避免误操作。</think>### 分步指南:通过USB获取EMMC固件并备份分区数据 #### 1. **前提条件** - **Root权限**:备份分区需获取设备的root权限,否则无法访问底层分区(如引用[2]所述)[^2]。 - **USB调试模式**:在设备设置中启用“开发者选项”并打开“USB调试”。 - **ADB工具**:在电脑上安装Android Debug Bridge(ADB)驱动和工具链。 --- #### 2. **连接设备并验证权限** - 通过USB线连接设备与电脑。 - 执行以下命令确认设备已连接: ```bash adb devices ``` - 获取ADB root权限: ```bash adb root ``` --- #### 3. **识别EMMC分区信息** - 进入设备Shell: ```bash adb shell ``` - 查看块设备节点(如引用[5]所述)[^5]: ```bash ls -l /dev/block/mmcblk* ``` - 输出示例: ``` mmcblk0 # 主设备 mmcblk0p1 # 分区1(如boot) mmcblk0p2 # 分区2(如system) ``` --- #### 4. **备份分区数据** - **方法1:使用`dd`命令(需root)** - 备份单个分区(例如`boot`分区`mmcblk0p1`): ```bash adb shell "dd if=/dev/block/mmcblk0p1 of=/sdcard/boot.img" ``` - 将文件拉取到电脑: ```bash adb pull /sdcard/boot.img ``` - **方法2:使用界面化工具(如引用[1]工具)** 下载支持ADB的备份工具(如`Partition Backup & Restore`),通过GUI选择分区并导出[^1]。 - **方法3:Uboot模式(无root时)** 1. 进入Uboot模式(通常需硬件按键组合)[^3]。 2. 使用MMC指令读取分区大小和内容: ```bash mmc read <addr> <blk#> <cnt> # 从指定块读取数据到内存地址 ``` --- #### 5. **验证备份文件** - 检查文件大小是否与分区一致: ```bash ls -l boot.img ``` - 使用二进制工具(如`hexdump`)验证头部信息: ```bash hexdump -n 64 boot.img ``` --- #### 6. **风险提示** - 错误的分区操作可能导致设备变砖(如引用[1]警告)。 - 避免覆盖关键分区(如`rpmb`,引用[5]提及的受保护区域)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值