免费注册 查看新帖 |

Chinaunix

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

我准备写一个类似于lspci的工具。遇到了一些问题,pci部分读值出错。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-24 10:33 |只看该作者 |倒序浏览
我准备写一个类似于lspci的工具。刚开始遇到了一些问题。清各位高手帮我看一下是怎么回事?
这个程序可以编译通过,可是运行时提示
segment fault

程序清单
#include <stdio.h>

#define PCI_DEV(BUS,DEV,FN) (\
        ((BUS & 0xFF )<< 16) | \
        ((DEV & 0x1F )<< 11) | \
        ((FN  & 0x7) << 8 ))

typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef char uint8_t;
#if 0
typedef struct {
        unsigned bus;
        unsigned dev;
        unsigned fun;
}device;
#endif

/*
  read pci value ,we first give the address to 0xcf8 port,then read value from 0xcfc port
*/

/*value is the pci configuration address , port is 0xcf8 or 0xcfc*/
static inline void outl(uint32_t value , uint16_t port)
{
        __asm__ __volatile__ ("outl %0 ,%w1" ::"a"(value),"Nd"(port));
}

/*port is oxcfc*/
static inline uint32_t inl(uint16_t port)
{
        uint32_t value;
        __asm__ __volatile__ ("inl %w1,%0":"=a"(value):"Nd"(port));
        return value ;
}

unsigned int pci_read_config32(unsigned dev, unsigned address)
{
        uint32_t addr;

        addr = dev | address;
        outl((addr|0x80000000)&(~0x3) , 0xcf;
        return inl(0xcfc);
}

void pci_write_config32()
{
       
}

int main()
{
        unsigned value ;
/*bus 2 device 0 ,function 0 is The eth0 , I read the first address 0 */
        value = pci_read_config32(PCI_DEV(2,0,0),0);
        printf("the value is : %d \n", value );
}

[ 本帖最后由 neilshi 于 2006-10-24 10:56 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-10-24 13:06 |只看该作者
没有人知道吗 ?

论坛徽章:
0
3 [报告]
发表于 2006-10-24 13:15 |只看该作者
我怎么觉得它不是直接读写pci而是读proc 或者 sysfs文件系统呢?

我不太确定.你怎么直接就io了?能直接io吗?

论坛徽章:
0
4 [报告]
发表于 2006-10-24 16:27 |只看该作者
原帖由 flw2 于 2006-10-24 13:15 发表
我怎么觉得它不是直接读写pci而是读proc 或者 sysfs文件系统呢?

我不太确定.你怎么直接就io了?能直接io吗?


应该不是在读sysfs了。
在windows里,我们有se这个工具。在linux下有lspci。lspci是什么原理呢?

论坛徽章:
0
5 [报告]
发表于 2006-10-25 11:05 |只看该作者
I need help . 谁能告诉我是什么问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP