嵌入式驱动开发小感悟(2)

之前写的那篇文章只是阅读周立功的驱动开发详解得到的感悟,也算是只有一个感性认识,现在在读华清的《linux设备驱动开发详解》,说实在的这本书真的不错,要比周立功的好,至少不是在罗列代码。花了有3天时间也算是读了一小部分,就随便再说说什么吧。

驱动的开发是在操作系统的基础上,这一点周立功的就没有华清有针对性,由于是基于linux2.6的内核,所以在此之前,我大致了解了下linux2.6内核架构,以及一些新的东西。众所周知,linux内核主要实现这样四个功能1.进程调度,2.文件操作,3,内存管理,4.网络接口。而驱动又分为以下三种字符设备、块设备和网络设备。正所谓linux内部一切都是文件,所以驱动毫无例外也是一个重要的文件。这样就很自然的把驱动的分类和内核的功能联系在了一起,也就是说,文件操作时内核使用设备驱动的最重要的条件。并且驱动以模块的形式动态加载到内核中来。首先驱动最终通过操作系统的文件操作系统调用或C库函数(本质也基于系统调用)被访问,而设备驱动结构最终也是为了迎合提供给应用程序的API。其次,设备驱动不可避免的会与设备文件系统打交道,从linux2.4内核的devfs到2.6基于sysfs的udev文件系统。这段说了那么多其实就一句话,驱动编写就TMD的是文件操作!!!而这个文件操作就是使用file_operations结构体!!!

然后就谈到字符设备了,字符设备的核心就是将cdev结构体和file_operations结构体有机的结合起来。首先定义相关字符设备的设备结构体,然后初始化,初始化包括1.申请设备号,2.分配内存(内存管理,此处的内存在用户空间)3.设置字符设备信息,4.将file_operations结构体和cdev绑定,之后我们打开设备将设备结构体转化为设备私有信息,通过获得私有信息实现基本操作(read,write,ioctl。。。。)。

之后就是竞态问题了,当然消除的方法很多,什么屏蔽中断,信号量,原子操作,自旋锁什么的。。。这些都是并发控制方面的再后面就是关于阻塞与非阻塞I/O操作等等,都是为了解决一个问题如何保证“宏观并行,微观串行”。这或许就是多进程os的魅力所在。、

先到这里吧,下次看到后面继续写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值