在红旗6下编译ldd一书中的scull字符设备驱动程序,出现如下错误 "make" -C "/lib/modules/`uname -r`/build" M=`pwd` modules make[1]: Entering directory `/usr/src/linux-2.6.13.1' CC [M] /root/scull.o /root/scull.c: In function ‘scull_open’: /root/scull.c:44: error: dereferencing pointer to incomplete type /root/scull.c:44: warning: type defaults to ‘int’ in declaration of ‘__mptr’ /root/scull.c:...
by wangsongtianmin - C/C++ - 2008-01-20 01:27:00 阅读(1251) 回复(2)
《linux设备驱动程序》第三版,第十七章,网络驱动源码示例的注释。 事实上,作者已经写得很明白了,再注释是显得苍白的,不过近来有朋友有问,偶把它注释出来,以作回答,希望能做为补充和旁注之用,水平有限,不对之处还要请各位一一指正!! [code] #include <linux/config.h> #include <linux/module.h> #include <linux/init.h> #include <linux/moduleparam.h> #include <linux/sched.h> #include <linux/kernel.h> /* pri...
在uclinux里面,如果有两个一样的外设(我的是D/A,它们的地址不一样,其它各种属性相同),请问驱动该使用何种架构呢? 如果是使用一个驱动?感觉有点麻烦。因为在应用层,如open,read等操作,很容易通过打开文件名来区分。但是在内核,虽然open,read还是可以这样,_init,_exit等操作就不好处理了。
我编了个 字符设备驱动程序,自定义了 open,release,read,write操作,可加载后不起作用 ,有lsmod查看使用次数,竟然是负数,用dmesg查看打印信息,发现open函数没被调用,(open 里MOD_INC_USE_COUNT,release里MOD_DEC_USE_COUNT,只有release被调用,信息被打印,)不 知何故,请各位大虾指教.
请大家帮看看,在执行时总会产生oops消息,虽找到出错的地方,想了一天也没弄明白是什么原因,代码如下: struct scull_qset { void * *data; struct scull_qset *next; }; struct scull_dev { struct scull_qset *data; int quan; int qset; unsigned long size; unsigned int access_key; struct semaphore sem; struct cdev cdev; }; ssize_t scull_write(struct file ...
目的是简单地实现线性地读写一段内存。 编译成功,测试时却读不出数据: ------------------------------- # cat /dev/mychrdev0 cat: /dev/mychrdev0: 不允许的操作 ------------------------ strace提示打不开该文件.下面是几个相关函数,高手帮忙看看,非常感谢!! [code] static int mychrdev_init(void) { dev_t dev; int result; result = alloc_chrdev_region(&dev, 0, 1, "mychrdev"); if (result < 0) { ...
我看ldd2时,遇到一个关于次设备号的问题, 第73页。 书上用了NUM和TYPE宏,我不是很明白: #define TYPE (MINOR(dev)〉〉4) #define NUM (MINOR(dev)&0xf) 我的问题是,此设备号不是在mknod时指定的吗?既然他和主设备号组成设备号dev,那么MINOR(dev)得到的是我们当初指定的次设备号阿。比如mknod /dev/scull c 254 0,那么TYPE(dev)和NUM(dev)不都是0了吗? 新手,很不明白,donnot bs~