Difference between revisions of "How to make your own SD-bootable ROM/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 112: Line 112:
 
<br>
 
<br>
 
* <b>为H3 系列的板子制作基于Uboot-2011 + Linux-3.4 的sd ROM(例如FriendlyCore/Debian/OpenWrt...) </b>
 
* <b>为H3 系列的板子制作基于Uboot-2011 + Linux-3.4 的sd ROM(例如FriendlyCore/Debian/OpenWrt...) </b>
无论是基于什么版本的BSP,做rom的原理都是一样的。这里以制作NanoPi M1的FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM文件的制作方法是类似的。<br><br>
+
无论是基于什么版本的BSP,做rom的原理都是一样的,这里不再赘述。这里以制作NanoPi M1的FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM的制作方法是类似的。<br><br>
 
执行命令:
 
执行命令:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 118: Line 118:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
请将对应目录下的文件替换为你自己的定制文件。对于所有使用Linux-3.4 BSP的H3板子,使用的都是同一个partmap文件partmap/h3_linux-3.4/partmap.txt。<br>
 
请将对应目录下的文件替换为你自己的定制文件。对于所有使用Linux-3.4 BSP的H3板子,使用的都是同一个partmap文件partmap/h3_linux-3.4/partmap.txt。<br>
以此类推,NanoPi M1 Plus 的做ROM 命令如下:
+
以此类推,NanoPi M1 Plus 的sd ROM 制作命令如下:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ ./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"
 
$ ./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"
Line 139: Line 139:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
假设你有一张带有eflasher 系统的SD卡,请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为part2/h3/4.14/eflasher/rootfs, 请注意使用真实路径),然后通过以下命令就可以生成Eflasher ROM:
+
假设你有一张带有eflasher 系统的SD卡,请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为part2/h3/4.14/eflasher/rootfs, 请注意使用真实路径),然后通过以下命令就可以生成eflasher ROM:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ ./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 -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/"
Line 175: Line 175:
  
 
==制作H5 平台的系统映像==
 
==制作H5 平台的系统映像==
如果你定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以参考如下操作:<br>
+
如果你定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以使用FriendlyElec提供的[https://pan.baidu.com/s/1DSd4XYXr1yGyQTdRNQNoOw rom-maker-lite]工具。<br>
下载压缩包rom-maker-lite.tar.gz: [https://pan.baidu.com/s/1DSd4XYXr1yGyQTdRNQNoOw 点击下载],然后在PC机 Ubuntu系统里解压得到如下目录:
+
rom-maker-lite是一套通用的制作映像文件的脚本工具,目前支持为 H3/H5 系列的开发板制作Linux平台的sd/eflasher ROM文件(尚未支持Android),解压后执行./mkimage.sh可以查看帮助信息:
<syntaxhighlight lang="bash">
+
$ rom-maker-lite
+
</syntaxhighlight>
+
rom-maker-lite里最重要的脚本工具为mkimage.sh,执行该脚本可以制作出各种从SD启动的ROM(例如FriendlyCore系统、EFlasher系统)。<br><br>
+
 
+
目前rom-maker-lite支持为 H3/H5 系列的开发板制作Linux平台的ROM文件,执行./mkimage.sh可以查看帮助信息:
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ ./mkimage.sh  
 
$ ./mkimage.sh  
 
Usage:
 
Usage:
     $ apt-get install tree dosfstools
+
     $ apt-get install tree exfat-utils dosfstools python3-tk
     $ ./mkimage.sh <prepare type> <partmap> <misc dir> <partition1 dir> <partition2 dir>
+
     $ ./mkimage.sh -c <filesystem type> -m <partmap> -d "<misc dir>;<partition1 dir>;<partition2 dir>;..."
         prepare type:  
+
         -c <filesystem type>:  
             p1: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs)
+
             1: misc(bootloader) + fat32 boot.img + ext4 rootfs.img
             p2: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs) + partition3.img(fat32 eflashed material)
+
             2: misc(bootloader) + fat32 boot.img + ext4 rootfs.img + exfat friendlyarm.img
             p3: prepare misc(bootloader) + partition1.img(ext4 boot) + partition2.img(ext4 rootfs)
+
             3: misc(bootloader) + ext4 boot.img + ext4 rootfs.img
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 198: Line 192:
 
|参数||说明
 
|参数||说明
 
|-
 
|-
|<prepare type>  || 用于指定做ROM前的准备方式,对于H3/H5系列的开发板,p1表示FriendlyCore/Ubuntu/Debian系列的ROM,p2标志制作Eflasher系列的ROM。
+
| -c <filesystem type>  ||  
 +
-c 用于指定ROM文件内各分区的文件系统格式,对于H3/H5系列的开发板:<br>
 +
-c 1适用于FriendlyCore/Ubuntu/Debian/OpenWrt等sd ROM; <br>
 +
-c 2适用于eflasher ROM。
 
|-
 
|-
|<partmap>  ||  用于指定制作ROM时需要的partmap文件,partmap文件用于指定ROM Image的布局方式和组成文件,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。
+
| -m <partmap>  ||  用于指定制作ROM时需要的partmap文件,partmap文件用于指定ROM Image的布局方式和组成文件,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。
 
|-
 
|-
|<misc dir>   ||  对于H3/H5系列的开发板,用于指定bootloader所在的目录路径。
+
| -d "<misc dir>;<partition1 dir>;<partition2 dir>;..." ||
|-
+
-d 用于指定系统文件所在的目录,每个路径之间用“;”分割,对于H3/H5系列的开发板:<br>
|<partition1 dir>  || 对于H3/H5系列的开发板,用于指定boot分区的目录路径。
+
<misc dir>: 用于指定bootloader所在的目录路径;<br>
|-
+
<partition1 dir>: 用于指定boot分区的目录路径;<br>
|<partition2 dir> ||  对于H3/H5系列的开发板,用于指定rootfs分区的目录路径。
+
<partition2 dir>: 用于指定rootfs分区的目录路径;<br>
 +
最后的...表示就还可以接收更多的目录路径。当制作eflasher ROM时,就需要添加friendlyarm分区的目录路径;
 
|-
 
|-
 
|}
 
|}
  
<br>
+
* <b>准备工作</b>
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的ROM</b>
+
经测试过PC机 Ubuntu版本包括:<br>
所有H5 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H5 系列的板子的做ROM命令是一样的。假设你有一张已经烧写FriendlyCore系统的SD卡,该SD卡的rootfs目录下已经包含了你的产品应用程序,请将SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为/media/SD/rootfs, 请注意使用真实路径),然后通过以下命令可以生成产品适用的ROM文件:
+
1) ubuntu-16.04.5-desktop-amd64.iso <br>
 +
2) ubuntu-18.04.1-desktop-amd64.iso <br>
 +
如果你当前PC机使用的Ubuntu系统无法成功执行出系统映像,请尝试切换到上面这两个版本的Ubuntu系统。<br>
 +
 
 +
在开始制作系统映像前,必须先安装下列软件包:
 +
<syntaxhighlight lang="bash">
 +
$ apt-get install tree exfat-utils dosfstools python3-tk
 +
</syntaxhighlight>
 +
 
 +
由于制作系统映像需要root权限,请先切换到root用户:
 +
<syntaxhighlight lang="bash">
 +
$ su root
 +
</syntaxhighlight>
 +
 
 +
 
 +
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的sd ROM(例如FriendlyCore/Debian/OpenWrt...)</b>
 +
事实上,对于Uboot-2017 + Linux-4.14版本的BSP,所有H5 系列的板子的sd ROM文件都是同一个。所以对于这个版本的BSP,所有H3 系列的板子的sd ROM 的制作命令是一样的。
 +
这里以制作FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM文件的制作方法是类似的。<br><br>
 +
假设你已经有一张带有FriendlyCore系统的SD卡,并且该SD卡的rootfs目录下已经包含了你自己的应用程序和设置。请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为rom-maker-lite/part2/h3/4.14/friendlycore/rootfs/, 请注意使用真实路径),使用下面的命令可以生成你自己定制的ROM文件:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ./mkimage.sh p1 partmap/h5_linux-4.14/partmap.txt misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ /media/SD/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>
请将对应目录(misc/uboot-2017_h5、part1/boot_linux-4.14_h5)下的文件替换为你自己的定制文件,当然你也可以使用目录里预编译好的系统文件,我们会不定期更新预编译好的系统文件,通过tree命令可查看有哪些可替换的系统文件,例如:
+
如果有需要,可以将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 236: Line 252:
  
 
对于所有使用Linux-4.14 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-4.14/partmap.txt。<br>
 
对于所有使用Linux-4.14 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-4.14/partmap.txt。<br>
mkimage.sh执行成功后,会生成一个out/SD-bootable-1目录,其内容如下:
+
mkimage.sh执行成功后,会生成out/SD-bootable-1目录,其内容如下:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ tree out/
 
$ tree out/
Line 251: Line 267:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
part1/boot_linux-4.14_h5/目录被制作成了boot.img,part2/rootfs_demo/被制作成了rootfs.img,而SD-bootable-1.img则为最终的ROM文件。
+
part1/boot_linux-4.14_h5/目录被制作成了boot.img,part2/h5/4.14/friendlycore/rootfs/被制作成了rootfs.img,SD-bootable-1.img则为最终的sd ROM文件,你可以用win32diskimager或者dd命令将SD-bootable-1.img烧写到SD卡中。
 
<!--
 
<!--
你可以通过如下命令迅速将其烧写到SD卡中以进行测试:
+
另外,你可以通过如下命令快速地将系统烧写到SD卡中以进行测试:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-1/your_company/partmap.txt
 
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-1/your_company/partmap.txt
Line 259: Line 275:
 
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
 
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
 
-->
 
-->
你可以用win32diskimager或者dd命令将SD-bootable-2.img烧写到SD卡中。
 
  
 
<br>
 
<br>
* <b>为H5 系列的板子制作基于Uboot-2014 + Linux-3.10 的ROM </b>
+
* <b>为H5 系列的板子制作基于Uboot-2014 + Linux-3.10 的sd ROM(例如FriendlyCore/Debian/OpenWrt...) </b>
以NanoPi NEO2为例,执行命令:
+
无论是基于什么版本的BSP,做rom的原理都是一样的,这里不再赘述。这里以制作NanoPi NEO2的FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM的制作方法是类似的。<br><br>
 +
执行命令:
 +
<syntaxhighlight lang="bash">
 +
$ ./mkimage.sh -c 1 -m partmap/h5_linux-3.10/partmap.txt -d "misc/uboot-2014_neo2/;part1/boot_linux-3.10_neo2/;part2/neo2/3.10/friendlycore/rootfs"
 +
</syntaxhighlight>
 +
请将对应目录下的文件替换为你自己的定制文件。对于所有使用Linux-3.10 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-3.10/partmap.txt。<br>
 +
以此类推,NanoPi NEO Plus2 的sd ROM 制作命令如下:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ./mkimage.sh p1 partmap/h5_linux-3.10/partmap.txt misc/uboot-2014_neo2/ part1/boot_linux-3.10_neo2/ part2/rootfs_demo/
+
$ ./mkimage.sh -c 1 -m partmap/h5_linux-3.10/partmap.txt -d "misc/uboot-2014_neo-plus2/;part1/boot_linux-3.10_neo-plus2/;part2/neo-plus2/3.10/friendlycore/rootfs"
 
</syntaxhighlight>
 
</syntaxhighlight>
请将对应目录下的文件替换为你自己的定制文件。<br>
 
对于所有使用Linux-3.10 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-3.10/partmap.txt。<br>
 
  
 
<br>
 
<br>
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的Eflasher ROM</b>
+
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的eflasher ROM</b>
制作Eflasher ROM的前提条件是已经成功制作出了FriendlyCore系列的ROM,即已经有待烧写到eMMC的原材料文件,例如基于Uboot-2017 + Linux-4.14的FriendlyCore系统::
+
制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd ROM,即已经有待烧写到eMMC的原材料文件,例如基于Uboot-2017 + Linux-4.14的FriendlyCore系统:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ tree out/
 
$ tree out/
Line 286: Line 305:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
假设你有一张已经烧写Eflasher系统的SD卡,请将SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为/media/SD/rootfs-eflasher, 请注意使用真实路径),然后通过以下命令就可以生成Eflasher ROM:
+
假设你有一张带有eflasher 系统的SD卡,请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为part2/h5/4.14/eflasher/rootfs, 请注意使用真实路径),然后通过以下命令就可以生成eflasher ROM:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ./mkimage.sh p2 partmap/h5_eflasher-4.14/partmap.txt misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ /media/SD/rootfs-eflasher 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>
mkimage.sh执行成功后,会生成一个out/SD-bootable-2目录,其内容如下:
+
mkimage.sh执行成功后,会生成out/SD-bootable-2目录,其内容如下:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ tree out/
 
$ tree out/
Line 314: Line 333:
 
└── SD-bootable-2.img
 
└── SD-bootable-2.img
 
</syntaxhighlight>
 
</syntaxhighlight>
SD-bootable-2.img为最终的Eflasher ROM文件,该Eflasher ROM能烧写什么系统到eMMC完全取决于out/SD-bootable-1/里包含了什么系统文件。
+
SD-bootable-2.img即为最终的eflasher ROM文件,该eflasher ROM能烧写什么系统到eMMC完全取决于out/SD-bootable-1/里包含了什么系统,你可以用win32diskimager或者dd命令将SD-bootable-2.img烧写到SD卡中。
 
<!--
 
<!--
通过如下命令迅速将其烧写到SD卡中以进行测试:
+
另外,通过如下命令快速地将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 322: Line 341:
 
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
 
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
 
-->
 
-->
你可以用win32diskimager或者dd命令将SD-bootable-2.img烧写到SD卡中。
 

Revision as of 04:31, 31 January 2019

English

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文件),可以使用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文件内各分区的文件系统格式,对于H3/H5系列的开发板:
-c 1适用于FriendlyCore/Ubuntu/Debian/OpenWrt等sd ROM;
-c 2适用于eflasher ROM。

-m <partmap> 用于指定制作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


  • 为H3 系列的板子制作基于Uboot-2017 + Linux-4.14 的sd ROM(例如FriendlyCore/Debian/OpenWrt...)

事实上,对于Uboot-2017 + Linux-4.14版本的BSP,所有H3 系列的板子的sd ROM文件都是同一个。所以对于这个版本的BSP,所有H3 系列的板子的sd ROM 的制作命令是一样的。 这里以制作FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM文件的制作方法是类似的。

假设你已经有一张带有FriendlyCore系统的SD卡,并且该SD卡的rootfs目录下已经包含了你自己的应用程序和设置。请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为rom-maker-lite/part2/h3/4.14/friendlycore/rootfs/, 请注意使用真实路径),使用下面的命令可以生成你自己定制的ROM文件:

$ ./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/"

如果有需要,可以将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

对于所有使用Linux-4.14 BSP的H3板子,使用的都是同一个partmap文件partmap/h3_linux-4.14/partmap.txt。
mkimage.sh执行成功后,会生成out/SD-bootable-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文件,你可以用win32diskimager或者dd命令将SD-bootable-1.img烧写到SD卡中。


  • 为H3 系列的板子制作基于Uboot-2011 + Linux-3.4 的sd ROM(例如FriendlyCore/Debian/OpenWrt...)

无论是基于什么版本的BSP,做rom的原理都是一样的,这里不再赘述。这里以制作NanoPi M1的FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM的制作方法是类似的。

执行命令:

$ ./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。
以此类推,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"

NanoPi NEO / NanoPi NEO Air也是同样的道理,这样不再赘述。


  • 为H3 系列的板子制作基于Uboot-2017 + Linux-4.14 的eflasher ROM

制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd ROM,即已经有待烧写到eMMC的原材料文件,例如基于Uboot-2017 + Linux-4.14的FriendlyCore系统:

$ tree out/
out/
├── SD-bootable-1
│   └── your_company
│       ├── boot.img
│       ├── info.conf
│       ├── partmap.txt
│       ├── rootfs.img
│       └── u-boot-sunxi-with-spl.bin

假设你有一张带有eflasher 系统的SD卡,请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为part2/h3/4.14/eflasher/rootfs, 请注意使用真实路径),然后通过以下命令就可以生成eflasher ROM:

$ ./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-1
│   └── your_company
│       ├── boot.img
│       ├── info.conf
│       ├── partmap.txt
│       ├── rootfs.img
│       └── u-boot-sunxi-with-spl.bin
├── SD-bootable-1.img
├── 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

SD-bootable-2.img即为最终的eflasher ROM文件,该eflasher ROM能烧写什么系统到eMMC完全取决于out/SD-bootable-1/里包含了什么系统,你可以用win32diskimager或者dd命令将SD-bootable-2.img烧写到SD卡中。

5 制作H5 平台的系统映像

如果你定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以使用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文件内各分区的文件系统格式,对于H3/H5系列的开发板:
-c 1适用于FriendlyCore/Ubuntu/Debian/OpenWrt等sd ROM;
-c 2适用于eflasher ROM。

-m <partmap> 用于指定制作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


  • 为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的sd ROM(例如FriendlyCore/Debian/OpenWrt...)

事实上,对于Uboot-2017 + Linux-4.14版本的BSP,所有H5 系列的板子的sd ROM文件都是同一个。所以对于这个版本的BSP,所有H3 系列的板子的sd ROM 的制作命令是一样的。 这里以制作FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM文件的制作方法是类似的。

假设你已经有一张带有FriendlyCore系统的SD卡,并且该SD卡的rootfs目录下已经包含了你自己的应用程序和设置。请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为rom-maker-lite/part2/h3/4.14/friendlycore/rootfs/, 请注意使用真实路径),使用下面的命令可以生成你自己定制的ROM文件:

$ ./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/"

如果有需要,可以将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

对于所有使用Linux-4.14 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-4.14/partmap.txt。
mkimage.sh执行成功后,会生成out/SD-bootable-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文件,你可以用win32diskimager或者dd命令将SD-bootable-1.img烧写到SD卡中。


  • 为H5 系列的板子制作基于Uboot-2014 + Linux-3.10 的sd ROM(例如FriendlyCore/Debian/OpenWrt...)

无论是基于什么版本的BSP,做rom的原理都是一样的,这里不再赘述。这里以制作NanoPi NEO2的FriendlyCore sd ROM为例进行讲解,Debian、OpenWrt等sd ROM的制作方法是类似的。

执行命令:

$ ./mkimage.sh -c 1 -m partmap/h5_linux-3.10/partmap.txt -d "misc/uboot-2014_neo2/;part1/boot_linux-3.10_neo2/;part2/neo2/3.10/friendlycore/rootfs"

请将对应目录下的文件替换为你自己的定制文件。对于所有使用Linux-3.10 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-3.10/partmap.txt。
以此类推,NanoPi NEO Plus2 的sd ROM 制作命令如下:

$ ./mkimage.sh -c 1 -m partmap/h5_linux-3.10/partmap.txt -d "misc/uboot-2014_neo-plus2/;part1/boot_linux-3.10_neo-plus2/;part2/neo-plus2/3.10/friendlycore/rootfs"


  • 为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的eflasher ROM

制作eflasher ROM的前提条件是已经成功制作出了FriendlyCore/Debian/OpenWrt等sd ROM,即已经有待烧写到eMMC的原材料文件,例如基于Uboot-2017 + Linux-4.14的FriendlyCore系统:

$ tree out/
out/
├── SD-bootable-1
│   └── your_company
│       ├── boot.img
│       ├── info.conf
│       ├── partmap.txt
│       ├── rootfs.img
│       ├── sunxi-spl.bin
│       └── u-boot.itb

假设你有一张带有eflasher 系统的SD卡,请将该SD卡插入PC机中,然后挂载SD卡的rootfs分区(假设挂载路径为part2/h5/4.14/eflasher/rootfs, 请注意使用真实路径),然后通过以下命令就可以生成eflasher ROM:

$ ./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-1
│   └── your_company
│       ├── boot.img
│       ├── info.conf
│       ├── partmap.txt
│       ├── rootfs.img
│       ├── sunxi-spl.bin
│       └── u-boot.itb
├── SD-bootable-1.img
├── 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

SD-bootable-2.img即为最终的eflasher ROM文件,该eflasher ROM能烧写什么系统到eMMC完全取决于out/SD-bootable-1/里包含了什么系统,你可以用win32diskimager或者dd命令将SD-bootable-2.img烧写到SD卡中。