专栏首页difcareer的技术笔记ubuntu14.04编译android4.4对应的linux内核

ubuntu14.04编译android4.4对应的linux内核

参考资料: [google官方资料] 官方是最权威的,但会有细节缺失。 [如何下载编译android内核] 可以参考别人的动手实践,弥补缺失的细节。

先看看AOSP中自带的kernel是什么版本:

cd prebuilts/qemu-kernel/arm/
dd if=kernel-qemu bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel-qemu | cut -d ':' -f 1) | zgrep -a 'Linux version'

结果为:

Linux version3.4.0-gfb3ea4f (keunyoung@keunyoung-linux.mtv.corp.google.com) (gcc version4.7(GCC) )#1 Tue Apr 2 17:27:47 PDT 20132215029+0recordsin2215029+0records out2215029bytes (2.2MB) copied,4.07794s,543kB/s

和那篇文章里的一模一样,说明是AOSP自带的是同一次编译出来的内核。

下载kernel源码: 上面确定linux是3.4.0的,那就用这个版本吧,在官方文档中,有各种版本的内核源码,其中提到: The goldfish project contains the kernel sourcesforthe emulated platforms. 正好我现在只是使用模拟器,那就选择goldfish好了:

mkdir kernel                  //此时在android源码根目录
cd kernel
git clone https://android.googlesource.com/kernel/goldfish.git  //这里要等一段时间
cd goldfish 
git branch -a
git checkout remotes/origin/android-goldfish-3.4

配置环境并编译

export PATH=~/AOSP/android-4.4.4_r2/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/:$PATH
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eab
make goldfish_armv7_defconfig
make

最后输出:

LD      arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

编译成功,内核文件zImage在kernel/goldfish/arch/arm/boot下。 查看编译的内核信息:

cd kernel/goldfish/arch/arm/boot
dd if=kernel-qemu bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel-qemu | cut -d ':' -f 1) | zgrep -a 'Linux version'

输出为:

Linux version3.4.67-gb1dfee2 (ubt@ubuntu) (gcc version4.6.x-google20120106(prerelease) (GCC) )#1 PREEMPT Mon Jul 20 21:17:07 PDT 20152385045+0recordsin2385045+0records out2385045bytes (2.4MB) copied,4.07455s,585kB/s

对比上面自带的kernel信息可看出差异。

让模拟器使用新编译出来的内核

emulator -kernel ~/AOSP/android-4.4.4_r2/kernel/goldfish/arch/arm/boot/zImage

接下来就是在源码中加入自己的代码,再编译再运行了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android编译后运行emulator注意事项

    在编译完了,同一个shell执行emulator没有问题,但如果新开shell,会发现emualtor报错:

    用户2930595
  • Android Studio对ndk开发调试的支持前言支持版本对ndk-build的支持对CMake的支持

    编写C/C++代码最大的痛苦就是语法提示和调试,早期Android Studio对NDK不做支持或者支持得不够好,导致NDK开发异常缓慢,最大的问题是调试,经常...

    用户2930595
  • 反调试检测之一TracerPid

    当我们使用Ptrace方式跟踪一个进程时,目标进程会记录自己被谁跟踪,可以查看/proc/pid/status看到这个信息,下图展示的是使用ida进行调试的情况...

    用户2930595
  • CRM中间件里的CSA队列有什么用

    我们有时候会在中间件的事务码SMQ2即Inbound队列查看器里观察到以CSA开头的队列:

    Jerry Wang
  • 哲思录第003篇思考阅读

    而是在兴奋一阵子后又归于平淡。慢慢地,都忘了自己曾经为了得到现有的生活,付出过多少的努力?

    章鱼喵
  • 【专业领域】jvm虚拟机android移植-接口篇

    上一篇我们讲了如何下载phoneme虚拟机开源代码,如何配置编译脚本,编译测试验证基本功能。但是要让她在android上显示运行java小游戏我们还得费点劲。好...

    程序员互动联盟
  • 论如何提高完结小说的阅读体验——精校版

    不得不承认,看小说容易上瘾!!!看连载小说容易上瘾,看完结小说也容易上瘾!!!甚至发小说相关的工具都可能上瘾~

    课代表
  • 刘连响:小程序实时音视频在互动场景下的应用

    今天为大家带来的分享是:小程序实时音视频在互动教育场景下的应用。我个人一直在做基础方面的研究,接触音视频也比较早,2013年的时候就开始做包括直播在内的相关产品...

    云加社区技术沙龙
  • OSI模型传输层的主要任务(一)

    在OSI参考模型的传输层上,主要包括TCP和UDP两个重要的协议,本文主要介绍TCP协议相关的属性,包括连接建立,序列号,以及资源子网和通信子网,以及拥塞和流量...

    needrunning
  • Vuex-Action 原

     Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutati...

    tianyawhl

扫码关注云+社区

领取腾讯云代金券