android驱动之旅-下载编译Linux Kernel 源代码 for Android 以及android源码(2)

可以参考:http://blog.csdn.net/luoshengyang/article/details/6559955

 http://blog.csdn.net/ygm_linux/article/details/19165277

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

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

  mkdir kernel

  cd kernel
  git clone http://android.googlesource.com/kernel/goldfish.git
    同样是经过漫长的等待后,在kernel目录下有一个goldfish目录,Linux内核代码就在这里了。
     
   2. 下载完成后,可以查看下载的内核代码版本:
  $cd  goldfish
   $git  branch
      android-2.6.36

      3. 上面得到的是主线上的内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkout goldfish版本:
     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

      选择android-gldfish-2.6.29:
      USER-NAME@MACHINE-NAME:~/Android/kernel/goldfishgit checkout remotes/origin/archive/android-gldfish-2.6.29
或者git checkout -b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29
二、下载andriod源码
拷贝源码则注意:http://blog.csdn.net/ygm_linux/article/details/19161159
将repo放到/usr/bin下
soft#  apt-get install git-core gnupg

进入andriod_source目录下执行
#repo init -u http://android.googlesource.com/platform/manifest
#repo init -u http://android.googlesource.com/platform/manifest -b android-4.0.1_r1
#repo sync 

repo sync出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”的解决方案
在我下载Android源代码时,在最后一步调用repo sync,出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”
1、在存放android系统源代码的目录(也就是执行repo sync命令的目录)下,有个.repo的隐藏目录,用ls -a可以查看的到,进入该目录:cd .repo;
2、打开.repo目录下的manifest.xml文件(命令vim manifest.xml)并找到fetch属性,在我的文件中显示fetch="..",将fetch修改为fetch="git://Android.git.linaro.org/",保存并退出;
3、继续repo sync就可以下载了。

三、交叉编译器arm-2009q1-203-arm-none-linux-gnueabi 安装
注意:参考http://blog.csdn.net/ygm_linux/article/details/19115109
        (注意自己的虚拟机是32位还是64位的,这样需要下载不同的交叉编译器的;file 命令可以看自己下载的编译器是32还是64位的)
1.  下载包 
cd /home/ygm/andriod/soft
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

2. 解压
 tar -vxjf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

3. env设置
/etc/profile 最后加上
export PATH="/home/ygm/andriod/soft/arm-2009q1/bin:$PATH"
说明(我在12.04-32位下面时候,这样有的目录下不起作用的,解决方法:
#gedit /etc/bash.bashrc
输入
#compler
export PATH=$PATH:/home/ygm/compler/arm-2009q1/bin


4. 生效env设置
source /etc/profile

5. 测试
~$ arm-none-linux-gnueabi-gcc

最好注销下虚拟机额!


四、编译Linux Kernel
(图示可以参考老哥:http://blog.csdn.net/ygm_linux/article/details/19159465)
 $cd  goldfish
 $gedit Makefile
修改193行左右:
# ARCH ?= (SUBARCH)
 # CROSS_COMPILE ?= 
改为
      ARCH ?= arm  
      CROSS_COMPILE     ?= arm-none-linux-gnueabi-

shanl@ubuntu:~/Android/android-2.3.5_r1/kernel/goldfish$ make goldfish_defconfig
 或者make goldfish_armv7_defconfig (最后android模拟器加载时候需要arm v7的)
shanl@ubuntu:~/Android/android-2.3.5_r1/kernel/goldfish$ make 
                                                   

 编译成功后,可看到下面两行:
      OBJCOPY arch/arm/boot/zImage
      Kernel: arch/arm/boot/zImage is ready
      在执行make命令前,你也可以执行make menuconfig先配置一下编译选项。

root@ygm-virtual-machine:/home/ygm/andriod/kernel/goldfish# cd arch/arm/boot/
root@ygm-virtual-machine:/home/ygm/andriod/kernel/goldfish/arch/arm/boot# ls
bootp  compressed  Image  install.sh  Makefile  zImage

编译android源码
12.04编译器为4.6的,太高了,换为4.4的,参考http://blog.csdn.net/ygm_linux/article/details/19117847
编译出错参考:http://blog.csdn.net/ygm_linux/article/details/19161849

root@ubuntu:/home/ygm/android/android-down# ./build/envsetup.sh 
including device/samsung/maguro/vendorsetup.sh
including device/samsung/tuna/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash

root@ubuntu:/home/ygm/android/android-down# make
/bin/bash: bison: command not found

root@ubuntu:/home/ygm/android/android-down# apt-get install bison

root@ubuntu:/home/ygm/android/android-down# make
/usr/bin/ld: cannot find -lz
编译的时候出现"/usr/bin/ld: cannot find -lz"错误,需要安装zlib-dev这个包,在线安装命令为:apt-get install zlib1g-dev。

/bin/bash: flex: command not found

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp: In function ‘int yyparse()’:
out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1827: warning: deprecated conversion from string constant to ‘char*’
out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1970: warning: deprecated conversion from string constant to ‘char*’
Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l
/bin/bash: flex: command not found
make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127
解决方法: sudo apt-get install flex



出错
eglplatform.h:85: fatal error: X11/Xlib.h: No such file or directory
解决如下:
root@ubuntu:/home/ygm/android/android-down# apt-get install libx11-dev



出错
/usr/bin/ld: cannot find -lncurses
解决如下
apt-get install libncurses5-dev

出错
GLDispatch.cpp:22: fatal error: GL/glx.h: No such file or directory
解决如下
apt-get install libgl1-mesa-dev

出错
sh: 1: sh: 1: gperf: not found
解决
apt-get install gperf

-----------------------------------------------------------------------------------------------------------
 最后 安装编译好的Android镜像到模拟器上。
说明:~ 表示/home/用户名/
    1. 设置环境变量:
     USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:/home/ygm/android/android-down/out/host/linux-x86/bin 
     USER-NAME@MACHINE-NAME:~/Android$
          export ANDROID_PRODUCT_OUT=/home/ygm/android/android-down/out/target/product/generic

     其中, /home/ygm/android/android-down/out/host/linux-x86/bin   有我们要执行的emulator命令 ,而 /home/ygm/android/android-down/out/target/product/generic 是Android镜像存放目录 ,下面执行emulator命令时会用到。

    2. 运行模拟器。
     USER-NAME@MACHINE-NAME:~/Android$ emulator
    模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。 执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
    当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:
    USER-NAME@MACHINE-NAME:~/Android$ emulator 
    -kernel./prebuilt/android-arm/kernel/kernel-qemu
    -sysdir./out/target/product/generic
    -systemsystem.img 
    -datauserdata.img 
    -ramdiskramdisk.img

(上面连起来输入的额)
    到这里,我们就可以在模拟器上运行我们自己编译的Android镜像文件了,是不是很酷呢?但是注意,这里说的Android镜像文件,只是包括system.img、userdata.img和ramdisk.img这三个文件,而Linux Kernel镜像用的是Android为我们预编译好的kernel-qemu镜像。那么,有没有办法使用我们自己编译的Linux Kernel镜像呢?答案上肯定的,这样我们就可以完全DIY自己的Android系统了!我将在下一篇文章描述如果编译自己的Linux Kernel镜像,敬请期待~
我的操作如下:
root@ubuntu:/# gedit /etc/bash.bashrc
#emulator
export PATH=$PATH:/home/skape/Android/Android-4.0-share/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/home/skape/Android/Android-4.0-share/out/target/product/generic
root@ubuntu:/# source /etc/bash.bashrc
#./emulator -kernel /home/skape/Android/kernel/goldfish/arch/arm/boot/zImage 
                    -sysdir /home/skape/Android/Android-4.0-share/out/target/product/generic 
                    -system system.img
                    -data userdata.img
   -ramdiskramdisk.img

qemu: could not load initrd 'ramdisk.img'

所以:
root@ubuntu:/# emulator -kernel /home/skape/Android/kernel/goldfish/arch/arm/boot/zImage   -sysdir /home/skape/Android/Android-4.0-share/out/target/product/generic  -system system.img  -data userdata.img  


参考:
还有可能说ramdisk.img不能执行的,qemu: could not load initrd 'ramdisk.img'
请给权限 chmod 777 ./out/target/product/generic,并带上绝对路径out/target/product/generic/ramdisk.img,这样应该就能跑起来了;

还有一个就是启动黑屏的,请使用命令中的kernel,即:kernel-qemu-armv7

执行 emulator 提示 emulator: WARNING: system partition size adjusted to match image file (166 MB > 66 MB)
所需空间不足,emulator 加入参数 -partition-size 1024 (大于系统所要求的尺寸)即可,例如 emulator -partition-size 1024


你可能感兴趣的:(android驱动之旅-,下载Linux)