LINUX.ORG.RU

Поддержка PCI в ядре 2.4


0

0

Система - RedHat Linux 9.
Начал писать драйвер под устройство на шине PCI.
Команда lspci выводит список устройств, то есть они в системе есть. 
Ядро также перекомпилировал, поддержка PCI там включена.

Почему тогда когда я в начале драйвера пишу:
#ifndef CONFIG_PCI
#error "needs PCI support"
#endif

у меня выскакивает именно эта ошибка:  "needs PCI support", то есть поддержка PCI отключена.
Ни одно устройство PCI не хочет находиться драйвером в принципе.
Подскажите, я что-то не учел?

Ответ на: комментарий от birdie

Да, перепробовал возможные варианты, ошибка та же. 
Список Header-ов:
linux/config.h
linux/kernel.h
linux/module.h
linux/pci.h

jencha
() автор топика
Ответ на: комментарий от anonymous

#define MODULE
#define __KERNEL__

#ifndef CONFIG_PCI
# error "needs PCI support"
#endif

#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <asm/pci.h>


#define PCIE_VENDOR_ID 0x1597
#define PCIE_DEVICE_ID 0x0301

int init_module (void)
{
	int i=0;
	u16 vend;
	printk("%d\n", pcibios_present()); /*резульат 0*/
	struct pci_dev *dev;
	dev= pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev); /*не найдено вообще ничего, даже если подставлять указанные выше значения*/
	pci_enable_device(dev);
	pci_read_config_word(dev, PCI_DEVICE_ID, &vend); 
	printk("%x \n", vend);
	return 0;
}

void cleanup_module(void)
{
	printk("good bye \n"); 
}
MODULE_LICENSE("GPL");

jencha
() автор топика
Ответ на: комментарий от jencha

Еще есть хорошая функция pci_present().

Кстати, похоже, что ты неправильно используешь pci_find_device.

Попробуй так :

struct pci_dev *dev, *last; last=NULL; dev= pci_find_device(PCI_ANY_ID, PCI_ANY_ID, last);

bon
()
Ответ на: комментарий от bon

Вместо значения PCI_ANY_ID подставлял реальные, не помогает. В принципе, ни одно из устройств PCI, определенных в системе не хочет находится. 
функця pci_present в системе не находится, поэтому использовал pcibios_present.

Загвоздка именно в поддержке PCI системой. Вроде бы она есть, но ее в то же время нет.

Makefile:

CC = gcc
MODFLAGS:= -O2 -Wall -DLINUX
PARAM = -I/lib/modules/$(shell uname -r)/build/include
hello.o: hello.c
	$(CC) $(MODFLAGS) $(PARAM) -c hello.c

jencha
() автор топика
Ответ на: комментарий от jencha

А у тебя точно есть катлог /lib/modules/$(shell uname -r)/build/include? Насколько я помню, это появилось в 2.6

tailgunner ★★★★★
()
Ответ на: комментарий от bon

Подставил путь к src, pci device определяется. Спасибо за советы.

jencha
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.