Android4.0.1已经放出来了,但是其模拟器内核是预编译的bianry。没有提供内核源代码。 想自己编译一个内核,这样子可以改内核代码完,可是找了网上的资料,发现都已经过时了。 本文提供最新的 地址和方法。

由于Androidkernel的部分封闭策略,kernel org已经将 android kernel踢出主线。原有的 同步地址已经被重定向,再加上android kernel本身结构的调整,很多原来的同步方法已经不能使用。 下面是最新的方法,适用于编译 android 4.0.1 模拟器的内核 ( qemu kernel, goldfish branch)。


原有的方法大多使用一下地址同步Androidgoldfish

  1. $gitclonegit://Android.git.kernel.org/kernel/common.git
  • $cdcommon
  • $gitbranch-a
  • $gitcheckoutremotes/origin/archive/Android-gldfish-2.6.29但是我们可以在 浏览器里输入
    1. Android.git.kernel.org/kernel/common.git
    它实际上已经被重定向到
    1. Android.googlesource.com/kernel/common.git
    但是这个repo 里已经不包含 goldfish的分支了。如果同步下来后我们用 git branch -a 将看到只有最新的 3.0 和2.6.39的分支:
    1. $gitbranch-a
    2. *(nobranch)
    3. master
    4. remotes/origin/HEAD->origin/master
    5. remotes/origin/Android-2.6.39
    6. remotes/origin/Android-3.0
    7. remotes/origin/master

    其实 goldfish分支已经被独立为一个单独的repo:http://Android.googlesource.com/kernel/goldfish.git

    以下是最新的正确的 同步步骤:

    1. $gitclonehttp://Android.googlesource.com/kernel/goldfish.git
    2. $cdgoldfish
    3. $gitbranch-a
    4. *(nobranch)
    5. master
    6. remotes/origin/HEAD->origin/master
    7. remotes/origin/Android-goldfish-2.6.29
    8. remotes/origin/master
    9. $gitcheckout<prename="code"class="plain">remotes/origin/Android-goldfish-2.6.29
     

    编译步骤基本没有变,但需要使用新的config:

    1. $makeARCH=armgoldfish_armv7_defconfig
    2. $makeARCH-armCROSS_COMPILE=arm-eabi-
    3. ...
    4. OBJCOPYarch/arm/boot/zImage
    5. Kernel:arch/arm/boot/zImageisready

    然后就可以用着新的kernel img 来启动模拟器了:

    1. $emulator-kernel...../kernel/goldfish/arch/arm/boot/zImage&
    启动模拟器,到 Setting => About 去看,kernel的确编程我们自己编译的版本。 可以手工了。

    另外,Google 似乎有意提供一个简单脚本来编译 kernel,可以看看 external/qemu/docs/Android-KERNEL.TXT 有提到那个 distrib/rebuild-kernel.sh.

    但搜索后这个文件并不存在。最接近的两个脚本是 prebuild/Android-arm/kernel/rebuild.sh.

    但是这个脚本明显的是个半成品,--help里的信息和脚本的实现还是有出去的。正确的用法是:

    1. $cdics/platform(your$TOP)
    2. $prebuild/Android-arm/kernel/rebuild.shkernel/goldfish/(刚才同步的goldfishkernel目录)
    编译可以顺利完成,并且生成的新的kernel 会被自动拷贝到 prebuild/Android-arm/kernel 里去。但是如果不指定 kernel img 启动,发现用的还是原来自带的的img。
    还是需要再启动 emulator是 用 -kernel 参数 显式的指定编译出来的img:
    1. ./emulator-avdics-kernel<$TOP>/prebuilt/Android-arm/kernel/kernel-qemu-armv7
    这样子的话,google提供的这个脚本根本就是鸡肋了...
  • 更多相关文章

    1. 自动裁剪Android(安卓)ICON并保存到对应路径脚本
    2. Android(安卓)studio无法连接识别检测各种模拟器和手机的问题 (
    3. [Android] 利用 ant 脚本修改项目包名
    4. Android(安卓)系统概览
    5. Android自动测试之通过命令行启动应用程序
    6. 【Android(安卓)NDK 开发】Android.mk 配置动态库 ( Android(安
    7. Android+OTA+升级之一:编译升级包---make+otapackage
    8. Unity项目之AndroidStudio打jar包
    9. Ubuntu 12.04.3 64位 安装android sdk后 adb无法连接设备

    随机推荐

    1. android 自定义按钮样式
    2. Android 各种音量的获取和设置
    3. ImageView android:scaleType属性详解
    4. 设置组件圆角
    5. Android(安卓)Sliding Menu
    6. Android android:exported = true 用法详
    7. Android存储-SharedPreferences
    8. Android系统启动流程 -4
    9. Android中设置控件可见与不可见详解
    10. Multitasking the Android(安卓)Way