>>>Нужно написать прогу под Free BSD, которая напрямую обращается к "железным" портам
>>>ввода/вывода. Как это сделать? Именно под Free BSD! Если не трудно,
>>>бросьте, в качестве иллюстрации, маленький исходничек.
>>>Заранее благодарен.
>>
>>в свое время, когда у меня была подобная задача только под линукс
>>я перелопатил драйвер LPT порта и в parport_pc.h и parport.h нашел
>>вот такие функции inb() и outb(), читает и записывает данные соответствено.
>>Самые что ни на есть низкоуровневые функции доступа к железным портам,
>>почти ассемблер. Так вот может они есть и во ФриБСД. или
>>одноименные хедеры посмотри, может что нароешь.
>
>
>Лю-ю-ю-ди-и-и! Есть ли справедливость в этой жизни!? Я не могу слинковать прогу,
>обращающуюся к портам ввода/вывода под FreeBSD, через функции outp/inp! Такое впечатление,
>что в libc вообще нет таких функций! Я поставил gcc3 легче
>не стало. Может во фрюхе вообще с портами другая техника работы?
>Методика open/lseek/write/close тоже не помогает, а на меня начальство наседает, я
>просто в шоке! Помогите! Не дайте пропасть тупому программеру.
хмм... ссылку видел? поглядел чё там?
там пример программы, которая делает вывод в порты из пользовательского режима
она компилируется и работает
ну раз уж так трудно гулять по ссылкам, скопирую оттуда:
#include <stdio.h>
#include <fcntl.h>
#include <machine/cpufunc.h>
int main(int argc,char* argv[])
{
int val,port;
int fd;
if(argc<3){fprintf(stderr,"usage: %s port value\n",argv[0]); exit(1);}
if(sscanf(argv[1],"0x%x",&port) && sscanf(argv[2],"0x%x",&val))
{
fd=open("/dev/io",O_RDWR);
if(fd==-1){perror("open");exit(1);}
outb(port,val);
close(fd);
}
else
{fprintf(stderr,"port and value must be in hex format with 0x prefix\n"); exit(1);}
}
компилируем:
# gcc outb.c -o outb
запускаем:
# ./outb 0x3f2 0x10
лампочка дисковода загорелась
# ./outb 0x3f2 0x0
потухла