当前位置: 技术问答>linux和unix
驱动模块导入不进去
来源: 互联网 发布时间:2015-07-23
本文导语: 刚刚接触驱动方面的知识 按照网上的例子写了个非常幼稚的test.c的字符驱动,open,release,write,read四个函数,编译之后(有两个warning,应该没什么大碍吧),用insmod导入模块,语句没显示错误,接着到/proc/devices里头...
刚刚接触驱动方面的知识
按照网上的例子写了个非常幼稚的test.c的字符驱动,open,release,write,read四个函数,编译之后(有两个warning,应该没什么大碍吧),用insmod导入模块,语句没显示错误,接着到/proc/devices里头找主设备号,254,问题就在这里,这里头好像已经有个test了,开始我就用这个设备号mknod,一路都通过,但最后用测试程序调用read(在驱动里就是往数组里写1)结果根本不对。
后来我就把源文件名改成别的,比如ceshi.c,再编译,insmod,没什么错误提示,但是在/proc/devices根本就没有重新命名的设备,而最后还是有个test,她是不是系统自带的啊?结果现在就进行不下去了
各位都是过来人,这到底是怎么回事啊?
谢谢
按照网上的例子写了个非常幼稚的test.c的字符驱动,open,release,write,read四个函数,编译之后(有两个warning,应该没什么大碍吧),用insmod导入模块,语句没显示错误,接着到/proc/devices里头找主设备号,254,问题就在这里,这里头好像已经有个test了,开始我就用这个设备号mknod,一路都通过,但最后用测试程序调用read(在驱动里就是往数组里写1)结果根本不对。
后来我就把源文件名改成别的,比如ceshi.c,再编译,insmod,没什么错误提示,但是在/proc/devices根本就没有重新命名的设备,而最后还是有个test,她是不是系统自带的啊?结果现在就进行不下去了
各位都是过来人,这到底是怎么回事啊?
谢谢
|
在linux device driver一书中。2.4以上内核字符设备驱动read函数的原型是:
ssize_t read(struct file *filp,char *buff,size_t count,loff_t *offp);
楼主你似乎没有offp这个代表用户在文件中进行存取操作位置的参数,还有函数
里那个i-结点参数有什么作用呢。
ssize_t read(struct file *filp,char *buff,size_t count,loff_t *offp);
楼主你似乎没有offp这个代表用户在文件中进行存取操作位置的参数,还有函数
里那个i-结点参数有什么作用呢。
|
应该是因为只改了文件名,没有更改程序里面注册设备时使用的名字吧?
|
You can use command "dmeg | tail" to look over the result.
|
呵呵,这样也行????等待高手中的高手出现``````......................答案估计不是超简单就是超复杂^-^!
|
非常像
|
/proc/devices里面不是模块的文件名
而是注册的驱动设备名
能不能写,估计不是程序结构的问题,而是你自己程序思路有问题
而是注册的驱动设备名
能不能写,估计不是程序结构的问题,而是你自己程序思路有问题
|
没发现啥问题
printk也是输出到console的,如果你重定向到serial了,那就会输出到serial
printk也是输出到console的,如果你重定向到serial了,那就会输出到serial