Chinaunix首页 | 论坛 | 博客
  • 博客访问: 692705
  • 博文数量: 33
  • 博客积分: 10032
  • 博客等级: 上将
  • 技术积分: 1383
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-22 18:53
文章分类

全部博文(33)

文章存档

2011年(4)

2010年(10)

2009年(14)

2008年(5)

我的朋友

分类:

2008-08-11 20:06:13

最近在Solaris上成功编译了pciutils,想试试的朋友可以从下面的地址下载:
http://blogs.sun.com/mishuang/resource/lspci
http://blogs.sun.com/mishuang/resource/setpci

http://blogs.sun.com/shuang/resource/SUNWpciutils.tar



一直觉得PCI很神秘,看了pciutils的代码和PCI Local Bus Specification后,对PCI稍微有了点了解,我觉得pciutils有两个关键的函数,一个conf1_read,另外一个是conf1_write。这两个函数完全是根据PCI Local Bus Specification下面这一节编写的:
3.2.2.3.2. Software Generation of Configuration Transactions

conf1_read(struct pci_dev *d, int pos, byte *buf, int len)
{
    ...
    outl(0x80000000 | ((d->bus & 0xff) << 16) | (PCI_DEVFN(d->dev, d->func) << 8) | (pos&~3), 0xcf8);
    ...
}

bit31:   enable
bit16-bit23:   Bus Number
bit11-bit15:   Device Number
bit8-bit10:   Function Number
bit2-bit7:   Register Number
将这些位在I/O Port 0xcf8设定好之后,就可以从I/O port 0xcfc读出相应的值了。

当然进行这些操作之前需要改变I/O privilege level,
SunOS:   sysi86(SI86V86, V86SC_IOPL, PS_IOPL)
Linux:   iopl(3)

阅读(1749) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-02-16 15:25:58

您好,我现在要在opensolaris和solaris 10上面写一个应用程序获取PCI设备的DID,VID;但是编译的时候提示我“outl,inw找不到”,这两个函数应该包含在哪个头文件里面啊?谢谢啦!

mishuang2008-08-20 13:54:07

Allen, 请收邮件! 如有需要自行编译的朋友,可以参考下面的步骤: 1. Comment Line 121 of file /usr/include/arpa/nameser_compat.h /* error "Undefined or invalid BYTE_ORDER"; */ 2. Add an object i386-ports in Line 6 of file pciutils-3.0.0/lib/Makefile OBJS=init access generic dump names filter names-hash names-parse names-net names-cache params i386-ports 3. compile # export CC=gcc # make

chinaunix网友2008-08-19 06:12:34

你好, 从google上搜到你的文章,所以冒昧留言。 我现在需要在OpenSolaris上编译pciutils,但我对GNU tool chain不熟,能否请教一下如何编译。 如果有回复,麻烦email到allen.virt@gmail.com. 谢谢!