主题 : 字符设备驱动分析 问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 91585
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2013-05-12
最后登录: 2013-06-04
楼主  发表于: 2013-06-03 22:55

 字符设备驱动分析 问题

图片:
看国嵌这一章的代码分析有点问题,这张图mem_devp和mem_devp[]是同一个结构体变量么,我只找到声明struct mem_dev *mem_devp 为什么要为设备描述结构和设备同时分配内存,我怎么感觉分配一个就可以了,两次分配很像
级别: 新手上路
UID: 91585
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2013-05-12
最后登录: 2013-06-04
1楼  发表于: 2013-06-03 22:59
另外在用memset时,前边分配内存数量是MEMDEV_NR_DEVS*sizeof(struct mem_dev),怎么清零数量就只有sizeof(struct mem_dev),
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2013-06-04 20:22
看国嵌这一章的代码分析有点问题,这张图mem_devp和mem_devp[]是同一个结构体变量么,我只找到声明struct mem_dev *mem_devp 为什么要为设备描述结构和设备同时分配内存,我怎么感觉分配一个就可以了,两次分配很像

从代码看,“data”栏位是结构体mem_dev里的一个指针。第一次分配的时候,分配的只是这个指针本身所占的空间,32位系统上通常是4个字节;第二次分配的时候,分配的是这个指针指向的一块地址空间,大小是MEMDEV_SIZE。
另外在用memset时,前边分配内存数量是MEMDEV_NR_DEVS*sizeof(struct mem_dev),怎么清零数量就只有sizeof(struct mem_dev),

这个应该是代码错误。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."