关于字符设备驱动的一个问题,谢谢!

charles8513 2007-10-02 03:46:06
我们知道通过cdev_map(static struct kobj_map *cdev_map; struct kobj_map类型全局变量)实现从设备号到cdev结构的映射(通过hash):
struct cdev {
struct kobject kobj;
struct module *owner;
struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};

struct kobj_map {
struct probe {
struct probe *next;
dev_t dev;
unsigned long range;
struct module *owner;
kobj_probe_t *get;
int (*lock)(dev_t, void *);
void *data;
} *probes[255];
struct rw_semaphore *sem;
};

另一方面通过chrdevs[MAX_PROBE_HASH]实现从设备号到char_device_struct结构的映射,char_device_struct结构中包含cdev对象:

static struct char_device_struct {
struct char_device_struct *next;
unsigned int major;
unsigned int baseminor;
int minorct;
const char *name;
struct file_operations *fops;
struct cdev *cdev; /* will die */
} *chrdevs[MAX_PROBE_HASH];

那么既然能够从设备号找到char_device_struct结构,就能找到cdev,那么还要kobj_map 干什么呢? 两者功能是否有重复?谢谢!
...全文
76 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang_jiang 2007-10-06
  • 打赏
  • 举报
回复
char_device_struct的cdev域只是由于历史原因留下来,以后的版本就可能没有该域,所以他有个注释:/* will die */
在2.6.21/fs/char_dev.c里面没有用到该域
wudishaonv 2007-10-04
  • 打赏
  • 举报
回复
看代码不能这么看的 先总观全局 在挖掘细微之处 你这样看 估计要是几万行的代码你得看几年

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧