• How to download and compile Android kernel goldfish ?


    Prerequisites

    Assuming that we already downloaded the android-ndk-r12b and sdk.

    w4118@w4118:~/utils$ ls
    android-ndk-r12b android-sdk-linux bin goldfish nexus7

    And then we need to set up the environment.
    Or you can download the vm having been set up directly. [1]

    1. Edit ~/.bashrc

    # add Android SDK Tools to the path
    export ANDROID_SDK=~/utils/android-sdk-linux
    export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
    
    # add other custom utilities to the path
    export PATH=$PATH:~/utils/bin
    
    # set up debugging paths
    export PATH=$PATH:~/utils/android-ndk-r12b/prebuilt/android-arm64/gdbserver/:~/utils/android-ndk-r12b/prebuilt/linux-x86_64/bin/
    
    # add toolchain to the path
    export PATH=$PATH:~/utils/android-ndk-r12b/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin:~/utils/android-ndk-r12b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin:~/utils/android-ndk-r12b/prebuilt/android-arm64:~/utils/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:~/utils/android-ndk-r12b:~/utils/arm-eabi-4.8/bin:~/utils/android-ndk-r10e
    
    export A24_INCLUDE=~/utils/android-ndk-r12b/platforms/android-24/arch-arm64/usr/include/
    export A24_LINK=~/utils/android-ndk-r12b/platforms/android-24/arch-arm64/usr/lib/
    export A24_SYSROOT=~/utils/android-ndk-r12b/platforms/android-24/arch-arm64/
    
    
    export A23_INCLUDE=~/utils/android-ndk-r12b/platforms/android-23/arch-arm64/usr/include/
    export A23_LINK=~/utils/android-ndk-r12b/platforms/android-23/arch-arm64/usr/lib/
    export A23_SYSROOT=~/utils/android-ndk-r12b/platforms/android-23/arch-arm64/
    

    Then

    $source ~/.bashrc
    

    2. Download android-kernel-goldfish

    $git clone http://android.googlesource.com/kernel/goldfish.git   
    $git branch -a  
    $git checkout -b debug-android-goldfish-3.18 remotes/origin/android-goldfish-3.18
    

    3. Compile kernel

    $make ARCH=arm64 ranchu_defconfig 
    
    $make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-android-
    

    hint: adding an alias to your ~/.bashrc file:

    alias armmake="make -j16 KCFLAGS=-ggdb3 ARCH=arm64 CROSS_COMPILE=aarch64-linux-android-"
    

    4. Create the emulator

    Create an Android Virtual Device (AVD), and install a custom 3.18 kernel in it.

    Run android avd from the terminal
    Add a new AVD by clicking "Create"
    Pick a suitable name (we chose w4118avd)
    Choose a Galaxy Nexus device
    Target and CPU/ABI should self populate
    Pick a "Skin with dynamic hardware controls"
    Give at least 1500MB of RAM and a 256MB VM Heap
    Tick on "Use Host GPU"

    Once your AVD is set up, you can start it from the terminal with

    $emulator @avdname -show-kernel
    

    You need to open it with default kernel firstly; otherwise, it cannot start it by above emulator command.

    • Hardware acceleration must be enabled in your VM settings for the AVD to boot.
    • The AVD can take up to 10 minutes to boot. If the AVD fails to boot, try restarting your VM and your Host machine and allocating more memory to the VM. Giving more RAM to the AVD can also be helpful.
    • If the emulator shows a completely black screen with a "Process System isn't responding", click on Wait a few times and you will get to the home screen soon.

    5. Start the emulator

    After compiling, you can start the emulator again.

    $emulator @w4118avd -kernel arch/arm64/boot/Image -show-kernel -no-window -verbose -netfast
    

    On x86_64 emulator

    $make ARCH=x86_64 x86_64_ranchu_defconfig
    $make -j16 ARCH=x86_64 CROSS_COMPILE=x86_64-linux-android- 2>&1 |tee kernel_make.out
    
    $emulator -verbose @x86 -kernel arch/x86/boot/bzImage -show-kernel -no-window -qemu --enable-kvm 2>&1 | tee boot_errors
    

    On armv7-32bit

    kernel : android-goldfish-3.10
    rom : android 7.0
    toolchain : arm-eabi-4.8 (doesn't include in ndk-r12b)
    command :

    $make ARCH=arm ranchu_defconfig
    $make -j16 ARCH=arm KCFLAGS=-ggdb3 CROSS_COMPILE=arm-eabi-
    $emulator @arm32 -kernel arch/arm/boot/zImage -show-kernel -no-window -verbose -netfast
    

    On x86 (not used)

    kernel : android-goldfish-3.10
    rom : android 7.0
    command :
    edit .config:

      │    [*] KGDB: kernel debugger  --->   
      │ │    [*] Compile the kernel with debug info                                     │ │  
      │ │    [*]   Provide GDB scripts for kernel debugging                  
    
    $make ARCH=x86 i386_ranchu_defconfig
    $make -j7 KCFLAGS=-ggdb3 ARCH=x86 
    
    $emulator @x86 -kernel arch/x86/boot/bzImage -show-kernel -no-window -verbose -netfast
    

    Kernel and ROM matched table

    Other useful command

    #### Android Stop Emulator from Command Line
        adb emu kill
    #### Get the kernel messages
        adb shell dmesg
        adb shell cat /proc/kmsg
    #### Redirecting kernel logs:
        For Windows:‐> adb shell cat /proc/kmsg > kernelmsg.txt
        For Linux:‐‐> adb shell cat /proc/kmsg | tee ‐a kernelmsg.txt
    

    stop-emulators.sh

    #!/bin/bash
    for ((PORT=5554; PORT<=5584; PORT+=2)); do
        echo killing emulator-$PORT...
        adb -s emulator-$PORT emu kill
    done
    

    ref :

    [1] http://www.cs.columbia.edu/~nieh/teaching/w4118/homeworks/hmwk2.html
    [2] http://blog.chinaunix.net/uid-29616823-id-4891227.html
    [3] http://blog.csdn.net/mr_raptor/article/details/7954474
    [4] https://github.com/openthos/openthos/wiki/AOSP-6.0-x86_64-kernel-3.10-in-ubuntu-15.04
    [5] http://tic-le-polard.blogspot.fr/2015/06/android-building-android-kernel-for_6.html

  • 相关阅读:
    利用正则表达式,完成参数的替换
    使用python读取yaml文件
    python+unittet在linux与windows使用的区别
    python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息
    jmeter线程组之间传参
    requests:json请求中中文乱码处理
    ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字
    使用openpyxl的styles,实现写入值时加背景色
    批量数据请求接口
    locust参数化
  • 原文地址:https://www.cnblogs.com/bittorrent/p/8117156.html
Copyright © 2020-2023  润新知