QtSerialPort with no libudev
-
Sorry I neglected to add the link. http://qt-project.org/forums/viewthread/39304/
-
Checking of libudev existence (libudev-dev) does automatically when you try to open the qtserialport.pro file from the root directory of the QtSerialPort sources. In this case triggered the packagesExist script in "serialport-lib.pri" file:
@
unix {
packagesExist(libudev) {
CONFIG += link_pkgconfig
DEFINES += LINK_LIBUDEV
PKGCONFIG += libudev
}
}
@If your target's rootfs has libudev, then the LINK_LIBUDEV macro will be defined. In this case your QtSerialPort will be explicitly linked with the libudev library. Otherwise, your QtSerialPort will be trying to search and resolve the libudev in runtime.
So, in any case if your target contains the libusev.so, then QtSerialPort always will use libudev (has no matter, is triggered the LINK_LIBUDEV macro or not in compile time).
So, if the libudev doesn't contains physically on your target and QtSerialPort was compiled without LINK_LIBUDEV macro, then will be used SysFs in runtime. Otherwise your application even does not startup, if the LINK_LIBUDEV macro was defined in compile time.
Thus, it is enough to comments out the code "/* unix {...} */" (see above snippet) in the serialport-lib.pri file and to rebuild QtSerialPort. In this case QtSerialPort always will try to resolve libudev in runtime and if no libudev present then SysFs will be used.
In case if you want even do not resolve libudev in runtime, then in addition you should to comments out the availablePortsByUdev() function in "qserialportinfo_unix.cpp" file:
@
QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
{
bool ok;QList<QSerialPortInfo> serialPortInfoList; /// << COMMENTS OUT THIS
#ifdef Q_OS_LINUX
/// if (!ok) <<< AND COMMENTS OUT THIS
serialPortInfoList = availablePortsBySysfs(ok);
#endifif (!ok) serialPortInfoList = availablePortsByFiltersOfDevices(ok); return serialPortInfoList;
}
@and to rebuild QtSerialPort.