zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3051回复:28

高分求救:小问题???!!!

楼主#
更多 发布于:2003-03-09 09:53
我在给一块PCI卡在linux下写驱动(生成链接库),
期望生成静态库,指令如下:
gcc -c drive.c -o librarydrive.o
gcc test.c -o test static -L. -ldrive
./test

然后报错:segmentation fault

请问哪位大虾知道是什么原因,可以切磋一下吗?
谢谢!!!
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-09 11:23
库中有非法操作!
我需要帮助,我也会帮助别人
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-09 19:10
访问了非法内存。
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-09 20:21
很多原因都可产生此错误的,跟踪一下!
除了记忆什么都带不走; 除了足迹什么都留不下。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-10 17:13
longge
非常感谢
能说具体点吗
谢谢!!!
我的email:jackzheng2002@sohu.com
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-10 17:23
请高手指教,在线急等!!!
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
Pharos
驱动牛犊
驱动牛犊
  • 注册日期2001-08-13
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-11 21:38
我以前在编程中也经常碰到‘Segmentation fault\'这个错误,这个情况一般都发生在程序访问了一个“野指针”时发生的,如一个指针已经被释放,但是程序中还在继续使用造成的。根据我个人的经验,都是因为指针的错误使用造成的,解决办法其实也很简单,用\'gdb\'跟踪就可以发现具体在哪里出了问题。
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-12 03:51
我在给一块PCI卡在linux下写驱动(生成链接库),
期望生成静态库,指令如下:
gcc -c drive.c -o librarydrive.o
gcc test.c -o test static -L. -ldrive
./test

然后报错:segmentation fault

请问哪位大虾知道是什么原因,可以切磋一下吗?
谢谢!!!
 

这个到底是驱动还是应用程序啊?
如果在应用中引用os的代码,肯定会segment fault。
你gdb一下test,然后backtrace看问题出在什么地方。
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-12 11:10
应该也算是驱动了
因为我写的程序是:把Linux的命令传给PCI板,
就是生成一个共享库供用户使用。

我试一下
另请问:
   readb(),writeb()等要什么头文件?
谢谢!
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
Pharos
驱动牛犊
驱动牛犊
  • 注册日期2001-08-13
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-12 12:33
查内核代码。
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-03-12 19:00
编译的时候带上-g 参数,用gdb调试,应该能找到错误在代码的
哪里,大部分情况应该是非法指针的问题,如果是驱动,就这么两句话肯定是不行的,你好好看看驱动模块的Makefile是怎么写的!
除了记忆什么都带不走; 除了足迹什么都留不下。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-12 21:51
谢谢 楼上的兄弟
然我先试一下
。。。。
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-12 22:13
应该也算是驱动了
因为我写的程序是:把Linux的命令传给PCI板,
就是生成一个共享库供用户使用。

我试一下
另请问:
   readb(),writeb()等要什么头文件?
谢谢!


你的问题没说清楚, 很难回答问题在哪里, 因为你写了测试程序, 所以可能在测试程序里。 很难确定问题出在哪里。
关于你说的两个“函数”(实际上是两个宏, 看上去象函数), 在/LINUXSORUCE/INCLUDE/ASM/IO。H中, 通用目录是/usr/include/asm/io.h中
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-13 17:16
其实我的drive.c是来配置PCI卡的。
我想把它做成一个链接库来供用户调用。

test是利用我得drive.c生成的连接库来控制PCI卡的。

drive.c中用readb()和writeb()等读写函数来配置PCI配置寄存器。

另外我包含的头文件是:/sys/io.h ,和/asm/io.h有什么区别吗
我的找不到/asm/io.h

请几位兄弟帮助,等解决了定高分相送
也非常希望能结为朋友
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
Pharos
驱动牛犊
驱动牛犊
  • 注册日期2001-08-13
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-13 19:24
用inb,outb, ..., inl, outl函数就可以访问到pci端口了,你在程序中要有下面这一行:
#include <sys/io.h>

在x86 PC上,如果你使用的是PCI机制1,那么PCI的端口是0xCF8, 0xCFC, 我以前写过这方面的代码,可以用。

Good Luck!
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-13 20:01
(1)sys/io.h 和 asm/io.h
这两个头文件有这样的关系, 前者在预编译时会把后者包含进来, 所以如果你程序中包含前者, readb()和writeb()就可以使用了
(2)readb() 和 writeb()
这两个宏一般是用做memory-mapped设备来使用的, 而PCI设备是通过IO端口来访问的, 因此你的程序中应该使用inb outb, inw outw等, 这几个宏实际对应的汇编用AT&T汇编可以写成:
 inb %dl(%dx, %edx), %al等, 不列举了。 对应的有延迟的是inb_p, outb_p, inw_p, outw_p等, 注意其中的参数的顺序。 参见本论坛中的The system halted, why?这个帖子, 我有回复其中不小心出现的问题。

你其中出现的SEGMENTATION FAULT很可能是因为你使用了readb, writeb的原因, 修改后看看还会不会出现这个问题。 ;) ;)
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-13 21:58
先给点分,表示感谢!
解决问题,一定另贴送分!!
这个世界热心人还是很多啊!

有其他高手也请发表意见,定送分。。
也想交个朋友。。。

等把这个项目做完,一定好好和你们聊聊,想认识一下。。
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-14 14:40
GDB -C CORE


然后
(gdb) where

看一下是哪儿的错!
不错 ,不错,真不错。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-03-14 15:37
thank you
let me see ....


[编辑 -  3/14/03 by  zheng2002]
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-03-14 17:10
I find the error:
when i use the following sentence:
outl(value,add);
it says: segmentation fault.

I have included the file : #include <sys/io.h>
                                         #include <stdio.h>

thank you for your answer!!!
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
上一页
游客

返回顶部