OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7179|回复: 6

ALENTEK 的EMMC是在什么时候分区的

[复制链接]

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2020-12-20 12:58:45 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wang12zhe 于 2020-12-20 13:01 编辑

ALENTEK emmc的板子上讲EMMC 分成不同的几个区,


1. 这是否类似Window的C/D/E/F盘?
2. EMMC的分区是在什么时候进行的 ?

3. 光盘源码有以下几个分区:
   root@ATK-IMX6U:~# ls /dev/mmcblk1
   mmcblk1       mmcblk1boot0  mmcblk1boot1  mmcblk1p1     mmcblk1p2     mmcblk1rpmb
   这几个都是保存的什么东西?

最佳答案

查看完整内容[请看2#楼]

1. 这是否类似Window的C/D/E/F盘? 是。 2. EMMC的分区是在什么时候进行的 ? 使用MFG TOOL烧录固件时,专门有一步骤给eMMC分区。 3. # ls /dev/mmcblk1 mmcblk1 mmcblk1boot0 mmcblk1boot1 mmcblk1p1 mmcblk1p2 mmcblk1rpmb 这几个都是保存的什么东西? mmcblk1 - 设备文件,既表示开发板上的eMMC这颗芯片本身,也表示这颗eMMC的UDA分区。 mmcblk1boot0/mmcblk1boot1 - eMMC芯片 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2020-12-20 12:58:46 | 显示全部楼层
1. 这是否类似Window的C/D/E/F盘?
    是。

2. EMMC的分区是在什么时候进行的 ?
    使用MFG TOOL烧录固件时,专门有一步骤给eMMC分区。

3. # ls /dev/mmcblk1
   mmcblk1       mmcblk1boot0  mmcblk1boot1  mmcblk1p1     mmcblk1p2     mmcblk1rpmb
   这几个都是保存的什么东西?
   mmcblk1 - 设备文件,既表示开发板上的eMMC这颗芯片本身,也表示这颗eMMC的UDA分区。
   mmcblk1boot0/mmcblk1boot1 - eMMC芯片的两个BOOT物理分区,用于存储BOOT镜像(通常为u-boot)
   mmcblk1p1/mmcblk1p2 - eMMC的UDA分区通过软件手动分出来的两个子分区
   mmcblk1rpmb - eMMC的读写保护分区,用于存放安全内容(指纹、支付、密钥等信息),写入的时候需要特殊的机制确保不会被非法写入,读取的时候也提供签名,保证读取出来的内容时安全的。



传统的硬盘、Nand/Nor Flash和普通的SD卡这些存储器件都有一个共同的特点,就是它们的存储空间是只有一个统一编址,从0x00000000一直到存储容量(Nand中间可能有坏块);
而eMMC不同,它在物理上是有多个分区的,最多可以有八个分区(如下图所示),这些分区都是独立编址的,切换访问不同的分区需要写eMMC特定的寄存器。
emmc.png
BOOT分区
在Linux下显示为/dev/mmcblk1boot0、/dev/mmcblk1boot1
boot分区有两个,容量相等,一般都为4MB(有的可以通过配置修改这部分容量);
一般可以把BOOT固件或关键数据放到这里,这部分的存储采用SLC单元,安全很有保障,绝对不会坏;
eMMC的BOOT分区设计来是为了方便芯片启动的,按照eMMC协议,只需要非常简单的时序,就可以把BOOT分区的内容读取出来,这极大地简化了芯片内部的BootROM设计;
两个BOOT分区只有一个可以激活设置为BOOT内容。

RPMB分区
在Linux下显示为/dev/mmcblk1rpmb
这个分区读写提供了签名和校验机制,可以保证数据安全,一般用来存放指纹、支付、交易、密钥等安全信息。

通用硬件分区
在Linux下显示为/dev/mmcblk1gp0、/dev/mmcblk1gp1、/dev/mmcblk1gp2、/dev/mmcblk1gp3
这部分分区在eMMC出厂时是没有的,用户可以自己设定,最多可以有四个通用硬件分区,每个分区容量都可以自由设定。
特别注意:通用硬件分区一旦设定便不可修改,芯片只有一次机会写入分区信息
正点原子的固件没有这几个分区,大多厂商也不用这几个分区。

UDA分区
在Linux下显示为/dev/mmcblk1
UDA分区的容量不可设置,eMMC中去掉前面所有的分区,剩下的容量就是UDA分区容量。
用户可以对UDA分区进一步划分分区,进而得到/dev/mmcblk1p1、/dev/mmcblk1p2等,可以用来存储内核、设备树、rootfs等内容

如下是正点原子的出厂固件烧录脚本(eMMC)节选:
【正点原子】阿尔法Linux开发板(A盘)-基础资料\5、开发工具\4、正点原子MFG_TOOL出厂固件烧录工具\mfgtool\Profiles\Linux\OS Firmware\ucl2.xml
  1. <!-- create partition -->
  2.         <CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
  3.         <CMD state="Updater" type="push" body="$ tar -xf $FILE "> Partitioning...</CMD>
  4.         <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk1"> Partitioning...</CMD>
复制代码
mksdcard.sh:
  1. #!/bin/sh

  2. # partition size in MB
  3. BOOT_ROM_SIZE=10

  4. # wait for the SD/MMC device node ready
  5. while [ ! -e $1 ]
  6. do
  7. sleep 1
  8. echo “wait for $1 appear”
  9. done

  10. # call sfdisk to create partition table
  11. # destroy the partition table
  12. node=$1
  13. dd if=/dev/zero of=${node} bs=1024 count=1

  14. sfdisk --force ${node} << EOF
  15. ${BOOT_ROM_SIZE}M,128M,c
  16. 138M,,83
  17. write
  18. EOF
复制代码
这个脚本将eMMC的UDA分区进一步分成了两个分区:0~10M:保留10M空间作为BOOT ROM使用,空闲没用(u-boot.imx镜像本身已经放到BOOT分区里面了,不在这里,但u-boot环境变量会落在这部分空间内)
10M~138M:容量为128M,在Linux下显示为/dev/mmcblk1p1,后面会格式化为FAT32使用,主要用来存放内核zImage镜像、各种设备树dtb镜像、启动Logo等内容
138M~结束:容量为剩余所有空间(大概好几个G),在Linux下显示为/dev/mmcblk1p2,后面会格式化为ext4分区,作为rootfs使用。



emmcppp.png
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-12-21 01:25:54 | 显示全部楼层
帮顶
回复

使用道具 举报

9

主题

767

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5274
金钱
5274
注册时间
2019-9-25
在线时间
433 小时
发表于 2020-12-21 09:47:58 | 显示全部楼层
1.*boot*是uboot的分区。有两个,一个是启动uboot,一个是备份uboot的分区。
2.mmcblk1这个是emmc的分区
3.p1是emmc的第一个分区
4.p2是emmc的第二个分区

与windows的分区差不多的。分区是在烧写的时候就已经 分好了
想思考的时候,有时还可以用屁股,QQ 1252699831
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-7-11
在线时间
8 小时
发表于 2021-1-23 15:44:47 | 显示全部楼层
专业   谢谢
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2021-1-23 19:36:13 | 显示全部楼层
茂茂2019 发表于 2020-12-21 09:47
1.*boot*是uboot的分区。有两个,一个是启动uboot,一个是备份uboot的分区。
2.mmcblk1这个是emmc的分区
...


1.*boot*是uboot的分区。有两个,一个是启动uboot,一个是备份uboot的分区

"一个是启动uboot,一个是备份uboot的分区" 这两个分区的内容一样吗?备份分区是在什么时候可以激活?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2021-1-25 08:52:54 | 显示全部楼层
wang12zhe 发表于 2021-1-23 19:36
1.*boot*是uboot的分区。有两个,一个是启动uboot,一个是备份uboot的分区

"一个是启动uboot,一个 ...

两个分区是独立的等容量分区(一般为4MiB,且是SLC,非常耐写),所以是可以随意写任何一个分区,当然可以内容不一样的。

BOOT分区同一时刻只能激活一个,在u-boot下是通过mmc partconf命令切换,在Linux下是通过mmc bootpart enable命令实现,具体可搜索一下相关资料
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表