linux内核模块和驱动程序的编写(2)

挽心夢

挽心夢

2016-02-19 12:31

下面是个linux内核模块和驱动程序的编写(2)教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!

  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 (tag0)
  
  {
  
  printk("the device init is erro!");
  
  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( re0)
  
  
  {
  
  printk("erro unregister the module !!");
  
  return 1;
  
  }
  
  return 0;
  
  }
展开更多 50%)
分享

猜你喜欢

linux内核模块和驱动程序的编写(2)

编程语言 网络编程
linux内核模块和驱动程序的编写(2)

Linux内核模块和驱动的编写

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux内核模块和驱动的编写

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何编写Linux设备驱动程序

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
如何编写Linux设备驱动程序

Linux网络驱动程序编写一

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux网络驱动程序编写一

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

深入浅出Linux设备驱动编程之内核模块

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux设备驱动编程之内核模块

多文件内核模块

编程语言 网络编程
多文件内核模块

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

windows8系统Metro界面不小心删除了IE10的找回方法

windows8系统Metro界面不小心删除了IE10的找回方法

一个女人一辈子 谈三次恋爱最好 - QQ图案分组

一个女人一辈子 谈三次恋爱最好 - QQ图案分组
下拉加载更多内容 ↓