每次进入Linux的调试界面,都需要输入用户名和密码,产品量产后把产线工人也锻炼成键盘高手了!有没有什么办法可以使系统自动登录?
小编的同事除了键盘高手,还有非常多的编程高手,问题丢给他们马上有了答案:“实现嵌入式linux的自动登录系统,可以直接修改登录的程序源代码,使登录程序自动使用指定的用户名与密码进行登录,从而达到自动登录系统的目的。”
注意:在开始验证自动登录操作之前,请首先确认Linux主机的开发环境。
开发主机环境:
Ubuntu 12.04(64位)、arm-none-linux-gnueabi-gcc系列交叉工具链
硬件清单:
M3352-N128LI 工控核心板与评估板
软件资源:
mingetty-1.07.tar.gz
util-linux-2.13-pre7.tar.bz2
一、编译mingetty登录工具
把源码包mingetty-1.07.tar.gz压缩文件拷贝到“~”目录下,然后使用tar命令进行解压,操作如下:
vmuser@vmhost:~$tar xzvf mingetty-1.07.tar.gz
进入到解压后的mingetty-1.07目录,在mingetty.c文件中,修改第352行的,修改如下:
352 char *logname, *s;
352 char *logname = "root", *s;
注意:蓝色字体为修改后内容。
同时,把mingetty.c文件中的第409~415行注释掉,修改如下:
409 #if 0
410 if (autologin) {
411 do_prompt (0);
412 printf ("login: %s (automatic login)\n", autologin);
413 logname = autologin;
414 } else
415 while ((logname = get_logname ()) == 0)
416 /* do nothing */ ;
417 #endif
修改Makefile文件,设置好交叉编译工具,CC=arm-none-linux-gnueabi-gcc,然后就可以使用make命令进行编译了,操作如下:
vmuser@vmhost:~/mingetty-1.07$ make
图1 编译mingetty程序
如图1所示,mingetty文件即是生成的目标程序,将该程序拷贝到根文件系统的/sbin目录下即可。
二、修改login登录工具
把源码包util-linux-2.13-pre7.tar.bz2压缩文件拷贝到“~”目录下,使用tar命令进行解压,操作如下:
vmuser@vmhost:~$tar xjvf util-linux-2.13-pre7.tar.bz2
解压后生成的目录为util-linux-2.13-pre7,在util-linux-2.13-pre7/login-utils目录下,修改login.c文件中的第345行,修改如下:
345 passwd_req = 1;
345 passwd_req = 0;
注意:蓝色字体为修改后内容。
同时在login.c文件中添加locale.h头文件,修改如下:
118 #include <utmp.h>
119 #include <locale.h>
注意:蓝色字体为修改后内容。
由于login-utils目录下无法直接使用make命令,因此,需要自己编写编译命令来生成login程序,操作如下:
vmuser@vmhost:~/util-linux-2.13-pre7/login-utils$ arm-none-linux-gnueabi-gcc -o login login.c ../lib/setproctitle.c checktty.c -Wall -lcrypt -I ../include/
图2 编译login程序
如图2所示,login文件就是生成的目标程序,将该程序拷贝到根文件系统的/bin目录下即可。
三、修改inittab文件
完成上述两点操作之后,最后一步工作就是修改根文件系统下的/etc/inittab文件了,修改如下:
ttyO0::respawn:/sbin/getty -L ttyO0 115200 vt100 # GENERIC_SERIAL
ttyO0::respawn:/sbin/mingetty ttyO0 115200 vt100 # GENERIC_SERIAL
注意:蓝色字体为修改后内容。
将修改后的根文件系统重新下载到系统中即可实现自动登录,不需要再输入用户名和密码了。 |