通过学习前三章:android系统移植和驱动开发概述、搭建开发环境以及Git使用,对于第四章源代码的下载和编译,我已经有初步的了解,以下是我所总结的一些心得也可以说是一些学习内容。
本章就使用git下载源代码,一、下载、编译android源代码:大体流程:1.配置android源代码下载环境【1.创建一个用于存放下载脚本repo的目录--->下载repo脚本文件(用于下载android源代码)--->创建用于存放android源代码的目录-->初始化--->开始下载源代码:repo sync】;2.针对android源代码的目录分析;如下图所示:
3.下载android源代码的一部分:方法1:使用repo sync命令(前提需要repo init 初始化):repo sync+工程名 获取源代码;方法2:使用get clone 命令:get clone https://android.goolesource.com/<project name>
两者区别:repo sync令在当前目录生产一个隐藏目录:repo,该目录存放了下载android源代码所需的全部信息。同时,它下载指定工程的源代码会按照实际的路径存放,而git clone 只会建立工程目录,并不会建立层次结构。
4.编译源代码:1.初始化编译环境:source build/envsetup.sh;2.选择目标:lunch;3.编译android源代码:make。
5.针对out目录结构分析:out目录【存放编译android源代码生产的目标文件的默认目录】仅仅包含两个直接目录:host和target。
二、下载、编译linux内核源代码
在此之前,我们已经接触过linux内核:尤其是内核编译,因此此处相对于我们而言是容易理解的。
内核编译:1.下载linux内核源代码:git clone https://android.goolesource.com/kernel/common.git;2.在当前目录进入common目录:git branch -a【查看当前有哪些远程版本库】;3.导出最新的linux内核:git checkout -b android-3.0 remotes/origin/android-3.0;4.下载相应的内核:git clone http://android.goolesource.com/kernel/goldfish.git;5.进入goldfish目录,导出goldfish:git checkout -b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29.
2.了解linux内核源代码的目录结构:详见【《嵌入式linux应用程序开发》或者《android深度探索 卷1》】其中:arch目录:与CPU架构相关的源代码和配置文件。init:初始化内核程序的实现代码。samples:一些内核编程的实例等等。
3.安装内核编译环境:交叉编译环境,最开始老师亲自带我们安装过交叉编译环境,但是我仍然失败了,主要原因就是对于其中的很多知识或者代码的应用并不是很熟练。此前,第二章已经介绍过如何安装交叉编译环境,此处,我们需要了解,在编译linux内核之前,需要配置linux的Makefile文件:ARCH ?=arm[以便于在ARM结构上运行]以及CROSS_COMPILE【交叉编译器前缀】?=arm-none-linux-guneabi-.
4.配置和编译linux内核:假设linux内核目录:/root/linux_kernel,那么我们使用如下命令:
export PATH=/root/complilers/arm-none-linx-guneabi/bin:$PATH
cd ~/linux_kernel
make clean【清除大多数由编译生成的文件.ko等,但保留配置文件】
make
除了make clean外,还有两个清除命令:make mrproper【清除所有由编译所产生的文件+配置文件】;make distclean【make mrporper+删除编辑器留下的备份文件+补丁文件】。
除此之外,以下四个命令必须在根目录中执行:make config【文本形式配置】、make menuconfig【字符界面风格的菜单形式】、make oldconfig【字符界面逐项要求用户配置,但是要比make menuconfig少】、make xconfig【以图形化界面形式配置】。
最后,成功编译linux后,会在<内核源代码根目录>/arch/arm/boot目录生成一个zImage文件。