Android深度探索(2)

第五章 搭建S3C6410 开发板的测试环境

开发板是开发和学习嵌入式技术的主要硬件设备,尽管可以在PC上开发Linux驱动,然后重新编译成ARM架构的Linux驱动模块。但最终都是要在开发板上进行测试的。这主要是因为ARM架构的开发板可基于X86架构的PCCPU指令以及二进制格式上都有所不同。而且如果Linux驱动需要访问硬件,并且这些硬件很难在PC上进行模拟,那么就要在带有这些硬件的开发板上进行调试和测试。尽管开发板从技术上与我们经常用的手机类似,但与手机不同的是在开发板上安装嵌入式系统要比手机容易的多。而且一般开发板都有很多扩展的端口,可以很容易开发定制的硬件,并与开发板链接。因此,开发板相对于手机来说,更适合对程序进行测试,尤其适合对底层的Linux程序进行测试。近期由于对开发板的好奇也自己小投资了点,对itop-4412进行了一段时间的探索,同样为三星公司是推出的处理器,不同开发板的区别主要在烧录嵌入式系统的方式上。书中使用的是一款minicom,基于Linux的串口管理软件,一直是应用笔记本安装虚拟机进行实验学习,对其不太了解,以后有机会使用一下,阅读到烧写Android系统这一小节时还有个小插曲,因为其开发板使用的是预装的WinCE6.0,要烧写成Android需要将原有的系统卸载掉,当说是得进入Eboot模式时,自己还得意的认为书中出现了错误,其实不然EbootUboot同样是属于bootloader引导程序,只不过一个是windows嵌入式,一个是Linux嵌入式而已,接下来的操作基本是对比式的学习,因为windows特有的图形界面交互,跟Linux还是有一定差别的,相对来说指令要少,然后同样是配置有线网络,这里结合近期的学习多了一些感悟,因为这种有线网络配置只能保存在内存中,一旦重启开发板,其设置将消失,我们可以编写一个脚本文件,将上面的命令放到脚本文件中,当开发板每次重启后执行该脚本文件。一般开发板都提供了一个开机自动执行的脚本文件。可以通过对其的修改保存,实现其功能。

 

6章 第一个Linux驱动程序:统计单词个数

本章详细介绍开发和测试Linux驱动程序的完整过程。Linux驱动和普通的Linux API 没有本质的区别。只是是使用Linux驱动的方式与使用Linux API的方式不同而已。Linux驱动的工作和访问方式是Linux的亮点之一,其实是遵循Linux系统将一切皆文件的思想,将每一个驱动都映射成一个文件。这些文件称为设备文件或驱动文件,都保存在/dev目录中。这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易。由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据。接下来对Linux驱动程序的编写进行了初探,感觉还是一脸茫然,但也算小有收获。首先,编写一个基本的Linux驱动的一般步骤:1.建立Linux驱动的骨架(装载和卸载Linux驱动),(module_initmodule_exit宏指定),两个函数的两个宏的C程序文件也可以看作是Linux驱动的骨架。2.注册和注销设备文件,任何一个Linux驱动都需要有一个设备文件,否则应用程序无法与驱动程序交互。可以分别使用misc_registermisc_deregister函数创建和移除设备文件。3.指定与驱动相关的信息(modinfo命令获取)。4.指定回调函数。5.编写业务逻辑(核心部分)。6.编写Makefile文件。7.编译Linux驱动程序(可以直接编译进内核,也可以作为模块单独编译)。8.安装和卸载Linux驱动。(前五步是关于如何编写Linux驱动程序的,后三步可以是Linux驱动正常工作。后面相继讲了在各种平台的测试,而其实本书的主题之一就是介绍如何将Android移植到不同的硬件上,那么使用test_word_count在不同硬件平台上运行实际上也是一种移植,只不过这种移植并不是移植操作系统,而是移植应用程序。最简单的应用程序移植就是将应用程序源代码译成可在不同目标平台运行的二进制文件。如果恰巧这些平台中都包含应用程序所使用的API,那么直接在不同平台编译即可(有时候需要使用交叉编译器),但是并不是所有的API 在各个平台都有,有的API可能名字变化了,有的API在某些平台根本就没实现。面对这样的情况,一般需要先移植这些API,然后再移植应用程序。应用程序移植在Android系统中也会经常发生,如果某些特殊的Android系统(基于ARM芯片)需要一些用C语言实现的Library或可执行程序,但Android平台并没有这些功能看,而其他平台(如Ubuntu Linux)有这样的程序,完全可以修改并重新编译成ARM平台的目标文件放到Android系统中。

 

7LED将为我闪烁:控制发光二极管

这一章其实是对上一章的一个应用扩展与深入,实现了Linux驱动与硬件的直接交互,每一个连接Linux的硬件在I/O内存中都会有映射首地址。在使用ioread32iowrite32等函数读写I/O内存时需要指定这些首地址。移植Linux驱动有一条非常重要,就是在修改Linux驱动源码时,应尽量不修改Linux驱动的接口。

posted @ 2016-06-05 19:27  假如有一天143  阅读(219)  评论(0编辑  收藏  举报