
详解Linux操作系统设备驱动兼容性
发布时间:2006-10-13 12:22:18 来源:天极博客 网友评论 0 条 在2.1的开发中,有些Linux内部被修改了。新核心提供了对内部锁的很好的管理;通过使用几个细粒度的锁,而不是全局的锁,竞争条件被避免了,这样也获得了更好的性能----特别是SMP配置下。更细的锁机制的一个结果是intr_count不再存在了。2.1.34抛弃了这个全局变量,而布尔函数in_interrupt可以取而代之(这个函数从2.1.30开始存在)。目前,in_interrupt是在头文件
注意虽然in_interrupt是个整数,intr_count却是个unsigned long,因此,如果你想打印这个值,并在2.0和2.1间可移植,你必须强制将这个值转换为一个显式的类型,并在调用printk时指定一个合适的格式。在2.1.37中中断管理又引入了一个不同:快和慢中断处理程序不再存在了。SA_INTERRUPT不被新版本的request_irq使用,但它在处理程序执行以前仍然控制着中断是否被打开。如果几个处理程序共享一个中断线,每个可以是个不同的“类型”。中断打开与否依赖于第一个被调用的处理程序。当中断处理程序存在时,下半部总是执行。
位操作
2.1.37稍微改变了在
void set_bit(int nr, volatile void * addr)
; void clear_bit(int nr, volatile void * addr)
; void change_bit(int nr, volatile void * addr)
int test_and_set_bit(int nr, volatile void * addr)
; int test_and_clear_bit(int nr, volatile void * addr)
; int test_and_change_bit(int nr, volatile void * addr)
; int test_bit(nr, addr);如果你想获得与2.0的后向兼容性,你可以在你的模块中包含sysdep-2.1.h,并使用新的原型。
转换函数
版本2.1.10引入了一个新的转换函数,在
新函数对应下面的原型,其中le表示小印地安字节序,be表示大印地安字节序。注意编译器并不强制严格的数据类型化,因为大多数函数都是预处理宏;下面给出的类型仅供参考。
__u16 cpu_to_le16(__u16 cpu_val)
; __u32 cpu_to_le32(__u32 cpu_val)
; __u16 cpu_to_be16(__u16 cpu_val)
; __u32 cpu_to_be32(__u32 cpu_val)
; __u16 le16_to_cpu(__u16 le_val)
; __u32 le32_to_cpu(__u32 le_val)
; __u16 be16_to_cpu(__u16 be_val)
; __u32 be32_to_cpu(__u32 be_val);这些函数在处理二进制数据流时很有用(例如文件系统数据或存在接口板中的信息),这些函数在处理二进制数据流时很有用(例如文件系统数据或存在接口板中的信息),版本2.1.43又增加了两个新的转换函数集。这些集允许你用指针获取一个值,或是对参数指定的一个值进行就地转换。对应与16位小印地安字节序的函数又如下的原型;类似的函数对其它类型的整数也存在,导致一共16个函数。
__u16 cpu_to_le16p(__u16 *addr)
__u16 le16_to_cpup(__u16 *addr) void cpu_to_le16s(__u16 *addr) void le16_to_cpus(__u16 *addr)“p”函数类似与指针的复引用,但在需要时转换这个值;“s”函数可以在原地转换一个值的印地安字节序(例如,cpu_to_le16s(addr) 和addr=cpu_to_le16(*addr)完成的工作是一样的)。
这些函数也在sysdep-2.1.h中定义了。为了避免双重解释的副作用,这个头文件用线入函数,而不是预处理宏。
vremap<b></b> vremap“把握内存”中“vmalloc和朋友们”一节描述的vremap函数在版本2.1中得到一个新名字。新函数ioremap只是名字变了,它与旧的remap取同样的参数。响应的释放函数是iounmap,它代替vfree来释放被重映射的地址。这个改变是为了明确这个函数的实际作用:将I/O空间重映射到核心空间的一个虚地址。头文件sysdep-2.1.h强化了这种新规则,当在2.0版本编译时,它#define了ioremap和iounmap到它们2.0的对应者。
- 微软官方入门教程19:轻松掌握Vista系统的快
- 微软2008大冲击,预借Vista SP1力促Vista市
- 在收件箱中获得 Windows Vista 的最新更新
- 微软官方Vista入门教程全集19篇(Vista学院
- Windows Vista 的成功将势不可挡
- 快快抛弃Vista,拥抱XP SP3!你觉得呢?
- 浅谈Vista系统关闭虚拟内存与使用内存盘加速
- 嘿嘿,按下键盘上面的三个键,马上让你的Vi
- Windows Vista的盗版率只有Windows XP的一半
- 3DMark和PCMark Vantage新版将只支持Vista系
- Windows外衣Linux心 红旗桌面版详测
- 扮酷你的桌面 Linux超靓壁纸下载(多图)
- Linux安装流程
- 浅谈Linux的内核
- RedHat Linux9.0安装实例(1)
- ARM的嵌入式Linux移植体验之基本概念
- Linux安装要点
- 红旗Linux桌面版5.0BETA版OS
- 如何在大硬盘上安装Linux
- RealPlayer流媒体播放器Linux版
- Linux步入Unix的后尘-铁甲Linux出现
- Linux内核中的同步和互斥分析报告
- Linux操作系统文件系统的桌面应用
- Linux设备驱动编程之定时器
- 嵌入式Linux操作系统启动信息完全注释
- 在Linux操作系统中实现内部进程通信
- Linux大腕警告称开源软件存在安全问题
- Linux下双网卡绑定技术实现负载均衡
- 深入浅出Linux操作系统的优化和微调
- Linux下的中文显示和支持常见问题解答
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
