手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

在Ubuntu上编译 emulat Android avd内核源代码(Linux Kernel)

[日期:2014-03-01] 来源:Linux社区  作者:yygydjkthh [字体: ]

/*********************************************************************
 * Author  : Samson
 * Date    : 02/28/2014
 * Test platform:
 *              Linux Ubuntu 3.2.0-58-generic-pae
 *              GNU bash, version 4.2.39
 * *******************************************************************/

The goldfish project contains the kernel sources for the emulated platforms.

一、首先,到

git clone https://Android.googlesource.com/kernel/goldfish.git下载Linux Kernel for Android emulator源代码。

1、使用GIT工具下载,执行以下命令:
USER-NAME@MACHINE-NAME:~/$ git clone https://android.googlesource.com/kernel/goldfish.git
    同样是经过漫长的等待后,在home目录下有一个goldfish目录,Linux内核代码就在这里了。
2、下载完成后,可以查看下载的内核代码版本:
    USER-NAME@MACHINE-NAME:~$ cd  goldfish
    USER-NAME@MACHINE-NAME:~/goldfish$ ls -a
      .  ..  .git

3、 .git include 内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkout goldfish版本:
    USER-NAME@MACHINE-NAME:~/goldfish$ git branch -a     
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-goldfish-2.6.29
  remotes/origin/android-goldfish-3.4
  remotes/origin/linux-goldfish-3.0-wip
  remotes/origin/master
    选择remotes/origin/android-goldfish-3.4:
      USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ git checkout remotes/origin/android-goldfish-3.4

二、编译内核代码。
1、导出交叉编译工具目录到$PATH环境变量中去:
USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$
export ARCH=arm
export SUBARCH=arm
export PATH=$PATH:/home/v0idp0int/tools/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin
export CROSS_COMPILE=m-linux-androideabi-

2、现在是要得到android的内核编译参数的配置文件的时候了,该文件需要从已经安装好的android的模拟器
中得到才行。所以安装android的sdk也是必须的,
首先启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:
USER-NAME@MACHINE-NAME:emulator &
USER-NAME@MACHINE-NAME:adb pull /proc/config.gz .
这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。
把它拷贝到你的kernel/goldfish目录:
USER-NAME@MACHINE-NAME:cd ~/my_android/kernel/goldfish
USER-NAME@MACHINE-NAME:cp ~/config.gz
解压缩该文件,并重命名为.config,这一步做了就可以跳过make menuconfig之类的内核参数设置
动作了。
  USER-NAME@MACHINE-NAME:gunzip config.gz
USER-NAME@MACHINE-NAME:mv config .config
若是重新编译一个模拟器的内核版本的话,使用命令make goldfish_defconfig 或者make goldfish_armv7_defconfig产生的.config来编译内核。
3、 开始编译:
      USER-NAME@MACHINE-NAME:~/goldfish$ make goldfish_defconfig(若操作了第3步,则该命令可省略)
USER-NAME@MACHINE-NAME:~/goldfish$ make
   
编译成功后,可看到下面两行:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

三、在模拟器中运行编译好的内核。
1、在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
USER-NAME@MACHINE-NAME:~/my_android$ export PATH=$PATH:~/my_android/out/host/linux-x86/bin
2、设置ANDROID_PRODUCT_OUT环境变量:
USER-NAME@MACHINE-NAME:~/my_android$ export ANDROID_PRODUCT_OUT=~/my_android/out/target/product/generic
3、 在后台中指定内核文件启动模拟器:
USER-NAME@MACHINE-NAME:~/my_android$  emulator  -kernel /opt/hackandroid/goldfish_0228/arch/arm/boot/zImage -avd Android4.2.2

Note: run the command after, emulator is black or empty, please hand on power-on button on the emulator UI.
4、用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:
      USER-NAME@MACHINE-NAME:~/my_android$ adb shell
      这时候如果是第一次运行 adb shell命令,会看到以下输出,不用管它,再运行一次adb shell命令就可以了。
      * daemon not running. start it now on port 5037 *
      * daemon started successfully *
      error: device offline
    切换到proc目录:
    root@generic:/ # cat /proc/version                                           
Linux version 3.4.0-g48b9692 (v0id@ubuntu) (gcc version 4.6.2 (Linaro GCC 4.6-2011.11) ) #1 PREEMPT Fri Feb 28 06:44:40 PST 2014

    从日期 Fri Feb 28 06:44:40 PST 2014可以看出,模拟器使用的内核即为刚刚编译出来的内核。

Linux Kernel 的详细介绍请点这里
Linux Kernel 的下载地址请点这里

相关阅读

Linux内核将用nftables替代iptables http://www.linuxidc.com/Linux/2013-10/91727.htm

Linux 3.12代号Suicidal Squirrel http://www.linuxidc.com/Linux/2013-09/90023.htm

怎样在 Ubuntu 上安装 Linux 3.11 内核 http://www.linuxidc.com/Linux/2013-09/89674.htm

Ubuntu 13.10 (Saucy Salamander) 内核已升级至 Linux Kernel 3.10 RC5 http://www.linuxidc.com/Linux/2013-06/86110.htm

Linux Kernel 3.4.62 LTS 现已经提供下载 http://www.linuxidc.com/Linux/2013-09/90368.htm

如何在Ubuntu 13.10上安装Linux内核 3.12 http://www.linuxidc.com/Linux/2013-11/92930.htm

更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

linux
相关资讯       Linux内核编译 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款