- 论坛徽章:
- 0
|
5可用积分
支持两个globalmem设备的globalmem驱动
struct globalmem_dev
{
struct cdev cdev; /*cdev结构体*/
unsigned char mem[GLOBALMEM_SIZE]; /*全局内存*/
};
struct globalmem_dev *globalmem_devp; /*设备结构体指针*/
/*设备驱动模块加载函数*/
int globalmem_init(void)
{
int result;
dev_t devno = MKDEV(globalmem_major, 0);
/* 申请设备号*/
if (globalmem_major)
result = register_chrdev_region(devno, 2, "globalmem");
else /* 动态申请设备号 */
{
result = alloc_chrdev_region(&devno, 0, 2, "globalmem");
globalmem_major = MAJOR(devno);
}
if (result < 0)
return result;
/* 动态申请2个设备结构体的内存*/
globalmem_devp = kmalloc(2*sizeof(struct globalmem_dev), GFP_KERNEL);
if (!globalmem_devp) /*申请失败*/
{
result = - ENOMEM;
goto fail_malloc;
}
memset(globalmem_devp, 0, 2*sizeof(struct globalmem_dev));
globalmem_setup_cdev(&globalmem_devp[0], 0);
globalmem_setup_cdev(&globalmem_devp[1], 1);
return 0;
fail_malloc: unregister_chrdev_region(devno, 2);
return result;
}
static void globalmem_setup_cdev(struct globalmem_dev *dev, int index)
{
...
}
为什么引用这两个设备的地址时用的是&globalmem_devp[0]、&globalmem_devp[1]??
1.globalmem_devp本身就是指针,引用应该是globalmem_devp啊?为什么还带地址符?
2.没有定义globalmem_devp是数组指针,为什么用了[0]、[1]??
本人C语言水平有限,谁能帮忙解答一下?
[ 本帖最后由 todayrw 于 2009-4-15 09:29 编辑 ] |
最佳答案
查看完整内容
struct globalmem_dev *globalmem_devp; /*设备结构体指针*/和struct globalmem_dev globalmem_devp[]; 等价。两个问题都解决了。看看C基本。
|