日期:2014-05-16  浏览次数:20547 次

ldd3书中的一个问题
地61页,得scull注册代码中cdev_init()之前是不是应该加一句
struct   cdev   dev-> cdev   =   cdev_alloc();
如果不用加,为什么?

------解决方案--------------------
如果你想在运行时获得一个独立的 cdev 结构, 你可以为此使用这样的代码:

struct cdev *my_cdev = cdev_alloc();
my_cdev-> ops = &my_fops;

但是, 偶尔你会想将 cdev 结构嵌入一个你自己的设备特定的结构; scull 这样做了. 在这种情况下, 你应当初始化你已经分配的结构, 使用:

void cdev_init(struct cdev *cdev, struct file_operations *fops);


所以cdev_alloc和cdev_init是分别针对两种不同情况的,建议楼主看好ldd上下文~~~~~