`
maricoliu
  • 浏览: 54037 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Ubuntu环境下下载编译Android kernel源码

阅读更多
编译android源码时并不会自动编译android内核,因此需要手动编译这部分代码。编译内核所用的时间比编译android源码要少得多。

1、确定内核版本
建立一个存放android内核源码的kernel目录,进入该目录,并使用如下命令下载内核源码

引用
$ git clone https://android.googlesource.com/kernel/common.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

我只下载了common.git与goldfish.git,以goldfish为例,进入goldfish目录
引用
root@ubuntu:/work_dir/kernel# ls
common  goldfish
root@ubuntu:/work_dir/kernel# cd goldfish/
在命令行输入以下命令,显示所有分支及当前所在的分支:
引用
root@ubuntu:/work_dir/kernel/goldfish# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-goldfish-2.6.29
  remotes/origin/master

输入以下命令选择当前的最新版本(goldfish为android的模拟器描述的CPU):
引用
root@ubuntu:/work_dir/kernel/goldfish# git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29

再次输入命令git branch -a,将会显示刚刚选择的最新分支,表示目前工作在这个被选择的分支上,输出如下:
引用
root@ubuntu:/work_dir/kernel/goldfish# git branch -a
* android-goldfish-2.6.29
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-goldfish-2.6.29
  remotes/origin/master

2、设定环境变量
在编译android内核时,需要使用交叉编译器。在所下载的android源码树中有一个prebuilt文件夹,包含了编译内核所需的交叉编译工具,因此要将其设置到环境变量中去,以方便使用。打开用户目录下的.bashrc文件,在后面添加如下代码
引用
export PATH=$PATH:/work_dir/android2.3.7_r1/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin 
export ARCH=arm

保存并退出,通过以下命令在用户目录下进行更新。
引用
source /etc/bash.bashrc

由于有可能在添加之后没有及时更新,导致在编译时提示错误,如找不到交叉编译工具目录等,因此这里需要更新(如果加入了环境变量仍在编译时提示找不到交叉编译工具目录,可以尝试多更新几次)。

3、设定交叉编译参数

在编译之前还需要设定编译时所使用的交叉编译参数。

首先,打开android/kernel/goldfish/目录下的Makefile文件,找到CROSS_COMPILE变量,将其指向android源码提供的prebuilt中的arm-eabi编译器,代码如下所示:
引用
CROSS_COMPILE   ?= arm-eabi-

之后找到如下代码:
引用
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ 

                  $(call ld-option, -Wl$(comma)--build-id,))
将其删除或注释掉(建议注释掉即可,以备以后会使用到),并添加一个空的LDFLAGS_BUILD_ID定义,如下所示:
引用
#LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ 
#                $(call ld-option, -Wl$(comma)--build-id,)) 
LDFLAGS_BUILD_ID =

4、编译内核源码
设置完之后,就是编译android内核源码了,进入goldfish目录,输入以下命令

引用
$make goldfish_defconfig 
$make

第一条命令为编译时的默认配置文件。如果不执行这条命令,编译时可能会提示“找不到配置文件”。第一条命令执行完后,会在goldfish目录下生成一个.config文件。

之后便是一段时间的等待了。。。时间不长,一会即可编译好,比编译android源码时间要少得多。

5、编译完成之后,会在“kernel/goldfish/arch/arm/boot/”目录下生成名为zImage的文件。

如果你已经编译了SDK,可以进入SDK所在目录,使用 "- kernel" 加载编译出来的zImage启动模拟器
引用
root@ubuntu:/work_dir/android2.3.7_r1/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools# ./emulator -kernel /work_dir/kernel/goldfish/arch/arm/boot/zImage


分享到:
评论
1 楼 f839903061 2012-10-09  
很好,!good!

相关推荐

    在Ubuntu下载、编译Android内核源码

    在Ubuntu上下载、编译和安装Android最新内核源代码

    Android源码 在Ubuntu上下载,编译和安装

    一直习惯使用Windows系统,而Android源代码是不支持在Windows上编译上,于是决定使用虚拟机安装Ubuntu,然后下载、编译和安装Android源代码。  一. 环境准备。  1. 磁盘空间预留20G左右,内存3G,因为一边要跑主机...

    Android内核源码 在Ubuntu上下载,编译,安装

    首选,参照前一篇在Android源码 在Ubuntu上下载,编译和安装准备好Android源代码目录。  二. 下载Linux Kernel for Android源代码。  1. 使用GIT工具下载,执行以下命令: USER-NAME@MACHINE-NAME

    kernel_5_15

    Ubuntu18.04下从kernel源码正确编译过的,可以安装的kernel v5.14 deb文件

    Android笔记之:CM9源码下载与编译的应用

    上一篇文章是android2.3的编译,已经过时,而且现在ubuntu已经升级到12.04,等等之类的,使我觉得非常有必要重新写一篇新的博客来展示最新的android怎么在最新的ubuntu上编译。基于以上几点,下面我将基于galaxys2来...

    编译ubuntu驱动.TXT

    (3)没有 /lib/modules/*/build 这个目录,make报错(4)内核编译 CONFIG_MODVERSIONS 作用(5)安装内核源码与相应的头文件(6)载入驱动模块(7)/etc/rc.local 不执行的问题(8)内核升级后,驱动程序要升级,为...

    lsof 4.81源码

    在网上看到许多人将lsof的源码拿来卖分,像这种开源资源也要花资源分去下载,看着真是有点不地道!特传至此,免费下载! lsof命令在嵌入式中还是挺有用的,而在一般的嵌入式系统中,并没有移植该命令,需要自己移植...

    LDD3只包含第三章的内容scull源码

    LDD3提供的官方源码包含第三章到第六章的内容,这里把源码剥离出来,只包含第三章的源码,并在ubuntu12.04(kernel version 3.2.0-23-generic)操作系统上面编译通过,源码解释,大家具体参考我的博客。

    操作系统原理作业-支持多进程并发的操作系统源码+项目说明.zip

    编译操作系统:Ubuntu 18.04 LTS , C 语言编译器:gcc 7.4.0-1 ubuntu2.3;汇编语言编译器:nasm 2.13.02-0.1, 链接器:ld , 虚拟机软件:VMware Workstation 15 。 【注】 1.项目代码均经过功能验证ok,确保稳定...

    MLIR编译框架的使用与探索.zip

    资源包含文件:课程报告word+源码 + 虚拟机软件:VirtualBox 6.1.32 + 操作系统:Ubuntu 20.04 + 内核版本:Linux kernel 5.13.0-35-generic 详细介绍参考:...

    k2t openwrt固件

    你可以自由使用,但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作! 特别提示: 1. 源代码中绝不含任何后门和可以监控或者劫持你的 HTTPS 的闭源软件,SSL 安全是互联网最后的壁垒。安全干净才是固件应该...

    CC-A80-rootfs:不同版本的rootfs

    源自述文件Cubietech为cubieboard4向社区开放了linux sdk,你可以得到内核源码、u-boot和rootfs,你可以编译sdk来打包tf卡启动固件,或者打包tf卡固件刷cb4 emmc . 现在,我们已经发布了 debian 和 ubuntu 发行版,...

    Ethercat-Ighmaster.txt

    将output文件下通lib_modules_kernel_promt='3.0.35-2666-gbdde708'(build_ethercat-1.5.2.sh 中定义)放入开发板/lib/modules下 2.2 开发板中执行"depmod"命令 3. output里面的其它文件放入开发板对应位置 4. ...

    automak-eperl-match-fail-20210423.zip

    sfp11.0中automake.in的脚本格式与ubuntu1804环境不兼容导致automake.tmp编译失败。这是修改后的源码压缩包及Makefile文件. 1. 手动修改更有趣,具体修改参考如下链接:...

    pcf8563_i2c1_r8_ruoge_ov2640通过给RTC驱动增加设备节点读取秒钟成功+直接读取I2C1获取秒钟值20160626_2201.7z

    在Android源码树中添加userspace I2C读写工具(i2c-util) 本文使用的开发板是:杭州若格科技有限公司的全志R8。CPU:CPUARM Cortex-A8 更多芯片资料请参见全志官网: http://www.allwinnertech.com/clq/r/R8.html...

    gtp5g:Linux内核模块5G GTP-U

    请使用内核版本5.0.0-23-generic或高于5.4 (Ubuntu 20.04)的模块运行此模块。 请检查版本与gtp5g相同,因为libgtp5gnl和gtp5g之间的转换类型已更改。 用法 编译 make clean && make 安装内核模块 将模块安装到...

Global site tag (gtag.js) - Google Analytics