热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

在前一篇文章(2011-06/37781.htm)提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件。那么,如何才能DIY自己的内核呢?这篇文章一一道来。

      一. 首选,参照前一篇在Ubuntu上下载、编译和安装Android最新源代码准备好Android源代码目录。

      二. 下载Linux Kernel for Android源代码。

      1. 使用GIT工具下载,执行以下命令:

      www.linuxidc.com@linuxidc:~/Android$ mkdir kernel

      www.linuxidc.com@linuxidc:~/Android$ cd kernel
      www.linuxidc.com@linuxidc:~/Android/kernel$ git clone git://android.git.kernel.org/kernel/common.git
      同样是经过漫长的等待后,在kernel目录下有一个common目录,Linux内核代码就在这里了。
      2. 下载完成后,可以查看下载的内核代码版本:
     www.linuxidc.com@linuxidc:~/Android/kernel$ cd  common
      www.linuxidc.com@linuxidc:~/Android/kernel/common$ git  branch
      android-2.6.36
      3. 下载完Android的Linux内核代码后,会发现在arch/arm/configs下没有模拟器要使用的硬件配置文件
goldfish_defconfig,而这个配置文件是编译内核代码时需要用到的,因此,需要checkout goldfish版本:
     www.linuxidc.com@linuxidc:~/Android/kernel/common$ git branch -a
      * android-2.6.36
      remotes/origin/HEAD -> origin/android-2.6.36
      remotes/origin/android-2.6.35
      remotes/origin/android-2.6.36
      remotes/origin/archive/android-2.6.25
      remotes/origin/archive/android-2.6.27
      remotes/origin/archive/android-2.6.29
      remotes/origin/archive/android-2.6.32
      remotes/origin/archive/android-gldfish-2.6.29
      remotes/origin/archive/android-goldfish-2.6.27
      选择android-gldfish-2.6.29:
      www.linuxidc.com@linuxidc:~/Android/kernel/common$ git checkout remotes/origin/archive/android-gldfish-2.6.29
      下载完毕后,就能在arch/arm/configs下看到goldfish_defconfig这个文件了。
     三. 编译内核代码。
     1. 导出交叉编译工具目录到$PATH环境变量中去:
       www.linuxidc.com@linuxidc:~/Android/kernel/common$ export PATH=$PATH:~/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
     2. 修改common目录下的Makefile文件的以下两行为:
      # ARCH   ?= (SUBARCH)
      # CROSS_COMPILE ?=
      ARCH    ?= arm  #体系结构为arm
      CROSS_COMPILE     ?= arm-eabi- #交叉编译工具链前缀,参考/home/luo/Android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录
      3. 开始编译:
      www.linuxidc.com@linuxidc:~/Android/kernel/common$ make goldfish_defconfig
      www.linuxidc.com@linuxidc:~/Android/kernel/common$ make
     编译成功后,可看到下面两行:
      OBJCOPY arch/arm/boot/zImage
      Kernel: arch/arm/boot/zImage is ready
      在执行make命令前,你也可以执行make menuconfig先配置一下编译选项。
     四. 在模拟器中运行编译好的内核。
     1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
     www.linuxidc.com@linuxidc:~/Android$ export PATH=$PATH:/home/luo/Android/out/host/linux-x86/bin
      2. 设置ANDROID_PRODUCT_OUT环境变量:
      www.linuxidc.com@linuxidc:~/Android$ export ANDROID_PRODUCT_OUT=/home/luo/Android/out/target/product/generic
      3. 在后台中指定内核文件启动模拟器:
      www.linuxidc.com@linuxidc:~/Android$  emulator -kernel ./kernel/common/arch/arm/boot/zImage &
      4. 用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:
      www.linuxidc.com@linuxidc:~/Android$ adb shell
      这时候如果是第一次运行 adb shell命令,会看到以下输出,不用管它,再运行一次adb shell命令就可以了。
      * daemon not running. start it now on port 5037 *
      * daemon started successfully *
      error: device offline
      切换到proc目录:
      root@android:/ # cd proc
      root@android:/proc # cat version
      Linux version 2.6.29-gb0d93fb-dirty (luo@Ubuntu-11-04) (gcc version 4.4.3 (GCC) ) #1 Fri Jun 3 23:17:24 HKT 2011
     从机器名luo@ubuntu-11-04和日期1 Fri Jun 3 23:17:24 HKT 2011可以看出,模拟器使用的内核即为刚刚编译出来的内核。


推荐阅读
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
author-avatar
疯务情堂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有