关于Linux
终端和控制台的基本概念如下:
/dev/console
即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。/dev/console
根据不同系统的设定可以链接到/dev/tty0
或者其他/dev/tty*
终端设备上。/dev/tty
代表当前tty设备,在当前的终端中输入echo “hello” > /dev/tty
,都会直接显示在当前的终端中。/dev/ttyS*
是串行/串口终端设备。/dev/pty*
即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序。例如,我们在X Window
下打开的终端,以及我们在Windows
使用telnet
或ssh
等方式登录Linux
主机,此时均在使用pty
设备(准确的说在使用pty
从设备)。/dev/tty0
代表当前虚拟控制台,而/dev/tty1
等代表第一个虚拟控制台,例如当使用ALT+F2
进行切换时,系统的虚拟控制台为/dev/tty2
,当前的控制台则指向/dev/tty2
在嵌入式Linux
产品开发的最终镜像发布时,一般希望关闭串口终端的打印信息,关闭串口打印后,还可以使用ssh
方式来确认系统是否正常启动。下面介绍关闭u-boot
,Linux
内核和根文件系统(rootfs
)串口打印的方法,以及如何使用ssh
来确认系统正常启动。
u-boot
关闭串口终端信息
u-boot
里面有串口终端静默的开关,在u-boot/include/configs/at91san9260ek.h
中最后一行添加以下代码:
#define CONFIG_EXTRA_ENV_SETTINGS "silent=1\0"
#define CONFIG_SILENT_CONSOLE
#define CONFIG_SILENT_U_BOOT_ONLY
Linux
内核关闭串口控制台信息
通过内核配置选项来去掉串口控制台配置选项(CONFIG_SERIAL_ATMEL_CONSOLE
)
#make menuconfig
Devices drivers -> character drivers->serial drivers->
[]support for console on AT91/AT32 serial port
根文件系统关闭串口控制台信息
在Yocto
项目的目标板配置文件里面需要去掉如下这一行:
SERIAL_CONSOLE = "115200 ttyS0"
这样就相当于将目标板根文件系统/etc/inittab
文件中的
S0:12345:respawn:/sbin/getty 115200 ttyS0
自动修改为默认的
1:12345:respawn:/sbin/getty 115200 tty1
使用ssh
来调试
以上更改后,重新下载u-boot
、内核及根文件系统,就看不到任何串口打印信息了,所以我们需要在Yocto
目标板根文件系统镜像里面添加一个dropbear
包:
DISTRO_FEATURE_append =" dropbear"
IMAGE_INSTALL_append = " dropbear"
重新构建和下载根文件系统后,使用ping
和ssh
远程登陆目标板来确认系统启动成功(这里需要注意的一点是dropbear
默认是禁止root
用户远程登陆的,所以需要自行添加一个普通用户账号用来测试验证):
$ ping 192.168.1.10
$ ssh test@192.168.1.10
ping
通并且ssh
可以正常登陆目标板,则说明系统正常启动。