2011年8月22日 星期一

FreeBSD user space下直接存取I/O的方法

因為FreeBSD雖沒有io.h的inb/outb 可用, 但可利用此法存取I/O

static __inline u_int
inl(u_int port)
{
u_int data;
__asm __volatile("inl %%dx,%0" : "=a" (data) : "d" (port));
return (data);
}

static __inline void
outl(u_int port, u_int data)
{
__asm __volatile("outl %0,%%dx" : : "a" (data), "d" (port));


example:
main()
{
  int iofl;
  iofl = open("/dev/io",000);
  inl();
  outl();

  close(iofl);


}






沒有留言: