initrd
/なしでLinux Mint(バージョン4.14.13+)を起動しましたが、ルートファイルシステムがマウントされる前に実行されているinitramfs
ことがわかります。/sbin/modprobe
どうやってこれができるのか疑問に思います。printk
私はファイルシステムが使用されるたびにカーネルを計測するので、それが使用されている/sbin/modprobe
かどうかがわかります。
次のリンクには、dmesg
私の実行の完全な出力が含まれています。dmesg 出力
[ 3.175001] Used file system /sbin/modprobe!
[ 3.179080] Used file system /dev/console!
[ 3.844276] Used file system /dev/md0!
[ 3.899302] VFS: Mounted root (ext4 filesystem) on device 8:17.
[ 3.951578] devtmpfs: mounted
[ 3.987527] Used file system /bin/sh!
ベストアンサー1
私はそれが正常に実行されたとは思わない/sbin/modprobe
。ところで、ここに私が興味を持っているものがあります。 "devtmpfs:mounted" または "Mounted root (ext4 ファイルシステム)" 以前に/dev/console
開こうとしたようです/dev/console
。/dev/console
)...
initramfsがなければ、カーネルは非常に単純な偽を生成するようです。私が正しく理解したら、/dev/console
実際のルートファイルシステムがマウントされる前に開くことができる理由です。
https://github.com/torvalds/linux/blob/v4.14/init/noinitramfs.c
/*
* Create a simple rootfs that is similar to the default initramfs
*/
static int __init default_rootfs(void)
{
int err;
err = sys_mkdir((const char __user __force *) "/dev", 0755);
if (err < 0)
goto out;
err = sys_mknod((const char __user __force *) "/dev/console",
S_IFCHR | S_IRUSR | S_IWUSR,
new_encode_dev(MKDEV(5, 1)));
if (err < 0)
goto out;
err = sys_mkdir((const char __user __force *) "/root", 0700);
if (err < 0)
goto out;
return 0;
/root
カーネルコードの他の場所では、このディレクトリを使用して物理root=
ファイルシステムをマウントして変換します。
この機能を導入したコミットでは、この特定の機能が initrd および initramfs サポートでコンパイルされた場合にのみ使用されることを明確にしました。したがって、カーネルを起動するときに特定のinitramfsを渡さず、カーネルに組み込まれるinitramfsを指定しないと、「デフォルトのinitramfs」はおよびを提供します/dev/console
。/root
https://github.com/torvalds/linux/commit/c33df4eaaf41fd3e34837a6ae9a5f9970c393d9f