Auto login in TI-SDK, Am335x

I have been working with TI-SDK for past two years and every time i come across some interesting trivia posed by the systems engineers 🙂 . One of such request was to enable automatic login in tisdk. The idea is to lead the user directly to 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 serious of steps followed to enable auto login in tisdk or embedded linux.

The setup which I used:

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..

// Autologin.c

// GPL, Author: Johnnie J. Alan

#include <unistd.h>
#include <stdio.h>

int main()
{
int nrv = 0;
FILE* fptr = 0;
char user[64];

char pass[64];

// clear buffer
memset(user,’\0′,64);

// open autologin profile file
fptr = fopen(“/etc/autologin.profile\0″,”r\0″);

// make sure the file exists and was opened
if (fptr != 0)
{
// the return value from fscanf will be 1 if the autologin profile name is read correctly
nrv = fscanf(fptr,”%s,%s\0”,user,pass);
}

// only autologin if the profile name was read successfully,
// otherwise show the regular login prompt
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 is 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 the myloginShell is

#!/bin/sh

# I have removed some of other configuration which is not relevant for this post.

showLogin=1
if [ $showLogin -eq 1 ]; then
while true; do
# This is line which is important. ttyO0 indicates by Uart0 console port

# I am asking getty to use my tool instead of /bin/login which is default.
/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.

Leave a comment