如何在x86_64上支持IA-32 for mmap?

时间:2013-02-26 21:55:24

标签: c linux-kernel linux-device-driver device-driver

我需要支持旧硬件,用户区域库没有源代码,但我有设备驱动程序的源代码。因此,我必须重写设备驱动程序以支持IA-32模式用户陆地二进制文件。

对于ioctl调用,添加compat_ioctl以支持用户域中的IA-32。但是32位库会进行mmap调用,它只返回地址的一半(当然)。我的问题是,是否有任何类似于compat_ioctl vs ioctl的mmap支持?如果没有compat_mmap,如何支持IA-32用户登陆mmap?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您无需担心。当您的f_op->mmap()函数被调用时,它会传递一个struct vm_area_struct,该arch_get_unmapped_area()已经为调用任务正确定位。

(在x86-64上,TASK_SIZE函数处理这个问题 - 它确保返回的区域小于TASK_SIZE,而TIF_ADDR32取决于任务是否具有{ {1}}标志设置)。