zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3288回复: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
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-19 12:28
欢迎回复
分多的是,只要你有本事拿 ;)
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分
板凳#
发布于:2003-03-18 22:12
什么库无所谓,只要是binary code就达到目的了。但是注意别让别人反汇编出来。

一般怎么做呢
我不知道怎么防止别人反汇编啊
使用连接库应该没问题吧
要是被人反汇编就麻烦了
我玩单片机时,都是我反汇编别人的
不要这次让别人。。。
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分
地板#
发布于:2003-03-18 21:52
什么库无所谓,只要是binary code就达到目的了。但是注意别让别人反汇编出来。
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
Pharos
驱动牛犊
驱动牛犊
  • 注册日期2001-08-13
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-18 12:43
不给source code,给binary code.
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-18 11:51
快做完了

再问一个问题:
一般在Linux下搞开发的话,不可能把驱动代码给用户的
那么是不是给:静态连接库和动态连接库呢
请教一下
谢谢
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-15 09:30
这个问题我以前也有想过,如果你想要使用iopl()指令的话,就必需具有root权限,这一点是无法避免的。其实这一点很好理解,因为在linux下,普通用户是不被允许访问I/O的。


另外还有另外一个方法来访问端口,它不需要root权限,就是用read/write来访问/dev/port这个设备文件,这个设备文件在默认情况下只有root可以读/写(其实也就是只允许root访问I/O),你可以先把它的权限改一下,然后再用非root的身份访问。不过这种方法不被推荐,因为它破坏了linux的系统规则,有可能对系统造成很大的危害。
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-14 22:41
Pharos,
你好!
   我在google上查到了是这个问题。
非常感谢你啊
请你和hometown去另贴领分吧
但是我还是有个问题:  
  iopl()存在访问权限的问题。
我想在用户权限下访问,该怎么办
不可能都在root权限下访问啊
是不是?


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分
8楼#
发布于:2003-03-14 18:55
zheng2002,

在你程序的入口处,如main()函数中,加入
iopl(3);
看看\"Segmentation fault\"错误,会不会消除。

Good Luck!
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-14 17:13
waiting online.....
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分
10楼#
发布于: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
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于: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
tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
12楼#
发布于: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分
13楼#
发布于:2003-03-13 21:58
先给点分,表示感谢!
解决问题,一定另贴送分!!
这个世界热心人还是很多啊!

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

等把这个项目做完,一定好好和你们聊聊,想认识一下。。
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分
14楼#
发布于: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.
Pharos
驱动牛犊
驱动牛犊
  • 注册日期2001-08-13
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-13 19:24
用inb,outb, ..., inl, outl函数就可以访问到pci端口了,你在程序中要有下面这一行:
#include <sys/io.h>

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

Good Luck!
没有我,你怎么办,你的泪水谁为你擦干; 谁为你打伞,安慰你心寒,失眠的夜你最怕孤单。
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于: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
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于: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分
18楼#
发布于:2003-03-12 21:51
谢谢 楼上的兄弟
然我先试一下
。。。。
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-03-12 19:00
编译的时候带上-g 参数,用gdb调试,应该能找到错误在代码的
哪里,大部分情况应该是非法指针的问题,如果是驱动,就这么两句话肯定是不行的,你好好看看驱动模块的Makefile是怎么写的!
除了记忆什么都带不走; 除了足迹什么都留不下。
上一页
游客

返回顶部