设为首页 加入收藏

TOP

Linux字符设备驱动框架
2014-11-24 11:20:33 来源: 作者: 【 】 浏览:0
Tags:Linux 字符 设备驱动 框架

register_chrdev_region ->


__register_chrdev_region ->


主要任务:


struct char_device_struct类型的全局变量chrdevs[255]中倒着找到第一个可用的char_device_struct结构,将设备号和设备名等相关信息填充进去。



二、设备结构分配(fs/char_dev.c



cdev_alloc -> 通过struct cdev *p = kzalloc() 实现cdev结构的分配



cdev_init -> cdev->ops = fops;



cdev_add ->


cdev_add里,调用了kobj_map()这个设备模块映射函数,将dev_t设备号加入到了kobj_map结构体里。其实就是将设备号(最大为255)放入到了一个排好序的数组里,如下代码中的



三、设备驱动的打开


当字符设备文件通过open系统调用打开时,VFS会调用chrdev_open


int chrdev_open(struct inode * inode, struct file * filp)


chrdev_open主要完成以下工作:


1. 利用传递过来的inode结构里的i_rdev设备号,通过kobj_lookup找到当前设备对应的kobj对象


drivers/base/map.c



2. 通过container_of找到kobj所在的cdev结构(注册字符设备时分配上面第二步)


3. cdev结构中的ops(操作函数指针)赋值给file结构(传递回去让用户空间访问)。


4. 调用ops中的open(注册字符驱动时的open操作函数),实现对驱动的open访问。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇移植 Linux 2.6.32.2 到 mini2440 下一篇S3C2440看门狗定时器(Watchdog)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)
·玩转C语言和数据结构 (2025-12-27 01:19:05)
·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)