一开始接触的是荔枝派,是烧录到sd卡里。而sd卡是在pc上分区的。
后来接触了nuc972,是烧录到nand里,是在uboot将分区参数传入到内核里,虽然也不知道是怎么分区的,但好歹看到了分区参数。
现在接触的imx6ul,就完全不知道什么时候分区的,是如何分区的?
手头上的板子,是野火的imx6ul板子,但是我当时按照原子的教程烧录过程序,忘了怎么配置的。现在看到emmc上有3个区,分区0 uboot区,20M大小;分区1 内核和设备树,500M; 剩下是根文件区。
离线
从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之间是浪费了?
离线
bootargs或者dts 里面配置好的,
全志的bsp linux自己实现了一个分区解析。
像bootargs或dts里配置好分区的,那么每次linux启动时,都会再次分区一次nand或emmc吗?
离线
bootargs或者dts 里面配置好的,
全志的bsp linux自己实现了一个分区解析。
分区只能在linux或win下用命令来实现吧?但是下载zImage,先要有分区吧?没分区的话,只能下载uboot吧,uboot又没分区功能。
比如imx6ul或nuc97x,貌似都是官方下载工具先下载个系统到设备里。是先下载uboot到设备,然后uboot加载内核及文件系统到内存,然后从内存启动,启动后再进行分区命令将存储设备分区,然后再将内核及文件系统复制到分区好的存储设备里。
那全志又是如何实现的呢?
离线
还有个问题,uboot,kernel,rootfs,这三个文件的gcc版本可以完全不同吗?
我以前用的gcc7编译过,可以运行。
现在用gcc11编译了uboot和kernel,结果也可以挂载gcc7编译的rootfs。
而且,中间由于错误操作,又用gcc7编译过uboot和kernel,发现貌似混合用都可以运行。
离线
感谢回复。
我原来想舍弃mfgtools这个工具,直接想在PC ubuntu环境下使用uuu命令给imx6ul烧录。现在看来是没法完全舍弃mfgtools。
win下mfgtools是先将uboot,kernel,特殊的rootfs下载到内存上并从内存启动,进入系统后执行分区脚本mksdcard.sh,然后再将需要烧录的uboot,kernel和rootfs烧录到纯出设备里,比如emmc。
我现在在ubuntu下编译得到的uboot、kernel,没法烧录到没有分区的emmc里。可以试用fastboot下载到内存上,但是没有分区,启动不了...
离线
可以一次性烧录整个emmc的镜像文件吗?
uuu提供了fastboot功能,是通过fastboot向emmc下载的,但是貌似没有分区功能。
---------------------------------------------------
关于编译器还有个问题,我自己独立编译的程序,需要和kernel还是rootfs的编译器版本保持一致?
-----------------------------------------------
看制作根文件的教程,为何用buildroot一般会指定交叉编译器,而debian或ubuntu却没指定?
最近编辑记录 Gentlepig (2022-04-18 12:10:54)
离线
网上看到这么一句:
由于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)
离线
@Gentlepig
emmc/tf卡默认是块设备 /dev/mmcblk*,
nand 最终也模拟成了块设备 /dev/mtdblock*
无论emmc还是nand,uboot部分都是放在了一个没有格式化的分区里。那么,emmc的kernel分区和rootfs分区为何不能按照偏移地址去读取?
离线
@Gentlepig
tf卡/emmc的内部固件已经做了写平衡算法,所以软件就当他们是硬盘一样操作了,直接把那些分区信息写到介质的最前面了。视同硬盘。
有一点点理解了,感谢。
离线