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

开发定制网站公司合肥品牌型网站建设地址

开发定制网站公司,合肥品牌型网站建设地址,wordpress标题怎么写,手机网上银行杂项设备驱动 在 linux 中#xff0c;将无法归类的设备定义为杂项设备。 相对于字符设备来说#xff0c;杂项设备的主设备号固定为 10#xff0c;而字符设备不管是动态分配还是静态分配设备号#xff0c;都会消耗一个主设备号#xff0c;比较浪费主设备号。 杂项设备会自…杂项设备驱动 在 linux 中将无法归类的设备定义为杂项设备。 相对于字符设备来说杂项设备的主设备号固定为 10而字符设备不管是动态分配还是静态分配设备号都会消耗一个主设备号比较浪费主设备号。 杂项设备会自己调用 class_create() 和 device_create() 来自动创建设备节点。所以可以将杂项设备看成是字符设备的一种。但是比平时写的字符设备降低了难度并节约了主设备号。 杂项设备的次设备号 minor 一般使用宏 MISC_DYNAMIC_MINOR表示自动分配次设备号。杂项设备主要依赖次设备号来管理不同的杂项设备。 杂项设备的头文件为 #include linux/miscdevice.h 数据类型 struct miscdevice {int minor;const char *name;const struct file_operations *fops;struct list_head list;struct device *parent;struct device *this_device;const struct attribute_group **groups;const char *nodename;umode_t mode; };API int misc_register(struct miscdevice *misc); void misc_deregister(struct miscdevice *misc);驱动程序 #include linux/device/class.h #include linux/export.h #include linux/uaccess.h #include linux/types.h #include linux/kernel.h #include linux/init.h #include linux/module.h #include linux/fs.h #include linux/device.h #include linux/cdev.h #include linux/miscdevice.h#define CHRDEVBASE_NAME misc_test1 /* 设备名 */static char write_buf[100]; static char read_buf[100];static char *string_test kernel data this tyustli test;static int miscdev_open(struct inode *inode, struct file *file) {printk(k: miscdev open\r\n);return 0; }static ssize_t miscdev_read(struct file *file, char __user *buf, size_t count,loff_t *ppos) {unsigned long ret 0;printk(k: miscdev read\r\n);memcpy(read_buf, string_test, strlen(string_test));ret copy_to_user(buf, read_buf, count);if (ret 0) {printk(k: read data success\r\n);} else {printk(k: read data failed ret %ld\r\n, ret);}return ret; }static ssize_t miscdev_write(struct file *file, const char __user *buf,size_t count, loff_t *ppos) {unsigned long ret 0;printk(k: miscdev write\r\n);ret copy_from_user(write_buf, buf, count);if (ret 0) {printk(k: write data success write data is: %s\r\n, write_buf);} else {printk(k: write data failed ret %ld\r\n, ret);}return count; }static int miscdev_release(struct inode *inode, struct file *file) {printk(k: miscdev release\r\n);return 0; }static struct file_operations miscdev_fops {.owner THIS_MODULE,.open miscdev_open,.read miscdev_read,.write miscdev_write,.release miscdev_release, };static struct miscdevice miscdevice_dev {.minor MISC_DYNAMIC_MINOR,.name CHRDEVBASE_NAME,.fops miscdev_fops, };static int __init miscdev_init(void) {int err 0;err misc_register(miscdevice_dev);if (err 0) {printk(k: misc register err %d\r\n, err);goto err_misc;}printk(k: misc module init!\r\n);err_misc:return err; }static void __exit miscdev_exit(void) {misc_deregister(miscdevice_dev);printk(k: misc module exit!\r\n); }module_init(miscdev_init); module_exit(miscdev_exit);MODULE_LICENSE(GPL); MODULE_AUTHOR(tyustli); MODULE_INFO(intree, Y); /* loading out-of-tree module taints kernel */应用程序 #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include string.hstatic char usrdata[] { user data! };int main(int argc, char *argv[]) {int fd, retvalue;char *filename;char readbuf[100], writebuf[100];if (argc ! 3) {printf(u: error Usage!\r\n);return -1;}filename argv[1];/* 打开驱动文件 */fd open(filename, O_RDWR);if (fd 0) {printf(u: cant open file %s\r\n, filename);return -1;}/* 从驱动文件读取数据 */if (atoi(argv[2]) 1) {retvalue read(fd, readbuf, 50);if (retvalue 0) {printf(u: read file %s failed!\r\n, filename);} else {/* 读取成功打印出读取成功的数据 */printf(u: read data:%s\r\n, readbuf);}}/* 向设备驱动写数据 */if (atoi(argv[2]) 2) {memcpy(writebuf, usrdata, sizeof(usrdata));retvalue write(fd, writebuf, 50);if (retvalue 0) {printf(u: write file %s failed!\r\n, filename);}}/* 关闭设备 */retvalue close(fd);if (retvalue 0) {printf(u: cant close file %s\r\n, filename);return -1;}return 0; } 模块使用 查看字符设备 cat /proc/devices ~ # cat /proc/devices Character devices:1 mem2 pty3 ttyp4 /dev/vc/04 tty5 /dev/tty5 /dev/console5 /dev/ptmx7 vcs10 misc13 input29 fb90 mtd 116 alsa 128 ptm 136 pts 180 usb 189 usb_device 204 ttyAMA 226 drm 249 rpmb 250 usbmon 251 ptp 252 pps 253 rtc 254 gpiochipBlock devices:8 sd31 mtdblock65 sd66 sd67 sd68 sd69 sd70 sd71 sd 128 sd 129 sd 130 sd 131 sd 132 sd 133 sd 134 sd 135 sd 179 mmc 254 virtblk 259 blkext ~ # 查看设备节点 ls /dev模块安装 modprobe my_module模块使用 lib/modules/6.5.7/my_app /dev/misc_test1 1lib/modules/6.5.7/my_app /dev/misc_test1 2模块运行日志 ~ # /lib/modules/6.5.7/my_app /dev/misc_test1 1 k: miscdev open k: miscdev read k: read data success u: read data:kernel data this tyustli test k: miscdev release ~ # /lib/modules/6.5.7/my_app /dev/misc_test1 2 k: miscdev open k: miscdev write k: write data success write data is: user data! k: miscdev release
http://www.zqtcl.cn/news/190531/

相关文章:

  • 国家免费技能培训官网白杨seo博客
  • 福州seo网站建设微服务网站
  • 网站宽度 像素长沙电商运营培训
  • 备案上个人网站和企业网站的区别app开发多少钱一个
  • 有限公司网站建设 中企动力佛山培训机构招生方案
  • 扫黄打非网站建设专业的高端网站制作公司
  • 做自媒体发视频用哪些网站江西网站建设哪家好
  • wordpress用户列表南宁百度seo排名优化
  • 做网站时如何写接口文档上海网站设计建设公司
  • 网站小图标怎么制作平面设计素材网站推荐
  • 多元网络兰州网站建设惠州网页建站模板
  • 网站建设中首页模板下载网页制作模板保存
  • 宁夏做网站的江苏网站建设的案例展示
  • 网站功能需求文档如何免费域名注册
  • 推广网站的软件包头移动的网站建设
  • 自己制作音乐的软件免费上海seo怎么优化
  • 学vue可以做pc网站网站站长统计怎么弄
  • 做物流的可以在那些网站找客户大淘客网站建设app
  • 石家庄兼职做网站dedecms做视频网站
  • 优化公司怎么优化网站的网站 意义
  • 唯品会一家专门做特卖的网站手机版招聘网站开发技术维护
  • 做短租哪个网站wordpress 4.7
  • 网站换空间 site网站域没到期不能续费吗
  • 找别人做网站要考虑哪些网站导航条设计欣赏
  • mvc网站开发实例wordpress雪人主题2.0
  • 红色好看的网站中山网站建设工作室
  • 如何做喊单网站flask公司网站开发
  • 简单个人网站制作流程自己怎么做卖服装的网站
  • 网站开发公司创业做洁净的网站
  • 要建一个优惠卷网站怎么做企业开发小程序公司