|  | Contents | 
|  | ======== | 
|  |  | 
|  | 1. Introduction | 
|  | 2. Get the Source and prebuild binary | 
|  | 3. Compile the U-Boot | 
|  | 4. Compile the rkdeveloptool | 
|  | 5. Package the image | 
|  | 5.1. Package the image for U-Boot SPL(option 1) | 
|  | 5.2. Package the image for Rockchip miniloader(option 2) | 
|  | 6. Bootloader storage options | 
|  | 7. Flash the image to eMMC | 
|  | 7.1. Flash the image with U-Boot SPL(option 1) | 
|  | 7.2. Flash the image with Rockchip miniloader(option 2) | 
|  | 8. Create a bootable SD/MMC | 
|  | 9. And that is it | 
|  |  | 
|  | Introduction | 
|  | ============ | 
|  |  | 
|  | Rock960 board family consists of Rock960 (Consumer Edition) and | 
|  | Ficus (Enterprise Edition) 96Boards featuring Rockchip RK3399 SoC. | 
|  |  | 
|  | Common features implemented on both boards: | 
|  | * CPU: ARMv8 64bit Big-Little architecture, | 
|  | * Big: dual-core Cortex-A72 | 
|  | * Little: quad-core Cortex-A53 | 
|  | * IRAM: 200KB | 
|  | * eMMC: 16/32GB eMMC 5.1 | 
|  | * PMU: RK808 | 
|  | * SD/MMC | 
|  | * Display: HDMI/DP/MIPI | 
|  | * Low Speed Expansion Connector | 
|  | * High Speed Expansion Connector | 
|  |  | 
|  | Additional features of Rock960: | 
|  | * DRAM: 2GB/4GB LPDDR3 @ 1866MHz | 
|  | * 1x USB 3.0 type A, 1x USB 2.0 type A (host mode only), | 
|  | 1x USB 3.0 type C OTG | 
|  |  | 
|  | Additional features of Ficus: | 
|  | * DRAM: 2GB/4GB DDR3 @ 1600MHz | 
|  | * Ethernet | 
|  | * 2x USB 3.0 type A, 2x USB 2.0 type A (host mode only), | 
|  | 1x USB 3.0 type C OTG | 
|  |  | 
|  | Here is the step-by-step to boot to U-Boot on Rock960 boards. | 
|  |  | 
|  | Get the Source and prebuild binary | 
|  | ================================== | 
|  |  | 
|  | > git clone https://github.com/96rocks/rkbin.git | 
|  | > git clone https://github.com/rockchip-linux/rkdeveloptool.git | 
|  |  | 
|  | Compile the U-Boot | 
|  | ================== | 
|  |  | 
|  | > cd ../u-boot | 
|  | > cp ../rkbin/rk33/rk3399_bl31_v1.00.elf ./bl31.elf | 
|  | > export ARCH=arm64 | 
|  | > export CROSS_COMPILE=aarch64-linux-gnu- | 
|  | > make rock960-rk3399_defconfig | 
|  | > make | 
|  | > make u-boot.itb | 
|  |  | 
|  | Compile the rkdeveloptool | 
|  | ========================= | 
|  |  | 
|  | Follow instructions in latest README | 
|  | > cd ../rkdeveloptool | 
|  | > autoreconf -i | 
|  | > ./configure | 
|  | > make | 
|  | > sudo make install | 
|  |  | 
|  | Package the image | 
|  | ================= | 
|  |  | 
|  | Package the image for U-Boot SPL(option 1) | 
|  | -------------------------------- | 
|  | > cd .. | 
|  | > tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl.bin idbspl.img | 
|  |  | 
|  | Get idbspl.img in this step. | 
|  |  | 
|  | Package the image for Rockchip miniloader(option 2) | 
|  | ------------------------------------------ | 
|  | > cd ../rkbin | 
|  | > ./tools/loaderimage --pack --uboot u-boot/u-boot-dtb.bin uboot.img 0x200000 | 
|  |  | 
|  | > ../u-boot/tools/mkimage -n rk3399 -T rksd -d rk3399_ddr_933MHz_v1.08.bin idbloader.img | 
|  | > cat ./rk33/rk3399_miniloader_v1.06.bin >> idbloader.img | 
|  |  | 
|  | Get uboot.img and idbloader.img in this step. | 
|  |  | 
|  | Bootloader storage options | 
|  | ========================== | 
|  |  | 
|  | There are a few different storage options for the bootloader. | 
|  | This document explores two of these: eMMC and removable SD/MMC. | 
|  |  | 
|  | Flash the image to eMMC | 
|  | ======================= | 
|  |  | 
|  | Flash the image with U-Boot SPL(option 1) | 
|  | ------------------------------- | 
|  | Power on(or reset with RESET KEY) with MASKROM KEY preesed, and then: | 
|  | > rkdeveloptool db rkbin/rk33/rk3399_loader_v1.08.106.bin | 
|  | > rkdeveloptool wl 64 u-boot/idbspl.img | 
|  | > rkdeveloptool wl 0x4000 u-boot/u-boot.itb | 
|  | > rkdeveloptool rd | 
|  |  | 
|  | Flash the image with Rockchip miniloader(option 2) | 
|  | ---------------------------------------- | 
|  | Power on(or reset with RESET KEY) with MASKROM KEY preesed, and then: | 
|  | > rkdeveloptool db rkbin/rk33/rk3399_loader_v1.08.106.bin | 
|  | > rkdeveloptool wl 0x40 idbloader.img | 
|  | > rkdeveloptool wl 0x4000 uboot.img | 
|  | > rkdeveloptool wl 0x6000 ./img/rk3399/trust.img | 
|  | > rkdeveloptool rd | 
|  |  | 
|  | Create a bootable SD/MMC | 
|  | ======================== | 
|  |  | 
|  | The idbspl.img contains the first stage, and the u-boot.img the second stage. | 
|  | As explained in the Rockchip partition table reference [1], the first stage | 
|  | (aka loader1) start sector is 64, and the second stage start sector is 16384. | 
|  |  | 
|  | Each sector is 512 bytes, which means the first stage offset is 32 KiB, | 
|  | and the second stage offset is 8 MiB. | 
|  |  | 
|  | Note: the second stage location is actually not as per the spec, | 
|  | but defined by the SPL. Mainline SPL defines an 8 MiB offset for the second | 
|  | stage. | 
|  |  | 
|  | Assuming the SD card is exposed by device /dev/mmcblk0, the commands | 
|  | to write the two stages are: | 
|  |  | 
|  | > dd if=idbspl.img of=/dev/mmcblk0 bs=1k seek=32 | 
|  | > dd if=u-boot.itb of=/dev/mmcblk0 bs=1k seek=8192 | 
|  |  | 
|  | Setting up the kernel and rootfs is beyond the scope of this document. | 
|  |  | 
|  | And that is it | 
|  | ============== | 
|  |  | 
|  | You should be able to get U-Boot log in console/UART2(baurdrate 1500000) | 
|  |  | 
|  | For more detail, please reference [2]. | 
|  |  | 
|  | [1] http://opensource.rock-chips.com/wiki_Partitions | 
|  | [2] http://opensource.rock-chips.com/wiki_Boot_option |