在调试linux过程中,通过NFS来挂载单板的根文件系统是最常见的事,但是系统启动后,可能会出现如下警告:
WARNING: Unable to open an initial console.
在键盘上敲回车键不能进入控制台。
解决办法:
在NFS下的单板的跟文件系统rootfs的dev目录下增加两个文件:
sudo mknod console c 5 1
sudo mknod null c 1 3
这样在启动单板时,就不会出现上述问题。
“可能原因”分析:
通过内核代码可以分析Linux的启动过程,当挂载根文件系统过后,内核还会打开"dev/console"作为控制台。
但是如果/dev下面没有这个文件,这一步就会出错。
static int __init kernel_init(void * unused)
{
...
...
/* Open the /dev/console on the rootfs, this should never fail */
if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
printk(KERN_WARNING "Warning: unable to open an initial console.\n");
...
...
return 0;
}
当内核启动完成后,会完成其他挂载点,其中就会将/dev挂载到基于内存的文件系统。这时udev或mdev会自动创建设备文件节点,也会自动创建 /dev/console和/dev/null。但是内核没起来之前就已经用到了/dev/console,所以在/dev/没被挂载之前必须包含/dev/console文件。所以在制作根文件系统的时候,必须要包含/dev/console。
以上都是个人观点,欢迎拍砖,指正大家一起学习