How to make your own SD-bootable ROM
Contents
[hide]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 Linux ROM for H3
If you have compiled a U-boot, Linux kernel and a file system, and want to make a your own Linux image (ROM) with these files you can refer to the following steps:
Download a package "rom-maker-lite.tar.gz" : download link, extract it in host PC running Ubuntu and you will get the following directorie:
rom-maker-lite
The "rom-maker-lite" directory has the script utilities which can be used to make a ROM that boots from an SD card.
Currently the script utilities under the "rom-maker-lite" directory can be only used to make Linux ROMs for H3/H5. You can check its usage by running the "./mkimage.sh" script:
$ ./mkimage.sh Usage: $ apt-get install tree dosfstools $ ./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)
Parameter Comment <prepare type> specifies a ROM type. For H3/H5 p1 means to make a FriendlyCore/Ubuntu/Debian ROM and p2 means to make an Eflasher ROM. <partmap> specifies a partmap that is needed for making a ROM. A partmap file specifies a ROM Image's partition and components. Different platforms or different BSPs for the same platform use different partmap files. <misc dir> specifies a bootloader's path for H3/H5. <partition1 dir> specifies the boot partition's path for H3/H5. <partition2 dir> specifies the rootfs's path for H3/H5.
- Make Uboot-2017 + Linux-4.14 ROM for H3
All FriendlyElec's H3 boards work with a Uboot-2017 + Linux-4.14 ROM. So the steps to generate a ROM based on a BSP are the same for all FriendlyElec boards.
If you have a bootable SD card with FriendlyCore the rootfs directory in the SD card should have all the files you need. Insert this SD card to a host PC, mount the SD card's rootfs directory (in our test it was mounted at /media/SD/rootfs) and make a ROM following the steps below:
$ ./mkimage.sh p1 partmap/h3_linux-4.14/partmap.txt misc/uboot-2017_h3/ part1/boot_linux-4.14_h3/ /media/SD/rootfs
Replace the existing files under the directories (misc/uboot-2017_h3, part1/boot_linux-4.14_h3) with your new files. FriendlyElec will periodically update files. You can list all the files by commanding "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
For all the FriendlyElec's H3 boards that works with Linux-4.14 BSP they use the same partmap file which is "partmap/h3_linux-4.14/partmap.txt".
After running the mkimage.sh script a "out/SD-bootable-p1" directory will be generated and it will have the following files:
$ 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
The "part1/boot_linux-4.14_h3/" directory will be made to a boot.img, the "part2/rootfs_demo/" directory will be made to a rootfs.img and the SD-bootable-p1.img will be the new ROM. You can use the win32diskimager utility under Windows or command "dd" under Linux to flash a SD-bootable-p1.img to an SD card.
- Make Uboot-2011 + Linux-3.4 ROM for H3
Let's take FriendlyElec's NanoPi M1 as an example, run the following command:
$ ./mkimage.sh p1 partmap/h3_linux-3.4/partmap.txt misc/uboot-2011_m1/ part1/boot_linux-3.4_m1/ part2/rootfs_demo/
Replace the existing files under the directories with your new files.
For all the FriendlyElec's H3 boards that works with Linux-3.4 BSP they use the same partmap file which is "partmap/h3_linux-3.4/partmap.txt".
So if you want to make a ROM for a NanoPi M1 Plus you can run the following command:
$ ./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/
This applies to the NanoPi NEO / NanoPi NEO Air too.
- Make Uboot-2017 + Linux-4.14 Eflasher ROM for H3
In order to make an Eflasher ROM you need to have an existing FriendlyCore ROM. A Uboot-2017 + Linux-4.14 FriendlyCore image has the following files:
$ tree out/ out/ ├── SD-bootable-p1 │ └── your_company │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ └── u-boot-sunxi-with-spl.bin
If you have a bootable SD card with Eflasher, insert the SD card to a host PC, mount the SD card's rootfs directory(in our test it was mounted at the "/media/SD/rootfs-eflasher" directory) and run the following command to generate an 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/
After running the mkimage.sh script an "out/SD-bootable-p2" directory will be generated and it will have the following files:
$ 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
The SD-bootable-p2.img file will be the newly generated Eflasher ROM. What OS the "out/SD-bootable-p1/" contains will be the OS in this Eflasher ROM. You can use the win32diskimager utility under Windows or command "dd" under Linux to flash a SD-bootable-p2.img to an SD card.
5 Make Linux ROM for H5
If you have compiled a U-boot, Linux kernel and a file system, and want to make a your own Linux image (ROM) with these files you can refer to the following steps:
Download a package "rom-maker-lite.tar.gz" : download link, extract it in host PC running Ubuntu and you will get the following directorie:
rom-maker-lite
The "rom-maker-lite" directory has the script utilities which can be used to make a ROM that boots from an SD card.
Currently the script utilities under the "rom-maker-lite" directory can be only used to make Linux ROMs for H3/H5. You can check its usage by running the "./mkimage.sh" script:
$ ./mkimage.sh Usage: $ apt-get install tree dosfstools $ ./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)
Parameter Comment <prepare type> specifies a ROM type. For H3/H5 p1 means to make a FriendlyCore/Ubuntu/Debian ROM and p2 means to make an Eflasher ROM. <partmap> specifies a partmap that is needed for making a ROM. A partmap file specifies a ROM Image's partition and components. Different platforms or different BSPs for the same platform use different partmap files. <misc dir> specifies a bootloader's path for H3/H5. <partition1 dir> specifies the boot partition's path for H3/H5. <partition2 dir> specifies the rootfs's path for H3/H5.
- Make Uboot-2017 + Linux-4.14 ROM for H5
All FriendlyElec's H5 boards work with a Uboot-2017 + Linux-4.14 ROM. So the steps to generate a ROM based on a BSP are the same for all FriendlyElec boards. If you have a bootable SD card with FriendlyCore the rootfs directory in the SD card should have all the files you need. Insert this SD card to a host PC, mount the SD card's rootfs directory (in our test it was mounted at /media/SD/rootfs) and make a ROM following the steps below
$ ./mkimage.sh p1 partmap/h5_linux-4.14/partmap.txt misc/uboot-2017_h5/ part1/boot_linux-4.14_h5/ /media/SD/rootfs
Replace the existing files under the directories (misc/uboot-2017_h5, part1/boot_linux-4.14_h5) with your new files. FriendlyElec will periodically update files. You can list all the files by commanding "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
For all the FriendlyElec's H5 boards that works with Linux-4.14 BSP they use the same partmap file which is "partmap/h5_linux-4.14/partmap.txt".
After running the mkimage.sh script a "out/SD-bootable-p1" directory will be generated and it will have the following files:
$ 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
The "part1/boot_linux-4.14_h5/" directory will be made to a boot.img, the "part2/rootfs_demo/" directory will be made to a rootfs.img and the SD-bootable-p1.img will be the new ROM. You can use the win32diskimager utility under Windows or command "dd" under Linux to flash a SD-bootable-p2.img to an SD card.
- Make Uboot-2014 + Linux-3.10 ROM for H5
Let's take FriendlyElec's NanoPi NEO2 as an example, run the following command:
$ ./mkimage.sh p1 partmap/h5_linux-3.10/partmap.txt misc/uboot-2014_neo2/ part1/boot_linux-3.10_neo2/ part2/rootfs_demo/
Replace the existing files under the directories with your new files.
For all the FriendlyElec's H5 boards that works with Linux-3.10 BSP they use the same partmap file which is "partmap/h5_linux-3.10/partmap.txt".
- Make Uboot-2017 + Linux-4.14 Eflasher ROM for H5
In order to make an Eflasher ROM you need to have an existing FriendlyCore ROM. A Uboot-2017 + Linux-4.14 FriendlyCore image has the following files:
$ tree out/ out/ ├── SD-bootable-p1 │ └── your_company │ ├── boot.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ ├── sunxi-spl.bin │ └── u-boot.itb
If you have a bootable SD card with Eflasher, insert the SD card to a host PC, mount the SD card's rootfs directory(in our test it was mounted at the "/media/SD/rootfs-eflasher" directory) and run the following command to generate an 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/
After running the mkimage.sh script an "out/SD-bootable-p2" directory will be generated and it will have the following files:
$ 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 ├── SD-bootable-p2 │ └── your_company │ ├── boot.img │ ├── friendlyarm.img │ ├── info.conf │ ├── partmap.txt │ ├── rootfs.img │ ├── sunxi-spl.bin │ └── u-boot.itb └── SD-bootable-p2.img
The SD-bootable-p2.img file will be the newly generated Eflasher ROM. What OS the "out/SD-bootable-p1/" contains will be the OS in this Eflasher ROM.
6 Make Installation TF Card with Custom Image File
Quite often a user makes changes in his own system and wants to use this system for mass production. In this case a user needs to make an image based on his own system. For an Android system an image contains a boot.img and a system.img. For a Ubuntu system an image contains a rootfs.img.
This section lists instructions for users to make a custom image which can be used to make an installation SD card for mass production.
Here are the steps to make an Android image for S5P4418:
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
Note: for an S5P6818 SoC you can just change "sd-fuse_nanopi2.git" to "sd-fuse_nanopi3.git" and "S5P4418" to "S5P6818".
Replace the corresponding files under the "Android" directory with your newly generated files and make an installation SD card by running the following commands:
sudo ./fusing.sh /dev/sde android
Note: you need to replace the "/dev/sde" with the actual device name of your SD card in the system
Run this command to make a complete image file:
sudo ./mkimage.sh android
7 Update Log
7.1 Sep-14-2017
- Released English Version
7.2 Jan-30-2018
- Updated Section 3