Difference between revisions of "How to make your own SD-bootable ROM/zh"
(updated by API) |
(updated by API) |
||
Line 15: | Line 15: | ||
===制作sd ROM=== | ===制作sd ROM=== | ||
====Linux-4.14==== | ====Linux-4.14==== | ||
− | + | 事实上,对于Linux-4.14 BSP,相同rootfs的所有H3 板子的sd ROM文件都是同一个。所以对于这个版本的BSP,所有H3 的板子的sd ROM 的制作命令是一样的。<br> | |
− | + | 这里以制作FriendlyCore sd ROM为例进行讲解,Ubuntu、Debian、OpenWrt等sd ROM文件的制作方法是一样的。<br> | |
− | + | ||
* <b>准备FriendlyCore的rootfs目录</b> | * <b>准备FriendlyCore的rootfs目录</b> | ||
有2种方式可以准备FriendlyCore的rootfs目录:<br> | 有2种方式可以准备FriendlyCore的rootfs目录:<br> | ||
1) 制作一张带FriendlyCore系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区; <br> | 1) 制作一张带FriendlyCore系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区; <br> | ||
− | 2) | + | 2) 解压网盘里/rootfs/rootfs_friendlycore_4.14_YYYYMMDD.tgz<br> |
<br> | <br> | ||
Line 51: | Line 50: | ||
<br> | <br> | ||
− | mkimage.sh执行成功后,会生成out/SD-bootable- | + | mkimage.sh执行成功后,会生成out/SD-bootable-1目录(这里的"1"对应参数“-c 1”),,其内容如下: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ tree out/ | $ tree out/ | ||
Line 104: | Line 103: | ||
<br> | <br> | ||
− | mkimage.sh执行成功后,会生成out/SD-bootable- | + | mkimage.sh执行成功后,会生成out/SD-bootable-1目录(这里的"1"对应参数“-c 1”),,其内容如下: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ tree out/ | $ tree out/ | ||
Line 148: | Line 147: | ||
有2种方式可以准备eflasher的rootfs目录:<br> | 有2种方式可以准备eflasher的rootfs目录:<br> | ||
1) 制作一张带eflasher 系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区; <br> | 1) 制作一张带eflasher 系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区; <br> | ||
− | 2) | + | 2) 解压网盘里/rootfs/rootfs_eflasher_4.14_YYYYMMDD.tgz<br> |
* 假设eflasher rootfs目录的路径为./rom-maker-lite/part2/h3/4.14/eflasher/rootfs/,执行下面的命令可生成eflasher ROM: | * 假设eflasher rootfs目录的路径为./rom-maker-lite/part2/h3/4.14/eflasher/rootfs/,执行下面的命令可生成eflasher ROM: | ||
Line 169: | Line 168: | ||
└── SD-bootable-2.img | └── SD-bootable-2.img | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | part1/boot_linux-4.14_h3/目录被制作成了boot.img;<br> | + | - part1/boot_linux-4.14_h3/目录被制作成了boot.img;<br> |
− | part2/h3/4.14/eflasher/rootfs/目录被制作成了rootfs.img;<br> | + | - part2/h3/4.14/eflasher/rootfs/目录被制作成了rootfs.img;<br> |
− | out/SD-bootable-1/目录被制作成了friendlyarm.img;<br> | + | - out/SD-bootable-1/目录被制作成了friendlyarm.img;<br> |
− | SD-bootable-2.img则为最终的eflasher ROM文件,它是由SD-bootable-2目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;<br> | + | - SD-bootable-2.img则为最终的eflasher ROM文件,它是由SD-bootable-2目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;<br> |
事实下,FriendlyElec发布的所有H3板子的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip都是同一个文件。 | 事实下,FriendlyElec发布的所有H3板子的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip都是同一个文件。 | ||
Line 185: | Line 184: | ||
===仅制作boot.img/rootfs.img=== | ===仅制作boot.img/rootfs.img=== | ||
rom-maker-lite是通过./tools/mk_fsimg.sh脚本来生成分区文件(boot.img、rootfs.img)的,其用法如下: | rom-maker-lite是通过./tools/mk_fsimg.sh脚本来生成分区文件(boot.img、rootfs.img)的,其用法如下: | ||
− | |||
::{| class="wikitable" | ::{| class="wikitable" | ||
|- | |- | ||
Line 208: | Line 206: | ||
====Linux-4.14==== | ====Linux-4.14==== | ||
− | + | 为Linux-4.14 sd ROM生成boot.img和rootfs.img的命令如下: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cd rom-maker-lite | $ cd rom-maker-lite | ||
Line 217: | Line 215: | ||
====Linux-3.4==== | ====Linux-3.4==== | ||
− | + | 为NanoPi M1 Linux-3.14 sd ROM生成boot.img和rootfs.img的命令如下: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ cd rom-maker-lite | $ cd rom-maker-lite | ||
Line 223: | Line 221: | ||
$ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/3.4/friendlycore/rootfs/ 4096 rootfs | $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/3.4/friendlycore/rootfs/ 4096 rootfs | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 上述命令仅适用于NanoPi M1,其他H3的板子的命令也是类似的. | |
Line 229: | Line 227: | ||
{{ROM-Maker-lite_Introduce/zh |h5}} | {{ROM-Maker-lite_Introduce/zh |h5}} | ||
− | + | ===制作sd ROM=== | |
− | + | ====Linux-4.14==== | |
− | 这里以制作FriendlyCore sd | + | 事实上,对于Linux-4.14 BSP,相同rootfs的所有H5 板子的sd ROM文件都是同一个,所以对于这个版本的BSP,所有H5 的板子的sd ROM 的制作命令是一样的。<br> |
− | + | 这里以制作FriendlyCore sd ROM为例进行讲解,Ubuntu、Debian、OpenWrt等sd ROM文件的制作方法是一样的。<br> | |
+ | |||
+ | * <b>准备FriendlyCore的rootfs目录</b> | ||
+ | 有2种方式可以准备FriendlyCore的rootfs目录:<br> | ||
+ | 1) 制作一张带FriendlyCore系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区; <br> | ||
+ | 2) 解压网盘里的/rootfs/rootfs_friendlycore_4.14_YYYYMMDD.tgz<br> | ||
+ | |||
+ | <br> | ||
+ | * <b>假设rootfs目录的路径为./rom-maker-lite/part2/h5/4.14/friendlycore/rootfs/,执行下面的命令可生成sd ROM:</b> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
+ | $ cd rom-maker-lite | ||
$ ./mkimage.sh -c 1 -m partmap/h5_linux-4.14/partmap.txt -d "misc/uboot-2017_h5/;part1/boot_linux-4.14_h5/;part2/h5/4.14/friendlycore/rootfs/" | $ ./mkimage.sh -c 1 -m partmap/h5_linux-4.14/partmap.txt -d "misc/uboot-2017_h5/;part1/boot_linux-4.14_h5/;part2/h5/4.14/friendlycore/rootfs/" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | - 对于所有使用Linux-4.14 BSP的H5板子,使用的都是同一个partmap文件: partmap/h5_linux-4.14/partmap.txt。<br> | |
+ | - 如果有需要,你可以将misc/uboot-2017_h5、part1/boot_linux-4.14_h5目录下的文件替换为你自己定制编译的文件,通过tree命令可查看有哪些可替换的文件: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ tree misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ | $ tree misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ | ||
Line 255: | Line 263: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | <br> | |
− | mkimage.sh执行成功后,会生成out/SD-bootable- | + | mkimage.sh执行成功后,会生成out/SD-bootable-1目录(这里的"1"对应参数“-c 1”),,其内容如下: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ tree out/ | $ tree out/ | ||
Line 269: | Line 277: | ||
│ └── u-boot.itb | │ └── u-boot.itb | ||
├── SD-bootable-1.img | ├── SD-bootable-1.img | ||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | part1/boot_linux-4.14_h5/目录被制作成了boot. | + | - part1/boot_linux-4.14_h5/目录被制作成了boot.img;<br> |
− | + | - part2/h5/4.14/friendlycore/rootfs/目录被制作成了rootfs.img;<br> | |
− | + | - SD-bootable-1.img则为最终的sd ROM文件,它是由SD-bootable-1目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h5]_sd_friendlycore-xenial_4.14_armhf_YYYYMMDD.img; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ||
− | + | ===制作eflasher ROM=== | |
− | 制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd | + | 制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd ROM,即已经有待烧写到eMMC的原材料文件。<br> |
+ | 例如想制作用于烧写“Linux-4.14的FriendlyCore”的eflasher ROM,先要有"Linux-4.14的FriendlyCore"的sd ROM原材料,即: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ tree out/ | $ tree out/ | ||
Line 310: | Line 300: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | * <b>准备eflasher的rootfs目录</b> | |
+ | 有2种方式可以准备eflasher的rootfs目录:<br> | ||
+ | 1) 制作一张带eflasher 系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区; <br> | ||
+ | 2) 解压网盘里的/rootfs/rootfs_eflasher_4.14_YYYYMMDD.tgz<br> | ||
+ | |||
+ | * <b>假设eflasher rootfs目录的路径为./rom-maker-lite/part2/h3/4.14/eflasher/rootfs/,执行下面的命令可生成eflasher ROM:</b> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
+ | $ cd rom-maker-lite | ||
$ ./mkimage.sh -c 2 -m partmap/h5_eflasher-4.14/partmap.txt -d "misc/uboot-2017_h5/;part1/boot_linux-4.14_h5/;part2/h5/4.14/eflasher/rootfs;out/SD-bootable-1" | $ ./mkimage.sh -c 2 -m partmap/h5_eflasher-4.14/partmap.txt -d "misc/uboot-2017_h5/;part1/boot_linux-4.14_h5/;part2/h5/4.14/eflasher/rootfs;out/SD-bootable-1" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 318: | Line 314: | ||
$ tree out/ | $ tree out/ | ||
out/ | out/ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
├── SD-bootable-2 | ├── SD-bootable-2 | ||
│ └── your_company | │ └── your_company | ||
Line 338: | Line 325: | ||
└── SD-bootable-2.img | └── SD-bootable-2.img | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | - part1/boot_linux-4.14_h3/目录被制作成了boot.img;<br> | |
+ | - part2/h3/4.14/eflasher/rootfs/目录被制作成了rootfs.img;<br> | ||
+ | - out/SD-bootable-1/目录被制作成了friendlyarm.img;<br> | ||
+ | - SD-bootable-2.img则为最终的eflasher ROM文件,它是由SD-bootable-2目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;<br> | ||
+ | 事实下,FriendlyElec发布的所有H3板子的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip都是同一个文件。 | ||
+ | |||
<!-- | <!-- | ||
− | + | 下面的命令可以快速地将eflasher系统烧写到SD卡中以进行测试: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-2/your_company/partmap.txt | $ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-2/your_company/partmap.txt | ||
Line 346: | Line 338: | ||
注意: 请将/dev/sdX替换为实际的SD卡设备节点。 | 注意: 请将/dev/sdX替换为实际的SD卡设备节点。 | ||
--> | --> | ||
+ | |||
+ | ===仅制作boot.img/rootfs.img=== | ||
+ | rom-maker-lite是通过./tools/mk_fsimg.sh脚本来生成分区文件(boot.img、rootfs.img)的,其用法如下: | ||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |参数||说明 | ||
+ | |- | ||
+ | | 参数1 || | ||
+ | 指定分区格式,支持vfat/ext4/exfat | ||
+ | |- | ||
+ | | 参数2 || | ||
+ | 指定输出文件; | ||
+ | |- | ||
+ | | 参数3 || | ||
+ | 指定输入目录; | ||
+ | |- | ||
+ | | 参数4 || | ||
+ | 指定输出文件的大小,单位是MByte,必须大于输入目录。<br> | ||
+ | 可根据输入目录实际情况填写,通常情况下由于需要保存文件系统的信息,需要比输入目录大一点,如果提示空间不足,则需要增大该参数。 | ||
+ | |- | ||
+ | | 参数5 || | ||
+ | 指定分区的标签; | ||
+ | |} | ||
+ | |||
+ | ====Linux-4.14==== | ||
+ | 为Linux-4.14 sd ROM生成boot.img和rootfs.img的命令如下: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd rom-maker-lite | ||
+ | $ ./tools/mk_fsimg.sh vfat boot.img ./part1/boot_linux-4.14_h3/ 40 boot | ||
+ | $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/4.14/friendlycore/rootfs/ 4096 rootfs | ||
+ | </syntaxhighlight> | ||
+ | 上述命令适用于所有H3的板子。 | ||
+ | |||
+ | ====Linux-3.4==== | ||
+ | 为NanoPi M1 Linux-3.14 sd ROM生成boot.img和rootfs.img的命令如下: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ cd rom-maker-lite | ||
+ | $ ./tools/mk_fsimg.sh vfat boot.img ./part1/boot_linux-3.4_m1/ 40 boot | ||
+ | $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/3.4/friendlycore/rootfs/ 4096 rootfs | ||
+ | </syntaxhighlight> | ||
+ | 上述命令仅适用于NanoPi M1,其他H3的板子的命令也是类似的. |
Revision as of 05:53, 18 July 2019
1 制作RK3399平台的系统映像
请参考这个git仓库: https://github.com/friendlyarm/sd-fuse_rk3399
2 制作S5P4418平台的系统映像
请参考这个git仓库: https://github.com/friendlyarm/sd-fuse_s5p4418
3 制作S5P6818平台的系统映像
请参考这个git仓库: https://github.com/friendlyarm/sd-fuse_s5p6818
4 制作H3 平台的系统映像
如果你定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),你可以选择用dd命令将带有你的应用程序和配置的SD卡的数据完整地拷贝出来,这种方法简单粗暴,但是效率不高。另外,你也可以使用FriendlyElec 提供的rom-maker-lite工具。
rom-maker-lite是一套通用的制作映像文件的脚本工具,目前支持为 H3/H5 系列的开发板制作Linux平台的sd/eflasher ROM文件(尚未支持Android)。
- 执行./mkimage.sh查看帮助信息:
$ ./mkimage.sh Usage: $ apt-get install tree exfat-utils dosfstools python3-tk $ ./mkimage.sh -c <filesystem type> -m <partmap> -d "<misc dir>;<partition1 dir>;<partition2 dir>;..." -c <filesystem type>: 1: misc(bootloader) + fat32 boot.img + ext4 rootfs.img 2: misc(bootloader) + fat32 boot.img + ext4 rootfs.img + exfat friendlyarm.img 3: misc(bootloader) + ext4 boot.img + ext4 rootfs.img
参数 说明 -c <filesystem type> -c 用于指定ROM Image内各分区的文件系统格式,对于H3/H5系列的开发板:
-c 1表示使用“misc(bootloader) + fat32 boot.img + ext4 rootfs.img”布局,适用于FriendlyCore/Ubuntu/Debian/OpenWrt等sd ROM;
-c 2表示使用"misc(bootloader) + fat32 boot.img + ext4 rootfs.img + exfat friendlyarm.img"布局,适用于eflasher ROM。-m <partmap> -m 用于指定制作ROM时需要的partmap文件。
partmap文件用于指定ROM Image的组成文件和分区的大小,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。-d "<misc dir>;<partition1 dir>;<partition2 dir>;..." -d 用于指定系统文件所在的目录,每个路径之间用“;”分割,对于H3/H5系列的开发板:
<misc dir>: 用于指定bootloader所在的目录路径;
<partition1 dir>: 用于指定boot分区的目录路径;
<partition2 dir>: 用于指定rootfs分区的目录路径;
最后的...表示就还可以接收更多的目录路径。当制作eflasher ROM时,就需要添加friendlyarm分区的目录路径;
- 准备工作
经测试过PC机 Ubuntu版本包括:
1) ubuntu-16.04.5-desktop-amd64.iso
2) ubuntu-18.04.1-desktop-amd64.iso
如果你当前PC机使用的Ubuntu系统无法成功执行出系统映像,请尝试切换到上面这两个版本的Ubuntu系统。
在开始制作系统映像前,必须先安装下列软件包:
$ apt-get install tree exfat-utils dosfstools python3-tk
由于制作系统映像需要root权限,请先切换到root用户:
$ su root
4.1 制作sd ROM
4.1.1 Linux-4.14
事实上,对于Linux-4.14 BSP,相同rootfs的所有H3 板子的sd ROM文件都是同一个。所以对于这个版本的BSP,所有H3 的板子的sd ROM 的制作命令是一样的。
这里以制作FriendlyCore sd ROM为例进行讲解,Ubuntu、Debian、OpenWrt等sd ROM文件的制作方法是一样的。
- 准备FriendlyCore的rootfs目录
有2种方式可以准备FriendlyCore的rootfs目录:
1) 制作一张带FriendlyCore系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区;
2) 解压网盘里/rootfs/rootfs_friendlycore_4.14_YYYYMMDD.tgz
- 假设rootfs目录的路径为./rom-maker-lite/part2/h3/4.14/friendlycore/rootfs/,执行下面的命令可生成sd ROM:
$ cd rom-maker-lite $ ./mkimage.sh -c 1 -m partmap/h3_linux-4.14/partmap.txt -d "misc/uboot-2017_h3/;part1/boot_linux-4.14_h3/;part2/h3/4.14/friendlycore/rootfs/"
- 对于所有使用Linux-4.14 BSP的H3板子,使用的都是同一个partmap文件: partmap/h3_linux-4.14/partmap.txt。
- 如果有需要,你可以将misc/uboot-2017_h3、part1/boot_linux-4.14_h3目录下的文件替换为你自己定制编译的文件,通过tree命令可查看有哪些可替换的文件:
$ tree misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ misc/uboot-2017_h3/ └── u-boot-sunxi-with-spl.bin part1/boot_linux-4.14_h3/ ├── boot.cmd ├── boot.scr ├── rootfs.cpio.gz ├── sun8i-h2-plus-nanopi-duo.dtb ├── sun8i-h3-nanopi-duo2.dtb ├── sun8i-h3-nanopi-m1.dtb ├── sun8i-h3-nanopi-m1-plus.dtb ├── sun8i-h3-nanopi-neo-air.dtb ├── sun8i-h3-nanopi-neo-core.dtb ├── sun8i-h3-nanopi-neo.dtb └── zImage
mkimage.sh执行成功后,会生成out/SD-bootable-1目录(这里的"1"对应参数“-c 1”),,其内容如下:
$ tree out/ out/ ├── SD-bootable-1 │ └── your_company │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ └── u-boot-sunxi-with-spl.bin ├── SD-bootable-1.img
- part1/boot_linux-4.14_h3/目录被制作成了boot.img;
- part2/h3/4.14/friendlycore/rootfs/目录被制作成了rootfs.img;
- SD-bootable-1.img则为最终的sd ROM文件,它是由SD-bootable-1目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h3]_sd_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;
4.1.2 Linux-3.4
- 与Linux-4.14 sd ROM不同,相同rootfs的不同的H3板子的Linux-3.4 sd ROM是不同的。
- 这里以制作NanoPi M1的Linux-3.4 FriendlyCore sd ROM为例进行讲解,Ubuntu、Debian、OpenWrt等sd ROM的制作方法是一样的。
- 准备FriendlyCore的rootfs目录
有1种方式可以准备FriendlyCore的rootfs目录:
1) 制作一张带FriendlyCore系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区;
- 假设rootfs目录的路径为./rom-maker-lite/part2/m1/3.4/friendlycore/rootfs/,执行下面的命令可以生成sd ROM:
$ cd rom-maker-lite $ ./mkimage.sh -c 1 -m partmap/h3_linux-3.4/partmap.txt -d "misc/uboot-2011_m1/;part1/boot_linux-3.4_m1/;part2/m1/3.4/friendlycore/rootfs"
- 对于所有使用Linux-3.4 BSP的H3板子,使用的都是同一个partmap文件: partmap/h3_linux-3.4/partmap.txt。
- 如果有需要,你可以将misc/uboot-2011_m1、part1/boot_linux-3.4_m1目录下的文件替换为你自己定制编译的文件,通过tree命令可查看有哪些可替换的文件:
$ tree misc/uboot-2011_m1 part1/boot_linux-3.4_m1 misc/uboot-2011_m1 ├── boot0_sdcard.fex └── u-boot.fex part1/boot_linux-3.4_m1 ├── boot.img └── bootlogo.bmp
mkimage.sh执行成功后,会生成out/SD-bootable-1目录(这里的"1"对应参数“-c 1”),,其内容如下:
$ tree out/ out/ ├── SD-bootable-1 │ └── your_company │ ├── boot0_sdcard.fex │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ └── u-boot.fex ├── SD-bootable-1.img
- part1/boot_linux-3.4_m1目录被制作成了boot.img;
- part2/h3/3.14/friendlycore/rootfs/目录被制作成了rootfs.img;
- SD-bootable-1.img则为最终的sd ROM文件,它是由SD-bootable-1目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-m1_sd_friendlycore-xenial_3.4_armhf_YYYYMMDD.img;
- 以此类推,NanoPi M1 Plus 的sd ROM 制作命令如下:
$ ./mkimage.sh -c 1 -m partmap/h3_linux-3.4/partmap.txt -d "misc/uboot-2011_m1-plus/;part1/boot_linux-3.4_m1-plus/;part2/m1-plus/3.4/friendlycore/rootfs"
生成的SD-bootable-1.img等效于FriendlyElec 发布的nanopi-m1-plus_sd_friendlycore-xenial_3.4_armhf_YYYYMMDD.img.zip。NanoPi NEO / NanoPi NEO Air也是同样的道理,这样不再赘述。
4.2 制作eflasher ROM
制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd ROM,即已经有待烧写到eMMC的原材料文件。
例如想制作用于烧写“Linux-4.14的FriendlyCore”的eflasher ROM,先要有"Linux-4.14的FriendlyCore"的sd ROM原材料,即:
$ tree out/ out/ ├── SD-bootable-1 │ └── your_company │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ └── u-boot-sunxi-with-spl.bin
- 准备eflasher的rootfs目录
有2种方式可以准备eflasher的rootfs目录:
1) 制作一张带eflasher 系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区;
2) 解压网盘里/rootfs/rootfs_eflasher_4.14_YYYYMMDD.tgz
- 假设eflasher rootfs目录的路径为./rom-maker-lite/part2/h3/4.14/eflasher/rootfs/,执行下面的命令可生成eflasher ROM:
$ cd rom-maker-lite $ ./mkimage.sh -c 2 -m partmap/h3_eflasher-4.14/partmap.txt -d "misc/uboot-2017_h3/;part1/boot_linux-4.14_h3/;part2/h3/4.14/eflasher/rootfs;out/SD-bootable-1/"
mkimage.sh执行成功后,会生成out/SD-bootable-2目录,其内容如下:
$ tree out/ out/ ├── SD-bootable-2 │ └── your_company │ ├── boot.img │ ├── friendlyarm.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ └── u-boot-sunxi-with-spl.bin └── SD-bootable-2.img
- part1/boot_linux-4.14_h3/目录被制作成了boot.img;
- part2/h3/4.14/eflasher/rootfs/目录被制作成了rootfs.img;
- out/SD-bootable-1/目录被制作成了friendlyarm.img;
- SD-bootable-2.img则为最终的eflasher ROM文件,它是由SD-bootable-2目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;
事实下,FriendlyElec发布的所有H3板子的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip都是同一个文件。
4.3 仅制作boot.img/rootfs.img
rom-maker-lite是通过./tools/mk_fsimg.sh脚本来生成分区文件(boot.img、rootfs.img)的,其用法如下:
参数 说明 参数1 指定分区格式,支持vfat/ext4/exfat
参数2 指定输出文件;
参数3 指定输入目录;
参数4 指定输出文件的大小,单位是MByte,必须大于输入目录。
可根据输入目录实际情况填写,通常情况下由于需要保存文件系统的信息,需要比输入目录大一点,如果提示空间不足,则需要增大该参数。参数5 指定分区的标签;
4.3.1 Linux-4.14
为Linux-4.14 sd ROM生成boot.img和rootfs.img的命令如下:
$ cd rom-maker-lite $ ./tools/mk_fsimg.sh vfat boot.img ./part1/boot_linux-4.14_h3/ 40 boot $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/4.14/friendlycore/rootfs/ 4096 rootfs
上述命令适用于所有H3的板子。
4.3.2 Linux-3.4
为NanoPi M1 Linux-3.14 sd ROM生成boot.img和rootfs.img的命令如下:
$ cd rom-maker-lite $ ./tools/mk_fsimg.sh vfat boot.img ./part1/boot_linux-3.4_m1/ 40 boot $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/3.4/friendlycore/rootfs/ 4096 rootfs
上述命令仅适用于NanoPi M1,其他H3的板子的命令也是类似的.
5 制作H5 平台的系统映像
如果你定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),你可以选择用dd命令将带有你的应用程序和配置的SD卡的数据完整地拷贝出来,这种方法简单粗暴,但是效率不高。另外,你也可以使用FriendlyElec 提供的rom-maker-lite工具。
rom-maker-lite是一套通用的制作映像文件的脚本工具,目前支持为 H3/H5 系列的开发板制作Linux平台的sd/eflasher ROM文件(尚未支持Android)。
- 执行./mkimage.sh查看帮助信息:
$ ./mkimage.sh Usage: $ apt-get install tree exfat-utils dosfstools python3-tk $ ./mkimage.sh -c <filesystem type> -m <partmap> -d "<misc dir>;<partition1 dir>;<partition2 dir>;..." -c <filesystem type>: 1: misc(bootloader) + fat32 boot.img + ext4 rootfs.img 2: misc(bootloader) + fat32 boot.img + ext4 rootfs.img + exfat friendlyarm.img 3: misc(bootloader) + ext4 boot.img + ext4 rootfs.img
参数 说明 -c <filesystem type> -c 用于指定ROM Image内各分区的文件系统格式,对于H3/H5系列的开发板:
-c 1表示使用“misc(bootloader) + fat32 boot.img + ext4 rootfs.img”布局,适用于FriendlyCore/Ubuntu/Debian/OpenWrt等sd ROM;
-c 2表示使用"misc(bootloader) + fat32 boot.img + ext4 rootfs.img + exfat friendlyarm.img"布局,适用于eflasher ROM。-m <partmap> -m 用于指定制作ROM时需要的partmap文件。
partmap文件用于指定ROM Image的组成文件和分区的大小,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。-d "<misc dir>;<partition1 dir>;<partition2 dir>;..." -d 用于指定系统文件所在的目录,每个路径之间用“;”分割,对于H3/H5系列的开发板:
<misc dir>: 用于指定bootloader所在的目录路径;
<partition1 dir>: 用于指定boot分区的目录路径;
<partition2 dir>: 用于指定rootfs分区的目录路径;
最后的...表示就还可以接收更多的目录路径。当制作eflasher ROM时,就需要添加friendlyarm分区的目录路径;
- 准备工作
经测试过PC机 Ubuntu版本包括:
1) ubuntu-16.04.5-desktop-amd64.iso
2) ubuntu-18.04.1-desktop-amd64.iso
如果你当前PC机使用的Ubuntu系统无法成功执行出系统映像,请尝试切换到上面这两个版本的Ubuntu系统。
在开始制作系统映像前,必须先安装下列软件包:
$ apt-get install tree exfat-utils dosfstools python3-tk
由于制作系统映像需要root权限,请先切换到root用户:
$ su root
5.1 制作sd ROM
5.1.1 Linux-4.14
事实上,对于Linux-4.14 BSP,相同rootfs的所有H5 板子的sd ROM文件都是同一个,所以对于这个版本的BSP,所有H5 的板子的sd ROM 的制作命令是一样的。
这里以制作FriendlyCore sd ROM为例进行讲解,Ubuntu、Debian、OpenWrt等sd ROM文件的制作方法是一样的。
- 准备FriendlyCore的rootfs目录
有2种方式可以准备FriendlyCore的rootfs目录:
1) 制作一张带FriendlyCore系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区;
2) 解压网盘里的/rootfs/rootfs_friendlycore_4.14_YYYYMMDD.tgz
- 假设rootfs目录的路径为./rom-maker-lite/part2/h5/4.14/friendlycore/rootfs/,执行下面的命令可生成sd ROM:
$ cd rom-maker-lite $ ./mkimage.sh -c 1 -m partmap/h5_linux-4.14/partmap.txt -d "misc/uboot-2017_h5/;part1/boot_linux-4.14_h5/;part2/h5/4.14/friendlycore/rootfs/"
- 对于所有使用Linux-4.14 BSP的H5板子,使用的都是同一个partmap文件: partmap/h5_linux-4.14/partmap.txt。
- 如果有需要,你可以将misc/uboot-2017_h5、part1/boot_linux-4.14_h5目录下的文件替换为你自己定制编译的文件,通过tree命令可查看有哪些可替换的文件:
$ tree misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ misc/uboot-2017_h5/ ├── sunxi-spl.bin └── u-boot.itb part1/boot_linux-4.14_h5/ ├── boot.cmd ├── boot.scr ├── Image ├── overlays │ └── sun50i-h5-gpio-dvfs-overlay.dtb ├── rootfs.cpio.gz ├── sun50i-h5-nanopi-k1-plus.dtb ├── sun50i-h5-nanopi-neo2.dtb ├── sun50i-h5-nanopi-neo-core2.dtb └── sun50i-h5-nanopi-neo-plus2.dtb
mkimage.sh执行成功后,会生成out/SD-bootable-1目录(这里的"1"对应参数“-c 1”),,其内容如下:
$ tree out/ out/ ├── SD-bootable-1 │ └── your_company │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ ├── sunxi-spl.bin │ └── u-boot.itb ├── SD-bootable-1.img
- part1/boot_linux-4.14_h5/目录被制作成了boot.img;
- part2/h5/4.14/friendlycore/rootfs/目录被制作成了rootfs.img;
- SD-bootable-1.img则为最终的sd ROM文件,它是由SD-bootable-1目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h5]_sd_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;
5.2 制作eflasher ROM
制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd ROM,即已经有待烧写到eMMC的原材料文件。
例如想制作用于烧写“Linux-4.14的FriendlyCore”的eflasher ROM,先要有"Linux-4.14的FriendlyCore"的sd ROM原材料,即:
$ tree out/ out/ ├── SD-bootable-1 │ └── your_company │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ ├── sunxi-spl.bin │ └── u-boot.itb
- 准备eflasher的rootfs目录
有2种方式可以准备eflasher的rootfs目录:
1) 制作一张带eflasher 系统的SD卡,然后基于该SD卡进行定制开发,当开发完毕后,在PC机上挂载该SD卡的rootfs分区;
2) 解压网盘里的/rootfs/rootfs_eflasher_4.14_YYYYMMDD.tgz
- 假设eflasher rootfs目录的路径为./rom-maker-lite/part2/h3/4.14/eflasher/rootfs/,执行下面的命令可生成eflasher ROM:
$ cd rom-maker-lite $ ./mkimage.sh -c 2 -m partmap/h5_eflasher-4.14/partmap.txt -d "misc/uboot-2017_h5/;part1/boot_linux-4.14_h5/;part2/h5/4.14/eflasher/rootfs;out/SD-bootable-1"
mkimage.sh执行成功后,会生成out/SD-bootable-2目录,其内容如下:
$ tree out/ out/ ├── SD-bootable-2 │ └── your_company │ ├── boot.img │ ├── friendlyarm.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ ├── sunxi-spl.bin │ └── u-boot.itb └── SD-bootable-2.img
- part1/boot_linux-4.14_h3/目录被制作成了boot.img;
- part2/h3/4.14/eflasher/rootfs/目录被制作成了rootfs.img;
- out/SD-bootable-1/目录被制作成了friendlyarm.img;
- SD-bootable-2.img则为最终的eflasher ROM文件,它是由SD-bootable-2目录下的所有文件组装而来的,等效于FriendlyElec 发布的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img;
事实下,FriendlyElec发布的所有H3板子的nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip都是同一个文件。
5.3 仅制作boot.img/rootfs.img
rom-maker-lite是通过./tools/mk_fsimg.sh脚本来生成分区文件(boot.img、rootfs.img)的,其用法如下:
参数 说明 参数1 指定分区格式,支持vfat/ext4/exfat
参数2 指定输出文件;
参数3 指定输入目录;
参数4 指定输出文件的大小,单位是MByte,必须大于输入目录。
可根据输入目录实际情况填写,通常情况下由于需要保存文件系统的信息,需要比输入目录大一点,如果提示空间不足,则需要增大该参数。参数5 指定分区的标签;
5.3.1 Linux-4.14
为Linux-4.14 sd ROM生成boot.img和rootfs.img的命令如下:
$ cd rom-maker-lite $ ./tools/mk_fsimg.sh vfat boot.img ./part1/boot_linux-4.14_h3/ 40 boot $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/4.14/friendlycore/rootfs/ 4096 rootfs
上述命令适用于所有H3的板子。
5.3.2 Linux-3.4
为NanoPi M1 Linux-3.14 sd ROM生成boot.img和rootfs.img的命令如下:
$ cd rom-maker-lite $ ./tools/mk_fsimg.sh vfat boot.img ./part1/boot_linux-3.4_m1/ 40 boot $ ./tools/mk_fsimg.sh ext4 rootfs.img ./part2/h3/3.4/friendlycore/rootfs/ 4096 rootfs
上述命令仅适用于NanoPi M1,其他H3的板子的命令也是类似的.