当前位置: 技术问答>linux和unix
linux下向外设读写数据用什么函数?
来源: 互联网 发布时间:2015-12-29
本文导语: 就像dos下的outportb()和inportb()之类的,linux下能用吗?还是有什么别的函数代替?包含在哪个头文件下面? 高手们,多多指教啊 | linux所有设备都是文件,比如/dev/tty,读写设备也跟读写文件一...
就像dos下的outportb()和inportb()之类的,linux下能用吗?还是有什么别的函数代替?包含在哪个头文件下面?
高手们,多多指教啊
高手们,多多指教啊
|
linux所有设备都是文件,比如/dev/tty,读写设备也跟读写文件一样,用open/read/write
在内核里的具体实现会去调用底层的设备驱动。
但是也有直接写端口的函数inb和outb,比如下面的函数实现扬声器发声:
int speaker(unsigned int freq,unsigned int delay)
{ static int flag=0,bit;
if(flag==0)
{
flag=1;
iopl(3);
}
outb(0xb6,0x43);
outb((freq & 0xff),0x42);
outb((freq >> 8),0x42);
bit=inb(0x61);
outb(3 | bit,0x61);
usleep(10000*delay);
outb(0xfc | bit,0x61);
}
在内核里的具体实现会去调用底层的设备驱动。
但是也有直接写端口的函数inb和outb,比如下面的函数实现扬声器发声:
int speaker(unsigned int freq,unsigned int delay)
{ static int flag=0,bit;
if(flag==0)
{
flag=1;
iopl(3);
}
outb(0xb6,0x43);
outb((freq & 0xff),0x42);
outb((freq >> 8),0x42);
bit=inb(0x61);
outb(3 | bit,0x61);
usleep(10000*delay);
outb(0xfc | bit,0x61);
}
|
应该照样用write、read函数。只是用open打开的“与驱动对应的特殊文件”不同。
|
这是操作GPIO用到的吧?
我看操作GPIO的例子用到的方法都是outportb,但linux好像是直接操作地址,没什么函数吧?
write可以操作GPIO口吗?据说不是这样的!
我看操作GPIO的例子用到的方法都是outportb,但linux好像是直接操作地址,没什么函数吧?
write可以操作GPIO口吗?据说不是这样的!
|
用read/write,这是驱动实现的功能,
当然这2个功能不是每个驱动都会实现的,不是必需的
当然这2个功能不是每个驱动都会实现的,不是必需的