linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 内核研究 >
栏目导栏
资料搜索
热门文章
·linux-2.6内核升级文档
·Linux源代码的注释
·linux2.6内核编译方法详述
·Linux操作系统内核编译详解
·Linux内核结构详解
·Linux配置与编译内核
·定时器
·Linux内核升级全攻略
·FC5(Fedora Core5)下编译内核总
·Ubuntu 6.06 dapper 内核编译初
·Linux 内核编译详解
·Linux内核管理基础知识概述
·Linux2.4升级到2.6内核升级指南
·第八章 设备驱动
·如何编译linux内核
最新文章
·Linux内核bootsplash功能的实现
·Linux内核2.6.25全新发布加入众
·Debian Linux系统编译内核标准
·Linux2.4内核和2.6内核对Initr
·2.6.24内核编译 initrd-2.6.24
·Qtopia应用程序与Linux内核数据
·Linux 2.6内核中sysfs文件系统
·Linux2.6内核驱动移植参考
·Andrew Morton:Linux内核的执法
·Fedora 8 Linux系统的内核配置
·Kernel中的irq.c函数
·Linux核心出现权限扩张及记忆体
·Linux 2.6本地权限提升漏洞
·结合Linux系统内核源码理解SYN
·关于Linux 内核中五个主要子系
Google
 
Linux内核模块开发--宏说明
[ 作者:  加入时间:2007-10-22 10:26:07  来自:Linux联盟收集整理 ]

1. modprobe 加载内核模块hMiLinux联盟
    a) 在 /etc/module.conf 中查找别名hMiLinux联盟
    b) 在 lib/modules/version/module.dep 中判断是否有依赖模块需要被提前加载(该文件被depmod

-a建立)

2. 2.4内核中不一定非用init_module和cleanup_module做开始和结束的函数,但需要用module_init和

module_exit申明。

3. 宏 __init 和 __exit 可以使函数在运行完成后自动回收内存(限模块中),__initdata用于变量,

举例:

  #include    //需要包含的头文件

  static int ntest __initdata = 3;

  static int __init test_init(void)  {...}hMiLinux联盟
  static void __exit test_exit(void)  {...}

  module_init(test_init);   //申明放在实现函数后 ^_^hMiLinux联盟
  module_exit(test_exit);

4. 一些模块说明的相关宏,可以用objdump可以查看相关信息。hMiLinux联盟
  MODULE_LICENSE()  说明代码许可类型hMiLinux联盟
  MODULE_DESCRIPTION()  模块描述hMiLinux联盟
  MODULE_AUTHOR()  作者hMiLinux联盟
  MODULE_SUPPORTED_DEVICE() 模块支持的设备

5. 参数传递使用宏 MODULE_PARM(变量名,类型)。hMiLinux联盟
  支持的类型有"b"比特 "h"短整 "i"整数 "l"长整 "s"字符串

  static int myint = 9;hMiLinux联盟
  static char *mystr = "test";   //注意需要传递参数的默认值

  MODULE_PARM(myint, "i");hMiLinux联盟
  MODULE_PARM(mystr, "s");

6. 多个文件编译成一个内核模块:hMiLinux联盟
  a) 需要在一个源程序中加入hMiLinux联盟
     #define __NO_VERSION__hMiLinux联盟
     #include hMiLinux联盟
  b) 编译同普通的单个内核文件hMiLinux联盟
  c) 连接:ld -m elf_i386 -r -o <1st src file.o> <2nd src file.o>

7. strace 查一个程序所用到的系统调用

8. 关于file_operations结构体定义在linux/fs.h文件中。hMiLinux联盟
    使用方式:hMiLinux联盟
    struct file_operations fops = {hMiLinux联盟
    read: device_read,hMiLinux联盟
    write: device_write,hMiLinux联盟
    open: device_open,hMiLinux联盟
    release: device_releasehMiLinux联盟
    }hMiLinux联盟
    C99的使用方式:hMiLinux联盟
    struct file_operations fops = {hMiLinux联盟
    .read = device_read,hMiLinux联盟
    .write = device_write,hMiLinux联盟
    .open = device_open,hMiLinux联盟
    .release = device_releasehMiLinux联盟
    }

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·网页实用技巧:随机显示不同页面背景  (2007-10-30 13:55:09)
 ·CCNA基础:生成树协议学习笔记  (2007-10-30 13:26:18)
 ·JAVA技术:上传图片的缩放处理  (2007-10-25 13:35:59)
 ·诊断Java代码:设计轻松的代码维护  (2007-10-25 13:04:43)
 ·高级编程:三重DES加密程序  (2007-10-25 12:03:13)
 ·JDK6.0的新特性:使用Compiler API  (2007-10-24 14:47:29)
 ·Ubuntu 7.10下 编译使用新内核的方法  (2007-10-24 10:37:55)
 ·Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制  (2007-10-23 10:01:56)
 ·Linux内核模块开发详细解析  (2007-10-23 09:51:19)
 ·SQL:数据挖掘  (2007-10-22 15:08:12)