という組合せで,ipw3945.ko が compile できないという問題.つまり,
% sudo module-assistant build ipw3945-source
で,.deb ができないという問題.で,調べてみた.
/usr/src/modules/ipw3945/ipw3945.c: In function 'ipw_start_association': /usr/src/modules/ipw3945/ipw3945.c:4459: error: implicit declaration of function 'ieee80211_tx_frame'
という感じで remove ieee80211_tx_frame() という変更のため、文字通り ieee80211_tx_frame が無くなってしまったのが原因。
ということで
/usr/src/linux-source-2.6.25/net/ieee80211/ieee80211_tx.c
から
static struct ieee80211_txb *ieee80211_alloc_txb(...){...}
static int ieee80211_encrypt_fragment(...){...}
int ieee80211_tx_frame(...){...}
を ipw3945.c の適当な部分に copy。あと、
/usr/src/modules/ipw3945/Makefile
から
/usr/src/modules/ipw3945/snapshot/check_ieee80211_compat
という script で API の version を調べて -DIPW3945_COMPAT=1 とかしている(なってしまう)ようなので、
#if IPW3945_COMPAT >= 2 rc = ieee80211_tx_frame(priv->ieee, &priv->assoc_sequence_frame->u. frame, 0, priv->assoc_sequence_frame->len, 0); #else rc = ieee80211_tx_frame(priv->ieee, &priv->assoc_sequence_frame->u. frame, priv->assoc_sequence_frame-> len); #endif
の箇所で、引数の数がおかしいと言われてコケる。 ということで無理矢理 -DIPW3945_COMPAT=2 を渡す (Makefile を修正するか、check_ieee80211_compat で echo 2 する)。
以下、自分用メモ。
% cd /usr/src/modules/ipw3945/ % sudo make -f debian/rules KVERS=`uname -r` KSRC=/usr/src/linux-headers-`uname -r` KDREV=0.1 binary-modules
で原因を探る([myn:2007090900])。
Last-modified: Thu Oct 23 22:36:06 +0900 2008