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

买app的网站建设樟木头做网站

买app的网站建设,樟木头做网站,WordPress文章不让搜索,株洲建设网站公司一、驱动流程 驱动需要以下几个步骤才能完成对硬件的访问和操作&#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.yayakq.cn/news/363709/

相关文章:

  • 免费发布信息网站有哪些wow slider wordpress
  • 手机企业网站程序wordpress多站点模式
  • 红旗渠建设集团网站监控摄像头做斗鱼直播网站
  • 全国文明网联盟网站建设北京行业网站制作
  • 企业官网建站网站wordpress怎么写主题
  • 浙江大学陈越做的刷题网站网站建设和设计
  • 常州天宁区建设局网站WordPress设置模块间距
  • 制作网站语言wordpress 发布文章
  • 常州网站建设设计wordpress data src
  • 烟台网站seo服务手机怎么制作网站
  • 自己做短视频的网站如何推广自己的微信号
  • 电商网站建设开发的语言有哪些wordpress评分插件
  • 堵博网站建设微信网站界面设计
  • 苏州网站定制彩票创建网站
  • 北京做网站建设价格低抖音运营方案详细
  • 教学平台网站建设合同空间信息网站
  • 便宜网站建设怎么样东莞高端网站建设费
  • 怎么制作一个游戏appseo运营工作内容
  • 教育网站建设的目的成品网站nike源码免费
  • 网站宽度设计水果网站策划方案
  • 淮北网站开发公司怎样进入外贸公司网站
  • 金山网站安全检测百盛联合建设集团有限公司网站
  • 网站建设项目运作的可行性轻骑兵低代码开发平台
  • 做网站没有手机端如何做软件app
  • 安阳河南网站建设公共场所建设网站
  • 网站建设hnshangtian广告推广媒体
  • 什么网站做adsense好网站开发费用算无形资产么
  • 安卓盒子+做网站app拉新任务平台
  • 做团购网站的公司网站开发原则
  • wordpress可以做下载站吗打开qq登录网页