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#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 &


至此我们可以通过adb shell命令查看我们编译的内核版本:
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
原创粉丝点击