当前位置: 首页 > news >正文

网站建设 图片百度网盘资源搜索引擎入口

网站建设 图片,百度网盘资源搜索引擎入口,做网站效果图总结,南昌网站建设公司排行榜前十一、驱动流程 驱动需要以下几个步骤才能完成对硬件的访问和操作&#xff1a; 模块加载函数 module_init注册主次设备号 <应用程序通过设备号找到设备>驱动设备文件 <应用程序访问驱动的方式> 1、手动创建 &#xff08;mknod&#xff09;2、程序自动创建file_oper…

一、驱动流程

驱动需要以下几个步骤才能完成对硬件的访问和操作:

  1. 模块加载函数 module_init
  2. 注册主次设备号 <应用程序通过设备号找到设备>
  3. 驱动设备文件 <应用程序访问驱动的方式> 1、手动创建 (mknod)2、程序自动创建
  4. file_operations <驱动对硬件的读、写、释放等>
  5. 模块卸载函数 module_exit

在这里插入图片描述

二、举例详解

#include <linux/module.h> // module_init module_exit
#include <linux/init.h>    // __init __exit
#include <linux/fs.h>#define MYMAJOR 200
#define MYNAME    "LED_DEVICE"//int (*open) (struct inode *, struct file *);//open函数的格式是上面的格式:static int led_dev_open(struct inode *inode, struct file *file){printk(KERN_INFO "led_dev_open open\n");
}//release函数的原型是:int (*release) (struct inode *, struct file *);static int led_dev_close(struct inode *inode, struct file *file)
{printk(KERN_INFO "led_dev_close close\n");
}static const struct file_operations led_dev_fops{.opne = led_dev_open,.release = led_dev_close,
}static int __init leddev_init(void)
{int ret = -1;printk(KERN_INFO "leddev_init");ret = register_chrdev(MYMAJOR, MYNAME, &led_dev_fops);if(ret) {printk(KERN_ERR "led devices rigister failed");retunt -EINVAL;}printk(KERN_INFO "led regist sucess");return 0;
}static int __exit leddev_exit(void)
{printfk(KERN_INFO "led device exit");unregister_chrdev(MYMAJOR, NAME)}module_init(leddev_init);module_exit(leddev_exit);// MODULE_xxx这种宏作用是用来添加模块描述信息
MODULE_LICENSE("GPL");				// 描述模块的许可证
MODULE_AUTHOR("bhc");				// 描述模块的作者
MODULE_DESCRIPTION("led test");	// 描述模块的介绍信息
MODULE_ALIAS("alias xxx");			// 描述模块的别名信息

注:
通过对驱动的流程进行分析,以上代码中缺少对设备节点的创建,也就是说,上边的代码,应用程序是没有方法进行访问和操作的,这时,我们可以通过手动的方式进行处理,即使用mknod进行创建,

应用调用驱动是通过驱动设备文件来调用驱动的,我们首先要用mknod /dev/xxx c 主设备号 次设备号 命令来创建驱动设备文件


安装好驱动以后,主设备号可以在/proc/devices文件中查看,但是由于不同的设备主设备号占用的不一样,有时候需要系统来自动分配

主设备号,这个如何实现呢:

我们可以在register_chrdev函数的major变量传参0进去,因为这个函数的返回值为主设备号,所以我们定义一个全局变量来接受这个值即可

static int mymajor;//注册的时候mymajor = register_chrdev(0, MYNAME, &ded_dev_fops); # 返回的是自动分配的主设备号//释放的时候unregister_chrdev(mymajor, MYNAME);

这样即可;

register_chrdev(major, name, struct file_openrations) # 注册设备号,缺点是只能注册主设备号
unregister_chrdev(major, name) # 注销设备号
http://www.tj-hxxt.cn/news/82809.html

相关文章:

  • 建设400官方网站最近大事件新闻
  • dede 电商网站百度推广培训机构
  • 珠海建网站郑州品牌网站建设
  • 网站源码中国有限公司市场营销公司有哪些
  • 网站开发先做后台还是前台嘉兴seo外包平台
  • 北京 网站 优化湖南网站设计外包费用
  • 哪些网站做的好看香港域名注册网站
  • 红酒网站定位企业培训机构有哪些
  • 创意名字设计福州seo管理
  • 晋城龙采网站建设软文标题大全
  • 做网站有前景吗上饶seo博客
  • 做动画合成的视频网站今日最新体育新闻
  • 湖南建设人力资源湖南网站建设网站制作需要多少钱
  • 福州做网站的哪家好上海牛巨微seo关键词优化
  • 钉钉小程序开发英文seo是什么意思
  • 网站开发基础学习网络平台怎么创建
  • 网站qq链接怎么做营销策略分析包括哪些内容
  • 徐州 网站制作今日国内新闻最新消息大事
  • 手机编程app哪个好福州关键词排名优化
  • 做网站一般建多大的页面淘宝seo对什么内容优化
  • 洞口做网站找谁智慧软文网
  • 我的世界怎么做的好看视频网站seo怎么发文章 seo发布工具
  • 天津河东做网站公司百度搜索次数统计
  • 做网站代理工作安全吗建网站的软件有哪些
  • 福建设计网站被逆冬seo课程欺骗了
  • 宁阳县住房和城乡建设局网站洛阳seo网络推广
  • 重庆承越网站制作公司厦门百度竞价
  • 哪些平台可以建立网站百度快速查询
  • 深圳办公室设计seo是什么专业
  • 自己怎么做直播网站百度浏览器主页网址