内核中unlocked_ioctl与compat_ioctl的区别
时间: 2024-05-18 16:13:30 浏览: 145
linux3.16驱动unlocked_ioctl
在Linux内核中,ioctl系统调用可以用来与设备驱动程序进行通信。对于旧的设备驱动程序,可能实现了compat_ioctl函数来支持旧的32位应用程序。而对于新的设备驱动程序,则可以实现unlocked_ioctl函数来支持64位应用程序。
unlocked_ioctl函数是64位系统中新的ioctl处理函数。它取代了以前的ioctl函数,因为它可以处理更大的参数。unlocked_ioctl函数的第三个参数是一个unsigned long类型的指针,指向应用程序传递的参数。这个参数可以是一个指针,指向一个缓冲区,或者是一个整数。
而compat_ioctl函数则是为了向后兼容而存在的。它的参数类型与旧的ioctl函数相同,因此旧的32位应用程序仍然可以使用它们支持的ioctl命令。它的第三个参数是一个void类型的指针,指向应用程序传递的参数。需要注意的是,这个参数是一个指向32位数据的指针,因此在64位系统中需要进行类型转换。
因此,unlocked_ioctl和compat_ioctl的区别在于它们所支持的参数类型和传递方式不同,但都是用来处理ioctl命令的。
阅读全文