我需要支持旧硬件,用户区域库没有源代码,但我有设备驱动程序的源代码。因此,我必须重写设备驱动程序以支持IA-32模式用户陆地二进制文件。
对于ioctl调用,添加compat_ioctl以支持用户域中的IA-32。但是32位库会进行mmap调用,它只返回地址的一半(当然)。我的问题是,是否有任何类似于compat_ioctl vs ioctl的mmap支持?如果没有compat_mmap,如何支持IA-32用户登陆mmap?
感谢您的帮助!
答案 0 :(得分:3)
您无需担心。当您的f_op->mmap()
函数被调用时,它会传递一个struct vm_area_struct
,该arch_get_unmapped_area()
已经为调用任务正确定位。
(在x86-64上,TASK_SIZE
函数处理这个问题 - 它确保返回的区域小于TASK_SIZE
,而TIF_ADDR32
取决于任务是否具有{ {1}}标志设置)。