Please enable javascript, or click here to visit my ecommerce web site powered by Shopify.
Jump to: navigation, search

Difference between revisions of "Rockpi4/dev/Debian"

< Rockpi4‎ | dev
 
(20 intermediate revisions by 4 users not shown)
Line 5: Line 5:
 
     [[rockpi4 | ROCK Pi 4]] > [[rockpi4/dev | Development]] > [[rockpi4/dev/Debian | Build Debian]]
 
     [[rockpi4 | ROCK Pi 4]] > [[rockpi4/dev | Development]] > [[rockpi4/dev/Debian | Build Debian]]
  
= Rockchip Debian SDK =
+
=== Rockchip Debian SDK ===
  
Below is the instructions of how to build image for ROCK Pi 4.
+
Below is the instructions of how to build image for ROCK Pi 4 on a '''HOST PC'''.
  
== Get the source code ==
+
==== Get the source code ====
  
 
You need Git to get multiple git repositories to build the image.
 
You need Git to get multiple git repositories to build the image.
Line 15: Line 15:
 
Install Git if you don't have it.
 
Install Git if you don't have it.
  
    sudo apt-get update
+
sudo apt-get update
    sudo apt-get install git
+
sudo apt-get install git
  
 
Clone the source code
 
Clone the source code
  
    git clone --recursive https://github.com/radxa/rockchip-bsp.git
+
git clone -b master https://github.com/radxa/rockchip-bsp.git
 +
cd rockchip-bsp
 +
git submodule init
 +
git submodule update
  
 
You will get  
 
You will get  
  
    build  kernel  README.md  rkbin  rootfs  u-boot
+
build  kernel  README.md  rkbin  rootfs  u-boot
  
 
Directories usage introductions:
 
Directories usage introductions:
Line 35: Line 38:
 
** Prebuilt Rockchip binaries, include first stage loader and ATF(Arm Trustzone Firmware).
 
** Prebuilt Rockchip binaries, include first stage loader and ATF(Arm Trustzone Firmware).
 
* rootfs:  
 
* rootfs:  
** Bootstrap a Debian based rootfs, support architechture armhf and arm64, support Debian Jessie and Stretch.
+
** Bootstrap a Debian based rootfs, support architechture armhf and arm64, support Debian Jessie, Stretch and Buster.
 
* u-boot:  
 
* u-boot:  
 
** u-boot as the second stage bootloader
 
** u-boot as the second stage bootloader
  
== Install toolchain and other build tools ==
+
==== Update the source code ====
  
    sudo apt-get install gcc-aarch64-linux-gnu device-tree-compiler libncurses5 libncurses5-dev build-essential libssl-dev mtools
+
The rockchip-bsp will be updated all the time, so you can update the source before building the system image.
    sudo apt-get install bc python dosfstools
+
  
== Build u-boot ==
+
cd rockchip-bsp
 +
git checkout master
 +
git fetch origin
 +
git rebase origin/master
 +
git submodule update
  
    ./build/mk-uboot.sh rockpi4b     #For ROCK Pi 4 Mode B
+
==== Install toolchain from Linaro ====
 +
 
 +
wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
 +
sudo tar xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz  -C /usr/local/
 +
export CROSS_COMPILE=/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
 +
export PATH=/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:$PATH
 +
 
 +
Check if Linaro toolchain is the default choice:
 +
 
 +
which aarch64-linux-gnu-gcc
 +
/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
 +
 
 +
==== Install other build tools ====
 +
 
 +
sudo apt-get install gcc-aarch64-linux-gnu device-tree-compiler libncurses5 libncurses5-dev build-essential libssl-dev mtools
 +
sudo apt-get install bc python dosfstools
 +
 
 +
If it appears that it cannot be installed. You can try the following method
 +
sudo apt-get install aptitude
 +
sudo aptitude install bc python dosfstools
 +
 
 +
==== Build u-boot ====
 +
 
 +
./build/mk-uboot.sh rk3399-rock-pi-4b     #For ROCK Pi 4 Mode B
  
 
The generated images will be copied to out/u-boot folder
 
The generated images will be copied to out/u-boot folder
  
    ls out/u-boot/
+
ls out/u-boot/
    idbloader.img  rk3399_loader_v1.12.112.bin  trust.img  uboot.img
+
idbloader.img  rk3399_loader_v1.12.112.bin  trust.img  uboot.img
  
== Build kernel ==
+
==== Build kernel ====
 
Build kernel with default '''rockchip_linux_defconfig'''
 
Build kernel with default '''rockchip_linux_defconfig'''
  
    ./build/mk-kernel.sh rockpi4b   #For ROCK Pi 4 Mode B
+
./build/mk-kernel.sh rk3399-rock-pi-4b   #For ROCK Pi 4 Mode B
  
=== Change kernel config(optional)===
+
===== Change kernel config(optional)=====
  
 
Optionally, if you want to change the default kernel config
 
Optionally, if you want to change the default kernel config
  
    cd kernel
+
cd kernel
    export ARCH=arm64
+
export ARCH=arm64
    export CROSS_COMPILE=aarch64-linux-gnu-
+
export CROSS_COMPILE=aarch64-linux-gnu-
    make rockchip_linux_defconfig
+
make rockchip_linux_defconfig
    make menuconfig
+
make menuconfig
    cd ..
+
make savedefconfig
    ./build/mk-kernel.sh rockpi4b   #For ROCK Pi 4 Mode B
+
cp defconfig arch/arm64/configs/rockchip_linux_defconfig
 
+
cd ..
 +
./build/mk-kernel.sh rk3399-rock-pi-4b   #For ROCK Pi 4 Mode B
  
 
You will get the kernel image and dtb file
 
You will get the kernel image and dtb file
  
    ls out/kernel/
+
ls out/kernel/
    Image  rockpi-4b-linux.dtb
+
Image  rk3399-rock-pi-4b.dtb
  
== Make rootfs image ==
+
==== Make rootfs image ====
 +
 
 +
Check out the rootfs source. The repository is '''https://github.com/radxa/rk-rootfs-build.git''' and the branch is '''debian'''.
  
 
To build 32bit rootfs:
 
To build 32bit rootfs:
 
   
 
   
    export ARCH=armhf
+
export ARCH=armhf
  
 
To build 64bit rootfs:
 
To build 64bit rootfs:
  
    export ARCH=arm64
+
export ARCH=arm64
  
 
Building a base debian system by ubuntu-build-service from linaro.
 
Building a base debian system by ubuntu-build-service from linaro.
  
    cd rootfs
+
cd rootfs
    sudo apt-get install binfmt-support qemu-user-static cpio gdisk
+
sudo apt-get install binfmt-support qemu-user-static cpio gdisk
    sudo dpkg -i ubuntu-build-service/packages/*        # ignore the broken dependencies, we will fix it next step
+
sudo dpkg -i ubuntu-build-service/packages/*        # ignore the broken dependencies, we will fix it next step
    sudo apt-get install -f
+
sudo apt-get install -f
    RELEASE=stretch TARGET=desktop ARCH=$ARCH ./mk-base-debian.sh
+
RELEASE=buster TARGET=desktop ARCH=arm64 ./mk-base-debian.sh
  
This will bootstrap a Debian stretch image, you will get a rootfs tarball named '''linaro-stretch-alip-xxxx.tar.gz'''.  
+
This will bootstrap a Debian Buster image, you will get a rootfs tarball named '''linaro-buster-alip-xxxx.tar.gz'''.  
  
Building the rk-debain rootfs with debug:
+
Building the rk-debian rootfs.
  
    VERSION=debug ARCH=$ARCH ./mk-rootfs-stretch.sh  && ./mk-image.sh
+
RELEASE=buster ARCH=arm64 ./mk-rootfs.sh
  
This will install Rockchip specified packages and hooks on the standard Debian rootfs and generate an ext4 format rootfs image at '''rootfs/linaro-rootfs.img'''.
+
Creating the ext4 image(linaro-rootfs.img):
  
== Combine everything into one image ==
+
./mk-image.sh
  
    build/mk-image.sh -c rk3399 -t system -r rootfs/linaro-rootfs.img
+
==== Combine everything into one image ====
 +
 
 +
build/mk-image.sh -c rk3399 -b rk3399-rock-pi-4b -t system -r rootfs/linaro-rootfs.img
  
 
This will combine u-boot, kernel and rootfs into one image and generate GPT partition table. Output is  
 
This will combine u-boot, kernel and rootfs into one image and generate GPT partition table. Output is  
  
    out/system.img
+
out/system.img
  
== Flash the image ==
+
==== Flash the image ====
  
 
For normal users, follow instructions [[Rockpi4/install | here]]. You will need the generated '''out/system.img''' only.
 
For normal users, follow instructions [[Rockpi4/install | here]]. You will need the generated '''out/system.img''' only.
Line 116: Line 150:
 
For developers, flash from USB OTG port, follow instructions [[Rockpi4/dev/usb-install |here]]. You will need the flash helper '''rk3399_loader_xxx.bin''' and generated '''out/system.img''' files.
 
For developers, flash from USB OTG port, follow instructions [[Rockpi4/dev/usb-install |here]]. You will need the flash helper '''rk3399_loader_xxx.bin''' and generated '''out/system.img''' files.
  
== Troubleshooting ==
+
=== FAQs ===
 +
 
 +
1.For system image built from rockchip-bsp, what is the user name and password?
 +
 
 +
The user name is '''linaro''' and the password is '''linaro'''.
 +
 
 +
2.How to build on RK3399 Fuhai u-boot and kernel?
 +
 
 +
U-boot:
 +
 
 +
./build/mk-uboot.sh rk3399-fuhai
 +
 
 +
Kernel:
 +
 
 +
./build/mk-kernel.sh rk3399-fuhai
 +
 
 +
=== Troubleshooting ===
  
 
Check [[Rockpi4/FAQs |ROCK Pi 4 FAQs]] first, if it doesn't help, start a new post on the forum https://forum.radxa.com/c/dev
 
Check [[Rockpi4/FAQs |ROCK Pi 4 FAQs]] first, if it doesn't help, start a new post on the forum https://forum.radxa.com/c/dev

Latest revision as of 03:40, 30 January 2023

    ROCK Pi 4 >  Development >  Build Debian

Rockchip Debian SDK

Below is the instructions of how to build image for ROCK Pi 4 on a HOST PC.

Get the source code

You need Git to get multiple git repositories to build the image.

Install Git if you don't have it.

sudo apt-get update
sudo apt-get install git

Clone the source code

git clone -b master https://github.com/radxa/rockchip-bsp.git
cd rockchip-bsp
git submodule init
git submodule update

You will get

build  kernel  README.md  rkbin  rootfs  u-boot

Directories usage introductions:

  • build:
    • Some script files and configuration files for building u-boot, kernel and rootfs.
  • kernel:
    • kernel source code, current version is 4.4
  • rkbin:
    • Prebuilt Rockchip binaries, include first stage loader and ATF(Arm Trustzone Firmware).
  • rootfs:
    • Bootstrap a Debian based rootfs, support architechture armhf and arm64, support Debian Jessie, Stretch and Buster.
  • u-boot:
    • u-boot as the second stage bootloader

Update the source code

The rockchip-bsp will be updated all the time, so you can update the source before building the system image.

cd rockchip-bsp
git checkout master
git fetch origin
git rebase origin/master
git submodule update

Install toolchain from Linaro

wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
sudo tar xvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz  -C /usr/local/
export CROSS_COMPILE=/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export PATH=/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin:$PATH

Check if Linaro toolchain is the default choice:

which aarch64-linux-gnu-gcc
/usr/local/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

Install other build tools

sudo apt-get install gcc-aarch64-linux-gnu device-tree-compiler libncurses5 libncurses5-dev build-essential libssl-dev mtools
sudo apt-get install bc python dosfstools

If it appears that it cannot be installed. You can try the following method

sudo apt-get install aptitude 
sudo aptitude install bc python dosfstools

Build u-boot

./build/mk-uboot.sh rk3399-rock-pi-4b     #For ROCK Pi 4 Mode B

The generated images will be copied to out/u-boot folder

ls out/u-boot/
idbloader.img  rk3399_loader_v1.12.112.bin  trust.img  uboot.img

Build kernel

Build kernel with default rockchip_linux_defconfig

./build/mk-kernel.sh rk3399-rock-pi-4b    #For ROCK Pi 4 Mode B
Change kernel config(optional)

Optionally, if you want to change the default kernel config

cd kernel
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make rockchip_linux_defconfig
make menuconfig
make savedefconfig
cp defconfig arch/arm64/configs/rockchip_linux_defconfig
cd ..
./build/mk-kernel.sh rk3399-rock-pi-4b    #For ROCK Pi 4 Mode B

You will get the kernel image and dtb file

ls out/kernel/
Image  rk3399-rock-pi-4b.dtb

Make rootfs image

Check out the rootfs source. The repository is https://github.com/radxa/rk-rootfs-build.git and the branch is debian.

To build 32bit rootfs:

export ARCH=armhf

To build 64bit rootfs:

export ARCH=arm64

Building a base debian system by ubuntu-build-service from linaro.

cd rootfs
sudo apt-get install binfmt-support qemu-user-static cpio gdisk
sudo dpkg -i ubuntu-build-service/packages/*        # ignore the broken dependencies, we will fix it next step
sudo apt-get install -f
RELEASE=buster TARGET=desktop ARCH=arm64 ./mk-base-debian.sh

This will bootstrap a Debian Buster image, you will get a rootfs tarball named linaro-buster-alip-xxxx.tar.gz.

Building the rk-debian rootfs.

RELEASE=buster ARCH=arm64 ./mk-rootfs.sh

Creating the ext4 image(linaro-rootfs.img):

./mk-image.sh

Combine everything into one image

build/mk-image.sh -c rk3399 -b rk3399-rock-pi-4b -t system -r rootfs/linaro-rootfs.img

This will combine u-boot, kernel and rootfs into one image and generate GPT partition table. Output is

out/system.img

Flash the image

For normal users, follow instructions here. You will need the generated out/system.img only.

For developers, flash from USB OTG port, follow instructions here. You will need the flash helper rk3399_loader_xxx.bin and generated out/system.img files.

FAQs

1.For system image built from rockchip-bsp, what is the user name and password?

The user name is linaro and the password is linaro.

2.How to build on RK3399 Fuhai u-boot and kernel?

U-boot:

./build/mk-uboot.sh rk3399-fuhai

Kernel:

./build/mk-kernel.sh rk3399-fuhai

Troubleshooting

Check ROCK Pi 4 FAQs first, if it doesn't help, start a new post on the forum https://forum.radxa.com/c/dev