I have been working with TI-SDK for the past two years and every time I come across some interesting trivia posed by the systems engineers :). One such request was to enable automatic login in tisdk. The idea is to lead the user directly to the command prompt after kernel boot up. I tried several approaches over weeks, and zeroed in on the following simpler approach.
I am going to run through a serious of steps followed to enable auto login in tisdk or embedded linux.
The setup which I used are as follows:
- Version: TISDK 7.0
- Hw: AM335x
- Rootfs: Hosted on Network file system on ubuntu [ which is a guest OS on Vmware]
Firstly, I need a configuration file for setting username and password. I can just hard code in the tool but want to give user the control.
The configuration file looks like:
#cat /etc/autologin.profile
root,root
Then, I wrote a small tool to read the username and password from configuration file and use /bin/login for login to the shell.
#include <unistd.h>
#include <stdio.h>
int main()
{
int nrv = 0;
FILE* fptr = 0;
char user[64];
char pass[64];
memset(user,’\0′,64);
fptr = fopen("/etc/autologin.profile\0″,"r\0″);
if (fptr != 0)
{
nrv = fscanf(fptr,"%s,%s\0",user,pass);
}
if (nrv > 0)
nrv = execlp("login","login","-f",user,0);
else
nrv = execlp("login","login","\0″,pass,0);
return 0;
}
Note: You can change this according to your needs.
I cross compiled the tool for ARM and placed the compiled tool in /sbin.
arm-linux-gnueabihf-gcc -o autologin autologin.c
Then, I changed the init scripts to reflect the changes, basically setting up getty. My setup uses Uart0
port for console.
The configuration for the console is present in /etc/inittab. The changes which I made are highlighted below.
#Johnnie S:2345:respawn:/sbin/getty 115200 ttyO0
S:2345:once:/etc/init.d/myloginShell
The file myloginShell is just used for my configurations, the idea is to isolate my changes from the defaults.
The contents of myloginShell are as follows:
showLogin=1
if [ $showLogin -eq 1 ]; then
while true; do
/sbin/getty -n -l /sbin/autologin 115200 ttyO0
exitCode=$?
if [ "$exitCode" = "129" ]; then
break;
fi
done
else
stty -echo
fi
Viola, you have the setup ready to automatic login.
You can also do the same in inittab itself.
#Johnnie S:2345:respawn:/sbin/getty 115200 ttyO0
S:2345:respawn:/sbin/getty -n -l /sbin/autologin 115200 ttyO0
Thanks for reading this post and happy logging.