Write in front
The main task is to add a product to the existing android system code and sort out the migration steps of adding a product to the android system. Here, it is assumed that you have downloaded the aosp code.
compile
First compile the existing code and debug the errors, mainly the errors encountered in the compilation environment. I put the errors I encountered at the end. If the same errors are encountered, you can refer to them.
source build/envsetup.sh lunch make
In this step, you will encounter some strange environmental problems. Compile it first. Otherwise, if you have changed something, cough, it is hard to tell whether it is your own pot or the environmental pot.
New branch
Add a new branch
mkdir device/rockchip/rk3326/PX30_Myandroid cp -ra device/rockchip/rk3326/PX30_Android10/* device/rockchip/rk3326/PX30_Myandroid/
Third parties are allowed to customize the Product configuration. In the source code /device/rockchip/rk3326 directory, the following files need to be added / modified respectively:
AndroidProducts.mk: specify the product configuration and add the product to the lunch option
product.mk: the software related configurations of a product, such as the built-in software modules, are determined by androidproducts Product in MK_ Makefiles specified (non fixed)
BoardConfig.mk: chip hardware related configurations, partition settings, etc
Here are my changes
/device/rockchip/rk3326/AndroidProducts.mk:
The main thing is to add a lunch option
COMMON_LUNCH_CHOICES += PX30_Myandroid-userdebug \ PX30_Myandroid-user \
device/rockchip/rk3326/PX30_Myandroid/BoardConfig.mk:
Mainly related to hardware configuration
PRODUCT_KERNEL_CONFIG: there are three parallel relationships instead of selection relationships. The corresponding directory is /kernel/arch/arm64/configurations
// Define board level information: use dts device tree file, defconfig configuration file of kernel, and defconfig configuration file of uboot PRODUCT_KERNEL_DTS := px30-evb-ddr3-rgb-v10 PRODUCT_KERNEL_CONFIG := px30_android_defconfig android-10-go.config rk3326.config PRODUCT_UBOOT_CONFIG := px30
device/rockchip/rk3326/PX30_Myandroid/PX30_Myandroid.mk:
mv PX30_Android10.mk PX30_Myandroid.mk
Modify the px30 inside_ Android10 to PX30_Myandroid
About these
PRODUCT_NAME := PX30_Myandroid PRODUCT_DEVICE := PX30_Myandroid PRODUCT_BRAND := rockchip PRODUCT_MODEL := PX30_Myandroid
Modify kernel
1 device file tree
First, create a new boardconfig Device tree file specified in MK
Involving documents to be modified
kernel/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-rgb-v10.dts //New: px30-evb-ddr3-v10 DTS copy for modification cd kernel/arch/arm64/boot/dts/rockchip cp px30-evb-ddr3-v10.dts px30-evb-ddr3-rgb-v10.dts
android
System login animation
Android The system login animation for is similar to Windows The scroll bar of the system consists of two pages: foreground and background PNG Picture composition: frameworks/base/core/res/assets/images/android-logo-IP-mask.png frameworks/base/core/res/assets/images/android-logo-IP-shine.png Foreground picture( android-logo-mask.png)Upper Android Hollowed out text part, background picture( android-logo-shine.png)Is a simple texture. When the system logs in, the foreground picture is displayed on the top layer, and the program code controls the continuous scrolling of the background picture. The background texture is scrolled through the hollowed out part of the text of the foreground picture, so as to achieve the animation effect /frameworks/base/cmds/bootanimation/BootAnimation.cpp bool BootAnimation::android() { initTexture(&mAndroid[0], mAssets, "images/android-logo-IP-mask.png"); // prospect initTexture(&mAndroid[1], mAssets, "images/android-logo-IP-shine.png"); // background }
Problems encountered during compilation
Record the problems encountered during compilation and some solutions
Question 1
When setting up the environment, it is found that the up, down, left and right keys in the shell are garbled and cannot be used normally, which shows that the left, right, up and down keys on the linux shell are garbled ^[[d ^[[c ^[[[a ^[[b
View shell environment
echo $SHELL
If bin/sh is displayed, try typing
bash
If OK,
a) Ask the administrator to add the bash environment to /etc/passwd, find their own username, and add: /bin/bash after the last colon
b) Use: chsh -s /bin/bash username or use the usermod -s /bin/bash username command to modify the shell type.
c) The other is that the current user's shell type is /bin/bash, but this problem still exists. In this case, you can enter: export TERM=linux on the terminal. This seems to be due to the problem of TERM in the ubuntu version.
Question 2
clang++: error: unable to execute command: Segmentation fault (core dumped) clang++: error: clang frontend command failed due to signal (use -v to see invocation) Android (6052599 based on r353983c1) clang version 9.0.3 (https://android.googlesource.com/toolchain/clang 745b335211bb9eadfa6aa6301f84715cee4b37c5) (https://android.googlesource.com/toolchain/llvm 31c3f8c4ae6cc980405a3b90e7e88db00249eba5) (based on LLVM 9.0.3svn) Target: aarch64-unknown-linux-android Thread model: posix InstalledDir: prebuilts/clang/host/linux-x86/clang-r353983c1/bin clang++: note: diagnostic msg: PLEASE submit a bug report to https://github.com/android-ndk/ndk/issues and include the crash backtrace, preprocessed source, and associated run script. clang++: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: clang++: note: diagnostic msg: /work3/tengxingru/Rockchip_Android10/out/soong/.temp/regexp-macro-assembler-tracer-85a75a.cpp clang++: note: diagnostic msg: /work3/tengxingru/Rockchip_Android10/out/soong/.temp/regexp-macro-assembler-tracer-85a75a.sh clang++: note: diagnostic msg: ******************** 14:54:04 ninja failed with: exit status 1
Unable to execute command: the problem of segmentation fault is really puzzling. After the tar package of my code is compressed, decompressed and copied, it will be different from the source code. After comparison, there are three differences, one of which is only one byte in the middle. It is difficult to understand. Let's sort out the possible reasons
1. During tar, there was an error in the file during the compression and decompression process. I unpacked the source code after tar, and compared it with the original code with diff tool. Unexpectedly, there are several different files in the source code. Copy the different files in the source code again. Don't ask me why. I have already doubted my life.
Pay attention to the language
Experience shows that LANG and LANGUAGE should be matched, for example
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
perhaps
export LANG=en_US.UTF-8
export LANGUAGE=en_US:en
After setting, try compiling again
3 pay attention to memory. For this reason, you can find a way to increase swap on the Internet. Normally, it should be to increase memory. If it is difficult to increase memory, try to reduce the number of compilation threads, that is, the n in the -jn. If multiple threads compile at the same time, you may encounter inexplicable problems due to insufficient memory.