カーネルモジュールのコンパイル

make-kpkg が云々とか紆余曲折があったんですがカーネルパケジが導入されてなくてもなんとかなることにようやく行きついた。
以下な Makefile があるので

obj-$(CONFIG_ASUS_OLED)		+= asus_oled.o

ググッてみると、-C でカーネルソースのディレクトリ、SUBDIRS にカレントディレクトリを渡してあげれば良いのかどうか。

$ make -C $(KERNELSRCDIR) M=`pwd` modules

を、イケた。これでとりあえず commit 作ることが可能な状態になったのか。

commit 作るの巻

今居る branch を確認して drivers/staging/asus_oled/asus_oled.c を add して commit を作成。メセジは以下なカンジででっち上げます。

    Fix checkpatch.pl issue.
    
    -printk(KERN_ERR, to pr_err(...
    
    Signed-off-by: Toshiaki Yamane <yamanetoshi@gmail.com>

で、パッチ取得。

$ mkdir ~/tmp/patch
$ git format-patch -o ~/tmp/patch origin

ちょっと設定盛り込み

ええと、gmail 経由で送付したいので以下を確認させて頂きつつ盛り込みを。

以下を導入すれば良いのかな

  • git-email
  • msmtp
  • ca-certificates
$ sudo apt-get install -fy git-email msmtp ca-certificates

で、上記ドキュメント参照しつつ ~/.msmtprc を書いて git config してやれば良いのかな。で、できたパッチをもっかい checkpatch.pl に吸わせてますね。

$ ./scripts/checkpatch.pl ~/tmp/patch/0001-Fix-checkpatch.pl-issue.patch 
total: 0 errors, 0 warnings, 23 lines checked

/home/rms/tmp/patch/0001-Fix-checkpatch.pl-issue.patch has no obvious style problems and is ready for submission.
$

で、早速ですが自分にパッチ送付してみます。

$ git send-email --to hoge@fuga ~/tmp/patch/0001-Fix-checkpatch.pl-issue.patch

~/.msmtprc の属性が 600 になってなくて送付失敗したのは秘密。

試験

ええと、gmail に送付したんですが mbox 形式に変換できん。とりあえず diff 取得して

$ git diff origin HEAD
diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c
index 510d796..f63c1d3 100644
--- a/drivers/staging/asus_oled/asus_oled.c
+++ b/drivers/staging/asus_oled/asus_oled.c
@@ -782,20 +782,20 @@ static int __init asus_oled_init(void)
        oled_class = class_create(THIS_MODULE, ASUS_OLED_UNDERSCORE_NAME);

        if (IS_ERR(oled_class)) {
-               printk(KERN_ERR "Error creating " ASUS_OLED_UNDERSCORE_NAME " class\n");
+               pr_err("Error creating " ASUS_OLED_UNDERSCORE_NAME " class\n");
                return PTR_ERR(oled_class);
        }

        retval = class_create_file(oled_class, &class_attr_version.attr);
        if (retval) {
-               printk(KERN_ERR "Error creating class version file\n");
+               pr_err("Error creating class version file\n");
                goto error;
        }

        retval = usb_register(&oled_driver);

        if (retval) {
-               printk(KERN_ERR "usb_register failed. Error number %d\n", retval);
+               pr_err("usb_register failed. Error number %d\n", retval);
                goto error;
        }

$

試験用の branch 作成して

$ git checkout master
Switched to branch master
$ git checkout -b testpatch
Switched to a new branch testpatch
$

て patch のアテ方が分からんなorz
てか、git apply というソレがあるの?

$ git apply ~/tmp/patch/0001-Fix-checkpatch.pl-issue.patc

お、できたできた。checkpatch.pl も make も無問題 (当たり前)。後始末をして元に戻ります。

$ git checkout drivers/staging/asus_oled/asus_oled.c
$ git checkout asus_oled
$ git branch -d testpatch

で、get_maintainer.pl するんですか。

$ ./scripts/get_maintainer.pl ~/tmp/patch/0001-Fix-checkpatch.pl-issue.patch
Jakub Schmidtke <sjakub@gmail.com> (odd fixer:STAGING - ASUS OLED)
Greg Kroah-Hartman <gregkh@linuxfoundation.org> (supporter:STAGING SUBSYSTEM,commit_signer:6/7=86%)
Pekka Paalanen <pq@iki.fi> (commit_signer:2/7=29%)
Toshiaki Yamane <yamanetoshi@gmail.com> (commit_signer:1/7=14%)
Peter Huewe <peterhuewe@gmx.de> (commit_signer:1/7=14%)
"Ken O'Brien" <kernel@kenobrien.org> (commit_signer:1/7=14%)
devel@driverdev.osuosl.org (open list:STAGING SUBSYSTEM)
linux-kernel@vger.kernel.org (open list)
$

む、TODO 見た方が良さげ。

$ cat drivers/staging/asus_oled/TODO
TODO:
        - checkpatch.pl cleanups
        - sparse fixes
        - audit the userspace interface
                - sysfs vs. char?
        - Documentation/ABI/ needs to be added
        - put the sample .txt files and README file somewhere.

Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
Cc: Jakub Schmidtke <sjakub@gmail.com>
$

つうことで以下かな。

$ git send-email --to greg@kroah.com --cc sjakub@gmail.com \
--cc linux-kernel@vger.kernel.org \
~/tmp/patch/0001-Fix-checkpatch.pl-issue.patc

投げますー

別途

整理してエントリ投入するかも。