您尚未登录。

楼主 # 2022-04-15 13:27:26

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

请教,嵌入式linux中emmc和nand是如何分区的?

一开始接触的是荔枝派,是烧录到sd卡里。而sd卡是在pc上分区的。
后来接触了nuc972,是烧录到nand里,是在uboot将分区参数传入到内核里,虽然也不知道是怎么分区的,但好歹看到了分区参数。
现在接触的imx6ul,就完全不知道什么时候分区的,是如何分区的?
手头上的板子,是野火的imx6ul板子,但是我当时按照原子的教程烧录过程序,忘了怎么配置的。现在看到emmc上有3个区,分区0 uboot区,20M大小;分区1 内核和设备树,500M; 剩下是根文件区。

离线

#1 2022-04-15 13:46:56

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,222
积分: 1897
个人网站

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

bootargs或者dts 里面配置好的,

全志的bsp linux自己实现了一个分区解析。





离线

#2 2022-04-15 15:38:50

dfcdfdfc
会员
注册时间: 2021-12-22
已发帖子: 9
积分: 34

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

imx6系列的话,mfgtools先下载到内存中一个小内核,然后这个小内核根据工具内的ucl2.xml文件对存储器分区。

离线

楼主 #3 2022-04-15 16:16:34

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

从imx6ul_mtf里找到了mksdcard.sh:

#!/bin/sh

# partition size in MB
BOOT_ROM_SIZE=10


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

sfdisk --force -uM ${node} << EOF
${BOOT_ROM_SIZE},500,0c
600,,83
EOF

分区是从10M开始,10M-500M是fat分区,600M以后是linux分区。
好奇500M和600M之间是浪费了?

离线

楼主 #4 2022-04-15 16:20:08

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

哇酷小二 说:

bootargs或者dts 里面配置好的,

全志的bsp linux自己实现了一个分区解析。

像bootargs或dts里配置好分区的,那么每次linux启动时,都会再次分区一次nand或emmc吗?

离线

#5 2022-04-15 16:25:29

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,222
积分: 1897
个人网站

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

Gentlepig 说:
哇酷小二 说:

bootargs或者dts 里面配置好的,

全志的bsp linux自己实现了一个分区解析。

像bootargs或dts里配置好分区的,那么每次linux启动时,都会再次分区一次nand或emmc吗?

当然会,只是不会破坏原来的数据而已。





离线

楼主 #6 2022-04-18 10:55:12

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

哇酷小二 说:

bootargs或者dts 里面配置好的,

全志的bsp linux自己实现了一个分区解析。

分区只能在linux或win下用命令来实现吧?但是下载zImage,先要有分区吧?没分区的话,只能下载uboot吧,uboot又没分区功能。

比如imx6ul或nuc97x,貌似都是官方下载工具先下载个系统到设备里。是先下载uboot到设备,然后uboot加载内核及文件系统到内存,然后从内存启动,启动后再进行分区命令将存储设备分区,然后再将内核及文件系统复制到分区好的存储设备里。

那全志又是如何实现的呢?

离线

#7 2022-04-18 11:02:27

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,222
积分: 1897
个人网站

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

@Gentlepig
打包不需要你说的系统,开源的genimage就是干这活的。

参考:

用buildroot自带的genimage把tina dragon的活干完,让dragon无活可干。
https://bbs.aw-ol.com/topic/1022





离线

楼主 #8 2022-04-18 11:06:47

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

还有个问题,uboot,kernel,rootfs,这三个文件的gcc版本可以完全不同吗?
我以前用的gcc7编译过,可以运行。
现在用gcc11编译了uboot和kernel,结果也可以挂载gcc7编译的rootfs。
而且,中间由于错误操作,又用gcc7编译过uboot和kernel,发现貌似混合用都可以运行。

离线

#9 2022-04-18 11:14:21

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,222
积分: 1897
个人网站

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

这三个独立,可以完全不同,但是还是建议用同一个。





离线

楼主 #10 2022-04-18 11:47:00

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

感谢回复。

我原来想舍弃mfgtools这个工具,直接想在PC ubuntu环境下使用uuu命令给imx6ul烧录。现在看来是没法完全舍弃mfgtools。
win下mfgtools是先将uboot,kernel,特殊的rootfs下载到内存上并从内存启动,进入系统后执行分区脚本mksdcard.sh,然后再将需要烧录的uboot,kernel和rootfs烧录到纯出设备里,比如emmc。

我现在在ubuntu下编译得到的uboot、kernel,没法烧录到没有分区的emmc里。可以试用fastboot下载到内存上,但是没有分区,启动不了...

离线

#11 2022-04-18 11:50:17

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,222
积分: 1897
个人网站

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

可以一次性烧录整个emmc的镜像文件吗?





离线

楼主 #12 2022-04-18 12:05:52

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

哇酷小二 说:

可以一次性烧录整个emmc的镜像文件吗?

uuu提供了fastboot功能,是通过fastboot向emmc下载的,但是貌似没有分区功能。

---------------------------------------------------

关于编译器还有个问题,我自己独立编译的程序,需要和kernel还是rootfs的编译器版本保持一致?

-----------------------------------------------

看制作根文件的教程,为何用buildroot一般会指定交叉编译器,而debian或ubuntu却没指定?

最近编辑记录 Gentlepig (2022-04-18 12:10:54)

离线

楼主 #13 2022-04-23 10:03:15

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

网上看到这么一句:

由于NAND FLASH和EMMC的 核心板,Uboot在获取设备数文件的时候不一样(EMMC是按照分区的方式访问,NAND FLASH是按照偏移地址读取数据),

https://www.cnblogs.com/topeet/p/13201977.html

结合看到的其他资料,貌似nand不需要进入linux系统后再给nand分区。而emmc和sd卡才需要先进入Linux后给emmc或sd分区,然后再向其拷贝内核、设备树、 根文件系统。


那么,为什么nand是按偏移地址读取数据,而emmc不能?

最近编辑记录 Gentlepig (2022-04-23 10:18:58)

离线

#14 2022-04-23 10:21:23

ubuntu
会员
注册时间: 2020-03-30
已发帖子: 156
积分: 139

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

@Gentlepig
emmc/tf卡默认是块设备 /dev/mmcblk*,
nand 最终也模拟成了块设备 /dev/mtdblock*

离线

楼主 #15 2022-04-23 10:44:35

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

ubuntu 说:

@Gentlepig
emmc/tf卡默认是块设备 /dev/mmcblk*,
nand 最终也模拟成了块设备 /dev/mtdblock*

无论emmc还是nand,uboot部分都是放在了一个没有格式化的分区里。那么,emmc的kernel分区和rootfs分区为何不能按照偏移地址去读取?

离线

#16 2022-04-23 10:49:56

ubuntu
会员
注册时间: 2020-03-30
已发帖子: 156
积分: 139

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

@Gentlepig
tf卡/emmc的内部固件已经做了写平衡算法,所以软件就当他们是硬盘一样操作了,直接把那些分区信息写到介质的最前面了。

视同硬盘。

离线

楼主 #17 2022-04-23 10:55:58

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 862
积分: 777.5

Re: 请教,嵌入式linux中emmc和nand是如何分区的?

ubuntu 说:

@Gentlepig
tf卡/emmc的内部固件已经做了写平衡算法,所以软件就当他们是硬盘一样操作了,直接把那些分区信息写到介质的最前面了。

视同硬盘。

有一点点理解了,感谢。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn