initramfs (5)
init/main.c 方面を確認中なんですが、参考書のバージョンと異なるのとドリの DVD 見ながら、なため進捗が芳しくありません。
追記
init/initramfs.c を発見。ってか昨晩発見してた。emacs で開いてた。
参考書 (Linux カーネル 2.6 解読室)にある populate_rootfs な手続きを find|xargs grep したら出てきました。
微妙なのが init/initramfs.c のいっちゃんケツにある
rootfs_initcall(populate_rootfs);
です。この init/initramfs.c はがっつり掘りまくる必要ありそげ。
さらに追記
rootfs_initcall なマクロは以下な定義。
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
__define_initcall マクロの定義は直上で以下。
/* initcalls are now grouped by functionality into separate * subsections. Ordering inside the subsections is determined * by link order. * For backwards compatibility, initcall() puts the call in * the device init subsection. * * The `id' arg to __define_initcall() is needed so that multiple initcalls * can point at the same handler without causing duplicate-symbol build errors. */ #define __define_initcall(level,fn,id) \ static initcall_t __initcall_##fn##id __attribute_used__ \ __attribute__((__section__(".initcall" level ".init"))) = fn
initcall に関する記述が
という文書にあって do_initcalls() とか __initcall とかいうソレについての記述があるんですが、もう少し掘り下げて追いかける必要あり。
あとマクロの中の ## は kernel の中でしかみかけないのですぐに忘れてしまう。上記を例に置き換えてみると
rootfs_initcall(populate_rootfs);
は
static initcall_t __initcall_populate_rootfsrootfs __attribute_used__ \ __attribute__((__section__(".initcall" "rootfs" ".init"))) = populate_rootfs;
ってなるで OK ッスか?
# ちょっとへろへろ気味なんで微妙