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

专业做网站公司济南/网络广告投放网站

专业做网站公司济南,网络广告投放网站,长垣县建站塔山双喜,北京电商网站开发公司注册字符类设备 注册杂项设备: misc_register(&misc_dev);注销杂项设备: misc_deregister(&misc_dev);cdev结构体:描述字符设备的一个结构体字符类设备的一些操作是在 #include <linux/cdev.h> 头文件下 struct cdev {struct kobject kobj;struct module *ow…

注册字符类设备

  • 注册杂项设备:
misc_register(&misc_dev);
  • 注销杂项设备:
misc_deregister(&misc_dev);
  • cdev结构体:描述字符设备的一个结构体
  • 字符类设备的一些操作是在 #include <linux/cdev.h> 头文件下
struct cdev {struct kobject kobj;struct module *owner;const struct file_operations *ops;struct list_head list;dev_t dev;unsigned int count;
};
  1. 步骤一:定义一个cdev结构体
  2. 步骤二:使用cdev init 函数初始化cdev结构体成员变量
void cdev init(struct cdev *, const struct file_operations *);
  • 参数:
    第一个:要初始化的cdev
  • 第二个:文件操作集
    cdev->ops = fops;实际就是把文件操作集写个ops
  1. 步骤三:使用cdev_add函数注册到内核
int cdev_add(struct cdev *, dev_t, unsigned);

参数:

  • 第一个: cdev的结构体指针
  • 第二个:设备号
  • 第三个:次设备号的数量

设备的注销

void cdev_del(struct cdev *);

参数

  • 第一个 设备号

字符类设备注册后并不会自动生成设备节点

  • 我们需要使用 mknod 命令创建一个设备节点

  • 格式

    mknod 名称 类型 主设备号 次设备号
    
  • 举例 c 代表字符型

    mknod /dev/test c 247 0
    

    代码

    • app.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char *argv[]){int fd;char buf[64] = {0};char buf_write[64] = "write aaaaaaaaa";fd = open("/dev/test",O_RDWR);if (fd < 0){printf("open error \n");return fd;}// printf("open success \n");// read(fd,buf,sizeof(buf));// write(fd,buf_write,sizeof(buf_write));// printf("buf is %s\n",buf);// close(fd);return 0;
}
  • chrdev.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/kdev_t.h>
#include <linux/cdev.h>
//设备的数量
#define DEVICE_NUMBER 1
//静态名称
#define DEVICE_SNAME "schrdev"
//动态名称
#define DEVICE_ANAME "achrdev"
//次设备号的起始地址
#define DEVICE_MINOR_NUMBER 0//主设备号,次设备号
static int major_num, minor_num;struct cdev cdev;module_param(major_num,int,S_IRUSR);
module_param(minor_num,int,S_IRUSR);int chrdev_open(struct inode * inode, struct file * file){printk("chrdev_open 已经打开了");return 0;}struct file_operations chrdev_ops =
{.owner = THIS_MODULE,.open = chrdev_open, };static int hello_init(void){dev_t dev_num;int ret;if (major_num){dev_num = MKDEV(major_num, minor_num);printk("major_num = %d \n",major_num);printk("minor_num = %d \n",minor_num);ret = register_chrdev_region(dev_num,DEVICE_NUMBER,DEVICE_SNAME);if (ret <0 ){printk("register_chrdev_region 注册失败了 \n");}printk("register_chrdev_region 注册成功了 \n");      }else {ret = alloc_chrdev_region(&dev_num, DEVICE_MINOR_NUMBER, DEVICE_NUMBER, DEVICE_ANAME);if (ret < 0 ){printk("alloc_chrdev_region 失败了 \n");}major_num = MAJOR(dev_num);minor_num = MINOR(dev_num);printk("major_num = %d \n",major_num);printk("minor_num = %d \n",minor_num);printk("alloc_chrdev_region 成功了 \n");}cdev.owner = THIS_MODULE;cdev_init(&cdev, &chrdev_ops);cdev_add(&cdev, dev_num, DEVICE_NUMBER);printk(KERN_ALERT "Hello , World\n"); //内核空间里没有printf,用printkreturn 0;}static void hello_exit(void){unregister_chrdev_region(MKDEV(major_num, minor_num), DEVICE_NUMBER);cdev_del(&cdev);printk(KERN_ALERT "Goodbye 注销成功 , World\n");
}//模块的注册
module_init(hello_init);
//模块的卸载
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");
http://www.jmfq.cn/news/5215141.html

相关文章:

  • 永康城乡建设局网站/宣传软文范例
  • 个人网站设计实验原理/电商营销策划方案范文
  • 个人电脑做网站打不开数据库/营销推广的工具有哪些
  • jsp怎么做视频网站/北京seo专员
  • app模板下载网站/电商平台哪个最好最可靠
  • 济南手机建站模板/中国十大公关公司排名
  • 中国建设银行网站特色/免费ip地址代理
  • 微信公众号登录wordpress网站吗/虞城seo代理地址
  • html网站如何做seo/做引流推广的平台600
  • 湖州网站建设培训/谷歌广告代理
  • 沂南做网站/怎么做网站推广
  • 邯郸wap网站制作/近期出现的病毒叫什么
  • 网站首页布局有哪些/百度优化大师
  • 2012r2做网站/广告竞价
  • 如何设置网站域名/网站建设公司企业网站
  • pc网站制作/优化提升
  • 建网站系统平台/公众号推广平台
  • 建设网站可选择的方案有/淘宝店铺买卖交易平台
  • 北京城市雕塑建设管理办公室网站/网上推广怎么做
  • 新手做网站怎么上传系统/佛山网站建设制作公司
  • 盐城网站开发效果/搜索引擎优化的缺点包括
  • 有没有网站/谷歌浏览器 安卓下载2023版
  • aspx网站html静态化怎么做/统计工具
  • 绿化公司和苗圃做网站/aso优化平台
  • 专业做消防工程师的正规网站/如何自己建一个网站
  • 软件培训网站建设/培训
  • 网站建设与规划的书/网络推广有前途吗
  • 做网站要给ftp密码吗/app推广一手单平台
  • html5做静态网站/百度搜索seo优化技巧
  • dw网站引导页怎么做/软文代发