• (OK) how to customize the kernel for your hardware for Android-x86



    http://www.android-x86.org/documents/customizekernel


    Overview

    The Android build system doesn't compile kernel on-fly. It just contains a prebuilt kernel binary which will be added to the target image. This approach may be good enough for the arm emulator target, but not suitable for x86 platforms. The x86 platforms have various hardware. The kernel binary and its modules may need to be adjusted at compile time or runtime.

    This article describes an extra feature of the build system of android-x86 project. That is, the ability to build kernel and modules by a predefined or customized config during the building process.

    Compile kernel for Android-x86

    Prepare the source tree

    We have modify the Android build system to compile a kernel image on-fly. You need to use our repository to get this feature. Read the article GetSourceCode for details.

    Build the default kernel

    We put a default config for android-x86 in kernel/arch/x86/configs/. To build a kernel image from this config, run

    $ make iso_img TARGET_PRODUCT=android_x86

    By specifying the TARGET_PRODUCT to android_x86, the build system automatically selects the config android-x86_defconfig to compile the kernel binary and its modules. The binary will finally be generated in out/target/product/x86/kernel, and the modules is put under out/target/product/x86/system/lib/modules/. The final target out/target/product/x86/android_x86.iso will contain the kernel binary and its modules.

    You may build the kernel and its modules alone, by changing the goal iso_img to kernel.

    $ make kernel TARGET_PRODUCT=android_x86

    Build the target kernel

    Since donut-x86 we have supported multiple targets, e.g., eeepc, tegav2, ... Each target may has its customized kernel config located in its device definition directory. When you choose a target (by specifying TARGET_PRODUCT or lunch command, see GetSourceCode for details.), the customized kernel config of this target will be used to build the kernel image.

    Build a customized kernel

    Suppose you already have a workable kernel config for you hardware, it's easy to tell the build system to use your config to build the iso. Just put your config file to kernel/arch/x86/configs/, and run (suppose the name of your config is my_defconfig)

    $ make iso_img TARGET_PRODUCT=android_x86 TARGET_KERNEL_CONFIG=my_defconfig

    Note you cannot use a kernel config from a normal linux distribution (e.g, ubuntu) for android-x86. You need to enable android kernel features to make it work. See android/configs/android-base.cfg for a list of required configuration options for a kernel to support an Android system. (but removes arm specific options for android-x86, e.g., PMEM)

    Customize the kernel configuration

    It is never advisable to edit the kernel config file directly, as it may generate faulty configuration (dependencies not met etc.). The correct way to customize the kernel config is (on the top of android-x86 tree)

    $ . build/envsetup.sh
    $ lunch xxx-userdebug
    $ make -C kernel O=$OUT/obj/kernel ARCH=x86 menuconfig

    where xxx is a target you chosen. Then copy $OUT/obj/kernel/.config to custom_kernel_config_location.

    DO NOT issue make menuconfig in the kernel/ directory directly. If you do so, the build rules may be broken. In this case, try this way to recover it (on the top of android-x86 tree):

    $ make -C kernel distclean
    $ rm -rf $OUT/obj/kernel

    Use a prebuilt kernel

    If you have a workable prebuilt kernel binary for your hardware, you can generate the iso with it:

    $ make iso_img TARGET_PRODUCT=android_x86 TARGET_PREBUILT_KERNEL=<path to the prebuilt kernel>

    Compile kernel for ARM (deprecated)

    The kernel build system can also be used to compile kernel for ARM. For example, to compile kernel 2.6.29 for the goldfish CPU of the arm emulator, run

    $ cd kernel
    $ git checkout x86/android-goldfish-2.6.29
    $ cd ..
    $ make kernel TARGET_KERNEL_CONFIG=goldfish_defconfig TARGET_NO_KERNEL=

    The kernel binary will be generated in out/target/product/generic/kernel.

    Set TARGET_NO_KERNEL to be empty is important, otherwise the kernel building steps will be skipped.


  • 相关阅读:
    三剑客
    走近SQL Server的游标
    PostSharp的AOP设计在.NET Remoting中的应用
    总结在使用VB 6.0和C#编写ActiveX控件的实践 (一)
    动态为程序指定快捷键
    为Reporting Service部署自定义程序集可能遇到的问题
    如何更改服务器名称
    如何产生固定的随机数(VBA)
    使用HTTP发送消息(消息队列技术)
    使用TransactionScope做分布式事务协调
  • 原文地址:https://www.cnblogs.com/ztguang/p/12644934.html
Copyright © 2020-2023  润新知