第一章 介绍Android驱动开发和移植技术

主要对android和linux做了总体的介绍,让我们有了个感性的认识。

一、Android的四层系统架构:

a) Linux内核:Android是基于Linux内核的,所以它和linux的其他部分差异非常小,包括Linux的驱动以及内存管理,进程管理,带电源管理等程序。

b) C/C++的代码库:C/C++编写的代码库,也就是Linux下的.so文件以及dalvik虚拟机的运行时哦!

c) Android SDK API:用java语言编写的各种Library,而这些library是基于虚拟机格式的呢!

d) 应用程序:是用户(程序员和非程序员)所接触到的。

二、Android系统移植的主要工作:应用移植和系统移植。应用程序是将应用程序层的程序移植到某一个特定硬件平台上;系统移植是让Android操作系统在某一个特定硬件平台上运行。

三、查看Linux内核版本:Linux内核版本包括三个:linux2.4、linux2.6、linux3.x;查看方法有两个:1.在linux终端下执行uname -a命令;2.在linux终端下执行cat /proc/version命令。

四、版本号定义的原则:主要包括主版本号、次版本号、修订版本号、微调版本号、为特定的linux系统特别调校的描述。

五、学习驱动开发:我们需要搭建一个真正的linux操作系统环境,初学者呢最好还是使用Ubuntu linux的系统。

六、Linux设备驱动:是直接和硬件交互的一类程序哦,负责对硬件进行抽象的呢,有字符设备、网络设备、块设备。

七、小实验:利用驱动控制开发板上的3个LED灯,实现了对设备驱动的控制。

第二章 搭建Android开发环境

本章主要介绍了Ubutn linux下android开发环境的配置,具体如下:

一、Android底层开发需要的工具:JDK6或以上版本、Eclipse3.4或以上版本、ADT、CDT、Android SDK、Android NDK、交叉编译环境、linux内核源代码、Android源代码、调试串口的开发板工具minicom。

二、安装JDK:下载压缩包、解压、用gedit /etc/profile设置PATH环境变量,设置完成之后保存profile文件后,在终端输入source /etc/profile可重新装载profile,可以利用echo $PATH查看环境变量。

三、搭建Android应用程序开发环境:安装Android SDK、安装Eclipse、安装ADT、配置ADT、建立AVD。

四、安装Android NDK开发环境:下载Android NDK、安装CDT、命令方式编译Android NDK程序、导入Android NDK的例子、配置Android NDK的集成开发环境。

五、安装交叉编译环境:X86架构的cpu采用的是复杂指令集计算机,可以直接下载集成好的交叉编译环境,也可以自己制作交叉编译环境。CodeSourcery交叉编译环境就是下载好的交叉编译好的环境,可以直接下载安装使用,安装时使用sh package.bin命令,也可以使用虚拟环境中的交叉编译环境,Windows和Mac OSX跟linux的交叉编译环境也是大同小异。

第三章 Git使用入门

一、内核的很多代码以及很多项目(eclipse、android等)都使用了linux之父linus编写的git级逆行代码管理,linus独特的设计让git拥有非凡的性能和最为优化的存储能力。安装Git:1)Ubuntu linux10.10或更新的版本可以使用下面的命令安装Git:apt-get install git;apt-get install git-doc git-svn git-email git-gui gitk;2)Ubuntu 10.04或更低的版本可以用下面的命令:apt-get install git-core;apt-get install git-doc git-svn git-email git-gui gitk;3)RHEL、Fedora、centOS用户可以使用以下命令安装:yum install git;yum install git-doc git-svn git-email git-gui gitk。

二、查看Git文档:通常使用man命令直接查看帮助文档需要命令:man git-checkout;以文本形式查看需要命令:git help <sub-command>;查看checkout命令的文档需要命令:git help git-checkout;查看HTML格式的文件需要命令:git help -w git-checkout。

三、源代码的提交和获取:任何版本管理软件都有版本库,不同的是要对版本库的管理方式,所以必须创建版本库:git init;需要将文件提交到本地版本库:git commit;创建本地分支:git branch,也可以使用git branch new-branch创建新分支;切换本地分支:git checkout;在GitHub上创建新的开源项目;上传源代码到GitHub:git push;从GitHub下载源代码:git clone,可以使用如下命令下载整个工程:git clone git@github.com:androidguy/helloword.git。

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

一、下载、编译和测试源代码,安卓源代码有很多呢,比如:应用程序(QQ、微信、短信、电话、日历等)的源代码和SDK插件(adb、aapt等)的源代码、还有NDK的源代码等等。

操作步骤为:1.首先需要配置android源代码下载环境:(1)创建一个用于存放下载脚本文件(repo)的目录(可将该脚本文件放到任何目录中,使用~/bin);(2)下载repo脚本(用于下载源代码);(3)创建用于存放android源代码的目录(可放在其他目录中);(4)初始化;(5)开始下载android源代码;在下载代码的时候git会尽可能的占用宽带网速,所以会做不了其他的事情,如果要备份源代码,则不能删除android代码库(.git目录);2.android源代码目录结构解析,在这儿需要建立保存源代码的目录;3.下载android源代码中的一部分需要我们了解源代码的目录结构,这样就不需要等待很长时间下载android源代码的目录,有两个方法:使用reop sync命令;使用git clone命令;4.编译android源代码时需要调用android.mk文件来编译当前工程:(1)初始化编译环境;(2)选择目标;(3)编译android源代码;5.out目录结构分析;6.将自己的APK作为内置程序发布,这儿将会生成自己的apk程序嵌入到system.img文件中,删除apk程序需要获得root权限并直接删除apk文件;7.用模拟器测试system.img文件,这儿会重新生成system.img文件。

二、下载和编译linux内核源代码:下载linux内核源代码;这里下载的android代码并没有包含linux内核源代码,需要单独下载,这儿有下载内核源代码的步骤:git clone http://android.googlesource.com.kernel/common.git,执行这个命令可以下载到最新的内核源代码,查看当前的远程版本用git branch -a ,使用git checkout -b android-3.0 remotes/origin/android-3.0到处android3.0的内核;linux内核源代码的目录结构;安装android内核的编译环境:准备工作;解压编译器;验证交叉编译器是否安装成功;安装libncurses5;配置和编译linux内核。现在已经成功的搭建了交叉编译环境,可以尽情使用吧!

Android深度探索(卷1)HAL与驱动开发的更多相关文章

  1. Android深度探索(卷1)HAL与驱动开发 虚拟环境的安装

    前言: 最近在看<Android深度探索(卷1)HAL与驱动开发>安装随书带的虚拟环境浪费了很多时间,说是虚拟环境的安装倒不如说是虚拟环境的导入,其实没什么技术含量,也没有什么复杂的,只是 ...

  2. Android深度探索-卷1第一章心得体会

     本章介绍了安卓系统移植与驱动开发的概述,安卓的系统架构有四层:1 Linux内核,2 c/c++代码库, 3 Android SDK API, 4 应用程序 在读的过程中看到了专业名词,查了查,长点 ...

  3. Android深度探索-卷1第十章心得体会

    本章介绍了传统的printk 函数调试技术和其他的调试技术,如gdb gdbserver  kgdb 对于复杂的Linux 驱动及HAL 等程序库,需要使用各种方法对其进行调试,如,设置断点.逐步跟踪 ...

  4. Android深度探索-卷1第九章心得体会

    在android系统中使用Linux 驱动有两种方式一种是通过传统的方式直接与Lmux 驱动交互,如,直接读写设备文件的数据.另外一种是Android特有的,就是通过HAL 模块.HAL 模块本质是通 ...

  5. Android深度探索-卷1第四章心得体会

    这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的 ...

  6. Android深度探索-卷1第八章心得体会

    本章介绍了如何将Linux驱动分成多个实现文件和Linux常用的代码重用方式还有些强行卸载Linux驱动的方法 开发一个Linux驱动,可能会在init.exit等函数中发生错误导致Linux驱动安装 ...

  7. Android深度探索-卷1第七章心得体会

    创建LED驱动的设备文件 第一步:使用cdev_init函数初始化cdev 第二步:指定设备号.直接在代码指定或动态分配 第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第四步 ...

  8. Android深度探索-卷1第五章心得体会

    S3C6410是由三星公司推出的一款低功耗.高性价比的RISC处理器,开发是,首先安装minicom串口调试工具: 第一步:检测当前系统是否支持USB转串口. Lsmod | grep usseria ...

  9. Android深度探索-卷1第六章心得体会

    这章主要介绍了第一个linux驱动程序:统计单词个数.Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,都保存在/dev目录中.大多数Linux驱动都有与其对应的设备文件,因 ...

随机推荐

  1. Ios8代码关闭输入预测问题

    自IOS8出来了输入预测问题后,有些问题也就来了比如textfield中输入邮箱的话,就会有很多空格无法去掉,当时我一直在找有没有提供什么方法可以关闭:后面有这样的一个属性可以解决输入邮箱没有空格问题 ...

  2. [地图SkyLine二次开发]框架(2)

    上节讲到,地图加载. 但我们可以发现,当没有页面布局的情况下,<OBJECT>控件,没有占满整个屏幕,这里我们就要用到Extjs的功能了. 这节要讲的是用Extjs为<OBJECT& ...

  3. oracle中trim,ltrim,rtrim函数用法

    该函数共有两种作用:第一种,即大家都比较熟悉的去除空格.例子:--TRIM去除指定字符的前后空格SQL> SELECT TRIM(' dd df ') FROM dual;TRIM('DDDF' ...

  4. hdu4087ALetter to Programmers(三维旋转矩阵)

    参考 三维旋转矩阵 + 矩阵加速 这个还要用到仿射变换. 平移 translate tx ty tz 1 0 0 tx 0 1 0 ty 0 0 1 tz 0 0 0 1 缩放 scale kx ky ...

  5. WPF界面布局——Canvas

    Canvas用于定义一个区域,称为画布,用于完全控制每个元素的精确位置.它是布局控件中最为简单的一种,直接将元素放在指定位置,使用Canvas时,必须指定一个子元素的位置(相对于Canvas),否则所 ...

  6. 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...

  7. Python_Day6_Pyhotn常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  8. fstream文件操作

    fstream(const char* filename, ios::openmode); ios::app: 以追加的方式打开文件 ios::ate: 文件打开后定位到文件尾,ios:app就包含有 ...

  9. Fibers in JVM

    转载: Fibers in JVM

  10. css学习笔记 6

    对于css样式文件的规划方式将直接影响后期对web站点维护的效率,对于大型的复杂站点一般将css样式文件分为两部分:页面的全局定义及处理页面基本布局的css样式文件和处理细节方面的css样式文件.这样 ...