How to make your own SD-bootable ROM

From FriendlyARM WiKi
Jump to: navigation, search

查看中文

1 Make Image Files for RK3399

Refer to this repo: https://github.com/friendlyarm/sd-fuse_rk3399

2 Make Image Files for S5P4418

Refer to this repo: https://github.com/friendlyarm/sd-fuse_s5p4418

3 Make Image Files for S5P6818

Refer to this repo: https://github.com/friendlyarm/sd-fuse_s5p6818

4 Make Image Files for H3

If you have a customized U-boot, Linux kernel and file system and want to make a customized Linux image(also called "ROM") based on these files you can run the "dd" command to copy all the files in your bootable SD card. However this is not very efficient. FriendlyElec provides a better utility:rom-maker-lite.

rom-maker-lite is a general utility to make image files. It now supports making a Linux image file for both SD card and eflasher for FriendlyElec's H3/H5 based boards. It doesn't support making an Android image so far. After extract it and run the "./mkimage.sh" command you will see the following information:

$ ./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
Parameter Comment
-c <filesystem type>

-c it is used to specify a partition's file system type. For an H3/H5 based board:
-c 1 applies to an SD card ROM image of FriendlyCore/Ubuntu/Debian/OpenWrt;
-c 2 applies to an eflasher ROM image

-m <partmap> it is used to specify a partmap file for making a ROM image. In general different SoCs or BSPs use different partmap files.
-d "<misc dir>;<partition1 dir>;<partition2 dir>;..."

-d it is used to specify directories for system files such as bootloader, kernel, rootfs etc. Each directory is separated by a ";". For an H3/H5 based board:
<misc dir>: used to specify the bootloader's directory;
<partition1 dir>: used to specify the boot partition's directory;
<partition2 dir>: used to specify the rootfs partition's directory;
"..." means more directories can be specified for files. For example when you make an eflasher ROM image you need a directory for the "friendlyarm" partition;

  • Prerequisites

A host PC running Ubuntu. The Ubuntu versions FriendlyElec tested include:
1) ubuntu-16.04.5-desktop-amd64.iso
2) ubuntu-18.04.1-desktop-amd64.iso
If you PC cannot generate an image we recommend you to use one of the two versions we listed.

Before you proceed make sure you have installed the following package otherwise install it by running the following command.

$ apt-get install tree exfat-utils dosfstools python3-tk

You need to login as root to generate an image. Therefore make sure you are currently working as root otherwise switch to root:

$ su root
  • Make an SD card bootable image based on Uboot-2017 + Linux-4.14 for H3, e.g. FriendlyCore/Debian/OpenWrt...

FriendlyElec's BSP based on Uboot-2017 + Linux-4.14 applies to all FriendlyElec's H3 boards. Therefore the steps to make an image for all H3 boards are the same. Here are the steps to make an SD card image of FriendlyCore. The steps to make an SD card image of Debian or OpenWrt are similar.

Suppose you already have an SD card with a FriendlyCore system. The SD card has applications and configuration files in the "rootfs" directory. Insert this card to a host PC and mount its rootfs directory(in our test the directory was "rom-maker-lite/part2/h3/4.14/friendlycore/rootfs/"). Run the following command to generate an image file.:

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

You can replace the files under the "misc/uboot-2017_h3" and "part1/boot_linux-4.14_h3" directories with your wanted files too. FriendlyElec will release the latest files when necessary. You can command "tree" to check all the available files:

$ 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

For all FriendlyElec's H3 based boards that support Linux-4.14 BSP they use the same partmap file "partmap/h3_linux-4.14/partmap.txt".
After mkimage.sh is executed successfully an "out/SD-bootable-1" directory and the following files will be generated:

$ 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

The "part1/boot_linux-4.14_h3/" directory will be converted to a boot.img. The "part2/h3/4.14/friendlycore/rootfs/" will be converted to a rootfs.img. The SD-bootable-1.img will be an SD card ROM image. For example FriendlyElec's nanopi-[h3]_sd_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip image file is an SD card ROM image. You can use the win32diskimager utility or the "dd" command to flash the SD-bootable-1.img to an SD card.


  • Make an SD card bootable image based on Uboot-2011 + Linux-3.4 for H3, e.g. FriendlyCore/Debian/OpenWrt...

The basic steps to make an image for all FriendlyElec's H3 based boards are very similar. We take the NanoPi M1 as an example to show how to make an SD card FriendlyCore image. The steps apply to Debian and OpenWrt too.

Run the following command:

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

The SD-bootable-1.img will be an SD card ROM image. For example FriendlyElec's nanopi-m1_sd_friendlycore-xenial_3.4_armhf_YYYYMMDD.img.zip image file is an SD card ROM image.You can replace the corresponding files with your wanted files.For all FriendlyElec's H3 based boards that support Linux-3.4 BSP they use the same partmap file "partmap/h3_linux-3.4/partmap.txt".
To make an SD card image for the NanoPi M1 Plus you can run the following command:

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

The SD-bootable-1.img will be an SD card ROM image. For example FriendlyElec's nanopi-m1-plus_sd_friendlycore-xenial_3.4_armhf_YYYYMMDD.img.zip image file is an SD card ROM image.This applies to the NanoPi NEO and the NanoPi NEO Air.


  • Make an eflasher image based on Uboot-2017 + Linux-4.14 for H3 based boards

To make an eflasher ROM image you need to have an SD card image ready.We take a FriendlyCore system based on Uboot-2017 + Linux-4.14 as an example:

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

If you have an SD card with an eflasher image insert this card to a host PC, mount its rootfs directory(in our test the directory was "part2/h3/4.14/eflasher/rootfs") and run the following command to generate an eflasher ROM image:

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

After mkimage.sh is executed an "out/SD-bootable-2" directory and the following files will be generated:

$ 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

The SD-bootable-2.img will be an eflasher image. For example FriendlyElec's nanopi-[h3]_eflasher_friendlycore-xenial_4.14_armhf_YYYYMMDD.img.zip image file is an SD card ROM image.The image contained in the "out/SD-bootable-1/" directory will be the image to be flashed to eMMC. You can use the win32diskimager utility or the "dd" command to flash the SD-bootable-2.img image to an SD card.

5 Make Image Files for H5

If you have a customized U-boot, Linux kernel and file system and want to make a customized Linux image(also called "ROM") based on these files you can run the "dd" command to copy all the files in your bootable SD card. However this is not very efficient. FriendlyElec provides a better utility:rom-maker-lite.

rom-maker-lite is a general utility to make image files. It now supports making a Linux image file for both SD card and eflasher for FriendlyElec's H3/H5 based boards. It doesn't support making an Android image so far. After extract it and run the "./mkimage.sh" command you will see the following information:

$ ./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
Parameter Comment
-c <filesystem type>

-c it is used to specify a partition's file system type. For an H3/H5 based board:
-c 1 applies to an SD card ROM image of FriendlyCore/Ubuntu/Debian/OpenWrt;
-c 2 applies to an eflasher ROM image

-m <partmap> it is used to specify a partmap file for making a ROM image. In general different SoCs or BSPs use different partmap files.
-d "<misc dir>;<partition1 dir>;<partition2 dir>;..."

-d it is used to specify directories for system files such as bootloader, kernel, rootfs etc. Each directory is separated by a ";". For an H3/H5 based board:
<misc dir>: used to specify the bootloader's directory;
<partition1 dir>: used to specify the boot partition's directory;
<partition2 dir>: used to specify the rootfs partition's directory;
"..." means more directories can be specified for files. For example when you make an eflasher ROM image you need a directory for the "friendlyarm" partition;

  • Prerequisites

A host PC running Ubuntu. The Ubuntu versions FriendlyElec tested include:
1) ubuntu-16.04.5-desktop-amd64.iso
2) ubuntu-18.04.1-desktop-amd64.iso
If you PC cannot generate an image we recommend you to use one of the two versions we listed.

Before you proceed make sure you have installed the following package otherwise install it by running the following command.

$ apt-get install tree exfat-utils dosfstools python3-tk

You need to login as root to generate an image. Therefore make sure you are currently working as root otherwise switch to root:

$ su root
  • Make an SD card bootable image based on Uboot-2017 + Linux-4.14 for H5, e.g. FriendlyCore/Debian/OpenWrt...

The basic steps to make an image for all FriendlyElec's H5 based boards are very similar. We show how to make an SD card FriendlyCore image. The steps apply to Debian and OpenWrt too.

Suppose you already have an SD card with a FriendlyCore system. The SD card has applications and configuration files in the "rootfs" directory. Insert this card to a host PC and mount its rootfs directory(in our test the directory was "/part2/h5/4.14/friendlycore/rootfs/"). Run the following command to generate an image file:

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

You can replace the files under the "misc/uboot-2017_h5" and "part1/boot_linux-4.14_h5" directories with your wanted files too. FriendlyElec will release the latest files when necessary. You can command "tree" to check all the available files:

$ 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

For all FriendlyElec's H5 based boards that support Linux-4.14 BSP they use the same partmap file "partmap/h5_linux-4.14/partmap.txt".
After mkimage.sh is executed successfully an "out/SD-bootable-1" directory and the following files will be generated:

$ 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

The "part1/boot_linux-4.14_h5/" directory will be converted to a boot.img. The "part2/h5/4.14/friendlycore/rootfs/" will be converted to a rootfs.img. The SD-bootable-1.img will be an SD card ROM image. For example FriendlyElec's nanopi-[h5]_sd_friendlycore-xenial_4.14_arm64_YYYYMMDD.img.zip image file is an SD card ROM image. You can use the win32diskimager utility or the "dd" command to flash the SD-bootable-1.img to an SD card.


  • Make an SD card bootable image based on Uboot-2014 + Linux-3.10 for H5, e.g. FriendlyCore/Debian/OpenWrt...

The basic steps to make an image for all FriendlyElec's H5 based boards are very similar. We take the NanoPi NEO2 as an example to show how to make an SD card FriendlyCore image. The steps apply to Debian and OpenWrt too.

Run the following command:

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

The SD-bootable-1.img will be an SD card ROM image. For example FriendlyElec's nanopi-neo2_sd_friendlycore-xenial_3.10_arm64_YYYYMMDD.img.zip image file is an SD card ROM image.You can replace the corresponding files with your wanted files.For all FriendlyElec's H5 based boards that support Linux-3.10 BSP they use the same partmap file "partmap/h5_linux-3.10/partmap.txt".
To make an SD card image for the NanoPi NEO Plus2 you can run the following command:

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

The SD-bootable-1.img will be an SD card ROM image. For example FriendlyElec's nanopi-neo-plus2_sd_friendlycore-xenial_3.10_arm64_YYYYMMDD.img.zip image file is an SD card ROM image.


  • Make an eflasher image based on Uboot-2017 + Linux-4.14 for H5 based boards

To make an eflasher ROM image you need to have an SD card image ready.We take a FriendlyCore system based on Uboot-2017 + Linux-4.14 as an example:

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

If you have an SD card with an eflasher image insert this card to a host PC, mount its rootfs directory(in our test the directory was "part2/h5/4.14/eflasher/rootfs") and run the following command to generate an eflasher ROM image:

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

After mkimage.sh is executed successfully an "out/SD-bootable-2" directory and the following files will be generated:

$ 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

The SD-bootable-2.img will be an eflasher image. For example FriendlyElec's nanopi-[h5]_eflasher_friendlycore-xenial_4.14_arm64_YYYYMMDD.img.zip image file is an SD card ROM image.The image contained in the "out/SD-bootable-1/" directory will be the image to be flashed to eMMC. You can use the win32diskimager utility or the "dd" command to flash the SD-bootable-2.img image to an SD card.

6 Update Log

6.1 Sep-14-2017

  • Released English Version

6.2 Jan-30-2018

  • Updated Section 3

6.3 Feb-2-2019

  • Updated Section 3 and Section 5