赞
踩
在开放源代码支持中,Rockchip使用 GPT作为其主要分区表。我们将GPT存储在LBA0〜LBA63中。
U-boot支持标准的 GPT分区表格式。
Partition | Start Sector | Number of Sectors | Partition Size | PartNum in GPT | Requirements | |||
---|---|---|---|---|---|---|---|---|
MBR | 0 | 00000000 | 1 | 00000001 | 512 | 0.5KB | ||
Primary GPT | 1 | 00000001 | 63 | 0000003F | 32256 | 31.5KB | ||
loader1 | 64 | 00000040 | 7104 | 00001bc0 | 4096000 | 2.5MB | 1 | preloader (miniloader or U-Boot SPL) |
Vendor Storage | 7168 | 00001c00 | 512 | 00000200 | 262144 | 256KB | SN, MAC and etc. | |
Reserved Space | 7680 | 00001e00 | 384 | 00000180 | 196608 | 192KB | Not used | |
reserved1 | 8064 | 00001f80 | 128 | 00000080 | 65536 | 64KB | legacy DRM key | |
U-Boot ENV | 8128 | 00001fc0 | 64 | 00000040 | 32768 | 32KB | ||
reserved2 | 8192 | 00002000 | 8192 | 00002000 | 4194304 | 4MB | legacy parameter | |
loader2 | 16384 | 00004000 | 8192 | 00002000 | 4194304 | 4MB | 2 | U-Boot or UEFI |
trust | 24576 | 00006000 | 8192 | 00002000 | 4194304 | 4MB | 3 | trusted-os like ATF, OP-TEE |
boot(bootable must be set) | 32768 | 00008000 | 229376 | 00038000 | 117440512 | 112MB | 4 | kernel, dtb, extlinux.conf, ramdisk |
rootfs | 262144 | 00040000 | - | - | - | -MB | 5 | Linux system |
Secondary GPT | 16777183 | 00FFFFDF | 33 | 00000021 | 16896 | 16.5KB |
注1:如果preloader是miniloader,则loader2分区可用于uboot.img,trust分区可用于trust.img; 如果preloader是不带trust支持的SPL,则loader2分区可用于u-boot.bin,而trust分区不可用;如果preloader是具有trust支持的SPL(ATF或OPTEE),则loader2可用于u-boot.itb(包括u-boot.bin和trust二进制文件),而trust分区不可用。
- rkdeveloptool db rkxx_loader_vx.xx.bin
- rkdeveloptool gpt parameter_gpt.txt
其中parameter_gpt.txt包含分区信息:
CMDLINE: mtdparts=rk29xxnand:0x00001f40@0x00000040(loader1),0x00000080@0x00001f80(reserved1),0x00002000@0x00002000(reserved2),0x00002000@0x00004000(loader2),0x00002000@0x00006000(atf),0x00038000@0x00008000(boot:bootable),-@0x0040000(rootfs)
在u-boot console中,“ gpt”命令可用于写入gpt分区表:
- gpt - GUID Partition Table
-
- Usage:
- gpt <command> <interface> <dev> <partitions_list>
- - GUID partition table restoration and validity check
- Restore or verify GPT information on a device connected
- to interface
- Example usage:
- gpt write mmc 0 $partitions
- gpt verify mmc 0 $partitions</code>
例如:
- => env set partitions name=rootfs,size=-,type=system
- => gpt write mmc 0 $partitions
- Writing GPT: success!
注意:可以在u-boot console(使用“ env set”命令)或在u-boot的源代码中设置分区env,
例如:
- include/configs/kylin_rk3036.h
- #define PARTS_DEFAULT \
- "uuid_disk=${uuid_gpt_disk};" \
- ...
-
- #undef CONFIG_EXTRA_ENV_SETTINGS
- #define CONFIG_EXTRA_ENV_SETTINGS \
- "partitions=" PARTS_DEFAULT \
当前的上游u-boot包含fastboot协议支持。此版本的fastboot支持2种修改gpt分区表的方法:
它与u-boot控制台中的“ gpt write mmc 0 $ partitions”相同:
- #ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
- if (strncmp("format", cmd + 4, 6) == 0) {
- char cmdbuf[32];
- sprintf(cmdbuf, "gpt write mmc %x $partitions",
- CONFIG_FASTBOOT_FLASH_MMC_DEV);
- if (run_command(cmdbuf, 0))
- fastboot_tx_write_str("FAIL");
- else
- fastboot_tx_write_str("OKAY");
- } else
- #endif
PC命令:
- $ fastboot oem format -i 0x2207
- ...
- OKAY [ 0.015s]
- finished. total time: 0.015s
- if (strcmp(cmd, CONFIG_FASTBOOT_GPT_NAME) == 0) {
- printf("%s: updating MBR, Primary and Backup GPT(s)\n",
- __func__);
- if (is_valid_gpt_buf(dev_desc, download_buffer)) {
- printf("%s: invalid GPT - refusing to write to flash\n",
- __func__);
- fastboot_fail(response_str, "invalid GPT partition");
- return;
- }
- if (write_mbr_and_gpt_partitions(dev_desc, download_buffer)) {
- printf("%s: writing GPT partitions failed\n", __func__);
- fastboot_fail(response_str,
- "writing GPT partitions failed");
- return;
- }
- printf("........ success\n");
- fastboot_okay(response_str, "");
- return;
gpt分区映像可以由PC的gdisk工具生成,
例如:
- $ dd if=/dev/zero of=disk.img bs=1M count=256
- 256+0 records in
- 256+0 records out
- 268435456 bytes (268 MB) copied, 0.151867 s, 1.8 GB/s
-
- $ gdisk disk.img
- GPT fdisk (gdisk) version 0.8.1
-
- Partition table scan:
- MBR: not present
- BSD: not present
- APM: not present
- GPT: not present
-
- Creating new GPT entries.
-
- Command (? for help): n
- Partition number (1-128, default 1):
- First sector (34-524254, default = 34) or {+-}size{KMGTP}:
- Information: Moved requested sector from 34 to 2048 in
- order to align on 2048-sector boundaries.
- Use 'l' on the experts' menu to adjust alignment
- Last sector (2048-524254, default = 524254) or {+-}size{KMGTP}:
- Current type is 'Linux filesystem'
- Hex code or GUID (L to show codes, Enter = 8300):
- Changed type of partition to 'Linux filesystem'
- Command (? for help): w
- Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
- PARTITIONS!!
- Do you want to proceed? (Y/N): y
- OK; writing new GUID partition table (GPT).
- Warning: The kernel is still using the old partition table.
- The new table will be used at the next reboot.
- The operation has completed successfully.
- $ dd if=disk.img of=gpt.img count=64
- 64+0 records in
- 64+0 records out
- 32768 bytes (33 kB) copied, 0.00075438 s, 43.4 MB/s
PC命令:
- $ fastboot flash gpt gpt.img
- target reported max download size of 117440512 bytes
- sending 'gpt' (32 KB)...
- OKAY [ 0.006s]
- writing 'gpt'...
- OKAY [ 0.025s]
- finished. total time: 0.030s
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。