本文介绍Qt读写sysfs。
在嵌入式Linux系统上开发Qt应用程序,经常会涉及到外设的控制,比如GPIO,PWM的控制,Linux环境下可以像操作文件一样操作它们,这通常会涉及到sysfs的读写。本文以读写GPIO为例,简要介绍下如何使用Qt读写sysfs。
1.写sysfs
Linux命令行指令(这里对gpio5写1):
bash
echo 1 > /sys/class/gpio/gpio5/value
在Qt应用程序中,可以启动一个进程来执行上述指令,使用QProcess提供的静态函数来完成,参考代码如下:
cpp
void writeIo(int pinNumber, int value)
{
QProcess::execute("echo " + QString::number(value) + " > /sys/class/gpio/gpio" + QString::number(pinNumber) + "/value");
}
2.读sysfs
Linux命令行指令:
bash
cat /sys/class/gpio/gpio5/value
参考代码如下:
cpp
int readIo(int pinNumber)
{
QProcess process;
int value = 0;
process.start("cat", QStringList() << "/sys/class/gpio/gpio" + QString::number(pinNumber) + "/value");
process.waitForFinished();
value = process.readAll().trimmed().toInt();
return value;
}
这里是阻塞的方式执行的。如果读时间较长,也可以绑定finish信号,参考代码如下:
cpp
QProcess *process = new QProcess(this);
connect(process, &QProcess::finished, this, &MainWindow::read);
void MainWindow::read(int exitCode, QProcess::ExitStatus exitStatus)
{
}
注意:
不同的嵌入式Linux环境下外设的sysfs的路径和操作方法可能不一样,需根据实际情况修改。
总结,本文介绍了Qt读写sysfs。