1,先对init进程启动过程简单分析
在kernel/init/main.c的init函数中有如下代码:
if(execute_command)
execve(execute_command,argv_init,envp_init);
execve("/sbin/init",argv_init,envp_init);
bootloader会传给内核的main函数 init=/linuxrc这个参数,于是就会执行下面的这句
execute_command = “linuxrc”,busybox中_install目录下的linuxrc是Busybox的一个软链接,指向/bin/busybox,而/sbin/init也是/bin/busybox的符号链接。
Busybox init进程启动流程:
Busybox initt 程序对应的代码在init/init.c文件中,init启动的第一个函数是int init_main(int argc UNUSED_PARAM, char **argv)
在init_main()函数中会调用parse_inittab(void)函数.
static void parse_inittab(void)
{
#if ENABLE_FEATURE_USE_INITTAB
char *token[4];
parser_t *parser = config_open2("/etc/inittab", fopen_for_read);
if (parser == NULL)
#endif
…
}
2, /etc/inittab 文件默认基本流程如下
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty -L ttyS000 115200 vt100 -n root -I “Auto login as root …” //自动以root登陆
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
3.给串口添加密码
在/etc/inittab
注释掉自动以root登陆
#::respawn:/sbin/getty -L ttyS000 115200 vt100 -n root -I “Auto login as root …”
添加:
::sysinit:/bin/hostname noname
::respawn:-/bin/login
hostname 是用来设置主机名称,可用uname -n 查看。
4, 网上有些方法:
::respawn:/sbin/getty -L ttyS000 115200 vt100
但经过测试,其超时会直接无需密码登陆。
5,在第三步前,需要现设置密码。方法如下
passwd user