Linux2.6内核驱动移植指南

需积分: 3 3 下载量 93 浏览量 更新于2024-08-01 收藏 60KB DOC 举报
"Linux2.6内核驱动移植参考文档提供了关于如何将驱动程序从旧版本的Linux内核移植到Linux2.6内核的关键信息。文档作者晏渭川分享了他在整理过程中发现的主要变化,虽然没有详细列出每个函数的用法,但提到了一些关键的更新和新功能。此外,文档还指出可以参考http://lwn.net获取更详细的函数说明。" 在Linux2.6内核驱动移植中,以下几个方面的变化是开发者需要注意的: 1. **新的入口函数**: 在2.6内核中,驱动初始化和退出使用`module_init`和`module_exit`宏,分别对应`your_init_func`和`your_exit_func`。而在2.4内核中,可以使用`init_module`和`cleanup_module`,但在2.6内核中,不再需要直接包含头文件。 2. **许可证更新**: 模块许可证声明由`MODULE_LICENSE("GPL")`改为`MODULE_LICENSE("DualBSD/GPL")`,表明模块遵循双GPL许可,允许使用BSD和GPL两种许可证。 3. **模块参数处理**: 现在需要显式包含`<linux/moduleparam.h>`来声明和管理模块参数。例如,使用`module_param`、`module_param_named`以及`module_param_string`和`module_param_array`宏定义不同类型的参数。而在老版本中,使用`MODULE_PARM`和`MODULE_PARM_DESC`。 4. **模块别名**: Linux2.6引入了`MODULE_ALIAS`宏,允许在代码中直接定义模块别名,而不再需要在`/etc/modules.conf`配置文件中手动配置。 5. **模块使用计数**: `try_module_get`和`module_put`宏用于管理模块的使用计数,取代了2.4内核中的`MOD_INC_USE_COUNT`和`MOD_DEC_USE_COUNT`。 6. **符号导出**: 在2.6内核中,默认情况下,模块不导出任何符号,需要显式使用`EXPORT_SYMBOL`或`EXPORT_SYMBOL_GPL`来导出需要的符号。 7. **其他变化**: - 硬件设备的注册和注销过程可能有所改变,需要按照新的API来处理。 - 中断处理和中断注册机制也可能有调整,例如使用`request_irq`和`free_irq`。 - 设备模型的变化,如设备树(Device Tree)的引入,使得硬件描述更加灵活。 - 文件系统和I/O子系统的更新可能要求驱动程序做相应适应。 移植过程中,开发者需要熟悉新内核的API,并检查驱动代码中对旧API的依赖。同时,理解内核版本间的差异,确保驱动程序在新内核下能够正确工作并满足性能要求。此外,遵循良好的编程实践,如模块化设计,可以使移植过程更加顺畅。对于具体的函数用法,开发者可以参考LWN.net或其他内核开发文档进行学习。