快速业务通道

linux采用模块方法,添加一个新的设备

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-07
ite,my_open,my_release相应的函数体.

例如:

  1. static ssize_t my_open(struct inode *inode,struct file *file){
  2. static int counter=0;
  3. if(Device_Open)
  4. return -EBUSY;
  5. Device_Open ;
  6. /*写入设备的信息*/
  7. sprintf(msg,"the device has been called %d timesn",counter );
  8. msg_ptr=msg;
  9. return 0;
  10. }

同时对于可卸载的内核模块(LKM),至少还有两个基本的模块:

例如本例中的:

  1. static int __init my_init(void){
  2. int result;
  3. result=register_chrdev(0,"sky_driver",&my_fops);
  4. if(result<0){
  5. printk("error:can not register the devicen");
  6. return -1;
  7. }
  8. if(my_major==0){
  9. my_major=result;
  10. printk("&lt;1>hehe,the device has been registered!n");
  11. printk("<1>the virtual device was assigned major number %d.n",my_major);
  12. printk("<1>To talk to the driver,create a dev file withn");
  13. printk("<1>''mknod/dev/my c %d 0''n",my_major);
  14. printk("<1>Remove the dev and the file when donen");
  15. }
  16. return 0;
  17. }
  18. static void __exit my_exit(void){
  19. unregister_chrdev(my_major,"sky_driver");
  20. printk("<1>unloading the devicen");
  21. }

my_init 用于注册设备,获得设备的主设备号

调用register_chrdev(0,“sky_driver(设备名)”,&my_fops);

my_exit 用于注销设备

调用unregister_chrdev(my_major, “sky_driver(设备名)”);

然后在程序尾再调用这两个函数

Module_init(my_init);

Module_exit(my_exit)

MODULE_LICENSE(“GPL”);

编写自己的驱动程序源文件mydriver.c:

  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. #include <linux/fs.h>
  4. #include <linux/init.h>
  5. #include <linux/uaccess.h>
  6. #if CONFIG_MODVERSIONS == 1
  7. #define MODVERSIONS
  8. #include <linux/version.h>//将输入写入设备
  9. write(fd, &get, sizeof(get));
  10. //读出设备的信息并打印
  11. read(fd, &buf, sizeof(buf));
  12. printf("The message changed to: %sn", buf);
  13. sleep(1);
  14. }
  15. else {
  16. printf("OMG...");
  17. return -1;
  18. }
  19. close(fd);//释放设备
  20. return 0;
  21. }

gcc -o mydriver_test mydriver_test.c

./mydriver_test

输入任意字符串,驱动程序将字符串拷贝进新加入的设备,然后再读取出来,设备中保留字符串信息,再次输入将覆盖原来的信息.

ALL ended~~I will be back~~

本文出自 “rangercyh的分享空间” 博客,请务必保留此出处http://rangercyh.blog.51cto.com/1444712/521244

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号