免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1702 | 回复: 4
打印 上一主题 下一主题

在写驱动的时候,标记语法失效时。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-21 14:37 |只看该作者 |倒序浏览
本人最近开始学习LINUX 内核驱动开发。
但在我的FEDORA 3  的环境下

struct file_operations f_ops={
       read  : scull_read,
       write : scull_write,
      }
编译不能通过,我去掉前面的read,write变成
struct file_operations f_ops={
       scull_read,
       write_write,
       }
编译正常通过,无任何提示,但用程序进行读写操作时出现 bad eip 甚至 panic的提示。
不知有没有朋友遇到过相同问题。
望指教!

论坛徽章:
0
2 [报告]
发表于 2006-01-21 17:37 |只看该作者
struct file_operations f_ops={
       read  : scull_read,
       write : scull_write,
      }
這種寫法沒問題啊。 不過現在更通行的是C99的寫法(前面那個是GCC的):
struct file_operations f_ops = {
.read = scull_read,
.write = cull_write,
};

论坛徽章:
0
3 [报告]
发表于 2006-01-23 20:09 |只看该作者
谢谢您的帮助!

后面那种C99的写法我也用过.一样不行.

我的环境是fedora core 3  gcc-3.4  kernel-2.6.9-1.667
我试过用gcc-3.3去编译,可以通过.
但insmod module 时出现提示为 环境错误,fedora core 3这个发行版最低就支持3.4的gcc.

我现在用fedora 1的根文件系统,加自己编译的一个2.4.18的内核在试.gcc-2.95.3
这里编译是可以通过.

可是insmod module 时出现错误,大概如下.

error init_module:
Hint: insmod errors can be caused by incorrect module parameters,
         including invalid IO or IRQ par
         You may find more information in syslog or the output from dmesg");


我用gdb调试 insmod module 在一个 sys_init_module(在init_modules中调用)系统调用中,它返回-1.
跟踪init_modulesz中传给它的变量,发现传给 init_module(insmod 中的一个函数) 的第一个参数
m_name先变为127ELF\...后变成 0xa(excess bound).

希望您能再帮我看一下!

[ 本帖最后由 leonashirley 于 2006-1-23 20:26 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-01-24 10:18 |只看该作者
你能否把整个代码贴出来看看?我帮你分析一下。

论坛徽章:
0
5 [报告]
发表于 2006-01-25 21:23 |只看该作者
谢谢楼上的兄弟.

这两天我自己已经解决了所有的问题.

感触最深的一点就是内核调试真的蛮好玩.

谢谢大家的帮助.

一起进步!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP