dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>操作系统>linux>文章内容
linux内核模块和驱动程序的编写
来源:未知     作者:    
linux中的大部分驱动程序,是以模块的形式编写的.这些驱动程序源码可以修改到内核中,也可以把他们编译成模块形势,在需要的时候动态加载.

一个典型的驱动程序,大体上可以分为这么几个部分:

1,注册设备

在系统初启,或者模块加载时候,必须将设备登记到相应的设备数组,并返回设备的主驱动号,例如:对快设备来说调用 refister_blkdec()将设备添加到数组blkdev中.并且获得该设备号.并利用这些设备号对此数组进行索引.对于字符驱动设备来说,要使用 module_register_chrdev()来获得祝设备的驱动号.然后对这个设备的所有调用都用这个设备号来实现

2,定义功能

对于每一个驱动函数来说.都有一些和此设备密切相关的功能函数.那最常用的块设备或者字符设备来说.都存在着诸如 open() read() write() ioctrol()这一类的操作.当系统社用这些调用时.将自动的使用驱动函数中特定的模块.来实现具体的操作.而对于特定的设备.上面的系统调用对应的是一定的.

如:在块驱动设备中.当系统试图读取这个设备(即调用read()时),就会运行驱动程序中的block_read() 这个.

打开新设备时会调用这个设备驱动程序的device_open() 这个.

3,谢载模块

在不用这个设备时,可以将他卸载.主要是从/proc 中取消这个设备的特殊文件.可用特定的实现.

下面我们列举一个字符设备驱动程序的框架.来说明这个过程.

/* a module of a character device */

 

/* some include files*/

#include"param.h"

#include"user.h"

#include"tty.h"

#include"dir.h"

#include”fs.h"

 

/* the include files modules need*/

#include"linux/kernel.h"

#include"linux/module.h"

#if CONFIG_MODBERSIONS==1

degine MODBERSIONS

#include" linux.modversions.h"

#endif

#difine devicename mydevice

/* the init funcion*/

int init_module()

{

int tag=module_register_chrdev(0,mydevice,&Fops);

if (tag<0)

{

printk("the device init is erro!\n");

return 1;

}

return 0;

}

 

/*the funcion which the device will be used */

int device_open ()

{

…….

}

int device_read ()

{

…….

}

int device_write ()

{

…….

}

int device_ioctl ()

{

…….

}

……

/* the deltter function of this module*/

int cleanup_module()

{

int re=module_unregister_chrdev(tag,mydevice);

if( re<0)

{

printk("erro unregister the module !!\n");

return 1;

}

return 0;

}

 

 

上一篇:Linux内核模块编程之字符设备文件   下一篇:Unix(Linux)C编程问题精粹
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·Linux常用基本命令及应用技巧
·写得蛮好的linux学习笔记
·学会在Linux下对硬盘分区
·找回Redhat的超级用户密码
·Linux下C语言编程
·GDB教程
·Cron服务配置详解
·Linux与Unix二大操作系统编程的
·Linux 2.6 内核的嵌入式系统应用
·Linux和Windows系统调用的比较
·vim命令(一)
·vim 命令(二)
  相关文章
·Linux内核模块编程之字符设备文
·Unix(Linux)C编程问题精粹
·Linux网络代码导读v0.2
·Linux 进程调度原理
·linux kernel 2.4.5 ipv4 socket
·使用 GDB 调试 Linux 软件
·C常用的LinuxC语言函数库
·Linux核心代码分析
·关于Linux下编写和编译程序的几
·Linux库函数升级权威经验
·Linux下C语言编程--信号处理函数
·Linux ioctl() Primer
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763