ファンクションキーを使って情報表示させているのはisサーバでソースはservice/is。
関数を追加したい場合はisディレクトリにあるdmp.c、proto.hを変更する。
dmp.cの中で変更するのはNHOOKの数と、hook_entry構造体を初期化している箇所。
#define NHOOKS 15 struct hook_entry { int key; void (*function)(void); char *name; } hooks[NHOOKS] = { { F1, proctab_dmp, "Kernel process table" }, { F2, memmap_dmp, "Process memory maps" }, { F3, image_dmp, "System image" }, { F4, privileges_dmp, "Process privileges" }, { F5, monparams_dmp, "Boot monitor parameters" }, { F6, irqtab_dmp, "IRQ hooks and policies" }, { F7, kmessages_dmp, "Kernel messages" }, { F10, kenv_dmp, "Kernel parameters" }, { F11, timing_dmp, "Timing details (if enabled)" }, { F12, sched_dmp, "Scheduling queues" }, { SF1, mproc_dmp, "Process manager process table" }, { SF2, sigaction_dmp, "Signals" }, { SF3, fproc_dmp, "Filesystem process table" }, { SF4, dtab_dmp, "Device/Driver mapping" }, { SF5, mapping_dmp, "Print key mappings" }, };
例えば、hello()をF8キーに割り当てるならこんな感じで。
#define NHOOKS 16 struct hook_entry { int key; void (*function)(void); char *name; } hooks[NHOOKS] = { { F1, proctab_dmp, "Kernel process table" }, { F2, memmap_dmp, "Process memory maps" }, { F3, image_dmp, "System image" }, { F4, privileges_dmp, "Process privileges" }, { F5, monparams_dmp, "Boot monitor parameters" }, { F6, irqtab_dmp, "IRQ hooks and policies" }, { F7, kmessages_dmp, "Kernel messages" }, { F8, hello, "Test function" }, { F10, kenv_dmp, "Kernel parameters" }, { F11, timing_dmp, "Timing details (if enabled)" }, { F12, sched_dmp, "Scheduling queues" }, { SF1, mproc_dmp, "Process manager process table" }, { SF2, sigaction_dmp, "Signals" }, { SF3, fproc_dmp, "Filesystem process table" }, { SF4, dtab_dmp, "Device/Driver mapping" }, { SF5, mapping_dmp, "Print key mappings" }, };
proto.hではhello()の定義をする
/* dmp_kernel.c */ _PROTOTYPE( void proctab_dmp, (void) ); _PROTOTYPE( void memmap_dmp, (void) ); _PROTOTYPE( void privileges_dmp, (void) ); _PROTOTYPE( void sendmask_dmp, (void) ); _PROTOTYPE( void image_dmp, (void) ); _PROTOTYPE( void irqtab_dmp, (void) ); _PROTOTYPE( void kmessages_dmp, (void) ); _PROTOTYPE( void sched_dmp, (void) ); _PROTOTYPE( void monparams_dmp, (void) ); _PROTOTYPE( void kenv_dmp, (void) ); _PROTOTYPE( void timing_dmp, (void) ); _PROTOTYPE( void hello, (void) );
関数をどのファイルで実装するかは目的によるので、今回はお手軽にdmp_kernel.cに追加する。
/*===========================================================================* * hello * *===========================================================================*/ PUBLIC void hello(void) { printf("test\n"); }
これで、make worldとかしてビルドして再起動すればF8キー押下で"test"って画面に表示されるようになる。