今天在将HPI驱动移植到QT中的时候发现,ioctl函数怎么都调用不到,网上各种查啊。
先是得到linux内核版本变化导致的ioctl函数被换成了unlocked_ioctl,然后发现在应用程序中调用ioctl还是不行,
然后查看ioctl-number.txt 修改魔数,换成了里面没有用到的‘x’。然后修改cmd的宏
#define Write_HPIC _IOW(HPI_MAGIC, 1 ,unsigned long)
再然后,修改ioctl传入的参数arg,
if(-1 == ioctl(fd, Write_HPIC, &device_arg))
最后又听说在c++里调用c系统函数前面要加:: 于是修改了所有的ioctl为
if(-1 == ::ioctl(fd, Write_HPIC, &device_arg))
还要加上extern “C” 关键字