Harbour, спасибо.
Цитата(Harbour @ Jan 5 2008, 13:15)

1. читать LDD (http://www.xml.com/ldd/chapter/book/ch15.html)
2. читать linux/Documentation/pci.txt
3. изучить любой драйвер pci устройства, начать можно с drivers/char/*.c
Читал и читаю. существеней не ch15 а ch9 и ch12.
Цитата(Harbour @ Jan 5 2008, 13:15)

В ОС никакой каши быть не может - каша обычно у человека в голове. Весь api и способ его применения четко описан в вышеприведенных источниках.
Я и говорю что запутался. Вот насчет четкости как раз и спорно.
Если для гуру многое кажется очевидным и предельно простым, но из мира Windows
это ещ надо привыкнуть.
Цитата(Harbour @ Jan 5 2008, 13:15)

pciutils никогда не был примером написания драйверов - это утилита для low-level pci management.
Понял, Только почему пример написания драйверов?
Я спрашивал о примере АРИ.
Цитата(Harbour @ Jan 5 2008, 13:15)

Есть разные варианты работы с устройствами из UP - shared memory/ioctl/proc-файлы/какой-нить kernel thread/ и даже в некоторых случаях /dev/mem - выбирают исходя из задачи.
pci api принципиально не менялся в линуксе начиная с 2.0.x ядер (1994 год)
Вот это часто так в Линуксе. Ответ только говорит о том что отвечающий владеет вопросом.
Но что бы понять этот ответ нужно столько узнать,что уже и нет необходимости в вопросе :-)
По моему, Ваши слова подверждают что я выбрал корректный путь:
Тем или иным способом вытаскиваю адреса PCI BARs (поскольку система "фиксирована", можно самым простым способом).
pci_mem_fd = open ("/dev/mem", 2); ..R/W
далее-
hsc_data_mem = mmap(NULL, 0x100000, PROT_READ | PROT_WRITE, MAP_SHARED , pci_mem_fd, 0x9FF00000);
где 0x9FF00000 - адрес бара из /proc/bus.....
затем уже
reg_data = ioread32(hsc_data_mem); или ioread32_rep и iowrite32(reg_data, hsc_data_mem);
- "по мере необходимости".
Поскольку больше ничего не требуется (на шине сидит только одно устройство),
НЕ ОБЯЗЯТЕЛЬНО писать полнофункциональный драйвер устройства?
Конечно драйвер шины в системе есть.
корректно ли
u32 *hsc_data_mem;
reg_data = ioread32(hsc_data_mem)
hsc_data_mem++; // !!!
reg_data = ioread32(hsc_data_mem)
Это будет работать?
Пока мне не ясно что нужно делать в ситуации, как говорят маны:
" It is unspecified whether changes made to the file after the mmap() call are
visible in the mapped region" - это для MAP_PRIVATE
и " The file may not actually be updated until msync(2) or munmap(2) is called." для MAP_SHARED.
Цитата(Harbour @ Jan 5 2008, 13:15)

P.S. Если с чтением доков совсем плохо - можно посмотреть в сторону uio интерфейса, присутствует в последних 2.6 ядрах
???
А что для uio все на поверхности?
Цитата(Harbour @ Jan 5 2008, 13:15)

P.P.S. Для совсем ленивых уже год как можно бесплатно заказать написание любого linux драйвера для любой железяки в мире (USB/PCI/и т.д.) см. нпример
http://kerneltrap.org/node/7636 
???