其它改变
在2.0和2.1.43之间还有其它一些不同。以我的观点,它们不需要给予特别的关注,因此我将迅速地概述一下。proc_register_dynamic在2.1.29中消失了。最近的核心对每个/proc文件使用proc_register接口;如果结构proc_dir_entry的low_ino域是0,那么会被分配一个动态的inode号。当为2.1.29或更新的核心编译时,头文件sysdep-2.1.h象proc_register一样定义proc_register_dynamic;这个在注册的proc_dir_entry结构以0为inode号时是可行的。在网络接口驱动程序领域,rebuild_header设备方法从2.1.15起有一个新的原型。如果你只开发以太网驱动程序,你不会关心这个不同,因为以太网驱动程序不实现它们自己的方法;它们依赖于通用的以太网实现。当旧的实现需要时,头文件sysdep-2.1定义了宏__USE_OLD_REBUILD_HEADER__。示例模块snull显示了如何使用这个宏,但每必要在这
里给出。
网络代码的另一个改变影响了结构enet_statistics,它从2.1.25起不再存在。代替它的是一个新结构net_device_stats,它在中定义,而不是。新结构与旧结构类似,但是多了两个域存储字节计数器:unsigned longrx_bytes, tx_bytes;一个全特征的网络接口驱动程序应该与rx_packets和tx_packets一道增加这些计数器,尽管一个快速的计划可能要抛弃这些计数器。核心头文件将enet_statistics(老结构的名字)定义为net_device_stats(新结构的名字)以方便已有驱动程序的可移植性。
最后,我需要指出current不再是个全局变量x86, Alpha,以及Sparc的核心移植使用了聪明的技巧将current存在处理器中。这样核心的开发者努力又挤出了几个CPU周期。这个技巧避免了大量的内存访问,有时还能释放一个通用目的寄存器;编译器经常分配处理器寄存器来高速缓存几个经常访问的内存位置,而current是经常访问的。在不同的移植中使用了不同的技巧以优化访问。Alpha和Sparc版本使用一个处理器寄存器(编译器优化不使用的一个)来存储current。而Intel处理器有有限数目的寄存器,编译器可以使用它们所有;在这种情况下技巧包括将结构task_struct和核心栈页存储在连续的虚存页内。这允许current指针被“编码”在栈指针中。对每个Linux支持的平台,头文件current.h>给出了实际选择的实现。象所有重要的软件一样,Linux一直在改变着。如果你想为这个最新的、最伟大的核心写驱动程序,你需要保持跟上核心的发展。尽管处理不兼容性看起来可能很困难,我们发现两点特性:首先,主要的程序设计技巧一直在那里,不太可能改变(至少不常);第二,每次改变都变得更好了,经常使你在将来的开发中需要的工作越来越少。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



