Toybrick

标题: RK3399Pro入门教程(2)RK3399Pro分区表和固件组成 [打印本页]

作者: jefferyzhang    时间: 2019-2-14 13:18
标题: RK3399Pro入门教程(2)RK3399Pro分区表和固件组成
[attach]109[/attach]

很多同学对3399Pro的启动方式和分区表开始感兴趣了,想着如何自己修改烧写固件,如何修改分区表,
今天就教大家识别下分区表文件parameter.txt以及固件的启动方式

1. 分区表


首先大家拿到的开发版默认是双系统启动的,里头包含了Android和Linux固件,我们先打开他的分区表来识别下。
请直接看CMDLINE这行信息:

CMDLINE:mtdparts=rk29xxnand:
0x00002000@0x00002000(uboot),
0x00002000@0x00004000(trust),
0x00002000@0x00006000(misc),
0x00010000@0x00008000(boot),
0x00020000@0x00018000(recovery),
0x00038000@0x00038000(backup),
0x00002000@0x00070000(security),
0x00100000@0x00072000(cache),
0x00500000@0x00172000(system),
0x00008000@0x00672000(metadata),
0x00100000@0x0067a000(vendor),
0x00100000@0x0077a000(oem),
0x00000400@0x0087a000(frp),
0x00375c00@0x0087a400(userdata),
0x00010000@0x00bf0000(boot_linux:bootable),
-@0x00c00000(rootfs:grow)

他所描述的就是整个emmc中分区的排布方式,烧写工具和启动程序会按照该表进行烧录和引导。他的格式是:

             分区大小 @ 所在地址 (分区名)

其中大小和地址都是以为单位(1块=512byte),换算成MByte可以用以下公式:

              MByte = N * 512 / 1024 / 1024

例如我们看uboot这行,
他的分区大小是0x2000, 也就是 8192块 * 512字节每块 / 1024 / 1024 = 4MByte ,所以uboot分区大小就是4M,而他所在的位置也是在emmc 4M的位置。

接下去trust分区紧跟uboot分区,所以他所在的地址就是 uboot的地址+uboot大小 = 0x2000+0x2000 = 0x4000
而最后一个分区可以看到他的分区大小是个减号"-",意思就是emmc剩下的所有大小全部给他。非常方便吧。一般我们会把user分区放在最后一个分区给用户自由使用。

注:EMMC前4M的空间是保留空间,他是用来存放BootLoader和Parameter的,所以请勿挂念。


2. 启动顺序

开机时候,3399Pro总是会从emmc的0地址读取BootLoader,也就是发布固件里的(MiniLoaderAll.bin),
然后:
Loader 引导 trust和uboot,
uboot 引导 boot             (安卓的kernel resource 和boot打包在一个固件里了)
            或 boot_linux     (linux的kernel resource)

boot 挂载 system(Android系统)、metadata、vendor、oem(都是安卓8.1后新加的安卓分区)
boot_linux 挂载 rootfs (Linux系统)

从而进入了各自的系统里。

这里还有个Misc分区没说到,Misc只是一个附加启动命令,如果被烧写,loader(或者uboot)就会读取他的内容并执行(主要是用来进入安卓的recovery模式,还有RK的厂测模式),成功执行完会清空misc分区,这样下次运行时候就不会再次进入。


那么这么解释完同学们是否已经对RK3399PRO的分区表和启动顺序有了大致的了解了呢。

作者: administer    时间: 2019-2-22 20:56
怎么删除安卓仅保留linux呢
作者: jefferyzhang    时间: 2019-2-22 23:33
administer 发表于 2019-2-22 20:56
怎么删除安卓仅保留linux呢

烧写parameter_linux那个,按他的分区烧写对应固件就可以了。
具体参考下wiki
作者: gary.zhang    时间: 2019-3-12 09:45
我遇到两个问题:
1. 运行烧录工具加载配置文件以后,烧录工具直接闪退,AndroidTool_Release_v2.64下发现了一个tool_error.dmp的文件,我将它贴在了附件里
2. 连接Micro USB以后打开虚拟串口,发现它不断的打印跟ADC有关的log,影响命令输入和结果查看
[ 3294.351419] ## ADC Chan[0] val: 1, pressed.
[ 3294.654587] ## ADC Chan[0] val: 0, pressed.
[ 3294.856534] ## ADC Chan[0] val: 1, pressed.
[ 3295.361406] ## ADC Chan[0] val: 0, pressed.
[ 3295.563616] ## ADC Chan[0] val: 1, pressed.
[ 3295.966650] ## ADC Chan[0] val: 0, pressed.
[ 3296.067634] ## ADC Chan[0] val: 1, pressed.
[ 3296.168639] ## ADC Chan[0] val: 0, pressed.
[ 3296.370586] ## ADC Chan[0] val: 1, pressed.
[ 3296.774450] ## ADC Chan[0] val: 0, pressed.
[ 3296.875751] ## ADC Chan[0] val: 1, pressed.
[ 3297.178558] ## ADC Chan[0] val: 2, pressed.
[ 3297.380670] ## ADC Chan[0] val: 0, pressed.
[ 3297.582679] ## ADC Chan[0] val: 1, pressed.
[ 3297.683689] ## ADC Chan[0] val: 0, pressed.

麻烦协助解决一下。

作者: allen_toy_brick    时间: 2019-5-16 16:17
新手上路试试发帖
作者: cling    时间: 2019-5-20 14:29
版主你好,目前擦除了linux系统,在烧写andoird分区镜像时,修改了内核部分,分区没有kernel.img和resouce.img,只需烧录boot.img文件就可以了吗?烧完打印log并未启动kernel,请问是烧录的固件不对吗?
作者: jefferyzhang    时间: 2019-5-20 14:34
cling 发表于 2019-5-20 14:29
版主你好,目前擦除了linux系统,在烧写andoird分区镜像时,修改了内核部分,分区没有kernel.img和resouce. ...

请参看wiki教程烧写。。。
目前把kernel和resource打包一起了,避免额外占用空间
作者: renton    时间: 2019-7-31 16:16
jefferyzhang 发表于 2019-5-20 14:34
请参看wiki教程烧写。。。
目前把kernel和resource打包一起了,避免额外占用空间 ...

所以,还是请问一下
kernel.img究竟怎么烧进去,地址填多少,wiki没有写啊。。。
作者: abcehac    时间: 2019-8-10 02:30
为啥parameter-dual 中的 -@0x00c00000(rootfs:grow) 和
       parameter-Linux中的 -@0x00016000(rootfs:grow)不一样???
作者: jefferyzhang    时间: 2019-8-10 16:29
abcehac 发表于 2019-8-10 02:30
为啥parameter-dual 中的 -@0x00c00000(rootfs:grow) 和
       parameter-Linux中的 -@0x00016000(rootfs ...

地址是前一个地址+前一个分区大小得出来的,你往后算下不就知道了。
dual里双系统用的空间当然比单系统大多了,为什么会一样?
作者: abcehac    时间: 2019-8-11 13:56
jefferyzhang 发表于 2019-8-10 16:29
地址是前一个地址+前一个分区大小得出来的,你往后算下不就知道了。
dual里双系统用的空间当然比单系统大 ...

欧西!我错了!
作者: 善良凡小    时间: 2019-11-12 11:07
您好,我想问一下,修改rootfs的分区大小怎么改?大神可以提示一下吗?让我有个方向。直接在parameter.txt里改应该不行吧。
作者: jefferyzhang    时间: 2019-11-12 11:30
善良凡小 发表于 2019-11-12 11:07
您好,我想问一下,修改rootfs的分区大小怎么改?大神可以提示一下吗?让我有个方向。直接在parameter.txt ...

改分区当然是对的。。。
改完要重烧
作者: 善良凡小    时间: 2019-11-12 13:26
jefferyzhang 发表于 2019-11-12 11:30
改分区当然是对的。。。
改完要重烧

那修改分区是可以在paremeter.txt里边修改就可以吗?我是刚接触不久,望指点一二。
作者: 善良凡小    时间: 2019-11-12 13:29
jefferyzhang 发表于 2019-11-12 11:30
改分区当然是对的。。。
改完要重烧

我修改了parameter.txt里边的分区后,为什么在读取设备分区表的时候,还是原来的没变啊。
作者: jefferyzhang    时间: 2019-11-12 14:21
善良凡小 发表于 2019-11-12 13:29
我修改了parameter.txt里边的分区后,为什么在读取设备分区表的时候,还是原来的没变啊。 ...

烧写工具左边有个偏移,重新加载下分区表那个偏移就会变了,烧进去就对了
作者: 善良凡小    时间: 2019-11-12 15:07
jefferyzhang 发表于 2019-11-12 14:21
烧写工具左边有个偏移,重新加载下分区表那个偏移就会变了,烧进去就对了 ...

您好,还想请教一个问题,烧写的trust.img是干什么的?
作者: jefferyzhang    时间: 2019-11-12 15:16
善良凡小 发表于 2019-11-12 15:07
您好,还想请教一个问题,烧写的trust.img是干什么的?

TrustOS,optee
作者: tanggou    时间: 2020-8-24 17:03
我们由于产品简单,所以芯片去掉了很多外设资源,只保留使用到的两个SPI接口,两个UART接口,一个type-c接口,现在是烧录完系统后,内核加载不起来根文件系统,但是可以进入串口下的命令行,可是由于没有加载根文件系统,NPU没有上电,使用不了AI,请问这种情况下怎么处理?我们通过make menuconfig裁减了部分内核,但是还是没有加载成功根文件系统。
作者: lin00894507    时间: 2020-12-15 19:23
自己下载RK3399pro sdk 编译生成linux下bin文件,烧写在官方config_linux系统分区下更新uboot,trust,boot_linux:bootable,rootfs,结果起不来,请帮忙分析下
U-Boot 2017.09-g4857df5-200927-dirty #root (Dec 11 2020 - 11:11:46 +0800)
Model: Rockchip RK3399 Evaluation Board
PreSerial: 2
DRAM:  3.8 GiB
Sysmem: init
Relocation Offset: f5bc8000, fdt: f3dbc358
Using default environment

dwmmc@fe320000: 1, sdhci@fe330000: 0
Bootdev(atags): mmc 0
MMC0: HS400, 150Mhz
PartType: EFI
No resource partition
Failed to load DTB
Failed to get kernel dtb, ret=-19
io-domain: OK
Model: Rockchip RK3399 Evaluation Board
No misc partition
boot mode: None
CLK: (uboot. arml: enter 816000 KHz, init 816000 KHz, kernel 0N/A)
CLK: (uboot. armb: enter 816000 KHz, init 816000 KHz, kernel 0N/A)
  aplll 816000 KHz
  apllb 816000 KHz
  dpll 800000 KHz
  cpll 24000 KHz
  gpll 800000 KHz
  npll 600000 KHz
  vpll 24000 KHz
  aclk_perihp 133333 KHz
  hclk_perihp 66666 KHz
  pclk_perihp 33333 KHz
  aclk_perilp0 266666 KHz
  hclk_perilp0 88888 KHz
  pclk_perilp0 44444 KHz
  hclk_perilp1 100000 KHz
  pclk_perilp1 50000 KHz
Net:   No ethernet found.
Hit key to stop autoboot('CTRL+C'):  0
Could not find misc partition
ANDROID: reboot reason: "(none)"
optee api revision: 2.0
TEEC: Waring: Could not find security partition
Not AVB images, AVB skip
android_image_load_by_partname: Can't find part: boot
Android image load failed
Android boot failed, error -1.
Could not find misc partition
Could not find rootfs part
Card did not respond to voltage select!
mmc_init: -95, time 10
switch to partitions #0, OK
mmc0(part 0) is current device
Failed to mount ext2 filesystem...
** Unrecognized filesystem type **
starting USB...
No working controllers found
USB is stopped. Please issue 'usb start' first.
starting USB...
No working controllers found
No ethernet found.
missing environment variable: pxeuuid
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default-arm-rockchip
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default-arm
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/default
No ethernet found.
Config file not found
starting USB...
No working controllers found
No ethernet found.
=>
作者: lin00894507    时间: 2020-12-15 19:24
还有,有没有3399pro SDK的编译步骤,以及编译生成的image,如何配合下载工具使用
作者: jefferyzhang    时间: 2020-12-15 21:15
lin00894507 发表于 2020-12-15 19:24
还有,有没有3399pro SDK的编译步骤,以及编译生成的image,如何配合下载工具使用 ...

不是toybrick的板子是用不了这套代码和固件的。请联系板上提供对应的代码
作者: lin00894507    时间: 2020-12-29 16:01
jefferyzhang 发表于 2020-12-15 21:15
不是toybrick的板子是用不了这套代码和固件的。请联系板上提供对应的代码

我买的就是toybrick的板子,
作者: jefferyzhang    时间: 2020-12-29 16:08
lin00894507 发表于 2020-12-29 16:01
我买的就是toybrick的板子,

toybrick板子参看本论坛wiki教程就有了
作者: lin00894507    时间: 2021-1-4 10:02
你好,我想自己编译linux系统,我下载官网sdk编译后,生成的一套bin文件是andorid的系统文件
问题1:如果修改编译脚本设置成,生成linux的配置项,
目前我编译生成了uboot.img,trust.img,resource.img,kernel.img,rootfs是buildroot(andorid)的,我不清楚内核在linux下和andorid下文件有什么区别?但是,我烧写uboot.img,trust.img,resource.img,kernel.img,rootfs加载不对?请帮忙分析一下,万分感谢!
作者: jefferyzhang    时间: 2021-1-4 10:06
lin00894507 发表于 2021-1-4 10:02
你好,我想自己编译linux系统,我下载官网sdk编译后,生成的一套bin文件是andorid的系统文件
问题1:如果修 ...

什么板子,Toybrick板子按Toybrick wiki和 parameter烧写即可。
其他板子要联系提供给你固件的板商,做法不一定一样
作者: lin00894507    时间: 2021-1-4 20:13
我的板子是Toybrick rk3399proD,在编译内核时选择哪种配置,
: rockchip_rk3399pro
56. rockchip_rk3399pro_combine
57. rockchip_rk3399pro_combine_defconfig.old
58. rockchip_rk3399pro-multi-cam
59. rockchip_rk3399pro-npu
60. rockchip_rk3399pro-npu-multi-cam
61. rockchip_rk3399pro_recovery
62. rockchip_rk3399_recovery
作者: jefferyzhang    时间: 2021-1-5 08:49
lin00894507 发表于 2021-1-4 20:13
我的板子是Toybrick rk3399proD,在编译内核时选择哪种配置,
: rockchip_rk3399pro
56. rockchip_rk3399p ...

请参看wiki编译说明,打开编译脚本查看
作者: 齐丽媛    时间: 2021-1-6 14:35
在工具上把boot Linux的地址扩容0x0c836000,后面就下载失败了
作者: jefferyzhang    时间: 2021-1-6 14:36
齐丽媛 发表于 2021-1-6 14:35
在工具上把boot Linux的地址扩容0x0c836000,后面就下载失败了

改了中间的后面都得对应往后移动
作者: 齐丽媛    时间: 2021-1-6 16:33
板主你给的那个分区表CMDLINE在哪里看以及修改呀
作者: jefferyzhang    时间: 2021-1-6 17:32
齐丽媛 发表于 2021-1-6 16:33
板主你给的那个分区表CMDLINE在哪里看以及修改呀

都在parameter里。那个cmdline是给uboot看的
作者: sallycjf    时间: 2021-3-31 14:30
新手学习中,非常有用
作者: Bone1    时间: 2021-4-21 21:44
正好了解到这个3399Pro的启动方式和分区表
作者: 腺嘌呤    时间: 2021-4-27 09:19
请问这个emmc前4M里面的SN和MAC是由UBOOT验证的还是内核验证的?能否自己去掉这个验证环节?

作者: Taro    时间: 2021-7-21 08:54
烧写双系统,怎么切换Android和Linux系统呢




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3