使用iw_ndis.c进行内核编译错误

我有一个hp pavilion dm3t与intel高清显卡运行ubuntu 10.10 64位。 我正在尝试根据此编译和安装修补内核,
https://launchpad.net/~kamalmostafa/+archive/linux-kamal-mjgbacklight

所以我从这里下载了tarball(链接到上面的页面): http : //kernel.ubuntu.com/git?p = card /ubuntu-maverick.git; a = shortlog; h = refs / heads / mjg-背光

我解压缩到一个目录,进入目录并执行:

make defconfig 

我不确定这是不是我应该做的但是它成功了,所以我做了:

 make 

这似乎工作正常,直到它给出这些错误:

 ubuntu/ndiswrapper/iw_ndis.c:1966: error: unknown field 'num_private' specified in initializer ubuntu/ndiswrapper/iw_ndis.c:1966: warning: initialization makes pointer from integer without a cast ubuntu/ndiswrapper/iw_ndis.c:1967: error: unknown field 'num_private_args' specified in initializer ubuntu/ndiswrapper/iw_ndis.c:1967: warning: excess elements in struct initializer ubuntu/ndiswrapper/iw_ndis.c:1967: warning: (near initialization for 'ndis_handler_def') ubuntu/ndiswrapper/iw_ndis.c:1970: error: unknown field 'private' specified in initializer ubuntu/ndiswrapper/iw_ndis.c:1970: warning: initialization makes integer from pointer without a cast ubuntu/ndiswrapper/iw_ndis.c:1970: error: initializer element is not computable at load time ubuntu/ndiswrapper/iw_ndis.c:1970: error: (near initialization for 'ndis_handler_def.num_standard') ubuntu/ndiswrapper/iw_ndis.c:1971: error: unknown field 'private_args' specified in initializer ubuntu/ndiswrapper/iw_ndis.c:1971: warning: initialization from incompatible pointer type make[2]: *** [ubuntu/ndiswrapper/iw_ndis.o] Error 1 make[1]: *** [ubuntu/ndiswrapper] Error 2 make: *** [ubuntu] Error 2 

如何成功编译和安装此内核? 我是新手,非常感谢任何帮助。

考虑到您关于笔记本电脑背光的最后一个问题,您无需编译内核即可使用该补丁。 您只需将PPA添加到系统的软件源中即可。

htorque解释了如何继续他的评论 :

只需将PPA添加到您的系统即可。 启动终端并运行sudo apt-add-repository ppa:kamalmostafa/linux-kamal-mjgbacklight ,然后运行sudo apt-get update ,最后使用sudo apt-get upgrade运行sudo apt-get upgrade 。 正如您可以在上面的PPA链接中看到的那样,您可能需要将acpi_backlight=vendor添加到新内核的grub条目的linux行中(请参阅本答案中有关如何在引导期间向内核添加参数的注释) )。

整个过程已在您链接的页面底部详细说明。

num_private和num_private_args字段仅在内核编译期间定义CONFIG_WEXT_PRIV时定义,因此您需要在此处将#ifdef / #endif行添加到iw_ndis.c:

 const struct iw_handler_def ndis_handler_def = { .num_standard = sizeof(ndis_handler) / sizeof(ndis_handler[0]), #ifdef CONFIG_WEXT_PRIV .num_private = sizeof(priv_handler) / sizeof(priv_handler[0]), .num_private_args = sizeof(priv_args) / sizeof(priv_args[0]), #endif .standard = (iw_handler *)ndis_handler, #ifdef CONFIG_WEXT_PRIV .private = (iw_handler *)priv_handler, .private_args = (struct iw_priv_args *)priv_args, #endif .get_wireless_stats = get_iw_stats, }; 

然而,并非全部。 然后你将得到一个编译wrapndis.c的错误, 所以你需要找到带有以下if语句的行(在大约1820行)并将其包装在#ifdef / #endif中。

#ifdef CONFIG_WEXT_PRIV
if(wnd-> physical_medium == NdisPhysicalMediumWirelessLan){net_dev-> wireless_handlers =&ndis_handler_def; }#万一

应该补充一点,我正在尝试自己编译,并没有测试ndiswrapper这样做YMMV。

对于wrapndis的上面是错误的,似乎在(我的)内核配置中没有设置CONFIG_WIRELESS_EXT。 如果是那时我不应该得到这个错误。