Android2.3.4内核编译完整记录
来源:互联网 发布:淘宝pc客户端是什么 编辑:程序博客网 时间:2024/05/26 05:53
一. 参照前面一篇 :Ubuntu14.04 32bit编译Android2.3.4源码全过程记录;下载Linux Kernel for Android源代码。
1. 使用GIT工具下载,执行以下命令:
root@user:/home/Android-2.3.4# mkdir kernel
root@user:/home/Android-2.3.4# cd kernel
root@user:/home/Android-2.3.4# git clone http://android.googlesource.com/kernel/goldfish.git
2. 上面得到的是主线上的内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkout goldfish版本:
root@user:/home/Android-2.3.4/kernel# 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.35
选择android-gldfish-2.6.29:
root@user:/home/Android-2.3.4/kernel/goldfish#export PATH=$PATH:~/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
2. 修改goldfish目录下的Makefile文件的以下两行为:
# ARCH ?= (SUBARCH)
# CROSS_COMPILE?=
ARCH ?= arm #体系结构为arm
CROSS_COMPILE ?= arm-eabi- #交叉编译工具链前缀,参考~prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录
3. 开始编译:
root@user:/home/Android-2.3.4/kernel/goldfish# make goldfish_defconfig
如果是arm v5选择goldfish_defconfig.如果是arm v7,就选择goldfish_armv7_defconfig。
关于cpu体系架构版本,可以使用adb shell 中的cat命令查看/proc/cpuinfo文件的内容
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 343.24
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : Goldfish
Revision : 0000
Serial : 0000000000000000
root@user:/home/Android-2.3.4/kernel/goldfish#make
[1] 首次编译出现了以下错误:
root@user:/home/Android-2.3.4/kernel/goldfish# make goldfish_armv7_defconfig/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
Fix:ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so
[2] When using ubuntu 12.04LTS with oracle jdk 7, if run Android emulator from android studio,
May be you can see :
error libGL.so: cannot open shared object file: No such file or directory
Failed to load libGL.so
Fix:I solve the problem with:sudo apt-get install libgl1-mesa-dev
There are other ways in :http://stackoverflow.com/questions/11332817/failed-to-load-libgl-so-in-android
I found that libGL.so exists in directory /usr/lib/x86_64-linux-gnu - -
编译成功后,可看到下面两行:
OBJCOPY arch/arm/boot/zImage
1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
root@user:/home/Android-2.3.4# export PATH=$PATH:~/out/host/linux-x86/bin
2. 设置ANDROID_PRODUCT_OUT环境变量:
USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/out/target/product/generic
3. 在后台中指定内核文件启动模拟器:
4. 用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:
切换到proc目录:
root@user:/home/Android-2.3.4# adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
# cd proc
# cat version
Linux version 2.6.29-g4bb8fa0-dirty (root@user) (gcc version 4.4.0 (GCC) ) #1 Sat Aug 2 21:58:51 CST 2014
四 模块化编译:
用envsetup.sh脚本初始化环境变量
#source build/envsetup.sh
或者
#. build/envsetup.sh
在单独打包和编译Android应用程序模块时,发现make snod后ramdisk.img文件消失了,找了很多帖子没有找到解决办法,最终在老罗的博客里,看到了网友的回复,将问题解决了,参考http://blog.csdn.net/luoshengyang/article/details/6566662中蓝雨小英的回复,在helloworld的Android.mk中加入
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
1. 使用GIT工具下载,执行以下命令:
root@user:/home/Android-2.3.4# mkdir kernel
root@user:/home/Android-2.3.4# cd kernel
root@user:/home/Android-2.3.4# git clone http://android.googlesource.com/kernel/goldfish.git
2. 上面得到的是主线上的内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkout goldfish版本:
root@user:/home/Android-2.3.4/kernel# 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.35
选择android-gldfish-2.6.29:
root@user:/home/Android-2.3.4/kernel/goldfish#git checkout remotes/origin/archive/android-gldfish-2.6.29
二 编译内核代码
1. 导出交叉编译工具目录到$PATH环境变量中去:root@user:/home/Android-2.3.4/kernel/goldfish#export PATH=$PATH:~/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
2. 修改goldfish目录下的Makefile文件的以下两行为:
# ARCH ?= (SUBARCH)
# CROSS_COMPILE?=
ARCH ?= arm #体系结构为arm
CROSS_COMPILE ?= arm-eabi- #交叉编译工具链前缀,参考~prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录
3. 开始编译:
root@user:/home/Android-2.3.4/kernel/goldfish# make goldfish_defconfig
如果是arm v5选择goldfish_defconfig.如果是arm v7,就选择goldfish_armv7_defconfig。
关于cpu体系架构版本,可以使用adb shell 中的cat命令查看/proc/cpuinfo文件的内容
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 343.24
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : Goldfish
Revision : 0000
Serial : 0000000000000000
root@user:/home/Android-2.3.4/kernel/goldfish#make
[1] 首次编译出现了以下错误:
root@user:/home/Android-2.3.4/kernel/goldfish# make goldfish_armv7_defconfig/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/check.sh: 行 15: 语法错误: 未预期的文件结尾
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 3: $'\r': 未找到命令
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: 行 5: 未预期的符号 `$'\r'' 附近有语法错误
/home/Android-2.3.4/kernel/goldfish/scripts/kconfig/lxdialog/check-lxdialog.sh: ' 5: `ldflags()
Fix:ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so
[2] When using ubuntu 12.04LTS with oracle jdk 7, if run Android emulator from android studio,
May be you can see :
error libGL.so: cannot open shared object file: No such file or directory
Failed to load libGL.so
Fix:I solve the problem with:sudo apt-get install libgl1-mesa-dev
There are other ways in :http://stackoverflow.com/questions/11332817/failed-to-load-libgl-so-in-android
I found that libGL.so exists in directory /usr/lib/x86_64-linux-gnu - -
编译成功后,可看到下面两行:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
1. 在启动模拟器之前,先设置模拟器的目录到环境变量$PATH中去:
root@user:/home/Android-2.3.4# export PATH=$PATH:~/out/host/linux-x86/bin
2. 设置ANDROID_PRODUCT_OUT环境变量:
USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/out/target/product/generic
3. 在后台中指定内核文件启动模拟器:
root@user:/home/Android-2.3.4# emulator -kernel ./kernel/common/arch/arm/boot/zImage &
4. 用adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:
切换到proc目录:
root@user:/home/Android-2.3.4# adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
# cd proc
# cat version
Linux version 2.6.29-g4bb8fa0-dirty (root@user) (gcc version 4.4.0 (GCC) ) #1 Sat Aug 2 21:58:51 CST 2014
四 模块化编译:
用envsetup.sh脚本初始化环境变量
#source build/envsetup.sh
或者
#. build/envsetup.sh
在单独打包和编译Android应用程序模块时,发现make snod后ramdisk.img文件消失了,找了很多帖子没有找到解决办法,最终在老罗的博客里,看到了网友的回复,将问题解决了,参考http://blog.csdn.net/luoshengyang/article/details/6566662中蓝雨小英的回复,在helloworld的Android.mk中加入
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
将问题解决了。
有什么不对的地方,还望大家多多批评,指正!
0 0
- Android2.3.4内核编译完整记录
- Ubuntu14.04 32bit编译Android2.3.4源码全过程记录
- 完整内核编译
- Ubuntu10.10下编译Android2.2内核
- 完整内核编译 2.6.28.10
- android2.3.4----1.ubuntu12.04 64位编译android2.3.4
- Ubuntu11.04 - 64 bits下编译Android2.2内核
- ubuntu14.04-64编译android2.3.4源码
- Tiny6410 Android2.3.4源码编译问题解决
- linux内核编译错误记录
- linux内核编译错误记录
- ubuntu12.04 内核编译 记录
- 【记录】linux内核打补丁、编译
- Linux学习记录--内核|内核模块编译
- Ubuntu12.04: 下载,编译Android2.6.29内核goldfish,将新编译的内核和镜像安装至模拟器
- android2.3.4下,linux2.6.36内核的lcd驱动
- 编译android2.2
- 编译android2.3
- 时间带给他们的不是遗忘,而是深深爱上
- hdu2846 字典树 判子串
- .net类型反射与晚期绑定
- POJ 1166 The Clocks
- 三句话
- Android2.3.4内核编译完整记录
- 12.解决CCScale9Sprite或者CCControlButton无法使用的问题。
- 各品牌电脑U盘启动的快捷键总结
- 张瑞敏谈人不成熟的五个特征
- (萌O(∩_∩)O)哈希知识点小结
- iOS后台定位实现
- Android 带你从源码的角度解析Scroller的滚动实现原理
- CAAnimation的使用
- 专业的面试知识分享,IT免费教程微信公众号~大家可以关注哦~~