Android Bionic Kernel Header Generator
Android Bionic Kernel Header Generator 位於 android project "bionic/libc/kernel/tools/generate_uapi_headers.sh" 路徑下. 它的內容如下. Bionic 在 Kitkat/Lolipop/Marshmallow 內容可能差異很大, 但 generator 應該都是在這個資料夾下. Bionic 所需要的 kernel header 由此產生.
https://android.googlesource.com/platform/bionic.git https://android.googlesource.com/platform/bionic/+/master/libc/kernel/tools/generate_uapi_headers.sh
...
set -e
TMPDIR=""
ANDROID_DIR=""
KERNEL_VERSION="android-3.10"
KERNEL_DIR=""
KERNEL_DOWNLOAD=0
ARCH_LIST=("arm" "arm64" "mips" "x86")
ANDROID_KERNEL_DIR="external/kernel-headers/original"
SKIP_GENERATION=0
VERIFY_HEADERS_ONLY=0
...
Android Kernel
https://android.googlesource.com/kernel/common/
android-3.10 android-3.10.y android-3.14 android-3.18 android-3.4 android-4.1 android-4.4 android-4.4.y android-trusty-3.10 android-trusty-3.18 android-trusty-4.4 ...
git clone https://android.googlesource.com/kernel/common/android-4.4
當我們 Porting Android ...
以 JUNO LCR Lollipop 為例, 假如我們選用 kernel-4.4, 則 JUNO BoardConfig.mk 內容如下:
# vi device/linaro/juno/BoardConfig.mk
...
TARGET_KERNEL_VERSION := 4.4
...
git clone https://android.googlesource.com/kernel/common/android-4.4
為了匹配起見, 以上述為例, 必須修改這 Android Bionic Kernel Header Generator:
https://github.com/android/platform_bionic/blob/master/libc/kernel/tools/generate_uapi_headers.sh
...
set -eE
TMPDIR=""
ANDROID_DIR=""
KERNEL_VERSION="android-4.4"
KERNEL_DIR=""
KERNEL_DOWNLOAD=0
ARCH_LIST=("arm" "arm64" "mips" "x86")
ANDROID_KERNEL_DIR="external/kernel-headers/original"
SKIP_GENERATION=0
VERIFY_HEADERS_ONLY=0
...
把上述 Post 至 Blog 上是為了避免忘記這些東西. 我差一點兒找不到這個 key words "Android Bionic Kernel Header Generator", 差一點兒找不到 Bionic 當初修改了甚麼.
Script for Building LOLLIPOP-SEATTLE ( mk-selinuxtarballs.sh )
#!/bin/bash # Author+=amit.pundir@linaro.org #set -e CWD=`pwd` if [ -d android ] ; then cd android fi #export ARCH=arm64 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 export PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:/usr/lib/jvm/java-7-openjdk-amd64/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/CodeSourcery/bin:/home/root/android-ndk-r10d:/opt/gcc-linaro-5.1-2015.08-x86_64_aarch64-linux-gnu/bin:/root/android-sdk-linux/tools:/home/root/bin:/root/android-sdk-linux/platform-tools:/root/android-sdk-linux/build-tools export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:. export MANIFEST_REPO=`echo git://android.git.linaro.org/platform/manifest.git | sed 's/\/\/.*-bot@/\/\/'"${LINARO_ANDROID_ACCESS_ID}"'@/'` export LOCAL_MANIFEST=`echo git://android.git.linaro.org/platform/manifest.git | sed 's/\/\/.*-bot@/\/\/'"${LINARO_ANDROID_ACCESS_ID}"'@/'` export MANIFEST_BRANCH=android-5.1.1_r24 export LOCAL_MANIFEST_BRANCH=linaro-lollipop export MANIFEST_FILENAME=default.xml export TARGET_PRODUCT=juno #export PATCHSETS="LOLLIPOP-STABLE-PATCHSET LOLLIPOP-CHROME-PATCHSET" export PATCHSETS="juno-master-patches juno-m-workarounds LOLLIPOP-STABLE-PATCHSET LOLLIPOP-CHROME-PATCHSET MARSHMALLOW-RLCR-PATCHSET" export LUNCH=juno-userdebug export TARGET_SIMULATOR=false export BUILD_TINY_ANDROID= export CPUS=`grep -c processor /proc/cpuinfo` export INCLUDE_PERF= export TARGET_BUILD_VARIANT=userdebug export BUILD_FS_IMAGE=1 export DEBUG_NO_STRICT_ALIASING= export DEBUG_NO_STDCXX11= export TOOLCHAIN_TRIPLET= #export ANDROID_64= export WITH_HOST_DALVIK=true #export USE_LINARO_TOOLCHAIN= export TARGET_TOOLS_PREFIX= make -C kernel/linaro/phoenix ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- distclean make -C kernel/linaro/wily ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- distclean make -C kernel/linaro/armlt ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- distclean rm -rf device/linaro/juno/kernel out/target/product/juno/kernel out/target/product/juno/kernel out/target/product/juno/obj/kernel out/target/product/juno/boot/kernel mkdir -p out/target/product/juno/obj/kernel/arch/arm64/boot/ mkdir -p out/target/product/juno/boot/ /bin/cp amd-overdrive.dtb out/target/product/juno/obj/kernel/arch/arm64/boot/ /bin/cp amd-overdrive.dtb out/target/product/juno/boot/ ################# mkdir -p out/target/product/juno/system mkdir -p out/target/product/juno/system/lib mkdir -p out/target/product/juno/system/lib/egl mkdir -p out/target/product/juno/system/lib64 mkdir -p out/target/product/juno/system/lib64/egl /bin/cp my_vendor/arm/mali-t62x_r6p0-02rel0_android-5.1/lib/egl/lib*.so out/target/product/juno/system/lib/egl/ /bin/cp my_vendor/arm/mali-t62x_r6p0-02rel0_android-5.1/lib64/egl/lib*.so out/target/product/juno/system/lib64/egl/ # init=/init rw echo "fs0:" > out/target/product/juno/boot/startup.nsh echo -n "kernel initrd=ramdisk.img console=ttyAMA0,115200 no_console_suspend=1 video=radeondrmfb:dev=hdmi,bpp=16 selinux=0 androidboot.hardware=juno" >> out/target/product/juno/boot/startup.nsh #echo -n "kernel initrd=ramdisk.img console=ttyAMA0,115200 radeon.dpm=1 radeon.agpmode=-1 video=radeondrmfb:dev=hdmi,bpp=32 selinux=0 androidboot.hardware=juno" >> out/target/product/juno/boot/startup.nsh #echo -n "kernel dtb=amd-overdrive.dtb initrd=ramdisk.img console=ttyAMA0,115200 selinux=0 androidboot.hardware=juno" >> out/target/product/juno/boot/startup.nsh #[ -f kernel/linaro/wily/arch/arm64/boot/Image ] && cp kernel/linaro/wily/arch/arm64/boot/Image out/target/product/juno/boot/kernel #rm -rf out/target/product/juno/kernel #ln -s kernel/linaro/wily/arch/arm64/boot/Image out/target/product/juno/kernel # build the code source build/envsetup.sh lunch ${LUNCH} #time make -j${CPUS} showcommands selinuxtarballs 2>&1 | tee build_selinuxtarballs.log time make showcommands selinuxtarballs 2>&1 | tee build_selinuxtarballs.log #time make -j${CPUS} showcommands droidcore 2>&1 | tee build_selinuxtarballs.log cd $CWD unset INCLUDE_PERF unset DEBUG_NO_STRICT_ALIASING unset DEBUG_NO_STDCXX11 unset TOOLCHAIN_TRIPLET unset ANDROID_64 unset WITH_HOST_DALVIK unset USE_LINARO_TOOLCHAIN unset TARGET_TOOLS_PREFIX
Email: jasonc@mail2000.com.tw