前几天在FriendlyARM的 mini2440板子上跑Linux的时候碰到了一个很费解的现象,按照教程上说,是可以利用NFS的方式来挂载Host开发机上的根目录来开发的。教程中给的kernel_cmd_line 是:
param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.111:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.70:192.168.1.111:192.168.1.111:255.255.255.0:sbc2440.arm9.net:eth0:off"
后面很长的部分主要是ip地址设置和nfs的目录,这里首先碰到的问题是它写了console=ttySAC0。这个不是很理解为什么,ttySAC0不是应该是windows上的超级终端么,我是在Fedora13下面用minicom连接的,系统里面显示的设备名字是/dev/ttyUSB0。但是奇怪的是这个参数是对的,我改成ttyUSB0之后反而启动的时候就收不到串口的数据了。
之后就是正常启动,然后到VFS mount之后突然说 unable to initial console之类的,然后串口就失去控制了,但是板子上的系统还是可以正常启动,而且起来之后我尝试着打开终端然后往串口发送数据居然成功了。也就是说通信驱动之类的问题应该都是好的,只是设备文件名弄的不太对之类的问题。手动建立个这个设备应该就可以了。网上找到有人说在/dev下面 mknod –m 600 console c 5 1就可以了,我本来觉得是不行的,结果死马当活马医的试了试居然行了,我觉得很奇怪。按照我的理解,虽然我在host上面在mknod了这个设备,但是系统启动的时候会重新挂载一个/dev文件系统在/dev下面啊,应该会有个脚本
Linux启动时NFS挂载根文件系统导致console初始化问题

在使用NFS挂载Linux根文件系统时遇到启动时无法初始化console的问题。通过分析kernel_cmd_line参数和系统启动过程,发现console=ttySAC0与实际设备不符。修改为ttyUSB0后启动时接收不到串口数据。通过mknod命令创建/dev/console解决了问题,但对设备在启动过程中如何被创建仍存疑问。分析了start_kernel()和rest_init()函数,发现console_init()在早期启动阶段被调用,而kernel_init()中尝试打开/dev/console。问题在于找到确切的设备创建时机。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



