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

根据http://blog.csdn.net/luoshengyang/article/details/6564592博客内容对android4.2的编译

从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/qemu_kernel/arm/kernel-qemu文件。以下介绍如下编译android的Linux内核。

 

一、首先,根据http://source.android.com/source/initializing.html下载Android源代码,并进行编译。

二、然后,下载Linux Kernel for Android源代码。

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

USER-NAME@MACHINE-NAME:~/my_android$ mkdir kernel

USER-NAME@MACHINE-NAME:~/my_android$ cd kernel

USER-NAME@MACHINE-NAME:~/my_android/kernel$ git clone https://android.googlesource.com/kernel/goldfish.git
     同样是经过漫长的等待后,在kernel目录下有一个goldfish目录,Linux内核代码就在这里了。

2、下载完成后,可以查看下载的内核代码版本:
     USER-NAME@MACHINE-NAME:~/my_android/kernel$ cd  goldfish
     USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ git  branch
     * master

3、 上面得到的是主线上的内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkout goldfish版本:
      USER-NAME@MACHINE-NAME:~/my_android/kernel/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:
      USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ git checkout remotes/origin/android-goldfish-3.4

三、编译内核代码。
1、导出交叉编译工具目录到$PATH环境变量中去:
USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ export PATH=$PATH:~/my_android/prebuilds/gcc/linux-x86/arm/arm-eabi-4.6/bin
或者
USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ export PATH=$PATH:~/my_android/prebuilds/gcc/linux-x86/arm/arm-eabi-4.6/bin

2、 使用如下的命令来构建goldfish内核
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-

3、现在是要得到android的内核编译参数的配置文件的时候了,该文件需要从已经安装好的android的模拟器
中得到才行。所以安装android的sdk也是必须的,这一步不太明白的朋友可以参考我以前发的android
命令行体验的文章。
首先启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:
USER-NAME@MACHINE-NAME:emulator &
USER-NAME@MACHINE-NAME:adb pull /proc/config.gz .

这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。
把它拷贝到你的kernel/goldfish目录:
USER-NAME@MACHINE-NAME:cd ~/my_android/kernel/goldfish
USER-NAME@MACHINE-NAME:cp ~/config.gz

解压缩该文件,并重命名为.config,这一步做了就可以跳过make menuconfig之类的内核参数设置
动作了。
   USER-NAME@MACHINE-NAME:gunzip config.gz
USER-NAME@MACHINE-NAME:mv config .config

该步骤比较重要,若通过make goldfish_defconfig产生的.config来编译的内核可能无法在emulator中运行。

4、 开始编译:
      USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ make goldfish_defconfig(若操作了第3步,则该命令可省略)
USER-NAME@MACHINE-NAME:~/my_android/kernel/goldfish$ make
     
     编译成功后,可看到下面两行:
      OBJCOPY arch/arm/boot/zImage
      Kernel: arch/arm/boot/zImage is ready
      在执行make命令前,你也可以执行make menuconfig先配置一下编译选项。

四、在模拟器中运行编译好的内核。
1、在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
USER-NAME@MACHINE-NAME:~/my_android$ export PATH=$PATH:~/my_android/out/host/linux-x86/bin

2、设置ANDROID_PRODUCT_OUT环境变量
USER-NAME@MACHINE-NAME:~/my_androidexport ANDROID_PRODUCT_OUT=~/my_android/out/target/product/generic

3、 在后台中指定内核文件启动模拟器:
USER-NAME@MACHINE-NAME:~/my_android emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage &

4、用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:
      USER-NAME@MACHINE-NAME:~/my_android$ adb shell
      这时候如果是第一次运行 adb shell命令,会看到以下输出,不用管它,再运行一次adb shell命令就可以了。
      * daemon not running. start it now on port 5037 *
      * daemon started successfully *
      error: device offline

     切换到proc目录:
root@ generic:/ # cd proc
root@generic:/proc #  cat version
Linux version 3.4.0-g39765bd (fantasy@ubuntu) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #2 PREEMPT Fri Jun 14 23:09:45 CST 2013
    从机器名 fantasy@ubuntu和日期  Fri Jun 14 23:09:45 CST 2013可以看出,模拟器使用的内核即为刚刚编译出来的内核。

root@android:/proc # cat cu

参考:

1.http://blog.csdn.net/luoshengyang/article/details/6564592

2.http://source.android.com/source/building-kernels.html

3.http://blog.csdn.net/farce/article/details/5901531

 

转载于:https://www.cnblogs.com/dyllove98/archive/2013/06/15/3137647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中的Number(数字)

Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建: var1 1 var2 10 您也可以使用del语句删除一些 Number 对象引用。 del语句的…

LeetCode 1550. 存在连续三个奇数的数组

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。 示例 1: 输入:arr [2,6,4,1] 输出&…

配置RIP实验

实验目的 掌握RIPv1和v2配置方法 掌握show ip rip database、sh ip protocol命令 掌握debug命令 掌握将RIP的广播更新方式更改为单播方式 设备需求 本实验需要以下设备: 4台2811Cisco路由器,四台都有两个FastEthernet口。 2条双绞线,…

LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)

文章目录1. 题目2. 解题1. 题目 存在一个长度为 n 的数组 arr &#xff0c;其中 arr[i] (2 * i) 1 &#xff08; 0 < i < n &#xff09;。 一次操作中&#xff0c;你可以选出两个下标&#xff0c;记作 x 和 y &#xff08; 0 < x, y < n &#xff09;并使 arr…

协议数据分析

实验目的 了解协议分析仪的使用方法和基本特点。 增强对网络协议的理解。 实验要求 要求在进行协议数据分析后&#xff0c;能够将网络数据与具体的网络操作相互映证&#xff0c;如实的记录实验结果&#xff0c;完成实验 实验环境 1&#xff0e;一台运行Windows 2000的计算机…

python中的面向对象

Python 面向对象 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。现在介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本特…

会计基础第二次模拟试题(1)

会计基础第二次模拟试题(1) 会计基础第二次模拟试题(1) 之前我们整理了一部分会计基础的模拟题&#xff0c;下面是之前的文章列表&#xff0c;请大家多提建议&#xff1a; 会计基础第一次模拟题会计基础一 会计基础模拟练习2 会计基础模拟试题三 会计基础4 会计基础5 会计基础6…

LeetCode 1552. 两球之间的磁力(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 在代号为 C-137 的地球上&#xff0c;Rick 发现如果他将两个球放在他新发明的篮子里&#xff0c;它们之间会形成特殊形式的磁力。 Rick 有 n 个空的篮子&#xff0c;第 i 个篮子的位置在 position[i] &#xff0c;Morty 想把 m 个球放到这些篮子…

无连接网络通信程序UDP

服务器端 #include <windows.h> #include <iostream.h> #include <winsock.h> #pragma comment(lib,"ws2_32")#define NO_FLAGS_SET 0#define PORT (u_short) 44965 #define MAXBUFLEN 256INT main(VOID) {WSADATA Data;//它存储 被WSAStartup函数…

python中的LEGB 规则

Python 使⽤ LEGB 的顺序来查找⼀个符号对应的对象 locals -> enclosing function -> globals -> builtins 局部变量———闭包空间———全局变量———内建模块 a 1 # 全局变量 globals def fun(): a 2 …

LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)

文章目录1. 题目2. 解题1. 题目 厨房里总共有 n 个橘子&#xff0c;你决定每一天选择如下方式之一吃这些橘子&#xff1a; 吃掉一个橘子。如果剩余橘子数 n 能被 2 整除&#xff0c;那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除&#xff0c;那么你可以吃掉 2*(n…

计算机网络 谢希仁 课后习题部分答案

试说明IP地址与硬件地址的区别&#xff0c;为什么要使用这两种不同的地址&#xff1f; 解&#xff1a; IP地址放在IP数据报的首部&#xff0c;硬件地址则放MAC帧的首部&#xff1b;在网络层和网络层以上使用IP地址&#xff0c;数据链路层及以下使用硬件地址 IP 地址就是给每个…

Mysql 导入导出数据结构及数据

方式一&#xff1a; mysqldump -ukevin -P3306 --default-character-setutf8 -p -h10.1.15.123 activity sign_in_user > user.sql 导出的结果包含建表脚本及数据已INSERT.SQL形式。 导入数据 mysql>use activity; mysql>source user.sql; 方式二&#xff1a; …

Python发送文本邮件

在运行机器学习等需要大量计算的程序时&#xff0c;可以在报错或者程序运行完成时&#xff0c;发送邮件提醒。 参考&#xff1a;Python发送邮件(文本邮件发送) # 运行完&#xff0c;发邮件提醒 # 参考 https://blog.csdn.net/FransicZhang/article/details/83375299 import s…

ARM的UART实验

实验题目&#xff1a;设计一个串口初始化程序 Uart_Init_Ext(int pclk,int baud,int parity,int stop, int len)&#xff0c;要求在Uart_driver.c 和 Uart_driver.h中实现驱动&#xff0c;然后在TARGET.c的Target—_Init(void)中调用 PC端用超级终端验证结果。串口寄存器参考实…

android第一天-------环境搭建

今天正式第一天学习android的。 1.昨晚下班后回家跟同事刘江龙打了四把dota。还好&#xff0c;都赢了把对面虐成狗了。大多都是1300到1450的局&#xff0c;玩的很爽。 2.dota打完后给在湖南常德的女朋友打了个电话&#xff0c;让她早点睡。当然这个电话是我每天都必须打的。 3.…

[Kesci] 预测分析 · 客户购买预测(AUC评估要使用predict_proba)

文章目录1. Baseline2. AUC评估要使用predict_proba2.1 导入工具包2.2 特征提取2.3 训练模型选择2.4 网格/随机搜索 参数提交2.5 测试结果3. 致谢新人赛地址 1. Baseline import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt %ma…

python中装饰器的参数与返回值

def itcast1(fun): def inner(*args, **kwargs): print("itcast1 start") # args -> 元组数据() #kwargs -> 字典数据{} #result用来接收被装饰函数的返回值 result fun(*args, **kwargs) print("itcast1 end") return result return inner itcast1…