天天看点

《Android深度探索(卷1):HAL与驱动开发》——1.5节如何学习Linux驱动开发

本节书摘来自异步社区《android深度探索(卷1):hal与驱动开发》一书中的第1章,第1.5节如何学习linux驱动开发,作者李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.5 如何学习linux驱动开发

android深度探索(卷1):hal与驱动开发

由于linux的内核版本更新较快(稳定版本1至3月更新一次,升级版本1至2周更新一次),每一次内核的变化就意味着linux驱动的变化(就算不需要修改驱动代码,至少也得在新的linux内核版本下重新编译),所以linux内核的不断变化对从事linux驱动开发的程序员影响比较大。不过这对于学习linux驱动开发来说影响相对较小。因为不管是哪个版本的linux内核,开发linux驱动的方法和步骤基本相同,只要掌握了一个linux内核版本(建议使用linux 2.6或linux 3.x内核版本)的驱动开发,其他linux内核版本就很容易掌握了。

学习linux驱动开发只有linux内核还不行,需要有一个真正的操作系统来搭建linux驱动的开发环境,并在该系统下测试linux驱动。开发linux驱动强烈建议使用linux系统。目前在个人操作系统领域比较常用的linux系统有很多,读者可以选择自己熟悉的linux系统作为自己的实验环境。由于本书主要介绍如何开发和测试linux驱动,而google测试android源代码时使用的就是ubuntu linux,因此,强烈建议读者使用ubuntu linux 10.04或以上版本来开发并测试linux驱动。本书的所有代码都在ubuntu linux 11.10下测试通过。为了方便读者学习,在随书光盘中提供了vmware的虚拟机映像文件(ubuntu linux 11.10,内存:2gb,登录用户名:root,登录密码:androidkernel),并且已经配置好了linux驱动的开发环境,而且包含了本书涉及的所有源代码。读者可以很容易地按照本书给出的方式编译和运行本书的示例。

gnu c也是学习linux驱动的一个必须掌握的技术。gnu c是对标准c的扩展。是linux/unix下最常用的c语言编译环境。如果读者比较熟悉标准c,掌握gnu c并不困难。当然,如果读者还不了解c语言,建议在阅读本书之前先学习一下c语言的相关知识(c语言的相关内容并不属于本书的讲解范围)。除了掌握gnu c外,还需要掌握一些与驱动相关的硬件知识,本书会在介绍特定驱动时介绍这部分知识。

为了测试linux驱动在android中的运行效果,最好准备一块开发板。当开发完成驱动程序后,需要在支持android的开发板上测试驱动程序是否能正确地运行。本书建议采用比较流行的基于arm11的开发板,例如,三星的s3c6410,或在s3c6410的基础上改进的其他开发板。如本书的驱动代码采用了飞凌的ok6410开发板进行测试。

当然,除了掌握学习linux驱动的必要知识外,剩下的就是不断地练习了,因为实践是最好的老师。

最后总结一下学习linux驱动要做些什么。

准备一个自己熟悉的linux操作系统,用于开发和测试linux驱动,建议使用ubuntu linux 10.04及以上版本。

准备一块开发板(建议采用基于arm11的开发板)。

学习gnu c。

学习相关的硬件知识。

不断地实践。

继续阅读