存储配置
存储配置是编译的固件是否可刷机的关键步骤,但存储的更换要修改的地方较多,建议按照现有工程仿写需要 Bringup 的开发板。
SPI NAND 存储配置
- 配置 U-Boot 以支持特定的 SPI NAND 型号,确认开发板的型号被选中支持。注:
kernel 分区比较大,默认打开了 SDK 支持的所有型号,不用选择。
-
查看 drivers/mtd/nand/spi/ 源码目录,确认 SPI NAND 器件的厂商是否在支持列表中。
例如,查看源码目录中是否存在 winbond.c 。如果不存在,则需要添加新厂商支持,详情可查看 SPI NAND 移植。
SDK 默认支持了几种 SPI NAND,编译之前需要确认开发板的 SPI NAND 型号被选中支持,详情可查看 SPI NAND。
-
执行下列命令进入 U-Boot 配置界面:
make um
-
选择,配置下列信息:
(0x240000) Offset of bbt in nand (0x40000) Range of bbt in nand [*] Define U-boot binaries locations in SPI NAND (0x100000) Location in SPI NAND to read U-Boot from [ ] Support Micron SPI NAND [ ] Support Macronix SPI NAND [*] Support Winbond SPI NAND [ ] Support Winbond SPI NAND CONTINUOUS READ MODE [*] Support GigaDevice SPI NAND [ ] Support Toshiba SPI NAND [*] Support FudanMicro SPI NAND [*] Support Foresee SPI NAND [*] Support Zbit SPI NAND [ ] Support Elite SPI NAND [ ] Support ESMT SPI NAND [ ] Support UMTEK SPI NAND SPI Flash Support ---> UBI support --->
U-Boot 和 SPL 分区一般都比较小,如果开启的 SPI NAND 型号过多,存储容易越界,建议仅打开需要使用的型号。
-
- 配置文件系统。
SPI NAND 采用 UBIFS 文件系统。 如果开发板使用的存储介质为 SPI NAND,以 demo128_nand 工程为例,则编译后会生成固件的名称 d211_demo128_nand_page_2k_block_128k_v1.0.0。
如果 SPI NAND 的 page 尺寸为 4K 大小,可在 target/d211/xxx/image_cfg.json 文件中配置 page 尺寸,编译后的文件为 d211_xxx_page_4k_block_256k_v1.0.0.img:"info": { // Header information about image "platform": "d211", "product": "demo128_nand", "version": "1.0.0", "media": { "type": "spi-nand", "device_id": 0, "array_organization": [ { "page": "2k", "block": "128k", "oob": "64" }, // { "page": "4k", "block": "256k", "oob": "128" }, ], } },
-
配置分区
在 target/d211/demo128_nand/image_cfg.json 文件中配置分区信息:"spi-nand": { // Device, The name should be the same with string in image:info:media:type "size": "128m", // Size of SPI NAND "partitions": { "spl": { "size": "1m" }, "uboot": { "size": "1m" }, "userid": { "size": "256k" }, "bbt": { "size": "256k" }, "env": { "size": "256k" }, "env_r": { "size": "256k" }, "falcon": { "size": "256k" }, "logo": { "size": "768K" }, "kernel": { "size": "12m" }, "recovery": { "size": "10m" }, "ubiroot": { "size": "32m", //分区大小为 32m "ubi": { // Volume in UBI device "rootfs": { "size": "-" }, }, }, "ubisystem": { "size": "-", "ubi": { // Volume in UBI device "ota": { "size": "48m" }, "user": { "size": "-" }, }, }, } },
- 调整固件大小。固件的大小要和分区大小相匹配,可以自动适配也可以手工调整:
- 自动适配。
-
在 SDK 根目录下执行下列命令,进入 menuconfig 的功能配置界面:
make menuconfig
-
在 Filesystem images 配置界面,按如下选择:
RootFS images ---> [ ] UserFS 1 ---- [ ] UserFS 2 ---- [ ] UserFS 3 ---- [ ] Generate burner format image [*] Auto calculate partition size to generate image //通过分区大小自动生成固件
-
- 手工调整。
-
在 SDK 根目录下执行下列命令,进入 menuconfig 的功能配置界面:
make menuconfig
- 在
[ ] ext2/3/4 root filesystem [ ] cpio the root filesystem (for use as an initial RAM filesystem) [ ] initial RAM filesystem linked into linux kernel [ ] jffs2 root filesystem [ ] squashfs root filesystem [ ] tar the root filesystem ubi parameter select (spi-nand all type support) ---> [*] ubi image containing an ubifs root filesystem [ ] Use custom config file () Additional ubinize options -*- ubifs root filesystem (0x2000000) ubifs size(Should be aligned to MB) //固件大小,32M ubifs runtime compression (lzo) ---> Compression method (no compression) ---> (-F) Additional mkfs.ubifs options
界面,配置下列信息:
-
- 自动适配。
SPI NOR 存储配置
SPI NOR 采用 squashfs 文件系统。如果开发板使用的存储介质为 SPI NOR,以 demo88_nor 工程为例,则编译后会生成固件的名称为 d211_demo88_nor_v1.0.0.img。
Image file is generated: /xxx/d211/develop/output/d211_demo88_nor/images/d211_demo88_nor_v1.0.0.img
"spi-nor": { // Media type "size": "16m", // Size of NOR "partitions": { "spl": { "size": "256k" }, "uboot": { "size": "640k" }, "userid": { "size": "64k" }, "env": { "size": "64k" }, "env_r": { "size": "64k" }, "falcon": { "size": "64k" }, "logo": { "size": "512k" }, "kernel": { "size": "5m" }, "rootfs": { "size": "9m" }, // "user": { "size": "-" }, } }
SPI NOR 存储一般比较小,在 Linux 系统上进行分区调整比较麻烦,本节不详细描述。
EMMC 存储配置
EMMC 采用 squashfs 文件系统。如果开发板使用的存储介质为 eMMC (eNand),以 demo 工程为例,则编译后的固件名称为 d211_demo_v1.0.0.img。
Image file is generated: /xxx/d211/luban/output/d211_demo/images/d211_demo_v1.0.0.img
- 分区分区信息在 target/d211/demo/image_cfg.json 中
"mmc": { // Media type "size": "4G", // Size of SD/eMMC "partitions": { // Partition table apply to device "spl": { "offset": "0x4400", "size": "495k" }, "uboot": { "size": "1m" }, "env": { "size": "256k" }, "falcon": { "size": "256k" }, "logo": { "size": "512k" }, "kernel": { "size": "16m" }, "rootfs": { "size": "72m" }, //分区大小为 72M "user": { "size": "-" }, }, },
- 固件
执行 make menuconfig 命令,进入 menuconfig 界面,并选择 调整。
[*] ext2/3/4 root filesystem ext2/3/4 variant (ext4) ---> (rootfs) filesystem label (72M) exact size //固件大小为 72M (0) exact number of inodes (leave at 0 for auto calculation) (5) reserved blocks percentage (-O ^64bit) additional mke2fs options Compression method (no compression) ---> [ ] cpio the root filesystem (for use as an initial RAM filesystem) [ ] initial RAM filesystem linked into linux kernel
正确的存储配置应该能够成功支持固件烧录。