一. 首选,参照前一篇在Ubuntu上下载、编译和安装Android最新源代码准备好Android源代码目录。

二. 下载Linux Kernel for Android源代码。

1. 使用GIT工具下载,执行以下命令:

USER-NAME@MACHINE-NAME:~/Android$mkdir kernel

USER-NAME@MACHINE-NAME:~/Android$cd kernel USER-NAME@MACHINE-NAME:~/Android/kernel$git clone git://android.git.kernel.org/kernel/common.git 同样是经过漫长的等待后,在kernel目录下有一个common目录,Linux内核代码就在这里了。 2. 下载完成后,可以查看下载的内核代码版本: USER-NAME@MACHINE-NAME:~/Android/kernel$ cdcommon USER-NAME@MACHINE-NAME:~/Android/kernel/common$ gitbranch android-2.6.36 3.下载完Android的Linux内核代码后,会发现在arch/arm/configs下没有模拟器要使用的硬件配置文件 goldfish_defconfig,而这个配置文件是编译内核代码时需要用到的,因此,需要checkout goldfish版本: USER-NAME@MACHINE-NAME:~/Android/kernel/common$git branch -a * android-2.6.36 remotes/origin/HEAD -> origin/android-2.6.36
remotes/origin/android-2.6.35
remotes/origin/android-2.6.36
remotes/origin/archive/android-2.6.25
remotes/origin/archive/android-2.6.27
remotes/origin/archive/android-2.6.29
remotes/origin/archive/android-2.6.32
remotes/origin/archive/android-gldfish-2.6.29
remotes/origin/archive/android-goldfish-2.6.27
选择android-gldfish-2.6.29: USER-NAME@MACHINE-NAME:~/Android/kernel/common$git checkout remotes/origin/archive/android-gldfish-2.6.29 下载完毕后,就能在arch/arm/configs下看到goldfish_defconfig这个文件了。 如果执行git branch -a命令时没有看到goldfish相关的分支,可以用另外一个办法获得goldfish_defconfig文件,方法如下: A. 用Android源代码工程环境预编译好的内核镜像来启动模拟器: USER-NAME@MACHINE-NAME:~/Android$emulator B. 用adb工具把正在运行的模拟器里面的config文件取出来: USER-NAME@MACHINE-NAME:~/Android$ adb pull /proc/config.gz 执行完上面这一步之后,就会看~/Android目录下看到有一个config.gz文件。 C. 解压上一步得到的config.gz文件: USER-NAME@MACHINE-NAME:~/Android$ gunzip config.gz 执行完这一步之后,就会在~/Android目录下看到有一个config文件。 D. 将上面得到的config文件移至kernel/common/arch/arm/configs目录下: USER-NAME@MACHINE-NAME:~/Android$ mv config kernel/common/arch/arm/configs/goldfish_defconfig 这样,goldfish_defconfig就准备好了。 三. 编译内核代码。 1. 导出交叉编译工具目录到$PATH环境变量中去: USER-NAME@MACHINE-NAME:~/Android/kernel/common$export PATH=$PATH:~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin 2.修改common目录下的Makefile文件的以下两行为: # ARCH?= (SUBARCH) #CROSS_COMPILE?= ARCH ?= arm #体系结构为arm CROSS_COMPILE ?= arm-eabi- #交叉编译工具链前缀,参考~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录 3.开始编译: USER-NAME@MACHINE-NAME:~/Android/kernel/common$make goldfish_defconfig USER-NAME@MACHINE-NAME:~/Android/kernel/common$make 编译成功后,可看到下面两行: OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
在执行make命令前,你也可以执行make menuconfig先配置一下编译选项。 四. 在模拟器中运行编译好的内核。 1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去: USER-NAME@MACHINE-NAME:~/Android$export PATH=$PATH:~/Android/out/host/linux-x86/bin 2. 设置ANDROID_PRODUCT_OUT环境变量 USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic 3. 在后台中指定内核文件启动模拟器: USER-NAME@MACHINE-NAME:~/Android$emulator -kernel ./kernel/common/arch/arm/boot/zImage & 4. 用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核: USER-NAME@MACHINE-NAME:~/Android$ adb shell 这时候如果是第一次运行 adb shell命令,会看到以下输出,不用管它,再运行一次adb shell命令就可以了。 * daemon not running. start it now on port 5037 * * daemon started successfully * error: device offline 切换到proc目录: root@android:/ # cd proc root@android:/proc # cat version Linux version 2.6.29-gb0d93fb-dirty (luo@ubuntu-11-04) (gcc version 4.4.3 (GCC) ) #1 Fri Jun 3 23:17:24 HKT 2011 从机器名luo@ubuntu-11-04和日期1 Fri Jun 3 23:17:24 HKT 2011可以看出,模拟器使用的内核即为刚刚编译出来的内核。

更多相关文章

  1. android linux 最全的基础知识总结
  2. Android(安卓)应用异常记录
  3. 如何制作Jar包并在android中调用jar包
  4. 为Android内核添加新驱动,并添加到menuconfig菜单
  5. Ubuntu 16.04环境下使用Clion 2019.1.4 gdb调试Android(安卓)7.1
  6. 关于Android(安卓)LOG系统
  7. Android(安卓)CTS 总结
  8. Logs in Android
  9. osg for android 学习之三:老外的步骤,包括编译和运行例子

随机推荐

  1. Flutter通过BasicMessageChannel实现Flut
  2. Android(安卓)SDK无法更新解决办法
  3. android editText 插入表情,或者是图片
  4. Android(安卓)JNI详述
  5. Android中的多线程
  6. 【OpenCV4Android学习一】 Android(安卓)
  7. Android 更改软键盘Enter键为搜索
  8. Android集成Huawei PUSH(四)——客户端开发
  9. android 分辨率问题
  10. Android通过JNI调用驱动程序(完全解析实