编译 Linux 内核出错=。=

2015-08-21 00:32:17 +08:00
 zro

最近在编译 MT7620 有关内核的时候,按默认设置编译都没什么问题,然后在menuconfig里编译多个包就出错了,换了好多关键字 Google 都没啥,只好发帖求大侠指点下迷津。。。谢谢 XD

CHK include/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC net/bridge/br_netfilter.o
net/bridge/br_netfilter.c: In function 'br_nf_pre_routing_finish_bridge':
net/bridge/br_netfilter.c:287: error: too few arguments to function
make[4]: *** [net/bridge/br_netfilter.o] Error 1
make[3]: *** [net/bridge] Error 2
make[2]: *** [net] Error 2
make[2]: Leaving directory '/home/XXXX/mt7620/linux-2.6.36.x'
make[1]: *** [linux] Error 1
make[1]: *** Leaving directory '/home/XXXX/mt7620'
make: *** [kernel] Error 2

编译的包是在:
[*] Networking support --->
Networking options --->
[*] Network packet filtering framework (Netfilter ) --->
[*] Advanced netfilter configuration
[*] Bridged IP/ARP packets filtering

问题应该就出在 net/bridge/br_netfilter.c ,不知是哪的原因生成不了 br_netfilter.o 文件,不编译 Bridged IP/ARP packets filtering 这项就一路顺畅~~~=. =

PS:爛移動寬帶,點了“發佈主題”,網頁顯示“頁面載入出錯”, V2EX 連接不上了,艹
HTTPS 也一樣。

2070 次点击
所在节点    问与答
12 条回复
Andiry
2015-08-21 00:38:34 +08:00
原因不是很清楚么,连问题出在哪一行都告诉你了
zro
2015-08-21 01:02:13 +08:00
@Andiry 谢谢回复,那地方有看,但没看出有什么问题,原谅我是 linux 小白:)
部分源码如下:
line 280: `} else if (dst ->neighbour ) {`
line 281: `/* the neighbour function below overwrites the complete`
line 282: `* MAC header, so we save the Ethernet source address and`
line 283: `protocol numer. */`
line 284: `skb_copy_from_linear_data_offset (skb, -(ETH_HLEN-ETH_ALEN ), SKB->nf_bridge->data, ETH_HLEN-ETH_ALEN );`
line 285: `/* tell br_dev_xmit to continue with forwarding */`
line 286: `nf_bridge->mask |= BRNF_BRIDGED_DNAT;`
line 287: `return dst -> neighbour -> output (skb );`

源码一点没改动过,是不是要打什么 PATCH 之类的?囧 rz
zro
2015-08-21 01:06:11 +08:00
line 288: }
请忽略楼上的`符号,以为”回复“这里也可以直接用 markdown 的语法
HentaiMew
2015-08-21 01:43:07 +08:00
什么编译器?
zro
2015-08-21 01:58:16 +08:00
@HentaiMew 是说这个吗 -->"/opt/buildroot-gcc342/"??
Andiry
2015-08-21 02:06:31 +08:00
@zro 很显然 dst -> neighbour -> output (skb ) 这一句的 output 原型与这里的调用不符。实际的 output 函数不止接受一个 skb 参数。至于 output 具体是指向什么函数这里看不出来。

我看了一下最新的 kernel 没有 br_netfilter.c ,所以你需要自己去看这里 output 指向什么函数。
zro
2015-08-21 02:14:07 +08:00
@Andiry 非常感谢~该文件下载地址: http://1000eb.com/1fjm5
对编程语言不太懂呢,根本不明白上面是什么意思:(
Andiry
2015-08-21 03:57:53 +08:00
@zro 你发的文件被公司防火墙拦掉了。我搜了一下,应该改成
return dst -> neighbour -> output (dst -> neighbour , skb );
adrianzhang
2015-08-21 09:19:10 +08:00
编译选项里看看有关网桥的部分,可能有些东西没打勾,或者多打了勾而本地没有。
invite
2015-08-21 10:02:01 +08:00
我就进来学习一下。
kiritoalex
2015-08-21 18:38:45 +08:00
是不是依赖没弄好,我说的是 Linux 内核选项,你用 /搜一下看看
zro
2015-08-21 19:22:10 +08:00
@kiritoalex @adrianzhang 按 8 楼 @Andiry 的方法修改可以编译了,虽然有几处 warning ,不过还是非常感谢 XD

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/214695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX