x86_64

32 位的应用程序在 64 位内核中的 ioctl 问题

工作中的一个项目涉及到了内核模块和用户程序两部分,之间通过 ioctl() 进行通讯,现在需要 64 位(x86_64)的 Linux,所使用内核版本是固定的,2.6.9。

首先,直接编译运行以后,发现一个错误:kernel: ioctl32(${APP_NAME}:${PID}): Unknown cmd fd(6) cmd(c01844f01){00} arg(0816ed60) on ${file}。Google 了一下,明白这是由于用户程序是 32 位而内核是 64 位的缘故。问题的缘由是知道了,得开始找解决方法了。刚开始还以为是内核模块中自定义的 ioctl()(通过 struct file_operations 定义) 返回了错误,后来在其中加上了调试信息,发现根本就没有进到函数中去。

Syndicate content