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       (核心框架——java及C++语言)

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

|-- libcore               (JAVA核心库)

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

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

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

|-- packages           (应用程序包)

|-- prebuilt             (x86和arm架构下预编译的一些资源)

|-- 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) 主要的两个目录为host和target,前者表示在主机(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:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。

Documentation

drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等。

fs:支持各种文件系统,如EXT、FAT、NTFS、JFFS2等

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

init:内核初始化代码。

ipc:进程间通信的代码

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

lib:库文件代码。

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

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

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

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

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

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

时间: 2024-10-13 18:48:15

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

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

Android深度探索(卷1)HAL与驱动开发学习笔记(2) 第二章搭建Android开发环境 书中介绍了两种JDK的安装方法, 方法一: 从官网下载JDK并进行配置,解压后在终端打开profile文件来设置PATH环境变量(# soure /etc/profile),打开profile文件后输入下面的内容 export PATH=.:developer/jdk6/bin:$PATH 保存profile文件以后,有两种方法可以重新加载profile文件. 1.# sourse  /etc/pro

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

Android深度探索(卷1)HAL与驱动开发学习笔记(7) 第七章 控制发光二极管   LED驱动实现原理       2. 编写LED驱动 * 创建LED驱动的设备文件 ·使用cdev_init 函数初始化cdev ·指定设备号 ·使用cdev_add函数将字符设备添加到内核中字符设备组中 ·使用class_creat宏创建stuct class ·使用device_creat 创建设备文件 卸载LED驱动的设备文件 依次调用device_destory.class_destory.unre

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

Android深度探索(卷1)HAL与驱动开发学习笔记(6) 第六章 第一个Linux驱动程序 统计单词个数   Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.虽然C语言里没有事件的概念,但却有与事件类似的概念,这就是回调(c a l l b a c k)函数.因此,编写Lin u x驱动最重要的一步就是编写阴调函数,否则与设备文件交互的数据将无法得到处理. 6.1编写L

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

Android深度探索(卷1)HAL与驱动开发学习笔记(5) 第五章 搭建S3C6410的开发版的测试环境 1.  S3C6410 处理器概述   S3C6410是一个16/32位RISC微处理器,旨在提供一个具有成本效益.功耗低,性能高的应用处理器解决方案,像移动电话和一般的应用.它为2.5G 和 3G通信服务提供优化的H /W性能, S3C6410采用了64/32位内部总线架构.该64/32位内部总线结构由AXI.AHB 和APB总线组成.它还包括许多强大的硬件加速器,像视频处理,音频处理,

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

第一章Android系统移植与驱动开发概述 Android的系统架构分为四层:Linux内核(Android使用Linux2.6作为内核).C/C++代码库.Android SDK API(JAVA编写的Library).应用程序. Android移植分为系统移植和应用移植,Android的系统移植中,Android在不同的cpu架构之间不需要做过多的改动(有时仍需要一些调整),为了可以让Android支持不同的硬件平台,还需要进行Linux驱动移植.Android系统中还增加了一个硬件抽象层H

Android深度探索(卷1)HAL与驱动开发--读书笔记(第一章)

Android系统架构是由四层构成,第一层为Linux内核,主要包括Linux驱动程序以及内存管理.进程管理.电源管理的等程序.并且不同的Android的版本的驱动可能并不通用.第二层为C/C++代码库,主要包括使用C/C++编写的代码库(Linux下的.so文件),也包括.Dalivak虚拟机的运行时(Runtime).第三层为Android SDK API,这一层是用JAVA编写的各种Library,并且均是基于Dalvik虚拟机格式的.第四层则是应用程序,这一层是Android用户,包括程

Android深度探索(卷1)HAL与驱动开发--读书笔记(第四章)

l  配置Android源代码下载环境步骤 创建一个用于存放下载脚本文件(repo)的目录 #mkdir ~/bin #PATH=~/bin/repo 下载repo脚本文件 #curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >~bin/repo #chmod a+x~/bin/repo 创建用于存放Android源代码目录 #mkdir android_source #cd android_source 初始化 #repo

Android深度探索(卷1)HAL与驱动开发--读书笔记(第二章)

搭建Android底层开发环境的步骤 l  安装JDK: 1.下载JDK,解压,打开profile设置PATH环境变量 2.#gedit  /etc/profile Export PATH= .:/developer/jdk6/bin:$PATH 3.#source /etc/profile # . /etc/profile 注:可通过echo $PATH查看环境变量的值 l  搭建Android应用程序开发环境 安装Android SDK 首先下载好SDK,然后将这个压缩包文件复制到Linux

Android深度探索(卷1)HAL与驱动开发--读书笔记(第七章)

LED控制发光二级管 1.实现原理:与本机的I/0 内存进行交互.所谓I/0 内存是通过各种接口连接到主机的硬件在主机内存中的映射.然后Linux 内核会利用I/0 内存中的数据硬件交互.Linux 内核提供了多个与1/0 内存交互的函数.每一个连接Linux 的硬件在ν0 内存中都会有映射首地址. 2.编写LED驱动: 1)         adb shell  “ echo ’1’ > /de>/s3c6.410 leds" 2)         adb shell  ” ech