Android深度探索(卷1)HAL与驱动开发学习笔记(4)

Android深度探索(1)HAL与驱动开发学习笔记(4

第四章  源代码的下载与编译

一、源代码配置Android源代码下载环境

1.建一个用于存放下载脚本文件(repo)的目录

# mkdir ~/bin

# PATH=~bin:$PATH

2.下载repo脚本文件

# curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

#chmod a+x ~/bin/repo

3.创建用于存放Android源代码的目录

# mkdir android_reource

# cd android_source

4.初始化

# repo init -u https://android.googlesource.com/platform/manifest         

//下载master分支

#repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_rl

//下载其他分支

5.开始下载Android源代码

# repo sync

下载一部分Android源代码

方法1  使用repo sync命令

# repo sync platform/bootable/recovery

方法2  使用git clone 命令

# git clone http://android.googlesourse.com/<project name>

 

 

二、安卓源代码目录结构解析

除了Makefile文件外,其余都为目录

|-- Makefile

|-- abi             (应用程序二进制接口)

|-- bionic               bionic C库)

|-- bootable            (启动引导相关代码)

|-- build                 (存放系统编译规则及generic等基础开发包配置)

|-- cts                    Android兼容性测试套件标准)

|-- dalvik                dalvik Java虚拟机)

|-- development      (应用程序开发相关)

|-- external             android使用的一些开源的模组)

|-- frameworks       (核心框架——javaC++语言)

|-- hardware           (主要保护硬解适配层HAL代码)

|-- libcore               (JAVA核心库)

|-- ndk                  (NDK相关源代码)

|-- device                 (设备相关代码)

|-- out                   (编译完成后的代码输出与此目录)

|-- packages           (应用程序包)

|-- prebuilt             x86arm架构下预编译的一些资源)

|-- sdk                   sdk及模拟器)

|-- system              (文件系统库、应用及组件——C语言)

|-- vendor              (厂商定制代码)

 

 

三、编译Android源代码

1.初始化编译环境

# source build/envsetup.sh

# . build/envsetup.sh  //主要用来初始化一些编译命令

 

2.选择目标

# lunch full-eng  //表示对所有的移动设备,Android模拟器有效并打开所有调试选项

 

3.编译Android源代码

# make      //编译

 

四、out 目录结构分析

Out 目录存放编译Android源代码生成的目标文件的默认目录

-- target(表示目标机,如果编译时候定义TARGET_STRIP_MODULE=false的话,这个目录为debug/target 主要的两个目录为hosttarget,前者表示在主机(x86)生成的工具,后者表示目标机(默认为ARMv5)运行的内容。

 

五、下载和编译Linux 内核源代码

# git clone https://android.googlesourse.com/kernel/common.git   //下载最新版的内核源代码

# git branch -a         //查看有哪些远程版本库

# git check out -b android-3.0 remotes/origin/android-3.0    //导出Linux3.0的内核

# git clone http://android,googlesourse.com/kernel/goldfish.git  

# git checkout -b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29   //导出goldfish

 

六、Linux内核源码目录

arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。

block: 部分块设备驱动

crypto:常用加密和散列算法(如AESSHA等),还有一些压缩和CRC校验算法。

Documentation

drivers:设备驱动程序,每个不同的驱动占用一个子目录,如charblocknetmtdi2c等。

fs:支持各种文件系统,如EXTFATNTFSJFFS2

include:头文件,与系统相关的头文件放置在include/linux子目录下。

init:内核初始化代码。

ipc:进程间通信的代码

kernel:内核的最核心部分,包括进程的调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下。

lib:库文件代码。

mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下。

net:网络相关代码,实现了各种常见的网络协议。

scripts:用于配置内核的脚本文件。

security:主要是一个SELinux的模块。

sound:ALSAOSS音频设备的驱动核心代码和常用设备驱动

usr:实现了用于打包和压缩的cipo等。

 

七、安装Android内核的编译环境

1.将arm-linux-gcc-4.3.2.tgz文件和arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar,bz2文件复制到工作目录

2.解压上面的两个文件

3.验证交叉编译器是否安装成功

# ls /user/local/arm -1

  1. 安装libncurses5

# apt-get install libncurses5-dev

 

八、配置和编译Linux内核

# export PATH=/root/compilers/arm-none-linux-gnueabi/bin:$PATH

#cd ~/linux_kernel

#make clean

#make

Linux源代码目录执行以下四个配置命令

Make config

Make manuconfig

Make oldconfig

Make xconfig

九、成功编译Linux内核后,会在<Linux内核源码目录>/arch/arm/boot目录生成一个zlmage文件,该文件是Linux内核的二进制版本,可以直接使用zlmage安装到开发版上,也可以通过命令在Android模拟器中进行测试。

# emulator -avd myavd -kernel /root/kernel/goldfish/arch/arm/boot/zlmage

 

 

 

 

posted @ 2016-04-25 11:37  张呢呢  阅读(705)  评论(0编辑  收藏  举报