加载中…
个人资料
Steven天天Helloworld
Steven天天Helloworld
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,491
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

在android emulator上启动自己编译的linux kernel

(2012-07-11 16:50:42)
标签:

杂谈

分类: Android驱动学习笔记
若要在android上做系统开发,比如做驱动,改内核等等的工作,会在emulator上运行自己编译的内核是十分必要的。

准备交叉工具链

首先,最终目的是在仿真器上跑自己编译的内核,第一步肯定是编译生成kernel镜像。
因为仿真器模拟的是goldfish结构的核,那么交叉编译环境就要采用goldfish的交叉编译工具链(toolchain)。

那么,第一步就是要获得交叉编译工具链。
交叉编译工具链可以在官网上下载获得。
$ cd ANDROID_KERNEL_DIR       ----------(ANDROID_KERNEL_DIR假设是准备存放内核的目录路径。)
$ git clone https://android.googlesource.com/platform/prebuilt
这样就会在自己的这个目录下下载好交叉编译的toolchain,这个toolchain的具体的可执行文件被存在了ANDROID_KERNEL_DIR/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin路径下。
下面把这个路径加入到PATH变量中。
$ export PATH= ANDROID_KERNEL_DIR/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
这样,交叉编译工具就下好了。

交叉编译工具下好以后,需要配置一些环境变量,让交叉编译工具可以自动工作:
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-

这样,内核的交叉编译环境就配置好了。

下载android配套的内核源代码:

同样的方法,从远端官网直接克隆过来:
官网上的介绍比较复杂,官网上的git命令如下:
$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/exynos.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git
其实意思是,android的linux kernel有很多个代码项目,下面一段文字友介绍了每一个分支所代表的平台,比如goldfish代表是仿真器平台,而omap代表PandaBoard和Galaxy Nexus平台。
在网上的关于编译源码的文章有点老,在文章发表的那会儿,goldfish是在common平台里的一个分支,现在goldfish已经独立出来成为独立的项目。因此,如果clone的是common项目,那么在arch/arm/config下是找不到goldfish_defconfig文件的,而这个goldfish_defconfig文件,是帮助我们自动配置编译选项的配置文件
因此执行命令:
$ git clone https://android.googlesource.com/kernel/goldfish.git goldfish_kernel
后面加一个goldfish_kernel的意思是把代码克隆到goldfish_kernel目录下。
进入goldfish_kernel目录,执行命令:
$cd 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
命令:
$ git checkout android-goldfish-3.4
这里我没有找到goldfish_defconfig的配置文件,因为对android代码树和配置文件还不是很了解,因此这里没有尝试编译其他的配置文件。
然后,我切换回分支:
  remotes/origin/android-goldfish-2.6.29
执行命令:
$ git checkout android-goldfish-2.6.29
然后可以在arch/arm/config路径下找到两个配置文件:
goldfish_armv7_defconfig
goldfish_defconfig
我首先尝试了goldfish_defconfig配置文件:
$ make goldfish_defconfig
可以成功的make:
$ make
最后输出信息:
  Kernel: arch/arm/boot/zImage is ready
然后,用仿真器加载kernel:
$ emulator -kernel ~/arm_linux_kernel/kernel/goldfish/arch/arm/boot/zImage
结果发现,这个仿真器是启动不起来的。显然,编译生成的kernel是有问题的。于是,我选择了另一个配置文件,goldfish_armv7_defconfig:
$ make goldfish_defconfig
$ make
成功输出镜像文件:
  Kernel: arch/arm/boot/zImage is ready
用仿真器加载:
$ emulator -kernel ~/arm_linux_kernel/kernel/goldfish/arch/arm/boot/zImage
可以成功的运行。
打开仿真器的setting->about phone
可以看到是自己编译的内核。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有