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-23 09:51:19  来自:Linux联盟收集整理 ]
 

1. modprobe 加载内核模块

a) 在 /etc/module.conf 中查找别名

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) {...}

static void __exit test_exit(void) {...}

module_init(test_init); //申明放在实现函数后

module_exit(test_exit);

4. 一些模块说明的相关宏,可以用objdump可以查看相关信息。

MODULE_LICENSE() 说明代码许可类型

MODULE_DESCRIPTION() 模块描述

MODULE_AUTHOR() 作者

MODULE_SUPPORTED_DEVICE() 模块支持的设备

5. 参数传递使用宏 MODULE_PARM(变量名,类型)。

支持的类型有"b"比特 "h"短整 "i"整数 "l"长整 "s"字符串

static int myint = 9;

static char *mystr = "test"; //注意需要传递参数的默认值

MODULE_PARM(myint, "i");

MODULE_PARM(mystr, "s");

6. 多个文件编译成一个内核模块:

a) 需要在一个源程序中加入

#define __NO_VERSION__

#include

b) 编译同普通的单个内核文件

c) 连接:ld -m elf_i386 -r -o <1st src file.o> <2nd src file.o>

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

8. 关于file_operations结构体定义在linux/fs.h文件中。

使用方式:

struct file_operations fops = {
read: device_read,
write: device_write,
open: device_open,
release: device_release
}
C99的使用方式:
struct file_operations fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release
}
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·UNIX和Linux中信号的个数  (2007-10-30 13:47:09)
 ·Linux 构建绿色校园网中的应用  (2007-10-30 12:57:09)
 ·Linux操作系统终端代理的设置方法介绍  (2007-10-30 12:31:18)
 ·Linux操作系统内存使用经验谈  (2007-10-30 12:29:55)
 ·Linux/Unix操作系统处于内网的桌面控制  (2007-10-30 12:28:59)
 ·摸清Linux日志处理的来龙去脉  (2007-10-30 12:28:18)
 ·Linux进入系统时自动设置环境变量的方法  (2007-10-30 12:27:35)
 ·linux下用GPG命令加密文件的方法  (2007-10-30 12:25:53)
 ·linux如何查询软件安装在什么目录  (2007-10-30 12:20:57)
 ·Linux 系统用户账号管理的基本操作命令  (2007-10-30 12:20:23)