解决办法:在文件系统中,/etc/inittab 中 tq2440_serial0::askfirst:-/bin/sh改为console::askfirst:-/bin/sh
原因:1)文件系统中/etc/inittab文件的作用:我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox会查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。
2) inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)
【linux移植过程出现“can't open /dev/tq2440_serial0: No such file or directory”】id:runlevel:action:process
A: id在BusyBox的init中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。id并不是随便取名字的,这个名字要与/dev/目录下是否有对应的文件对应
B: action有如下动作选项(部分省略):
respawn:每当相应的进程终止执行便会重新启动
askfirst:类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键
所以因为系统初始化过程无法在/dev目录下建立tq2440_serial0可执行目标(脚本),因此inittab中语句
q2440_serial0::askfirst:-/bin/sh将无法执行,而因为一开始我已经在/dev目录中手动创建console的空文件脚本,命令行为# mknod console c 5 1 (注意其中主次设备号5,1是根据内核源码目录下/drivers/serial/samsung.c中有设定),所以当tty是console而不是tq2440_serial0时,其将找到设备文件,故可执行。respawn每当相应的进程终止执行便会重新启动
askfirst类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键