(The Linux)   Kernel Module Programming ...for  Dummies   #1 Takayuki Horimoto opentaka[at]tsukuba-linux.org http://www.tsukuba-linux.org/
$whoami Takayuki Horimoto
堀本 貴幸  (opentaka)
Gentoo Linux geek GMN-ja ( もう死んだ ...)
CJK team  目指して bug を潰します Open Source Software != Free Software
Agenda What is a  kernel module?
lsmod ,  insmod   and  modprobe
“ hello world ” with  printk()
Creating a  Makefile
Introduction to  MODULE_*()
Summary
What is a kernel module? カーネルに load/unload できるバイナリ
“ プラグイン ”のようなもの
機能やドライバを追加できるようになる。
カーネルを config する時に <M> としたもの。
eg. ipv6, ipfilter, usblp (USB printer), usb-storage
lsmod ,  insmod  and  modprobe $  cat /proc/modules loadされているモジュールの一覧。
$  lsmod で人間が読めるようになる pppoe 9320 2 - Live 0xc0c4d000 0xf8969000 pppox 5226 1 pppoe, Live 0xc0c4b000 0xf896d000 ppp_generic 15328 6 pppoe,pppox, Live 0xc0c47000 0xf8962000 slhc 7802 1 ppp_generic, Live 0xc0c45000 0xf8966000 #  insmod /lib/.../ppp_generic.ko モジュールをロードできる。
File Locations モジュールは一体どこに潜んでいるか ? /lib{.,32,64}/modules/<kernel>/kernel/<categ1>/<categ2>/<name>.ko 例 :  /lib/modules/2.6.29-gentoo-r5/kernel/drivers/net/s2io.ko #  modprobe  ppppppppppppoe  (p..oe のモジュールをロードする ) /etc/modprobe.conf alias  <hogehoge(generic identifier)>  p....oe p...oe.ko という意味 /lib/modules/<kernel>/modules.dep 依存関係 p...oe の前に ppppppppp が必要等な場合、 p.. をロードする
# 1 Hello World
#include < linux/module.h > #include < linux/kernel.h > int init_module(void){ printk(KERN_INFO &quot;Hello World\n&quot;); return 0; } void cleanup_module(void){ printk(KERN_INFO &quot;..dying\n&quot;); } helloworld.c
printk() printk(KERN_INFO  “ お腹空いた \n ” ); printk(KERN_ WARNING   “ もうだめ ...\n ” );
printk() printf() とほぼ同じ。 printf() : “ printf() は画面に文字を表示させます。” “ ただしワープロソフトで書かないでください ” –  やさしいなんとかの本
printk() printk( KERN_INFO  “ お腹空いた \n”); printk( KERN_WARNING  “ もうだめ ...\n”); linux/kernel.h[L91]: #define  KERN_EMERG  &quot;<0>&quot;  /* system is unusable  */ #define  KERN_ALERT  &quot;<1>&quot;  /* action must be taken immediately  */ #define  KERN_CRIT   &quot;<2>&quot;  /* critical conditions  */ #define  KERN_ERR  &quot;<3>&quot;  /* error conditions  */ #define  KERN_WARNING  &quot;<4>&quot;  /* warning conditions  */ #define  KERN_NOTICE  &quot;<5>&quot;  /* normal but significant condition  */ #define  KERN_INFO  &quot;<6>&quot;  /* informational  */ #define  KERN_DEBUG  &quot;<7>&quot;  /* debug-level messages  */

カーネルモジュールプログラミング超入門 #1(仮)

  • 1.
    (The Linux) Kernel Module Programming ...for Dummies #1 Takayuki Horimoto opentaka[at]tsukuba-linux.org http://www.tsukuba-linux.org/
  • 2.
  • 3.
    堀本 貴幸 (opentaka)
  • 4.
    Gentoo Linux geekGMN-ja ( もう死んだ ...)
  • 5.
    CJK team 目指して bug を潰します Open Source Software != Free Software
  • 6.
    Agenda What isa kernel module?
  • 7.
    lsmod , insmod and modprobe
  • 8.
    “ hello world” with printk()
  • 9.
    Creating a Makefile
  • 10.
    Introduction to MODULE_*()
  • 11.
  • 12.
    What is akernel module? カーネルに load/unload できるバイナリ
  • 13.
  • 14.
  • 15.
  • 16.
    eg. ipv6, ipfilter,usblp (USB printer), usb-storage
  • 17.
    lsmod , insmod and modprobe $ cat /proc/modules loadされているモジュールの一覧。
  • 18.
    $ lsmodで人間が読めるようになる pppoe 9320 2 - Live 0xc0c4d000 0xf8969000 pppox 5226 1 pppoe, Live 0xc0c4b000 0xf896d000 ppp_generic 15328 6 pppoe,pppox, Live 0xc0c47000 0xf8962000 slhc 7802 1 ppp_generic, Live 0xc0c45000 0xf8966000 # insmod /lib/.../ppp_generic.ko モジュールをロードできる。
  • 19.
    File Locations モジュールは一体どこに潜んでいるか? /lib{.,32,64}/modules/<kernel>/kernel/<categ1>/<categ2>/<name>.ko 例 : /lib/modules/2.6.29-gentoo-r5/kernel/drivers/net/s2io.ko # modprobe ppppppppppppoe (p..oe のモジュールをロードする ) /etc/modprobe.conf alias <hogehoge(generic identifier)> p....oe p...oe.ko という意味 /lib/modules/<kernel>/modules.dep 依存関係 p...oe の前に ppppppppp が必要等な場合、 p.. をロードする
  • 20.
    # 1 HelloWorld
  • 21.
    #include < linux/module.h> #include < linux/kernel.h > int init_module(void){ printk(KERN_INFO &quot;Hello World\n&quot;); return 0; } void cleanup_module(void){ printk(KERN_INFO &quot;..dying\n&quot;); } helloworld.c
  • 22.
    printk() printk(KERN_INFO “ お腹空いた \n ” ); printk(KERN_ WARNING “ もうだめ ...\n ” );
  • 23.
    printk() printf() とほぼ同じ。printf() : “ printf() は画面に文字を表示させます。” “ ただしワープロソフトで書かないでください ” – やさしいなんとかの本
  • 24.
    printk() printk( KERN_INFO “ お腹空いた \n”); printk( KERN_WARNING “ もうだめ ...\n”); linux/kernel.h[L91]: #define KERN_EMERG &quot;<0>&quot; /* system is unusable */ #define KERN_ALERT &quot;<1>&quot; /* action must be taken immediately */ #define KERN_CRIT &quot;<2>&quot; /* critical conditions */ #define KERN_ERR &quot;<3>&quot; /* error conditions */ #define KERN_WARNING &quot;<4>&quot; /* warning conditions */ #define KERN_NOTICE &quot;<5>&quot; /* normal but significant condition */ #define KERN_INFO &quot;<6>&quot; /* informational */ #define KERN_DEBUG &quot;<7>&quot; /* debug-level messages */