阅读:3051回复:28
高分求救:小问题???!!!
我在给一块PCI卡在linux下写驱动(生成链接库),
期望生成静态库,指令如下: gcc -c drive.c -o librarydrive.o gcc test.c -o test static -L. -ldrive ./test 然后报错:segmentation fault 请问哪位大虾知道是什么原因,可以切磋一下吗? 谢谢!!! |
|
|
沙发#
发布于:2003-03-09 11:23
库中有非法操作!
|
|
|
板凳#
发布于:2003-03-09 19:10
访问了非法内存。
|
|
地板#
发布于:2003-03-09 20:21
很多原因都可产生此错误的,跟踪一下!
|
|
|
地下室#
发布于:2003-03-10 17:13
longge
非常感谢 能说具体点吗 谢谢!!! 我的email:jackzheng2002@sohu.com |
|
|
5楼#
发布于:2003-03-10 17:23
请高手指教,在线急等!!!
|
|
|
6楼#
发布于:2003-03-11 21:38
我以前在编程中也经常碰到‘Segmentation fault\'这个错误,这个情况一般都发生在程序访问了一个“野指针”时发生的,如一个指针已经被释放,但是程序中还在继续使用造成的。根据我个人的经验,都是因为指针的错误使用造成的,解决办法其实也很简单,用\'gdb\'跟踪就可以发现具体在哪里出了问题。
|
|
|
7楼#
发布于:2003-03-12 03:51
我在给一块PCI卡在linux下写驱动(生成链接库), 这个到底是驱动还是应用程序啊? 如果在应用中引用os的代码,肯定会segment fault。 你gdb一下test,然后backtrace看问题出在什么地方。 |
|
|
8楼#
发布于:2003-03-12 11:10
应该也算是驱动了
因为我写的程序是:把Linux的命令传给PCI板, 就是生成一个共享库供用户使用。 我试一下 另请问: readb(),writeb()等要什么头文件? 谢谢! |
|
|
9楼#
发布于:2003-03-12 12:33
查内核代码。
|
|
|
10楼#
发布于:2003-03-12 19:00
编译的时候带上-g 参数,用gdb调试,应该能找到错误在代码的
哪里,大部分情况应该是非法指针的问题,如果是驱动,就这么两句话肯定是不行的,你好好看看驱动模块的Makefile是怎么写的! |
|
|
11楼#
发布于:2003-03-12 21:51
谢谢 楼上的兄弟
然我先试一下 。。。。 |
|
|
12楼#
发布于:2003-03-12 22:13
应该也算是驱动了 你的问题没说清楚, 很难回答问题在哪里, 因为你写了测试程序, 所以可能在测试程序里。 很难确定问题出在哪里。 关于你说的两个“函数”(实际上是两个宏, 看上去象函数), 在/LINUXSORUCE/INCLUDE/ASM/IO。H中, 通用目录是/usr/include/asm/io.h中 |
|
|
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 请几位兄弟帮助,等解决了定高分相送 也非常希望能结为朋友 |
|
|
14楼#
发布于:2003-03-13 19:24
用inb,outb, ..., inl, outl函数就可以访问到pci端口了,你在程序中要有下面这一行:
#include <sys/io.h> 在x86 PC上,如果你使用的是PCI机制1,那么PCI的端口是0xCF8, 0xCFC, 我以前写过这方面的代码,可以用。 Good Luck! |
|
|
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的原因, 修改后看看还会不会出现这个问题。 ;) ;) |
|
|
16楼#
发布于:2003-03-13 21:58
先给点分,表示感谢!
解决问题,一定另贴送分!! 这个世界热心人还是很多啊! 有其他高手也请发表意见,定送分。。 也想交个朋友。。。 等把这个项目做完,一定好好和你们聊聊,想认识一下。。 |
|
|
17楼#
发布于:2003-03-14 14:40
GDB -C CORE
然后 (gdb) where 看一下是哪儿的错! |
|
|
18楼#
发布于:2003-03-14 15:37
thank you
let me see .... [编辑 - 3/14/03 by zheng2002] |
|
|
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!!! |
|
|
上一页
下一页