Difference between revisions of "U-Boot"

From Rockchip open source Document
Jump to: navigation, search
Line 1: Line 1:
  
In your linux SDK root directory. enter to U-Boot directory. 
+
U-Boot Guide
<pre>cd u-boot
+
 
 +
== Contents ==
 +
 
 +
&nbsp;[[[hide]]]&nbsp;
 +
 
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Download_U-Boot 1Download U-Boot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Upstream_U-Boot 1.1Upstream U-Boot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Rockchip_U-Boot 1.2Rockchip U-Boot] 
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Supported_Devices 2Supported Devices]
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Configure_U-Boot 3Configure U-Boot]
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Build_U-Boot 4Build U-Boot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Get_a_toolchain 4.1Get a toolchain]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Build 4.2Build] 
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Install_U-Boot 5Install U-Boot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Using_U-Boot_SPL 5.1Using U-Boot SPL]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Support_ATF_with_SPL_FIT_image 5.2Support ATF with SPL FIT image]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Using_Rockchip_miniloader 5.3Using Rockchip miniloader]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Boot_up 5.4Boot up] 
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Boot_cmd 6Boot cmd]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Distro_boot 6.1Distro boot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#EFI_boot 6.2EFI boot] 
 +
*[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#Firmware_download_in_U-Boot 7Firmware download in U-Boot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#fastboot 7.1fastboot]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#ums 7.2ums]
 +
**[http://opensource.rock-chips.com/index.php?title=U-Boot&oldid=1551#rockusb 7.3rockusb] 
 +
 
 +
= Download U-Boot =
 +
 
 +
== Upstream U-Boot ==
 +
 
 +
You can clone the u-boot repository by running:
 +
<pre>git clone git://git.denx.de/u-boot.git</pre>
 +
 
 +
Alternatively you can use u-boot-rockchip instead which may with some patches not get in mainline:
 +
<pre>git clone git://git.denx.de/u-boot-rockchip.git</pre>
 +
 
 +
&nbsp;
 +
 
 +
== Rockchip U-Boot ==
 +
 
 +
You can clone the u-boot repository by running:
 +
<pre>git clone https://github.com/rockchip-linux/u-boot.git
 
</pre>
 
</pre>
  
For RK3399&nbsp;sapphire-excavator board, VS-RK3399 board,&nbsp;Rock960 board. Use below command to build the U-Boot:&nbsp;
+
= Supported Devices =
<pre>./make.sh evb-rk3399
+
 
 +
Upstream U-Boot support Rockchip SoCs:
 +
 
 +
RK3036, RK3188,&nbsp;[http://opensource.rock-chips.com/wiki_RK3288 RK3288],&nbsp;[http://opensource.rock-chips.com/wiki_RK3328 RK3328],&nbsp;[http://opensource.rock-chips.com/wiki_RK3399 RK3399]
 +
 
 +
&nbsp;
 +
 
 +
*RK3036 boards supported:
 +
 
 +
#EVB RK3036 - use evb-rk3036 configuration
 +
#Kylin - use kylin_rk3036 configuration
 +
 
 +
*RK3288 boards supported:
 +
 
 +
#EVB RK3288 - use evb-rk3288 configuration
 +
#Fennec RK3288 - use fennec-rk3288 configuration
 +
#Firefly RK3288 - use firefly-rk3288 configuration
 +
#Hisense Chromebook - use chromebook_jerry configuration
 +
#Miniarm RK3288 - use miniarm-rk3288 configuration
 +
#PopMetal RK3288 - use popmetal-rk3288 configuration
 +
#Radxa Rock 2 - use rock2 configuration
 +
#ASUS Tinker
 +
 
 +
*RK3188 boards&nbsp;supported:
 +
 
 +
#Radxa Rock - use rock&nbsp;configuration
 +
 
 +
*RK3328 boards&nbsp;supported:
 +
 
 +
#EVB RK3328 - use evb-rk3328 configuration
 +
 
 +
*RK3399 boards&nbsp;supported:
 +
 
 +
#EVB RK3399 - use evb-rk3399 configuration
 +
 
 +
&nbsp;
 +
 
 +
&nbsp;
 +
 
 +
= Configure U-Boot =
 +
 
 +
First you need to choose a correct defconfig for your board;
 +
 
 +
When you have determined what <board_name> you want to build, configure:
 +
<pre>make CROSS_COMPILE=arm-linux-gnueabi-&nbsp;<board_name>_defconfig</pre>
 +
 
 +
You may need to change the U-Boot function/feature support by modify the defconfig file or,
 +
 
 +
there is also menuconfig to play with settings if you feel like it:
 +
<pre>make CROSS_COMPILE=arm-linux-gnueabi- menuconfig</pre>
 +
 
 +
&nbsp;
 +
 
 +
&nbsp;
 +
 
 +
= Build U-Boot =
 +
 
 +
== Get a toolchain ==
 +
 
 +
If you haven't done so before, get a suitable&nbsp;toolchain&nbsp;installed and add it&nbsp;to your PATH.
 +
 
 +
In Ubuntu 14.04, you can use below command to install cross compiler for armv7:
 +
<pre>sudo apt-get install gcc-arm-linux-gnueabi</pre>
 +
 
 +
Or for ARM64
 +
<pre>sudo apt-get install gcc-aarch64-linux-gnu
 
</pre>
 
</pre>
  
For firefly-rk3399&nbsp;board. Use below command to build the U-Boot:&nbsp;
+
&nbsp;
<pre>./make.sh firefly-rk3399
+
 
</pre>
+
&nbsp;
 +
 
 +
== Build ==
 +
 
 +
For armv7:
 +
<pre>make CROSS_COMPILE=arm-linux-gnueabi-</pre>
 +
 
 +
or for ARM64:
 +
<pre>make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-</pre>
 +
 
 +
In order to support debug in ARM DS-5, you may need add ctags in make command:
 +
<pre>CFLAGS='-gdwarf-3'</pre>
 +
 
 +
For trust support, we are using FIT image with 'mkimage' cmd in Makefile and its script defined in defconfig:
 +
<pre>make u-boot.itb</pre>
 +
 
 +
Note: please copy the trust binary() to u-boot root directory and rename it to tee.bin(armv7) or bl31.elf(armv8).
 +
 
 +
The u-boot.itb including u-boot-nodtb.bin, board.dtb, and trust binaries.
 +
 
 +
= Install U-Boot =
 +
 
 +
Rockchip SoCs's bootrom need special format named IDBlock at special offset 0x40&nbsp;block for boot, so we need to package&nbsp;SPL(or Rockchip miniloader) &nbsp;in IDB format.
 +
 
 +
Rockchip bootrom supports SPL back to bootrom and bootrom load the U-Boot, so the SPL for Rockchip SoCs can option to back to bootrom, usually decided by if the IRAM is enough&nbsp;for driver to load U-Boot.
 +
 
 +
&nbsp;
 +
 
 +
&nbsp;
 +
 
 +
== Using U-Boot SPL ==
 +
 
 +
After build&nbsp;complete, U-Boot with SPL support will generate a spl folder with&nbsp;<var>u-boot-spl.bin</var>&nbsp;inside
 +
<pre>tools/mkimage -n rk3288 -T rksd -d spl/u-boot-spl.bin  rk3288_idb.img</pre>
 +
 
 +
'''This image is supposed to flash to offset 0x40.'''
 +
 
 +
For&nbsp;<var>u-boot.bin</var>, it's different for SPL back to bootrom or not, if enable&nbsp;CONFIG_ROCKCHIP_SPL_BACK_TO_BROM, we can append the U-Boot to IDB data:
 +
<pre>cat u-boot.bin >> rk3288_idb.img</pre>
 +
 
 +
<code>If&nbsp;</code>CONFIG_ROCKCHIP_SPL_BACK_TO_BROM&nbsp;not enabled, no more package operation is need for u-boot-dtb.bin, and it need to flalsh to 0x200 which is decide by&nbsp;CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR.
 +
 
 +
== Support ATF with SPL FIT image ==
 +
 
 +
&nbsp;
 +
 
 +
&nbsp;
 +
 
 +
== Using Rockchip miniloader ==
 +
 
 +
Alternatively, you can use Rockchip miniloader and U-Boot instead which do not need SPL.
 +
 
 +
The miniloader is package as IDBlock, and the u-boot.bin need to package with rockchip tool:
 +
<pre>loaderimage --pack --uboot u-boot.bin uboot.img</pre>
 +
 
 +
According to the&nbsp;[http://opensource.rock-chips.com/wiki_Partitions partitions]&nbsp;definition, the miniloader should write to offset 0x40 and &nbsp;this uboot.img should write to offset 0x4000.
 +
 
 +
&nbsp;
 +
 
 +
&nbsp;
 +
 
 +
&nbsp;
  
For firefly-rk3288 board. Use below command to build the U-Boot:&nbsp;
+
== Boot up ==
<pre>./make.sh firefly-rk3288
 
</pre>
 
  
For rk3288-evb-act8846&nbsp;board. Use below command to build the U-Boot:&nbsp;
+
See&nbsp;[http://opensource.rock-chips.com/wiki_Boot_option boot option]&nbsp;about how to boot from eMMC/SD card.
<pre>./make.sh evb-rk3288
 
</pre>
 
  
For rk3288-evb-rk808&nbsp;board. Use below command to build the U-Boot:&nbsp;
+
= Boot cmd =
<pre>./make.sh fennec-rk3288
 
</pre>
 
  
For rk3288 tinker&nbsp;board. Use below command to build the U-Boot:&nbsp;
+
== Distro boot ==
<pre>./make.sh tinker-rk3288
 
</pre>
 
  
For phytec-rk3288&nbsp;board. Use below command to build the U-Boot:&nbsp;
+
== EFI boot ==
<pre>./make.sh phycore-rk3288
 
</pre>
 
  
For rk3288 miqi&nbsp;board. Use below command to build the U-Boot:&nbsp;
+
= Firmware download in U-Boot =
<pre>./make.sh miqi-rk3288
 
</pre>
 
  
It will generate 3 binary image: rk3xxx_loader_vx.xx.xxx.bin, trust.img, uboot.img.&nbsp;
+
In U-Boot, there are multi way to update image for system, you can chose any of one easy use for you.
  
rk3xxx_loader_vx.xx.xxx.bin: Rockchip miniloader. rk3xxx is the part number of the chip. vx.xx.xxx is the version number. Please flash this binary to miniloader partition.&nbsp;
+
== fastboot ==
  
trust.img:&nbsp;ARM Trusted Firmware, Please flash this binary to trust partition
+
See&nbsp;[http://opensource.rock-chips.com/wiki_Fastboot fastboot]
  
uboot.img: The U-Boot image, Please flash this binary to uboot partition
+
== ums ==
<pre>u-boot/
 
├── rk3399_loader_v1.09.112.bin
 
├── trust.img
 
└── uboot.img
 
</pre>
 
  
Rockchip now only offically support miniloader+U-Boot boot to simplify the customer product design.&nbsp; You can refer to&nbsp;[[Boot_option|boot option]] page for more boot path. But do remember that you should do it all by your own. Rockchip won't provide technical support for these boot option.&nbsp;
+
== rockusb ==

Revision as of 06:23, 11 May 2018

U-Boot Guide

Contents

 [[[hide]]] 

Download U-Boot

Upstream U-Boot

You can clone the u-boot repository by running:

git clone git://git.denx.de/u-boot.git

Alternatively you can use u-boot-rockchip instead which may with some patches not get in mainline:

git clone git://git.denx.de/u-boot-rockchip.git

 

Rockchip U-Boot

You can clone the u-boot repository by running:

git clone https://github.com/rockchip-linux/u-boot.git

Supported Devices

Upstream U-Boot support Rockchip SoCs:

RK3036, RK3188, RK3288RK3328RK3399

 

  • RK3036 boards supported:
  1. EVB RK3036 - use evb-rk3036 configuration
  2. Kylin - use kylin_rk3036 configuration
  • RK3288 boards supported:
  1. EVB RK3288 - use evb-rk3288 configuration
  2. Fennec RK3288 - use fennec-rk3288 configuration
  3. Firefly RK3288 - use firefly-rk3288 configuration
  4. Hisense Chromebook - use chromebook_jerry configuration
  5. Miniarm RK3288 - use miniarm-rk3288 configuration
  6. PopMetal RK3288 - use popmetal-rk3288 configuration
  7. Radxa Rock 2 - use rock2 configuration
  8. ASUS Tinker
  • RK3188 boards supported:
  1. Radxa Rock - use rock configuration
  • RK3328 boards supported:
  1. EVB RK3328 - use evb-rk3328 configuration
  • RK3399 boards supported:
  1. EVB RK3399 - use evb-rk3399 configuration

 

 

Configure U-Boot

First you need to choose a correct defconfig for your board;

When you have determined what <board_name> you want to build, configure:

make CROSS_COMPILE=arm-linux-gnueabi- <board_name>_defconfig

You may need to change the U-Boot function/feature support by modify the defconfig file or,

there is also menuconfig to play with settings if you feel like it:

make CROSS_COMPILE=arm-linux-gnueabi- menuconfig

 

 

Build U-Boot

Get a toolchain

If you haven't done so before, get a suitable toolchain installed and add it to your PATH.

In Ubuntu 14.04, you can use below command to install cross compiler for armv7:

sudo apt-get install gcc-arm-linux-gnueabi

Or for ARM64

sudo apt-get install gcc-aarch64-linux-gnu

 

 

Build

For armv7:

make CROSS_COMPILE=arm-linux-gnueabi-

or for ARM64:

make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-

In order to support debug in ARM DS-5, you may need add ctags in make command:

CFLAGS='-gdwarf-3'

For trust support, we are using FIT image with 'mkimage' cmd in Makefile and its script defined in defconfig:

make u-boot.itb

Note: please copy the trust binary() to u-boot root directory and rename it to tee.bin(armv7) or bl31.elf(armv8).

The u-boot.itb including u-boot-nodtb.bin, board.dtb, and trust binaries.

Install U-Boot

Rockchip SoCs's bootrom need special format named IDBlock at special offset 0x40 block for boot, so we need to package SPL(or Rockchip miniloader)  in IDB format.

Rockchip bootrom supports SPL back to bootrom and bootrom load the U-Boot, so the SPL for Rockchip SoCs can option to back to bootrom, usually decided by if the IRAM is enough for driver to load U-Boot.

 

 

Using U-Boot SPL

After build complete, U-Boot with SPL support will generate a spl folder with u-boot-spl.bin inside

tools/mkimage -n rk3288 -T rksd -d spl/u-boot-spl.bin  rk3288_idb.img

This image is supposed to flash to offset 0x40.

For u-boot.bin, it's different for SPL back to bootrom or not, if enable CONFIG_ROCKCHIP_SPL_BACK_TO_BROM, we can append the U-Boot to IDB data:

cat u-boot.bin >> rk3288_idb.img

If CONFIG_ROCKCHIP_SPL_BACK_TO_BROM not enabled, no more package operation is need for u-boot-dtb.bin, and it need to flalsh to 0x200 which is decide by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR.

Support ATF with SPL FIT image

 

 

Using Rockchip miniloader

Alternatively, you can use Rockchip miniloader and U-Boot instead which do not need SPL.

The miniloader is package as IDBlock, and the u-boot.bin need to package with rockchip tool:

loaderimage --pack --uboot u-boot.bin uboot.img

According to the partitions definition, the miniloader should write to offset 0x40 and  this uboot.img should write to offset 0x4000.

 

 

 

Boot up

See boot option about how to boot from eMMC/SD card.

Boot cmd

Distro boot

EFI boot

Firmware download in U-Boot

In U-Boot, there are multi way to update image for system, you can chose any of one easy use for you.

fastboot

See fastboot

ums

rockusb