- 论坛徽章:
- 0
|
本帖最后由 axlrose 于 2015-09-04 14:32 编辑
这本书终于出来了,太棒了,家里书架上还放着第一版,看到之前宋老师的BLOG上本书介绍,多了好多新内核内容,设备树等都是3.x后才加入的
现在正在用3.14内核,很多时间都花在修改dts设备树上面,这本书里面好多新内容都适用,准备搞本来学习
1. 分享Linux内核学习和驱动开发的经验。
首先是看<linux设备驱动开发> 这书对驱动有个了解,实际开发中需要看当前内核里的子系统的实现,比如i2c, spi的,参考内核现有的示例
可以了解子系统是怎么与实际硬件打交道的,目前都是有很多现成的框架,找一个相近的修改
2. 您觉得Linux驱动开发的难点是什么,有什么好的方法来克服?
主要还是对硬件芯片的熟悉,对具体芯片功能要掌握,比如跟一些纯软件开发人员聊i2c,spi, 他们根本不知道是啥玩意,所以需要先掌握硬件基本知识
然后就是研究具体芯片数据手册,比如RTC pcf8563,需要找datasheet看懂里面的寄存器,然后才有办法去写驱动调试代码,驱动开发需要很多硬件知识
很多时候遇到bug,除了google, 找找patchwork网站上的补丁,官方内核补丁,然后就是自己去读代码分析
3. Linux内核有上百个驱动子系统,你研究过内核各种驱动子系统的共性,层次结构设计吗?分享学习一个Linux内核子系统的经验,例如USB、I2C、HID等driver。
仔细看过i2c和spi的驱动,
4. 您深入研究过Linux设备驱动模型,关注过Linux内核驱动的设计思想吗?
学习过linux的设备驱动模型,里面的设计用到了类似面向对象的思想,引用计数器等,非常巧妙,实现自动内存回收的功能。
其实可以看一下 barebox一个uboot-V2的东东,里面的驱动架构就是一个微型没有OS版的linux设备驱动模型,从学习角度上是很值得看看的
把设备结点通过/sys的目录树来表示,每个节点都可以很方便的通过文件来访问,每次的新节点添加删除都发生uevent事件,给应用层的udev很多处理的机会
5. Android系统是基于Linux内核的,传统的Linux驱动开发和Android驱动开发有什么区别?
区别不大,Android驱动开发是在原有linux kernel中做加法,加入了一些Binder, ashmem,Low Memory Killer, wake lock等
内核驱动开发上大同小异,在JNI层需要给android提供一个 libhardware适配层,也就是跟内核通信的一个统一抽象层 HAL,通过jni给上层的java提供接口,可以让Android App可以操作底层驱动,比较典型的是一个led灯的示例,这个网上能随便搜得到的
PS:
除了构建内核系统外,我现在用buildroot多些,拿来构建rootfs非常方便,之前跟一些嵌入式朋友交流,有的人还不知道这个玩意,使用后发现很棒,全自动化构建,添加软件包自动编译,不需要自己手工./configure , make , install这些麻烦事,构建交叉工具链也非常的方便
另外就是yocto, 现在用freescale芯片的朋友做嵌入式linux应该知道这全自动构建系统,类似gentoo portage
openwrt也是个好东西,以前以为只适用于路由器,其实改造一下,对于不需要使用yocto这种构建GUI型的系统功能的小系统很适用,ubus, uci, netifd, procd, init-hooks等都是很棒的小巧组件
|
评分
-
查看全部评分
|