项目场景:
简单记录一下,接手别人项目后重新移植内核时网络协议栈报错的问题。
问题描述
当设备连接网络后,系统莫名奇妙疯狂打印:
tnk_tcp_prepare: skb->dev is NULL
tnk_tcp_prepare: skb->dev is NULL
tnk_tcp_prepare: skb->dev is NULL
原因分析:
移植旧内核配置文件内容,关于网络部分配置大概如下:
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_CFG80211=y
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_REG_DEBUG is not set
# CONFIG_CFG80211_CERTIFICATION_ONUS is not set
CONFIG_CFG80211_DEFAULT_PS=y
# CONFIG_CFG80211_DEBUGFS is not set
# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_CFG80211_WEXT=y
# CONFIG_LIB80211 is not set
# CONFIG_CFG80211_ALLOW_RECONNECT is not set
CONFIG_MAC80211=y
CONFIG_MAC80211_HAS_RC=y
# CONFIG_MAC80211_RC_PID is not set
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_MINSTREL_HT=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_MAC80211_MESH=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
其中不难发现,wifi模块有些功能已打开,而有些功能关闭了。可以确定该模块裁剪的不够干净,所以当网络尝试测试相关模块时发现设备不存在,因此就报了一些网络协议栈设备不存在的问题。
解决方案:
为了解决这问题,最好的做法还是抛开旧内核的配置,根据产品要求重新裁剪内核较为合适。
具体实现方法,可参考【海思内核裁减方法】