Difference between revisions of "Rockpi4/rockpi-android7"
Line 1: | Line 1: | ||
== Build environment setup == | == Build environment setup == | ||
− | |||
Recommend build host is Ubuntu 16.04 64bit, for other hosts, refer official Android documents [Establishing a Build Environment](https://source.android.com/setup/build/initializing). | Recommend build host is Ubuntu 16.04 64bit, for other hosts, refer official Android documents [Establishing a Build Environment](https://source.android.com/setup/build/initializing). | ||
+ | |||
+ | === Repo === | ||
<code bash> | <code bash> | ||
− | + | radxa$ wget 'https://storage.googleapis.com/git-repo-downloads/repo' -P /tmp/ | |
− | + | radxa$ sudo cp /tmp/repo /usr/local/bin/repo | |
− | $ chmod +x | + | radxa$ sudo chmod +x /usr/local/bin/repo |
</code> | </code> | ||
In China Download Repo: | In China Download Repo: | ||
<code bash> | <code bash> | ||
− | $ | + | radxa$ echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'" >> ~/.bashrc |
− | $ | + | radxa$ source ~/.bashrc |
+ | radxa$ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /tmp/repo | ||
+ | radxa$ sudo cp /tmp/repo /usr/local/bin/repo | ||
+ | radxa$ sudo chmod +x /usr/local/bin/repo | ||
</code> | </code> | ||
+ | === Init Env === | ||
Android's source code primarily consists of Java, C++, and XML files. To compile the source code, you'll need to install OpenJDK 8, GNU C and C++ compilers, XML parsing libraries, ImageMagick, and several other related packages. | Android's source code primarily consists of Java, C++, and XML files. To compile the source code, you'll need to install OpenJDK 8, GNU C and C++ compilers, XML parsing libraries, ImageMagick, and several other related packages. | ||
<code bash> | <code bash> | ||
− | $ sudo apt-get update | + | radxa$ sudo apt-get update -y && sudo apt-get install \ |
− | + | openjdk-8-jdk android-tools-adb bc bison build-essential curl flex g++-multilib gcc-multilib gnupg \ | |
− | + | gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev \ | |
− | + | libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools \ | |
− | + | xsltproc yasm zip zlib1g-dev | |
</code> | </code> | ||
Configure the JAVA environment | Configure the JAVA environment | ||
<code bash> | <code bash> | ||
− | $ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 | + | radxa$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 |
− | $ export PATH=$JAVA_HOME/bin:$PATH | + | radxa$ export PATH=$JAVA_HOME/bin:$PATH |
− | $ export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar | + | radxa$ export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar |
+ | </code> | ||
+ | |||
+ | === DockerFile === | ||
+ | <code> | ||
+ | FROM ubuntu:xenial | ||
+ | RUN apt-get update -y && apt-get install -y openjdk-8-jdk python git-core gnupg flex bison gperf build-essential \ | ||
+ | zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ | ||
+ | lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ | ||
+ | libgl1-mesa-dev libxml2-utils xsltproc unzip mtools u-boot-tools \ | ||
+ | htop iotop sysstat iftop pigz bc device-tree-compiler lunzip \ | ||
+ | dosfstools vim-common parted udev | ||
+ | |||
+ | RUN curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo && \ | ||
+ | chmod +x /usr/local/bin/repo | ||
+ | |||
+ | RUN which repo | ||
+ | |||
+ | ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' USER=android7-docker | ||
+ | |||
+ | ARG USER_ID=0 | ||
+ | ARG GROUP_ID=0 | ||
+ | RUN groupadd -g ${GROUP_ID} jenkins-docker && useradd -m -g jenkins-docker -u ${USER_ID} android7-docker | ||
+ | |||
+ | USER android7-docker | ||
+ | |||
+ | </code> | ||
+ | Build DockerFile | ||
+ | <code> | ||
+ | radxa$ docker build -t android-builder:7.x --build-arg USER_ID=`id -u` --build-arg GROUP_ID=`id -g` $(which-dir-dockerfile-in) | ||
</code> | </code> | ||
== Download source code == | == Download source code == | ||
<code bash> | <code bash> | ||
− | $ mkdir rockpi4- | + | radxa$ mkdir rockpi4-android7 |
− | $ cd rockpi4- | + | radxa$ cd rockpi4-android7 |
</code> | </code> | ||
Then run: | Then run: | ||
<code bash> | <code bash> | ||
− | $ | + | radxa$ repo init -u https://github.com/radxa/manifests -b rk3399-all-7.1 -m rockpi_n_all_release.xml |
− | $ repo sync - | + | radxa$ repo sync -d --no-tags -j4 |
</code> | </code> | ||
It might take quite a bit of time to fetch the entire AOSP source code(around 86G)! | It might take quite a bit of time to fetch the entire AOSP source code(around 86G)! | ||
Line 43: | Line 77: | ||
== Build u-boot == | == Build u-boot == | ||
<code bash> | <code bash> | ||
− | $ cd u-boot | + | radxa$ cd u-boot |
− | $ ./make.sh rock-pi-4b-rk3399 | + | radxa$ ./make.sh rock-pi-4b-rk3399 |
− | $ cd .. | + | radxa$ cd .. |
</code> | </code> | ||
The generated images are **rk3399_loader_v_xxx.bin** , **idbloader.img** and **uboot.img** | The generated images are **rk3399_loader_v_xxx.bin** , **idbloader.img** and **uboot.img** | ||
Line 52: | Line 86: | ||
For DSI 480P, support Raspberry Pi official 7" Display. | For DSI 480P, support Raspberry Pi official 7" Display. | ||
<code bash> | <code bash> | ||
− | $ cd kernel | + | radxa$ cd kernel |
− | $ make rockchip_defconfig | + | radxa$ make rockchip_defconfig |
− | $ make rk3399-rockpi-4b.img -j$(nproc) | + | radxa$ make rk3399-rockpi-4b.img -j$(nproc) |
− | $ cd .. | + | radxa$ cd .. |
</code> | </code> | ||
For HDMI 4K | For HDMI 4K | ||
<code bash> | <code bash> | ||
− | $ cd kernel | + | radxa$ cd kernel |
− | $ make rockchip_defconfig | + | radxa$ make rockchip_defconfig |
− | $ make rk3399-rockpi-4b-hdmi.img -j$(nproc) | + | radxa$ make rk3399-rockpi-4b-hdmi.img -j$(nproc) |
− | $ cd .. | + | radxa$ cd .. |
</code> | </code> | ||
Line 72: | Line 106: | ||
== Building AOSP == | == Building AOSP == | ||
<code bash> | <code bash> | ||
− | $ source build/envsetup.sh | + | radxa$ source build/envsetup.sh |
− | $ lunch rk3399_all-userdebug | + | radxa$ lunch rk3399_all-userdebug |
− | $ make -j$(nproc) | + | radxa$ make -j$(nproc) |
</code> | </code> | ||
It takes a long time, take a break and wait... | It takes a long time, take a break and wait... | ||
Line 80: | Line 114: | ||
== Generate images == | == Generate images == | ||
<code bash> | <code bash> | ||
− | $ ln -s RKTools/linux/Linux_Pack_Firmware/rockdev/ rockdev | + | radxa$ ln -s RKTools/linux/Linux_Pack_Firmware/rockdev/ rockdev |
− | $ ./mkimage.sh | + | radxa$ ./mkimage.sh |
</code> | </code> | ||
Line 100: | Line 134: | ||
└── uboot.img | └── uboot.img | ||
</code> | </code> | ||
+ | |||
+ | == Generated RkUpdate Image == | ||
<code bash> | <code bash> | ||
− | $ cd rockdev | + | radxa$ cd rockdev |
− | $ ln -s Image- | + | radxa$ ln -s Image-rk3399_all Image |
− | $ ./ | + | radxa$ ./mkupdate.sh |
+ | </code> | ||
+ | The images under rockdev/ are `update.img` | ||
− | + | == Generated GPT Image == | |
− | $ cd rockdev | + | <code bash> |
− | $ ln -s Image- | + | radxa$ cd rockdev |
− | $ ./android-gpt.sh | + | radxa$ ln -s Image-rk3399_all Image |
+ | radxa$ ./android-gpt.sh | ||
</code> | </code> | ||
+ | |||
<code bash> | <code bash> | ||
IMAGE_LENGTH:3936291 | IMAGE_LENGTH:3936291 | ||
Line 129: | Line 169: | ||
</code> | </code> | ||
The images under rockdev/Image are `gpt.img` | The images under rockdev/Image are `gpt.img` | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Installation | Installation | ||
you can use `tf card` or `emmc module` | you can use `tf card` or `emmc module` | ||
Line 145: | Line 178: | ||
$ sync | $ sync | ||
</code> | </code> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[More](https://wiki.radxa.com/Rockpi4/install) | [More](https://wiki.radxa.com/Rockpi4/install) | ||
There may be some performance loss when using tf card | There may be some performance loss when using tf card |
Revision as of 06:31, 2 December 2019
Contents
Build environment setup
Recommend build host is Ubuntu 16.04 64bit, for other hosts, refer official Android documents [Establishing a Build Environment](https://source.android.com/setup/build/initializing).
Repo
radxa$ wget 'https://storage.googleapis.com/git-repo-downloads/repo' -P /tmp/ radxa$ sudo cp /tmp/repo /usr/local/bin/repo radxa$ sudo chmod +x /usr/local/bin/repo
In China Download Repo:
radxa$ echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'" >> ~/.bashrc radxa$ source ~/.bashrc radxa$ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /tmp/repo radxa$ sudo cp /tmp/repo /usr/local/bin/repo radxa$ sudo chmod +x /usr/local/bin/repo
Init Env
Android's source code primarily consists of Java, C++, and XML files. To compile the source code, you'll need to install OpenJDK 8, GNU C and C++ compilers, XML parsing libraries, ImageMagick, and several other related packages.
radxa$ sudo apt-get update -y && sudo apt-get install \ openjdk-8-jdk android-tools-adb bc bison build-essential curl flex g++-multilib gcc-multilib gnupg \ gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev \ libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools \ xsltproc yasm zip zlib1g-dev
Configure the JAVA environment
radxa$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 radxa$ export PATH=$JAVA_HOME/bin:$PATH radxa$ export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
DockerFile
FROM ubuntu:xenial RUN apt-get update -y && apt-get install -y openjdk-8-jdk python git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip mtools u-boot-tools \ htop iotop sysstat iftop pigz bc device-tree-compiler lunzip \ dosfstools vim-common parted udev
RUN curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo && \ chmod +x /usr/local/bin/repo
RUN which repo
ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' USER=android7-docker
ARG USER_ID=0 ARG GROUP_ID=0 RUN groupadd -g ${GROUP_ID} jenkins-docker && useradd -m -g jenkins-docker -u ${USER_ID} android7-docker
USER android7-docker
Build DockerFile
radxa$ docker build -t android-builder:7.x --build-arg USER_ID=`id -u` --build-arg GROUP_ID=`id -g` $(which-dir-dockerfile-in)
Download source code
radxa$ mkdir rockpi4-android7 radxa$ cd rockpi4-android7
Then run:
radxa$ repo init -u https://github.com/radxa/manifests -b rk3399-all-7.1 -m rockpi_n_all_release.xml radxa$ repo sync -d --no-tags -j4
It might take quite a bit of time to fetch the entire AOSP source code(around 86G)!
Build u-boot
radxa$ cd u-boot radxa$ ./make.sh rock-pi-4b-rk3399 radxa$ cd ..
The generated images are **rk3399_loader_v_xxx.bin** , **idbloader.img** and **uboot.img**
Building kernel
For DSI 480P, support Raspberry Pi official 7" Display.
radxa$ cd kernel radxa$ make rockchip_defconfig radxa$ make rk3399-rockpi-4b.img -j$(nproc) radxa$ cd ..
For HDMI 4K
radxa$ cd kernel radxa$ make rockchip_defconfig radxa$ make rk3399-rockpi-4b-hdmi.img -j$(nproc) radxa$ cd ..
The generated images are **kernel.img** and **resource.img**:
- kernel.img, kernel with rkcrc checksum
- resource.img, contains dtb and boot logo, Rockchip format resource package
Building AOSP
radxa$ source build/envsetup.sh radxa$ lunch rk3399_all-userdebug radxa$ make -j$(nproc)
It takes a long time, take a break and wait...
Generate images
radxa$ ln -s RKTools/linux/Linux_Pack_Firmware/rockdev/ rockdev radxa$ ./mkimage.sh
The generated images under rockdev/Image are
├── boot.img ├── idbloader.img ├── kernel.img ├── MiniLoaderAll.bin ├── misc.img ├── parameter.txt ├── pcba_small_misc.img ├── pcba_whole_misc.img ├── recovery.img ├── resource.img ├── system.img ├── trust.img └── uboot.img
Generated RkUpdate Image
radxa$ cd rockdev radxa$ ln -s Image-rk3399_all Image radxa$ ./mkupdate.sh
The images under rockdev/ are `update.img`
Generated GPT Image
radxa$ cd rockdev radxa$ ln -s Image-rk3399_all Image radxa$ ./android-gpt.sh
IMAGE_LENGTH:3936291 idbloader 64 16383 8.000000 MB Warning: The resulting partition is not properly aligned for best performance. uboot 16384 24575 4.000000 MB trust 24576 32767 4.000000 MB misc 32768 40959 4.000000 MB resource 40960 73727 16.000000 MB kernel 73728 122879 24.000000 MB boot 122880 188415 32.000000 MB recovery 188416 253951 32.000000 MB backup 253952 483327 112.000000 MB cache 483328 745471 128.000000 MB system 745472 3891199 1536.000000 MB metadata 3891200 3923967 16.000000 MB baseparamer 3923968 3932159 4.000000 MB userdata 3932160 3932159 0.000000 MB
The images under rockdev/Image are `gpt.img`
Installation
you can use `tf card` or `emmc module`
$ sudo umount /dev/<Your device>* # mac os maybe not supprot progress $ sudo dd if=Image/gpt.img of=/dev/<Your device> bs=4M status=progress $ sync
[More](https://wiki.radxa.com/Rockpi4/install)
There may be some performance loss when using tf card