易截截图软件、单文件、免安装、纯绿色、仅160KB

面对不断升级的内核,如何学习linux设备驱动


面对不断升级的linux内核、GNU开发工具、linux环境下的各种图形库,很多linux应用程序
开发人员和linux设备驱动开发人员即兴奋,又烦躁。兴奋的是新的软件软件、工具给我提供了更强大的功能,烦躁的是适应新软件的特性、搭建新环境是一项
非常繁琐的事情。本文想从以下3个方面探讨一下“面对不断升级的内核,如何学习linux设备驱动”。
内核发展的现状及其对技术人员的影响
Linux目前主要维护2.4和2.6两个内核版本。在http://www.kernel.org/
网站上已经可
以下载到最新的2.6内核linux-2.6.31,及最新的2.4内核linux-2.4.37。稳定版本号基本上是1~3月更新一次,
如:2.6.22至2.6.23。升级版本号每1~2周更新一次,如:2.6.23.1至2.6.23.2。
由于高版本内核并不完全兼容低版本内核,所以内核升级对从事linux开发的技术人员造成了一定的影响,特别对于linux入门人员。
内核的升级对应从事linux应用程序开发的人员来说影响较小,因为系统调用基本保持兼容。而影响比较大
的是驱动开发人员。每次内核的更新都可以导致很多内核函数使用上的变化。其中有内核本身提供的函数,也有硬件平台代码提供的函数,后者变化的更加频繁。这
一点让初学内核驱动的人很迷茫,因为当他们按照手里的经典著作,如:Alessandro的《linux设备驱动程序》,编写驱动时,发现并不能够成功的
在你的linux平台上编译通过、或不能正常执行。你的朋友会告诉你,你用的内核和书里的不一致。那该怎么办呢?
我想从两个方面去解释这个问题,一方面是如何写好linux设备驱动,另一方面是如何应对不断升级的内核。
如何写好Linux设备驱动
Linux设备驱动是linux内核的一部分,是用来封装硬件细节,为上层提供标准接口的一种方法。为了能够编写出质量比较高的驱动,要求工程师必须具备以下几个方面的知识:
熟悉处理器的性能
如:处理器的体系结构、汇编语言、工作模式、异常处理等此项对于初学者来说,重要程度:***。也就是说还不熟悉驱动编写方法的情况下,可
以先不把重心放在这一项上,因为可能因为它的枯燥、抽象而影响到你对设备驱动的兴趣。
随着你不断的熟悉驱动的编写,你会很自然的意识到此项的重要性。
掌握驱动目标的硬件工作原理及通讯协议
如:串口控制器、显卡控制器、硬件编解码、存储卡控制器、I2C通讯、SPI通讯、USB通讯、SDIO通讯、I2S通讯、PCI通讯等
此项的重要程度应该不用多说了,编写设备驱动的前提就是知道设备的操


相关文档:

Linux iptable文档

总览
用iptables -ADC 来指定链的规

,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......

linux 启动级别

以下是配置引导进入图形模式的etc/inittab文件的部分内容:
#Default runlevel.The runlevels used by RHS are:
# 0-halt(Do NOT set initdefault to this)
# 1 -Single user mode
# 2-Multiuser,without NFS(The same as 3,if you do not have networking)
# 3-Full multiuser mode   
# 4-unu ......

Linux操作系统下的多线程编程详细解析

线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统

去,是在80年代中期,solaris
是这方面的佼佼者。传统的Unix

支持线程的概念,但是在一个进程
(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所
支持,包括Windows/NT,当然,也包括Linux ......

linux 2.4内核下 微妙级延时

在x86 2.4内核下 usleep、select等延时函数无法实现低于10ms延时
而在驱动层在ioctrl中通过udelay、mdelay等等实现延时也无法多进程同时延时
所以实现如下延时函数 能够实现低于10us甚至1us 的延时
unsigned int uDelay(unsigned int delayTime)
{
static struct timeval _tstart, _tend;
static struct timezone ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号