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 定义) 返回了错误,后来在其中加上了调试信息,发现根本就没有进到函数中去。

64bit 编程

暂时把 ASM 去掉以后, 希望能在 AMD64 上能让 mac-port 跑起来, 结果是段错误, 查到估计跟指针有关系, 想到在 SourceForge 上还有好几个有关 AMD64 的 bug : 1385806, 1348818, 1423861, 也有人提供了相关的 [url=http://www.oook.cz/bsd/patch-mac-poi

Syndicate content