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 ッスか?
# ちょっとへろへろ気味なんで微妙