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 条评论
登录 后参与评论

相关文章

来自专栏happyJared

Hexo,自定义域名http升级https

  数数手指头,我这基于 Hexo + GitHub Page 搭起来的个人博客也有两个月时间了,之前就想过把 http 升级为 https,无奈因为各种原因也...

25020
来自专栏DT乱“码”

EhCache和memcached介绍

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 Ehcache是一种广泛使用的...

23870
来自专栏用户2442861的专栏

使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

87510
来自专栏大数据架构师专家

namp 渗透测试-安装篇

nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。

17530
来自专栏zhisheng

HBase 集群监控

为什么需要监控? 为了保证系统的稳定性,可靠性,可运维性。 掌控集群的核心性能指标,了解集群的性能表现。 集群出现问题时及时报警,便于运维同学及时修复问题。 集...

73580
来自专栏纯洁的微笑

Eureka 虽然闭源了,但注册中心还有更多选择:Consul 使用详解

在上个月我们知道 Eureka 2.0 闭源了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面

1K30
来自专栏java一日一条

SSH框架总结

首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于...

22540
来自专栏后端云

实时操作系统

一般的linux都是GPOS(通用)内核。GPOS是不保证实时的,但是对于大多数应用程序来说是没有问题的。GPOS可以充分利用物理资源。但在实时性要求性比较高的...

43370
来自专栏Web项目聚集地

RESTful 接口实现简明指南

在我所见过的 RESTful 接口的实现中,以 GitHub 最让人惊叹。我第一次如此强烈得感受到 REST 接口的美妙,完全满足了我所期待的「接口的形式美感」...

10210
来自专栏运维小白

2.12 mv命令

mv介绍 mv = move mv 相当于把文件挪动地方,如果在同一个目录就是更改文件名 可以使用这个命令实现,移动到一个目录下,同时更改文件名 mv 同样,默...

250100

扫码关注云+社区

领取腾讯云代金券