パッチ修行

先日投稿したソレはコメント付かず。スルーされているのか (ban されているのか)、あるいは無問題なのかが分からないけど次に着手してみることに。
今朝方 pull してみたら drivers/staging 配下なナニが増えているようなカンジ。

とりあえず

rtl8187se を checkpatch なフィルタかけてみたら出るわ出るわ。changelog を検討しつつエラーをどう修正するかな検討をしてみます。

  • r8180_dm.h
    • Converted "foo * bar" to "foo *bar"

う、printk を使ってるナニですが pr_fmt な定義を盛り込む関係上、確認を入れないとマズいことに気がつく。とりあえず printk 使ってるのは

  • r8180.h
    • なんかマクロ定義されてるんですがどうしよう
  • r8180_wx.c
  • r8180_core.c
  • r8185b_init.c
  • r8180_dm.c
  • ieee80211/ieee80211_crypt_ccmp.c
  • ieee80211/ieee80211_tx.c
  • ieee80211/dot11d.c
  • ieee80211/ieee80211_softmac.c
  • ieee80211/ieee80211_softmac_wx.c
  • ieee80211/ieee80211_wx.c
  • ieee80211/ieee80211_rx.c
  • ieee80211/ieee80211_crypt_tkip.c
  • ieee80211/ieee80211_crypt.c
  • ieee80211/ieee80211_module.c
  • ieee80211/ieee80211_crypt_wep.c
  • ieee80211/ieee80211.h

というカンジ。これ、以下で取り出せるのか

$ find rtl8187se/ -name "*.[ch]"|xargs grep printk|awk -F : '{print $1;}'|sort|uniq

ええと、列挙されたファイルについて何を include しているのを確認してみました。

$ for i in `find rtl8187se/ -name "*.[ch]"|xargs grep printk| \
awk -F : '{print $1;}'|sort|uniq` ; do echo; echo $i; \
grep -Hn 'include \"' $i; done
rtl8187se/ieee80211/dot11d.c
rtl8187se/ieee80211/dot11d.c:10:#include "dot11d.h"

rtl8187se/ieee80211/ieee80211_crypt.c
rtl8187se/ieee80211/ieee80211_crypt.c:21:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211_crypt_ccmp.c
rtl8187se/ieee80211/ieee80211_crypt_ccmp.c:24:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211_crypt_tkip.c
rtl8187se/ieee80211/ieee80211_crypt_tkip.c:23:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211_crypt_wep.c
rtl8187se/ieee80211/ieee80211_crypt_wep.c:20:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211.h
rtl8187se/ieee80211/ieee80211.h:404:#include "ieee80211_crypt.h"

rtl8187se/ieee80211/ieee80211_module.c
rtl8187se/ieee80211/ieee80211_module.c:55:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211_rx.c
rtl8187se/ieee80211/ieee80211_rx.c:45:#include "ieee80211.h"
rtl8187se/ieee80211/ieee80211_rx.c:46:#include "dot11d.h"

rtl8187se/ieee80211/ieee80211_softmac.c
rtl8187se/ieee80211/ieee80211_softmac.c:17:#include "ieee80211.h"
rtl8187se/ieee80211/ieee80211_softmac.c:25:#include "dot11d.h"

rtl8187se/ieee80211/ieee80211_softmac_wx.c
rtl8187se/ieee80211/ieee80211_softmac_wx.c:17:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211_tx.c
rtl8187se/ieee80211/ieee80211_tx.c:55:#include "ieee80211.h"

rtl8187se/ieee80211/ieee80211_wx.c
rtl8187se/ieee80211/ieee80211_wx.c:37:#include "ieee80211.h"

rtl8187se/r8180_core.c
rtl8187se/r8180_core.c:38:#include "r8180_hw.h"
rtl8187se/r8180_core.c:39:#include "r8180.h"
rtl8187se/r8180_core.c:40:#include "r8180_rtl8225.h" /* RTL8225 Radio frontend */
rtl8187se/r8180_core.c:41:#include "r8180_93cx6.h"   /* Card EEPROM */
rtl8187se/r8180_core.c:42:#include "r8180_wx.h"
rtl8187se/r8180_core.c:43:#include "r8180_dm.h"
rtl8187se/r8180_core.c:45:#include "ieee80211/dot11d.h"

rtl8187se/r8180_dm.c
rtl8187se/r8180_dm.c:1:#include "r8180_dm.h"
rtl8187se/r8180_dm.c:2:#include "r8180_hw.h"
rtl8187se/r8180_dm.c:3:#include "r8180_93cx6.h"

rtl8187se/r8180.h
rtl8187se/r8180.h:45:#include "ieee80211/ieee80211.h"

rtl8187se/r8180_wx.c
rtl8187se/r8180_wx.c:21:#include "r8180.h"
rtl8187se/r8180_wx.c:22:#include "r8180_hw.h"
rtl8187se/r8180_wx.c:24:#include "ieee80211/dot11d.h"

rtl8187se/r8185b_init.c
rtl8187se/r8185b_init.c:23:#include "r8180_hw.h"
rtl8187se/r8185b_init.c:24:#include "r8180.h"
rtl8187se/r8185b_init.c:25:#include "r8180_rtl8225.h" /* RTL8225 Radio frontend */
rtl8187se/r8185b_init.c:26:#include "r8180_93cx6.h"   /* Card EEPROM */
rtl8187se/r8185b_init.c:27:#include "r8180_wx.h"
rtl8187se/r8185b_init.c:28:#include "ieee80211/dot11d.h"

rtl8187se/r8187se.mod.c
$

ああ、面倒臭いな。例えば ieee80211/ieee80211.h だと三個所マクロの定義をしている。

#ifdef CONFIG_IEEE80211_DEBUG
extern u32 ieee80211_debug_level;
#define IEEE80211_DEBUG(level, fmt, args...) \
do { if (ieee80211_debug_level & (level)) \
  printk(KERN_DEBUG "ieee80211: %c %s " fmt, \
         in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0)
#else
#define IEEE80211_DEBUG(level, fmt, args...) do {} while (0)
#endif	/* CONFIG_IEEE80211_DEBUG */

あるいは以下。

#define IEEE80211_ERROR(f, a...) printk(KERN_ERR "ieee80211: " f, ## a)
#define IEEE80211_WARNING(f, a...) printk(KERN_WARNING "ieee80211: " f, ## a)

なんつーかとほほ状態。ieee80211 配下で grep してみるか

$ for i in "IEEE80211_DEBUG IEEE80211_ERROR IEEE80211_WARNING" ; do \
find drivers/staging/rtl8187se/ -name "*.[ch]"|xargs grep -Hn $i; done
drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c:362: #ifdef CONFIG_IEEE80211_DEBUG
drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c:366:                 IEEE80211_DEBUG_EAP("TX: IEEE 802.11 EAPOL frame: %s\n",

なんか違うの出てきたんですがorz

ちょっとマテ

これは規模てきにビギナーのレベルを超えとるぞ。ターゲットをもう少し修正規模の小さいものにする方向でハンドリ切ります。

ということで

修正対象なファイルの数を確認するナニをでっち上げた。

$ for i in * ; do if [ -d $i ] ; then echo -n "$i "; \
echo $(find $i -name "*.[ch]"| wc -l); fi; done|sort -n -k 2

素人なのでズルをご容赦頂ければ幸いです。まだ修行の身なもので。
で、修正対象なファイルが一つで修正行が一行なナニを発見。こっちで練習した方が良かったですね。
これはこれで初心者な方が修正規模の少なめなナニをチョイス可能なツールと言えますねw ちなみにこれで確認したところ、rtl8187se は 26、いちばん多いのは comedi で 291 と出ました。

今日は

色々な意味でへろへろなんですが、簡単すぎるので元気が残ってたらパッチ投げてみよ。

元気があるかどうか

分かりませんがすすめてみます。branch 作って

$ git checkout -b ccg

確認。

$ find drivers/staging/ccg/ -name "*.[ch]"|xargs ./scripts/checkpatch.pl --file --terse
drivers/staging/ccg/ccg.c:1146: WARNING: Prefer pr_warn(... to pr_warning(...
total: 0 errors, 1 warnings, 1299 lines checked
$

ええと、changelog としては

  • Added pr_fmt.
  • Converted pr_warning to pr_warn

になるのかな。しかしこれって色々な意味で本当に瑣末なアレな気がしてます。

盛り込んだ

のでコンパイルしてみたんですが

$ make -C ~/Documents/LinuxKernel/currentSourceTree/linux/ M=`pwd` modules
make: Entering directory `/home/rms/Documents/LinuxKernel/currentSourceTree/linux'
  Building modules, stage 2.
  MODPOST 0 modules

て何ですか。ls -l してみたら以下。

$ ls -lt
total 52
-rw-rw-r-- 1 rms rms     0 2012-07-14 21:38 Module.symvers
-rw-rw-r-- 1 rms rms     0 2012-07-14 21:38 modules.order
-rw-rw-r-- 1 rms rms 31302 2012-07-14 21:37 ccg.c
-rw-rw-r-- 1 rms rms  4462 2012-07-06 23:48 sysfs-class-ccg_usb
-rw-rw-r-- 1 rms rms   229 2012-07-06 23:48 TODO
-rw-rw-r-- 1 rms rms  1200 2012-07-06 23:48 Kconfig
-rw-rw-r-- 1 rms rms    93 2012-07-06 23:48 Makefile
$

よほどどーでも良いアレなのかな。ちょっと Makefile を確認。

g_ccg-y				:= ccg.o
ccflags-y			+= -Idrivers/usb/gadget

obj-$(CONFIG_USB_G_CCG)		+= g_ccg.o

.config 見てみたら上記なナニが皆無。

ググる

って

何だろ。てか、どうやらこーゆーあたりでじっくりナニモノかを理解する時間を確保しないと駄目なのだろうな、という事を理解しつつあります。
今日はちょい限界気味。ゆっくり時間をとって確認します。