参考资料:
https://blog.csdn.net/screaming/article/details/53083675
https://www.cnblogs.com/subo_peng/p/4882813.html
1、在init进程启动后,进程首先执行/etc/inittab文件,inittab是一个不可执行的文本文件,它由若干行指令所组成。该文件语法下面介绍,一般包括三项内容就可以启动。其中主要的一项内容就是::sysinit:/etc/rc,目的是制定初始化要执行的脚本配置文件,在/etc/rc中则主要是配置系统;另一项内容是::respawn:-/usr/sbin/xxx,xxx一般为Shell;最后一个重要的项是::shutdown:/bin/umount -a -r ,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只读模式重新安装以保护文件系统。
2、命令解析:
/sbin/getty -L ttyS0 0 vt100
监听串口的连接,如果有连接,则开启一个shell进行服务;
1) /dev/ttySn:串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。这些串行端口设备通常被称为终端设备,它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如, 在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。
2)VT100/ VT102 /VT200 /Xterm /linux Vshell 等有什么区别?
这些都是本地SecureCRT传输编码协议的选择类型,只要和被连接端保持一致即可正常通信;VT100表示终端只负责显示和输入,程序在远程主机上运行。
3) inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)
id:runlevel:action:process
本文用到的几个action选项定义如下:
sysinit:为init提供初始化命令行的路径;
respawn:每当相应的进程终止执行便会重新启动;
shutdown:当系统关机时,执行相应的进程;
参考:https://blog.csdn.net/the_wan/article/details/108585194
1、修改前:
# cat /etc/inittab
::sysinit:/etc/init.d/rcS
#ttyS0::respawn:/sbin/getty -L ttyS0 0 vt100
::respawn:-/bin/sh
null::shutdown:/bin/umount -a -r
2、检测当前是哪个串口设备
这个ttyS0是串口设备的设备文件但是不同的系统,设备文件名由于串口驱动的不同而不同,那么如何确认自己的串口设备是哪一个呢?
检测方法一:
1)cd /dev //打开显示设备文件的文件夹 dev
ls ttyS* //显示所有前四个字母是ttyS的设备文件
2)确定是哪个串口设备: echo test > /dev/ttyAMA0;只有ttyAMA0可以打印出 test 说明ttyAMA0就是我要找的串口设备文件。
# cd /dev/
# ls -al tty*
crw-rw---- 1 root root 5, 0 Jan 1 08:00 tty
crw-r--r-- 1 root root 4, 0 Jan 1 08:00 tty0
crw-r--r-- 1 root root 4, 1 Jan 1 08:00 tty1
crw------- 1 root root 204, 64 Jan 1 08:08 ttyAMA0
crw-r--r-- 1 root root 4, 70 Jan 1 08:00 ttyH0
crw-r--r-- 1 root root 4, 64 Jan 1 08:00 ttyS0
crw-rw---- 1 root root 3, 0 Jan 1 08:00 ttyp0
crw-rw---- 1 root root 3, 1 Jan 1 08:00 ttyp1
crw-rw---- 1 root root 3, 2 Jan 1 08:00 ttyp2
crw-rw---- 1 root root 3, 3 Jan 1 08:00 ttyp3
crw-rw---- 1 root root 3, 4 Jan 1 08:00 ttyp4
crw-rw---- 1 root root 3, 5 Jan 1 08:00 ttyp5
crw-rw---- 1 root root 3, 6 Jan 1 08:00 ttyp6
crw-rw---- 1 root root 3, 7 Jan 1 08:00 ttyp7
crw-rw---- 1 root root 3, 8 Jan 1 08:00 ttyp8
crw-rw---- 1 root root 3, 9 Jan 1 08:00 ttyp9
crw-rw---- 1 root root 3, 10 Jan 1 08:00 ttypa
crw-rw---- 1 root root 3, 11 Jan 1 08:00 ttypb
crw-rw---- 1 root root 3, 12 Jan 1 08:00 ttypc
crw-rw---- 1 root root 3, 13 Jan 1 08:00 ttypd
crw-rw---- 1 root root 3, 14 Jan 1 08:00 ttype
crw-rw---- 1 root root 3, 15 Jan 1 08:00 ttypf
#
# echo test > /dev/ttyAMA0
test
#
检测方法二:
# cat /proc/cmdline
isolcpus=3 root= console=ttyAMA0 earlyprintk debug irqaffinity=0 pci=pcie_bus_safe
#
可以看到串口设备的设备文件是ttyAMA0;
3、修改inittab
将 ttyS0::respawn:/sbin/getty -L ttyS0 0 vt100 中的ttyS0替换成ttyAMA0。即为 ttyAMA0::respawn:/sbin/getty -L ttyAMA0 0 vt100
修改后:
# cat /etc/inittab
::sysinit:/etc/init.d/rcS
ttyAMA0::respawn:/sbin/getty -L ttyAMA0 0 vt100
#::respawn:-/bin/sh
null::shutdown:/bin/umount -a -r
#
在命令行下敲入passwd,这时系统会提示你给root设置一个密码,设定密码并确认密码后reboot重新启动。重启后就会需要用户名跟密码。
1)串口密码123456
# passwd
Changing password for root
New password:
Bad password: too weak
Retype password:
passwd: password for root changed by root
#
# cat /etc/passwd
root:xLhgTub5K6Css:0:0:root:/:/bin/ash
#
2)串口密码telnetadmin
# passwd
Changing password for root
New password:
Bad password: too weak
Retype password:
passwd: password for root changed by root
#
# cat /etc/passwd
root:bN5/yzPqYKOJo:0:0:root:/:/bin/ash
#
退出重新登陆:
# exit
process '/sbin/getty -L ttyAMA0 0 vt100 ' (pid 832) exited. Scheduling for restart.
starting pid 5536, tty '/dev/ttyAMA0': '/sbin/getty -L ttyAMA0 0 vt100 '
(none) login: root
Password:
BusyBox v1.30.1 (2020-06-27 14:33:25 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
#