linux用户空间并口编程

本文介绍了如何在Linux环境下进行用户空间的并口编程,通过QEMU虚拟并口的重定向实现与PC设备交互。详细讲解了使用`/dev/port`直接访问IO端口以及利用`/dev/parport`设备的ioctl和write接口进行数据传输的方法,并提供了相应的测试代码示例。
摘要由CSDN通过智能技术生成

qemu虚拟并口重定向

qemu可以使用参数 “-parallel dev” 将虚拟并口重定向至PC上的设备。比如重定向至一个打开的伪终端: -parallel /dev/pts/2
或者重定向至PC上的文件: -parallel file:/path/to/file


以下测试使用qemu运行并将并口重定向至文件 pptest.txt

使用/dev/port

linux内核提供 /dev/port 设备以供用户空间以常规文件读写方式直接访问IO端口。比如要读取地址为100的16位端口,只需seek到文件的100字节处并读取2字节数据,写端口数据亦然。
以并口为例,以下代码发送一串字符至地址为0x378的并口:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

#define PORT_FILE	"/dev/port"
#define PORT_ADDR	0x378
#define PORT_DATA	(PORT_ADDR + 0)
#define PORT_STAT	(PORT_ADDR + 1)
#define PORT_CTRL	(PORT_ADDR + 2)

static int fd = -1;

static unsigned char io_read(unsigned int port)
{
   
	unsigned char data;
	lseek(fd, port, SEEK_SET);
	read(fd, &data, 1);
	return data;
}

static void io_write(unsigned int port, unsigned char data)
{
   
	lseek(fd, port, SEEK_SET);
	write(fd, &data, 1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值