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

From FriendlyELEC WiKi
Jump to: navigation, search
(制作H3/H5系列板子的Linux ROM文件)
(制作H3/H5系列板子的Linux ROM文件)
Line 32: Line 32:
 
4) 复制新生成的 boot.img 和 rootfs.img 替换 eflasher 的FAT分区 core-qte 目录下的文件,然后即可烧写;<br />
 
4) 复制新生成的 boot.img 和 rootfs.img 替换 eflasher 的FAT分区 core-qte 目录下的文件,然后即可烧写;<br />
  
==制作H3/H5系列板子的Linux ROM文件==
+
==制作H3系列板子的Linux ROM==
 
如果您定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以参考如下操作:<br>
 
如果您定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以参考如下操作:<br>
 
下载压缩包rom-maker-lite.tar.gz: [https://pan.baidu.com/s/1zTBw-TfOyQqkvB9b0YhVOg 点击下载],然后在PC机 Ubuntu系统里解压得到如下2个目录:
 
下载压缩包rom-maker-lite.tar.gz: [https://pan.baidu.com/s/1zTBw-TfOyQqkvB9b0YhVOg 点击下载],然后在PC机 Ubuntu系统里解压得到如下2个目录:
Line 79: Line 79:
 
<br>
 
<br>
 
* <b>为H3 系列的板子制作基于Uboot-2017 + Linux-4.14 的ROM</b>
 
* <b>为H3 系列的板子制作基于Uboot-2017 + Linux-4.14 的ROM</b>
所有H3 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H3 系列的板子的做ROM命令是一样的,执行如下命令:
+
所有H3 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H3 系列的板子的做ROM命令是一样的。假设您有一张已经烧写FriendlyCore系统的SD卡,该SD卡的rootfs目录下已经包含了你的产品应用程序,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs目录,然后通过以下命令可以生成产品适用的ROM文件:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ./mkimage.sh p1 partmap/h3_linux-4.14/partmap.txt misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ part2/rootfs_demo/
+
$ ./mkimage.sh p1 partmap/h3_linux-4.14/partmap.txt misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ /media/SD/rootfs
</syntaxhighlight>
+
</syntaxhighlight>:
请将对应目录(misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ part2/rootfs_demo/)下的文件替换为您自己的定制文件,当然您也可以使用目录里预编译好的系统文件,我们会不定期更新预编译好的系统文件,通过tree命令可查看有哪些可替换的系统文件,例如:
+
请将对应目录(misc/uboot-2017_h3、part1/boot_linux-4.14_h3)下的文件替换为您自己的定制文件,当然您也可以使用目录里预编译好的系统文件,我们会不定期更新预编译好的系统文件,通过tree命令可查看有哪些可替换的系统文件,例如:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ tree misc/uboot-2017_h3/ partition1/boot_linux-4.14_h3/
+
$ tree misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/
 
misc/uboot-2017_h3/
 
misc/uboot-2017_h3/
 
└── u-boot-sunxi-with-spl.bin
 
└── u-boot-sunxi-with-spl.bin
partition1/boot_linux-4.14_h3/
+
part1/boot_linux-4.14_h3/
 
├── boot.cmd
 
├── boot.cmd
 
├── boot.scr
 
├── boot.scr
Line 101: Line 101:
 
└── zImage
 
└── zImage
 
</syntaxhighlight>
 
</syntaxhighlight>
 
rootfs_demo只是一个空目录,请用您自己定制的rootfs代替rootfs_demo。假设您有一张已经烧写FriendlyCore系统的SD卡,该SD卡的rootfs目录下已经包含了你的产品应用程序,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs目录,然后通过以下命令可以生成产品适用的ROM文件:
 
<syntaxhighlight lang="bash">
 
$ ./mkimage.sh p1 partmap/h3_linux-4.14/partmap.txt misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ /media/SD/rootfs
 
</syntaxhighlight>
 
 
 
对于所有使用Linux-4.14 BSP的H3板子,使用的都是同一个partmap文件partmap/h3_linux-4.14/partmap.txt。<br>
 
对于所有使用Linux-4.14 BSP的H3板子,使用的都是同一个partmap文件partmap/h3_linux-4.14/partmap.txt。<br>
 
mkimage.sh执行成功后,会生成一个out/SD-bootable-p1目录,其内容如下:
 
mkimage.sh执行成功后,会生成一个out/SD-bootable-p1目录,其内容如下:
Line 132: Line 126:
 
以NanoPi M1为例,执行命令:
 
以NanoPi M1为例,执行命令:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ./mkimage.sh p1 partmap/h3-linux-3.4/partmap.txt misc/uboot-2011_m1/ part1/boot_linux-3.4_m1/ part2/rootfs_demo/
+
$ ./mkimage.sh p1 partmap/h3_linux-3.4/partmap.txt misc/uboot-2011_m1/ part1/boot_linux-3.4_m1/ part2/rootfs_demo/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
请将对应目录下的文件替换为您自己的定制文件。<br>
 
请将对应目录下的文件替换为您自己的定制文件。<br>
对于所有使用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 的做ROM 命令如下:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ./mkimage.sh p1 partmap/h3-linux-3.4/partmap.txt misc/uboot-2011_m1-plus/ part1/boot_linux-3.4_m1-plus/ part2/rootfs_demo/
+
$ ./mkimage.sh p1 partmap/h3_linux-3.4/partmap.txt misc/uboot-2011_m1-plus/ part1/boot_linux-3.4_m1-plus/ part2/rootfs_demo/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
NanoPi NEO / NanoPi NEO Air也是同样的道理,这样不再赘述。
 
NanoPi NEO / NanoPi NEO Air也是同样的道理,这样不再赘述。
Line 144: Line 138:
 
<br>
 
<br>
 
* <b>为H3 系列的板子制作基于Uboot-2017 + Linux-4.14 的Eflasher ROM</b>
 
* <b>为H3 系列的板子制作基于Uboot-2017 + Linux-4.14 的Eflasher ROM</b>
制作Eflasher ROM的前提是已经成功制作出了FriendlyCore系列的ROM,即已经有待烧写到eMMC的原材料文件,例如:
+
制作Eflasher ROM的前提条件是已经成功制作出了FriendlyCore系列的ROM,即已经有待烧写到eMMC的原材料文件,例如基于Uboot-2017 + Linux-4.14的FriendlyCore系统:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ tree out/
 
$ tree out/
Line 155: Line 149:
 
│      ├── rootfs.img
 
│      ├── rootfs.img
 
│      └── u-boot-sunxi-with-spl.bin
 
│      └── u-boot-sunxi-with-spl.bin
├── SD-bootable-p1.img
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 184: Line 177:
 
└── SD-bootable-p2.img
 
└── SD-bootable-p2.img
 
</syntaxhighlight>
 
</syntaxhighlight>
SD-bootable-p2.img为最终的Eflasher ROM文件,您可以通过如下命令迅速将其烧写到SD卡中以进行测试:
+
SD-bootable-p2.img为最终的Eflasher ROM文件,该Eflasher ROM能烧写什么系统到eMMC完全取决于out/SD-bootable-p1/里包含了什么系统文件。通过如下命令迅速将其烧写到SD卡中以进行测试:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p2/your_company/partmap.txt
 
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p2/your_company/partmap.txt
 
</syntaxhighlight>
 
</syntaxhighlight>
 
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
 
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
 +
 +
 +
 +
 +
 +
 +
==制作H5系列板子的Linux ROM==
 +
如果您定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以参考如下操作:<br>
 +
下载压缩包rom-maker-lite.tar.gz: [https://pan.baidu.com/s/1zTBw-TfOyQqkvB9b0YhVOg 点击下载],然后在PC机 Ubuntu系统里解压得到如下2个目录:
 +
<syntaxhighlight lang="bash">
 +
$ ls
 +
bsp-prebuilt  rom-maker-lite
 +
</syntaxhighlight>
 +
bsp-prebuilt目录里包含了预先编译好的BSP系统文件,例如U-boot / Linux内核等。<br>
 +
rom-maker-lite则包含了一些脚本工具,使用这些脚本工具可以制作出能从SD启动的ROM文件。
 +
 +
解压完毕后,将bsp-prebuilt里的系统文件拷贝到rom-maker-lite中:
 +
<syntaxhighlight lang="bash">
 +
$ cd rom-maker-lite
 +
$ cp ../bsp-prebuilt/* ./ -r
 +
</syntaxhighlight>
 +
 +
rom-maker-lite目前支持为 H3/H5 系列的开发板制作Linux平台的ROM文件,执行./mkimage.sh可以查看帮助信息:
 +
<syntaxhighlight lang="bash">
 +
$ ./mkimage.sh
 +
Usage:
 +
    $ cp ../bsp-prebuilt/* ./ -r
 +
    $ ./mkimage.sh <prepare type> <partmap> <misc dir> <partition1 dir> <partition2 dir>
 +
        prepare type:
 +
            p1: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs)
 +
            p2: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs) + partition3.img(fat32 eflashed material)
 +
            p3: prepare misc(bootloader) + partition1.img(ext4 boot) + partition2.img(ext4 rootfs)
 +
            p4: prepare misc(andorid split img)
 +
</syntaxhighlight>
 +
 +
::{| class="wikitable"
 +
|-
 +
|参数||说明
 +
|-
 +
|<prepare type>  ||  用于指定做ROM前的准备方式,对于H3/H5系列的开发板,p1表示FriendlyCore/Ubuntu/Debian系列的ROM,p2标志制作Eflasher系列的ROM。
 +
|-
 +
|<partmap>  ||  用于指定制作ROM时需要的partmap文件,partmap文件用于指定ROM Image的布局方式和组成文件,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。
 +
|-
 +
|<misc dir>  ||  对于H3/H5系列的开发板,用于指定bootloader所在的目录路径。
 +
|-
 +
|<partition1 dir>  ||  对于H3/H5系列的开发板,用于指定boot分区的目录路径。
 +
|-
 +
|<partition2 dir>  ||  对于H3/H5系列的开发板,用于指定rootfs分区的目录路径。
 +
|-
 +
|}
  
 
<br>
 
<br>
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的ROM </b>
+
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的ROM</b>
所有H5 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H5 系列的板子的做ROM命令是一样的,执行如下命令:
+
所有H5 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H5 系列的板子的做ROM命令是一样的。假设您有一张已经烧写FriendlyCore系统的SD卡,该SD卡的rootfs目录下已经包含了你的产品应用程序,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/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/ part2/rootfs_demo/
+
$ ./mkimage.sh p1 partmap/h5_linux-4.14/partmap.txt misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ /media/SD/rootfs
 +
</syntaxhighlight>
 +
请将对应目录(misc/uboot-2017_h5、part1/boot_linux-4.14_h5)下的文件替换为您自己的定制文件,当然您也可以使用目录里预编译好的系统文件,我们会不定期更新预编译好的系统文件,通过tree命令可查看有哪些可替换的系统文件,例如:
 +
<syntaxhighlight lang="bash">
 +
$ 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
 
</syntaxhighlight>
 
</syntaxhighlight>
请将对应目录下的文件替换为您自己的定制文件。<br>
+
 
对于所有使用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-p1目录,其内容如下:
 +
<syntaxhighlight lang="bash">
 +
$ tree out/
 +
out/
 +
├── SD-bootable-p1
 +
│   └── your_company
 +
│      ├── boot.img
 +
│      ├── info.conf
 +
│      ├── partmap.txt
 +
│      ├── rootfs.img
 +
│      ├── sunxi-spl.bin
 +
│      └── u-boot.itb
 +
├── SD-bootable-p1.img
 +
 
 +
</syntaxhighlight>
 +
part1/boot_linux-4.14_h5/目录被制作成了boot.img,part2/rootfs_demo/被制作成了rootfs.img,而SD-bootable-p1.img则为最终的ROM文件,您可以通过如下命令迅速将其烧写到SD卡中以进行测试:
 +
<syntaxhighlight lang="bash">
 +
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p1/your_company/partmap.txt
 +
</syntaxhighlight>
 +
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
  
 
<br>
 
<br>
Line 203: Line 284:
 
以NanoPi NEO2为例,执行命令:
 
以NanoPi NEO2为例,执行命令:
 
<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 p1 partmap/h5_linux-3.10/partmap.txt misc/uboot-2014_neo2/ part1/boot_linux-3.10_neo2/ part2/rootfs_demo/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
请将对应目录下的文件替换为您自己的定制文件。<br>
 
请将对应目录下的文件替换为您自己的定制文件。<br>
对于所有使用Linux-3.10 BSP的H5板子,使用的都是同一个partmap文件partmap/h5-linux-3.10/partmap.txt。<br>
+
对于所有使用Linux-3.10 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-3.10/partmap.txt。<br>
  
 +
<br>
 +
* <b>为H5 系列的板子制作基于Uboot-2017 + Linux-4.14 的Eflasher ROM</b>
 +
制作Eflasher ROM的前提条件是已经成功制作出了FriendlyCore系列的ROM,即已经有待烧写到eMMC的原材料文件,例如基于Uboot-2017 + Linux-4.14的FriendlyCore系统::
 +
<syntaxhighlight lang="bash">
 +
$ tree out/
 +
out/
 +
├── SD-bootable-p1
 +
│   └── your_company
 +
│      ├── boot.img
 +
│      ├── info.conf
 +
│      ├── partmap.txt
 +
│      ├── rootfs.img
 +
│      ├── sunxi-spl.bin
 +
│      └── u-boot.itb
 +
</syntaxhighlight>
  
<!--
+
假设您有一张已经烧写Eflasher系统的SD卡,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs-eflasher目录,然后通过以下命令可以生成Eflasher ROM:
这里介绍如何将一个目录制作成映像文件,例如:<br>
+
将boot目录制作成 boot.img <br />
+
将rootfs目录制作成 rootfs.img <br />
+
这些文件被用于 eflasher,烧写到eMMC。<br />
+
在PC机上执行下列操作: <br />
+
1) 下载相关工具: [http://wiki.friendlyarm.com/wiki/index.php/File:Eflasher-build-tools.zip EFlasher-build-tools],将其解压,里面的build-boot-fat.sh用于生成fat格式的boot.img,make_ext4fs用于生成ext4格式的rootfs.img。<br>
+
2) 将待烧写 boot 分区目录制作为 fat 格式的 img 文件,假设待烧写的boot目录和rootfs目录位于/mnt/SD/下:<br />
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ls /mnt/SD/
+
$ ./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-p1/
boot rootfs
+
$ cd /mnt/SD/
+
$ ./build-boot-fat.sh boot.img ./boot 40
+
 
</syntaxhighlight>
 
</syntaxhighlight>
40 表示boot.img的大小为40M。 <br />
+
mkimage.sh执行成功后,会生成一个out/SD-bootable-p2目录,其内容如下:
3) 将待烧写的 rootfs 分区目录制作为 ext4 格式的 img 文件:<br />
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ ls /mnt/SD
+
$ tree out/
boot rootfs
+
out/
$ cd /mnt/SD
+
├── SD-bootable-p1
$ ./make_ext4fs -s -l 2097152000 -a root -L rootfs rootfs.img ./rootfs
+
│   └── your_company
 +
│      ├── boot.img
 +
│      ├── info.conf
 +
│      ├── partmap.txt
 +
│      ├── rootfs.img
 +
│      └── u-boot-sunxi-with-spl.bin
 +
├── SD-bootable-p1.img
 +
├── SD-bootable-p2
 +
│   └── your_company
 +
│      ├── boot.img
 +
│      ├── friendlyarm.img
 +
│      ├── info.conf
 +
│      ├── partmap.txt
 +
│      ├── rootfs.img
 +
│      └── u-boot-sunxi-with-spl.bin
 +
└── SD-bootable-p2.img
 
</syntaxhighlight>
 
</syntaxhighlight>
-l 用于指定 img 文件的大小,单位是Byte,2097152000 Byte=2000MB,必须大于实际目录的大小。<br />
+
SD-bootable-p2.img为最终的Eflasher ROM文件,您可以通过如下命令迅速将其烧写到SD卡中以进行测试:
4) 用新生成的 boot.img 和 rootfs.img 替换 eflasher-ROM 的 FRIENDLYARM 分区里对应的系统目录下的同名文件即可,以FriendlyCore(基于U-boot-2017.x和Linux-4.14)为例: <br>
+
<syntaxhighlight lang="bash">
[[File:Eflasher-replace-files-sunxi.png| frameless|300px|Eflasher-replace-files-sunxi.png]]
+
$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p2/your_company/partmap.txt
-->
+
</syntaxhighlight>
 +
注意: 请将/dev/sdX替换为实际的SD卡设备节点。
  
 
==用自制系统制作可启动的SD卡或者SD卡映象 ==
 
==用自制系统制作可启动的SD卡或者SD卡映象 ==

Revision as of 05:52, 30 November 2018

English


1 Change the files in rootfs.img and boot.img

simg2img rootfs.img r.img
mount -t ext4 -o loop r.img /mnt
… To Change Something …
umount /mnt
img2simg r.img rootfs.img

2 制作4418/6818平台文件系统映象文件

这里介绍如何将一个目录制作成映像文件,例如:
将boot目录制作成 boot.img
将rootfs目录制作成 rootfs.img
这些文件被用于 eflasher,烧写到eMMC。
1) 下载 https://github.com/friendlyarm/debian_nanopi2 ;
2) 复制 SD卡中的 boot 分区下的文件到debian_nanopi2/boot ; 复制SD卡中的 rootfs分区下的文件到 debian_nanopi2/rootfs ;
根据自己的需要可以再修改 boot 和 rootfs 目录下的文件。
建议删除rootfs 目录下的文件 etc/fs.resized 否则将不会自动扩展分区。
3) 使用 debian_nanopi2 下的 make_ext4fs 来制作 img:

./tools/make_ext4fs -s -l 67108864 -a root -L boot boot.img boot
./tools/make_ext4fs -s -l 3670016000 -a root -L rootfs rootfs.img rootfs

有一点需要注意的是rootfs.img的大小需要大于rootfs目录的大小,我们默认提供的各个系统的rom,用的是以下值:
lubuntu: 5368709120
debian: 3670016000
friendlycore: 3670016000

4) 复制新生成的 boot.img 和 rootfs.img 替换 eflasher 的FAT分区 core-qte 目录下的文件,然后即可烧写;

3 制作H3系列板子的Linux ROM

如果您定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以参考如下操作:
下载压缩包rom-maker-lite.tar.gz: 点击下载,然后在PC机 Ubuntu系统里解压得到如下2个目录:

$ ls
bsp-prebuilt  rom-maker-lite

bsp-prebuilt目录里包含了预先编译好的BSP系统文件,例如U-boot / Linux内核等。
rom-maker-lite则包含了一些脚本工具,使用这些脚本工具可以制作出能从SD启动的ROM文件。

解压完毕后,将bsp-prebuilt里的系统文件拷贝到rom-maker-lite中:

$ cd rom-maker-lite
$ cp ../bsp-prebuilt/* ./ -r

rom-maker-lite目前支持为 H3/H5 系列的开发板制作Linux平台的ROM文件,执行./mkimage.sh可以查看帮助信息:

$ ./mkimage.sh 
Usage:
    $ cp ../bsp-prebuilt/* ./ -r
    $ ./mkimage.sh <prepare type> <partmap> <misc dir> <partition1 dir> <partition2 dir>
        prepare type: 
            p1: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs)
            p2: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs) + partition3.img(fat32 eflashed material)
            p3: prepare misc(bootloader) + partition1.img(ext4 boot) + partition2.img(ext4 rootfs)
            p4: prepare misc(andorid split img)
参数 说明
<prepare type> 用于指定做ROM前的准备方式,对于H3/H5系列的开发板,p1表示FriendlyCore/Ubuntu/Debian系列的ROM,p2标志制作Eflasher系列的ROM。
<partmap> 用于指定制作ROM时需要的partmap文件,partmap文件用于指定ROM Image的布局方式和组成文件,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。
<misc dir> 对于H3/H5系列的开发板,用于指定bootloader所在的目录路径。
<partition1 dir> 对于H3/H5系列的开发板,用于指定boot分区的目录路径。
<partition2 dir> 对于H3/H5系列的开发板,用于指定rootfs分区的目录路径。


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

所有H3 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H3 系列的板子的做ROM命令是一样的。假设您有一张已经烧写FriendlyCore系统的SD卡,该SD卡的rootfs目录下已经包含了你的产品应用程序,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs目录,然后通过以下命令可以生成产品适用的ROM文件:

$ ./mkimage.sh p1 partmap/h3_linux-4.14/partmap.txt misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ /media/SD/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-p1目录,其内容如下:

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

part1/boot_linux-4.14_h3/目录被制作成了boot.img,part2/rootfs_demo/被制作成了rootfs.img,而SD-bootable-p1.img则为最终的ROM文件,您可以通过如下命令迅速将其烧写到SD卡中以进行测试:

$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p1/your_company/partmap.txt

注意: 请将/dev/sdX替换为实际的SD卡设备节点。


  • 为H3 系列的板子制作基于Uboot-2011 + Linux-3.4 的ROM

以NanoPi M1为例,执行命令:

$ ./mkimage.sh p1 partmap/h3_linux-3.4/partmap.txt misc/uboot-2011_m1/ part1/boot_linux-3.4_m1/ part2/rootfs_demo/

请将对应目录下的文件替换为您自己的定制文件。
对于所有使用Linux-3.4 BSP的H3板子,使用的都是同一个partmap文件partmap/h3_linux-3.4/partmap.txt。
以此类推,NanoPi M1 Plus 的做ROM 命令如下:

$ ./mkimage.sh p1 partmap/h3_linux-3.4/partmap.txt misc/uboot-2011_m1-plus/ part1/boot_linux-3.4_m1-plus/ part2/rootfs_demo/

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


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

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

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

假设您有一张已经烧写Eflasher系统的SD卡,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs-eflasher目录,然后通过以下命令可以生成Eflasher ROM:

$ ./mkimage.sh p2 partmap/h3_eflasher-4.14/partmap.txt misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ /media/SD/rootfs-eflasher out/SD-bootable-p1/

mkimage.sh执行成功后,会生成一个out/SD-bootable-p2目录,其内容如下:

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

SD-bootable-p2.img为最终的Eflasher ROM文件,该Eflasher ROM能烧写什么系统到eMMC完全取决于out/SD-bootable-p1/里包含了什么系统文件。通过如下命令迅速将其烧写到SD卡中以进行测试:

$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p2/your_company/partmap.txt

注意: 请将/dev/sdX替换为实际的SD卡设备节点。




4 制作H5系列板子的Linux ROM

如果您定制了U-boot、Linux内核、文件系统,并且想基于自己定制的文件制作Linux系统映像文件 (以下简称为ROM文件),可以参考如下操作:
下载压缩包rom-maker-lite.tar.gz: 点击下载,然后在PC机 Ubuntu系统里解压得到如下2个目录:

$ ls
bsp-prebuilt  rom-maker-lite

bsp-prebuilt目录里包含了预先编译好的BSP系统文件,例如U-boot / Linux内核等。
rom-maker-lite则包含了一些脚本工具,使用这些脚本工具可以制作出能从SD启动的ROM文件。

解压完毕后,将bsp-prebuilt里的系统文件拷贝到rom-maker-lite中:

$ cd rom-maker-lite
$ cp ../bsp-prebuilt/* ./ -r

rom-maker-lite目前支持为 H3/H5 系列的开发板制作Linux平台的ROM文件,执行./mkimage.sh可以查看帮助信息:

$ ./mkimage.sh 
Usage:
    $ cp ../bsp-prebuilt/* ./ -r
    $ ./mkimage.sh <prepare type> <partmap> <misc dir> <partition1 dir> <partition2 dir>
        prepare type: 
            p1: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs)
            p2: prepare misc(bootloader) + partition1.img(fat32 boot) + partition2.img(ext4 rootfs) + partition3.img(fat32 eflashed material)
            p3: prepare misc(bootloader) + partition1.img(ext4 boot) + partition2.img(ext4 rootfs)
            p4: prepare misc(andorid split img)
参数 说明
<prepare type> 用于指定做ROM前的准备方式,对于H3/H5系列的开发板,p1表示FriendlyCore/Ubuntu/Debian系列的ROM,p2标志制作Eflasher系列的ROM。
<partmap> 用于指定制作ROM时需要的partmap文件,partmap文件用于指定ROM Image的布局方式和组成文件,不同的板子或者是同一板子不同版本的BSP使用的partmap文件是不一样的。
<misc dir> 对于H3/H5系列的开发板,用于指定bootloader所在的目录路径。
<partition1 dir> 对于H3/H5系列的开发板,用于指定boot分区的目录路径。
<partition2 dir> 对于H3/H5系列的开发板,用于指定rootfs分区的目录路径。


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

所有H5 系列的板子是共用同一个基于Uboot-2017 + Linux-4.14 的ROM的,所以对于这个版本的BSP,所有H5 系列的板子的做ROM命令是一样的。假设您有一张已经烧写FriendlyCore系统的SD卡,该SD卡的rootfs目录下已经包含了你的产品应用程序,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs目录,然后通过以下命令可以生成产品适用的ROM文件:

$ ./mkimage.sh p1 partmap/h5_linux-4.14/partmap.txt misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ /media/SD/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-p1目录,其内容如下:

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

part1/boot_linux-4.14_h5/目录被制作成了boot.img,part2/rootfs_demo/被制作成了rootfs.img,而SD-bootable-p1.img则为最终的ROM文件,您可以通过如下命令迅速将其烧写到SD卡中以进行测试:

$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p1/your_company/partmap.txt

注意: 请将/dev/sdX替换为实际的SD卡设备节点。


  • 为H5 系列的板子制作基于Uboot-2014 + Linux-3.10 的ROM

以NanoPi NEO2为例,执行命令:

$ ./mkimage.sh p1 partmap/h5_linux-3.10/partmap.txt misc/uboot-2014_neo2/ part1/boot_linux-3.10_neo2/ part2/rootfs_demo/

请将对应目录下的文件替换为您自己的定制文件。
对于所有使用Linux-3.10 BSP的H5板子,使用的都是同一个partmap文件partmap/h5_linux-3.10/partmap.txt。


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

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

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

假设您有一张已经烧写Eflasher系统的SD卡,将SD卡插入PC机中,SD卡的rootfs分区挂载在/media/SD/rootfs-eflasher目录,然后通过以下命令可以生成Eflasher ROM:

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

mkimage.sh执行成功后,会生成一个out/SD-bootable-p2目录,其内容如下:

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

SD-bootable-p2.img为最终的Eflasher ROM文件,您可以通过如下命令迅速将其烧写到SD卡中以进行测试:

$ ./tools/sd_update -d /dev/SD -p ./out/SD-bootable-p2/your_company/partmap.txt

注意: 请将/dev/sdX替换为实际的SD卡设备节点。

5 用自制系统制作可启动的SD卡或者SD卡映象

在产品量产阶段,通常需要为自已的定制过的产品制作专用的系统映象,这里的系统映象是指 Android编译生成的 boot.img、system.img,或者Ubuntu的根文件系统 rootfs.img 等等。
这个章节将介绍如何用自已编译的系统映象,制作一张可以启动的SD卡,或者,制作一个完整的系统映象文件,完整的系统映象可用于产品量产时批量生成SD卡。
下面以制作S5P4418 Android 启动卡为例,命令如下:

git clone https://github.com/friendlyarm/sd-fuse_nanopi2.git
cd sd-fuse_nanopi2
wget http://112.124.9.243/dvdfiles/S5P4418/images-for-eflasher/android-lollipop-images.tgz
tar xvzf android-lollipop-images.tgz

注:如果是S5P6818,你需要将sd-fuse_nanopi2.git改为sd-fuse_nanopi3.git,S5P4418改为S5P6818。
现在,请将自已编译生成的 Android映象替换掉Android目录下的同名文件,然后用以下命令制作一张可以启动的SD卡:

sudo ./fusing.sh /dev/sde android

注:请将/dev/sde替换为真实的SD卡设备名称。

如果要制成一个完整的系统映象文件,命令改为:

sudo ./mkimage.sh android