cjacker 发表于 2006-9-16 14:50:05

显卡配置工具

利用了Xorg提供的parser库,配置文件的写入和读出绝对准确,不会出错。

显示器名称的probe利用的是ddc,可能在一小部分显示器上不稳定,可以通过
export
NXC_DISABLE_PROBE_MONITOR=1来disable.

显卡probe走的是xinf机制,在Magic上可能probe不出来,有兴趣的同志自己改一下吧。

关键是utils.cpp和nxc.cpp,他们不依赖任何东西,是配置文件和几个特殊功能的抽象,可复用。里面抽象了一对get set接口。utils提供了显卡probe以及modeline计算的函数。


本程序不是为了拿大家当白老鼠,是因为我们都还没有一个好用的配置工具。

redhat的system-config-display用的是pyxf86config,调用的也是Xorg的parser库。

yast的配置工具也是。

所以,我们需要一个KDE的。

愿用就用,愿意怎么改就怎么改吧。

npcomet 发表于 2006-9-16 15:00:55

:-D:-D:-D cjacker出品必属精品

cjacker 发表于 2006-9-16 15:09:23

Re: 显卡配置工具

利用了Xorg提供的parser库,配置文件的写入和读出绝对准确,不会出错。

显示器名称的probe利用的是ddc,可能在一小部分显示器上不稳定,可以通过
export
NXC_DISABLE_PROBE_MONITOR=1来disable.

显卡probe走的是xinf机制,在Magic上可能probe不出来,有兴趣的同志自己改一下吧。(我会在有机会的时候push一下xorg,显卡驱动明明知道自己支持的硬件列表,为什么没有个接口直接告诉我们,这样probe就更加准确了)

关键是utils.cpp和nxc.cpp,他们不依赖任何东西,是配置文件和几个特殊功能的抽象,可复用。里面抽象了一对get set接口。utils提供了显卡probe以及modeline计算的函数。


本程序不是为了拿大家当白老鼠,是因为我们都还没有一个好用的配置工具。

redhat的system-config-display用的是pyxf86config,调用的也是Xorg的parser库。

yast的配置工具也是。

所以,我们需要一个KDE的。

愿用就用,愿意怎么改就怎么改吧。

tanhitzq 发表于 2006-9-18 21:07:28

我也来顶一下。

不过现在的ml2.0开发组好像不怎么在意这个东西。 :cry:

sejishikong 发表于 2006-9-18 21:29:04

在ml上编译需要改几处,而且无法正常运行.可能还有需要修改的地方.
等等看吧.

lanzinc 发表于 2006-9-19 10:37:14

很好,还没细看,因为打不开rpm的包,等会装个,rpm解包的工具。不知版权和使用上有什么要求。

dlmt 发表于 2006-9-19 17:50:31

希望各位大大能在除虫后发布到仓库,方便大家!

lanzinc 发表于 2006-9-19 22:19:47

To cjacker,
请教一下:
我编译的时候
utils.cpp的121行和192行有错误:
utils.cpp:121: 错误:‘PCI_FILL_CLASS’ 在此作用域中尚未声明
utils.cpp:192: 错误:‘struct pci_dev’ 没有名为 ‘device_class’ 的成员
我估计是include的pci.h有问题,我系统里的和你的不一样。
现在发现系统里有很多个pci.h,不知道你想引用的应该是哪个

我知道应该是Makefile.in里定义的
includedir = @includedir@
制定的@includedir@所具体表示的目录里面的pci.h
但我如何确定@includedir@应该取什么样的值?

象这种情况,我的编译器会用哪一个呢?
# locate pci.h | grep /pci.h
/usr/include/linux/pci.h
/usr/include/sys/pci.h
/usr/include/pci/pci.h
/usr/lib/klibc/include/linux/pci.h
/usr/lib/klibc/include/asm-i386/pci.h
/usr/lib/klibc/include/asm-generic/pci.h
/usr/src/linux-2.6.17-ARCH/include/linux/pci.h
/usr/src/linux-2.6.17-ARCH/include/config/blk/dev/idedma/pci.h
/usr/src/linux-2.6.17-ARCH/include/config/net/pci.h
/usr/src/linux-2.6.17-ARCH/include/config/hisax/hfc/pci.h
/usr/src/linux-2.6.17-ARCH/include/config/hisax/enternow/pci.h
/usr/src/linux-2.6.17-ARCH/include/config/pci.h
/usr/src/linux-2.6.17-ARCH/include/config/serial/8250/pci.h
/usr/src/linux-2.6.17-ARCH/include/asm-i386/pci.h
/usr/src/linux-2.6.17-ARCH/include/asm-generic/pci.h

lanzinc 发表于 2006-9-19 22:48:51

我从手册查看到,PCI_LIB里有定义:
int pci_fill_info(struct pci_dev *, int flags);
但没有常量 PCI_FILL_CLASS 的值

PCI_FILL_IDENT | PCI_FILL_CLASS | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES
其实就是个常数,这个常数如何确定?

lanzinc 发表于 2006-9-19 23:12:04

我的pci_dev的数据结构

struct pci_dev {
struct pci_dev *next;                        /* Next device in the chain */
u16 domain;                                /* PCI domain (host bridge) */
u8 bus, dev, func;                        /* Bus inside domain, device and function */

/* These fields are set by pci_fill_info() */
int known_fields;                        /* Set of info fields already known */
u16 vendor_id, device_id;                /* Identity of the device */
int irq;                                /* IRQ number */
pciaddr_t base_addr;                /* Base addresses */
pciaddr_t size;                        /* Region sizes */
pciaddr_t rom_base_addr;                /* Expansion ROM base address */
pciaddr_t rom_size;                        /* Expansion ROM size */

/* Fields used internally: */
struct pci_access *access;
struct pci_methods *methods;
u8 *cache;                                /* Cached config registers */
int cache_len;
int hdrtype;                                /* Cached low 7 bits of header type, -1 if unknown */
void *aux;                                /* Auxillary data */
};

你的 p->device_class
应该相当于我这里的
p->vendor_id, p->device_id(都是u16的数据类型)
的某种组合
但我不知道你那里device_class的长度和数据类型。

lanzinc 发表于 2006-9-19 23:25:48

下面是修改过的utils.cpp
页: [1]
查看完整版本: 显卡配置工具