LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1047|回复: 1

如果安装vmwaretools在编译时提示get_info不存在的error,看这个

[复制链接]
发表于 2008-9-30 05:05:21 | 显示全部楼层 |阅读模式
新手前两天编译linux内核,遇到较低级问题,在chinaunix,红联,以及刚能登陆的linuxsir发问,除linuxsir斑竹,无人踩。现在问题终于解决,将解决的一点小问题发到这里,答谢斑竹。

这两天终于经过重重折腾把vmwaretools装到fedora上了,现在虚拟机用起来终于比较爽了。
各功能似乎都齐全,鼠标能平滑过渡,定位准确,屏幕分辨率可以随窗口大小变换,可以在虚拟机和explorer间拖动文件,想不出还有什么其他的了。
btw,我用的是自己编译的2.6.26.5-49的核。虚拟机和vmwaretools都是vmware 6.0.5版本。

安装vmwaretools方法网上有,不赘述。
但我在编译安装的过程中提示错误,os.c中500多行,一个结构体中的成员get_info无法找到。vmmemctl这个驱动模块最终没有编译成功。
查了下源文件,不知从哪一个版本开始,那个结构体的get_info接口被一个新的read_proc接口取代了,故有此问题。

如果出现上述问题,解决办法如下(没出现的就不要瞎改了):
将vmwaretools的gzip包解开,在找到其lib/module/source/os.c文件,修改两处:

190多行的地方:
找到
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
static int os_proc_read(char *, char **, off_t, int);
static struct proc_dir_entry *global_proc_entry;

改为:
#if    LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)   //换成自己的内核版本号
static int os_proc_read(char *, char **, off_t, int, int *, void *);
static struct proc_dir_entry *global_proc_entry;
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
static int os_proc_read(char *, char **, off_t, int);
static struct proc_dir_entry *global_proc_entry;

500多行的地方:
找到
#if    LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
   global_proc_entry = create_proc_entry("vmmemctl", S_IFREG | S_IRUGO, NULL);
   if (global_proc_entry != NULL) {
      global_proc_entry->get_info = os_proc_read;
   }

改为:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)    //改成你自己的内核版本
   global_proc_entry = create_proc_entry("vmmemctl", S_IFREG | S_IRUGO, NULL);
   if (global_proc_entry != NULL) {
      global_proc_entry->read_proc = os_proc_read;
   }
#elif     LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
   global_proc_entry = create_proc_entry("vmmemctl", S_IFREG | S_IRUGO, NULL);
   if (global_proc_entry != NULL) {
      global_proc_entry->get_info = os_proc_read;
   }
发表于 2008-9-30 10:35:58 | 显示全部楼层
Mark之


.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表