KENJI’S BLOG このページをアンテナに追加 RSSフィード

Freezed...

2009-01-09

FreeBSDのカーネルとかドライバとか触ってみたメモ(壱)

FreeBSDを触り始めて6ヶ月くらい経ったので、そろそろFreeBSDカーネルに手を出してみる…。

# pkg_add ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages/All/cvsup-without-gui-16.1h_4.tbz
# cp /usr/share/examples/cvsup/stable-supfile ./
# vi stable-supfile
(CHANGE_THIS.FreeBSD.org → cvsup.jp.FreeBSD.org)
# cvsup stable-supfile(現在はcsup推奨! Hossyさんサンクス!)
(/usr/src以下にカーネルのソースコードがダウンロードされる)
# cd /usr/src/sys/modules/
# mkdir skeleton
# cd skeleton
# cat >skeleton.c
/*
 * KLD Skeleton
 * Inspired by Andrew Reiter's Daemonnews article
 */

#include <sys/types.h>
#include <sys/module.h>
#include <sys/systm.h>  /* uprintf */ 
#include <sys/errno.h>
#include <sys/param.h>  /* defines used in kernel.h */
#include <sys/kernel.h> /* types used in module initialization */

/* 
 * Load handler that deals with the loading and unloading of a KLD.
 */

static int
skel_loader(struct module *m, int what, void *arg)
{
  int err = 0;
  
  switch (what) {
  case MOD_LOAD:                /* kldload */
    uprintf("Skeleton KLD loaded.\n");
    break;
  case MOD_UNLOAD:
    uprintf("Skeleton KLD unloaded.\n");
    break;
  default:
    err = EOPNOTSUPP;
    break;
  }
  return(err);
}

/* Declare this module to the rest of the kernel */

static moduledata_t skel_mod = {
  "skel",
  skel_loader,
  NULL
};  

DECLARE_MODULE(skeleton, skel_mod, SI_SUB_KLD, SI_ORDER_ANY);
^C(Ctrl + C)
# cat >Makefile
SRCS=skeleton.c
KMOD=skeleton

.include <bsd.kmod.mk>
^C(Ctrl + C)
# make
(コンパイル中…)
# ls skeleton*
skeleton.c      skeleton.kld    skeleton.ko     skeleton.o
# kldload ./skeleton.ko
Skeleton KLD loaded.
# kldunload ./skeleton.ko
Skeleton KLD unloaded.
#

参考:

ローレイヤー勉強会(LowLayer_01_rk_FreeBSDKernHack.pdf)

FreeBSD Architecture Handbook(Dynamic Kernel Linker Facility - KLD)

HossyHossy 2009/01/09 20:10 cvsup は最近は使わないかもです。依存関係でいろいろインストールされますし。
今時は互換の csup が標準で含まれていますのでそちらを使うといいと思います。

kenjiaikokenjiaiko 2009/01/10 14:36 おお、そなんですか(^^;。なるほど。ではcsupでやってみますです。ご指摘どうもでつ。

トラックバック - http://d.hatena.ne.jp/kenjiaiko/20090109/1231496621