arm开发板有哪些 arm开发板( 二 )
发布设备号无论哪种方式,都需要使用unregister_chrdev_region()函数来释放设备号 。删除设备时调用释放设备号的函数,以便在设备重新注册时提供可用的设备号 。如果删除时没有释放,再次添加设备时会报错,导致新设备不可用,从而影响驱动的稳定性 。功能原型
void unregister_chrdev_region(dev_t from, unsigned count)//参数dev_t from:指定需要注销的字符设备的设备编号起始值,我们一般将定义的dev_t变量作为实参 。//参数unsigned count:指定需要注销的字符设备编号的个数,该值应与申请函数的count值相等,通常采用宏定义进行管理 。动态综合模式的应用设备数量内核中提供了一个函数,可以用于动态应用,也可以用于静态应用 。原型如下
static inline int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops){return __register_chrdev(major, 0, 256, name, fops);}//参数unsigned int major:该参数用于指定要申请的主设备号,相当于静态申请,当该值设为0时,由系统自动分配,相当于动态申请 。//参数const char *name:指定设备的名称 。//参数const struct file_operations *fops:设备的函数接口指针 。该函数的发布设备编号函数的原型如下
该函数的释放设备号函数原型如下static inline void unregister_chrdev(unsigned int major, const char *name){__unregister_chrdev(major, 0, 256, name);}至于这部分,贴上我的代码 。
printk(KERN_EMERG "[ KERN_EMERG ]HelloModule Init\n");ret = alloc_chrdev_region(&devno, 0,1, "HelloWorld");if(ret == 0)printk(KERN_EMERG "[ KERN_EMERG ]baseminor ok\n");elsereturn 0;major = MAJOR(devno);minor = MINOR(devno);Cdev操作初始化我们用驱动API来关联系统API,主要是实现file_operations结构,需要cdev_init()函数来操作 。
void cdev_init(struct cdev *cdev, const struct file_operations *fops)//cdev:struct cdev类型的指针变量,指向需要关联的字符设备结构体;//fops:file_operations类型的结构体指针变量,一般将实现操作该设备的结构体file_operations结构体作为实参 。注册注册以下函数
int cdev_add(struct cdev *p, dev_t dev, unsigned count)//p:struct cdev类型的指针,用于指定需要添加的字符设备;//dev:dev_t类型变量,用于指定设备的起始编号;//count:指定注册多少个设备 。注册后才能通过后续操作创建设备节点 。
取消void cdev_del(struct cdev *p)//p:struct cdev类型的指针,用于指定需要添加的字符设备 。//注册和注销是配对的,注销函数实在删除设备时执行的 。【arm开发板有哪些 arm开发板】我代码的一部分
cdev_init(&cdev,&fops);ret = cdev_add(&cdev, devno, 1);if(ret
推荐阅读
- 惠普笔记本主板进水烧了?惠普笔记本电脑进水维修很贵吗_2
- 漫威|《漫威蜘蛛侠》开发商被群嘲:多次称游戏不会上PC
- 为什么自行车能动?
- ARM|ARM又被盯上!曝三星电子有意收购
- 三星|OLED面板的iPad有戏:三星正为其建立新生产线
- 平板触屏部分失灵最简单的方法?平板触屏失灵怎么办
- 面板数据模型(几种面板数据模型的解释)
- 大学|公务员工作很累,工资又低,我想辞职可以吗?想去搞软件开发挣钱
- 太阳队|鱼塘老板怒折偷钓者4根鱼竿,钓鱼人请来律师:鱼塘承包不合法
- 真我|首销曾被抢购一空 真我平板X现货:1499元