当我尝试在 Linux PC 上编译 Linux 2.6.38 内核时,我得到:
$ make defconfig
$ make
我得到:
ubuntu/ndiswrapper/iw_ndis.c:1966:2: error: unknown field ‘num_private’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1966:2: warning: initialization makes pointer from integer without a cast
ubuntu/ndiswrapper/iw_ndis.c:1967:2: error: unknown field ‘num_private_args’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1967:2: warning: excess elements in struct initializer
ubuntu/ndiswrapper/iw_ndis.c:1967:2: warning: (near initialization for ‘ndis_handler_def’)
ubuntu/ndiswrapper/iw_ndis.c:1970:2: error: unknown field ‘private’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1970:2: warning: initialization makes integer from pointer without a cast
ubuntu/ndiswrapper/iw_ndis.c:1970:2: error: initializer element is not computable at load time
ubuntu/ndiswrapper/iw_ndis.c:1970:2: error: (near initialization for ‘ndis_handler_def.num_standard’)
ubuntu/ndiswrapper/iw_ndis.c:1971:2: error: unknown field ‘private_args’ specified in initializer
ubuntu/ndiswrapper/iw_ndis.c:1971:26: 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
有什么想法如何解决这个问题以及为什么在默认配置下会发生这种情况?
答案1
今天,当我在 Oneiric 主机上提取内核源代码并尝试构建它时,我刚刚遇到了同样的错误。
您可以查看源文件以查明根本原因,但切入主题,WEXT_PRIV
未设置配置变量,因此不包含具有这些定义的包含文件。
添加这段代码的Ubuntu内核补丁并不完美。我的解决方法是在列表中找到一个无线设备,该设备会导致选择此配置项。我不关心设备是什么,因为我不打算使用驱动程序,但它必须在文件CONFIG_WEXT_PRIV
中设置.config
。
我从可用的选择中随机选择了 Cisco/Aironet 设备。我还没有测试内核,但它确实构建正确。