#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <root file system path>"
exit 1
fi
if [ ! -d "$1" ]
then
echo "$1 is not a directory"
exit 2
fi
cd "$1"
mkdir -p dev/pts
mknod dev/console c 5 1 2> /dev/null
mkdir -p etc/init.d
mkdir -p lib/modules/3.12.9 # For rmmod to work
mkdir -p proc
mkdir -p sys
mkdir -p root
mkdir -p tmp
mkdir -p var/log
mkdir -p boot
mkdir -p mmc # mmc mount point
cat << CONTENT > etc/fstab
proc /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
CONTENT
cat << CONTENT > etc/inittab
::sysinit:/etc/init.d/rcS
# /bin/ash
#
# Start an "askfirst" shell on the serial port
console::askfirst:-/bin/ash
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
CONTENT
cat << "CONTENT" > etc/init.d/rcS
#!/bin/sh
# ---------------------------------------------
# Common settings
# ---------------------------------------------
HOSTNAME=OMAP3EVM
VERSION=1.0.0
hostname $HOSTNAME
# ---------------------------------------------
# Prints execution status.
#
# arg1 : Execution status
# arg2 : Continue (0) or Abort (1) on error
# ---------------------------------------------
status ()
{
if [ $1 -eq 0 ] ; then
echo "[SUCCESS]"
else
echo "[FAILED]"
if [ $2 -eq 1 ] ; then
echo "... System init aborted."
exit 1
fi
fi
}
# ---------------------------------------------
# Get verbose
# ---------------------------------------------
echo ""
echo " System initialization..."
echo ""
echo " Hostname : $HOSTNAME"
echo " Filesystem : v$VERSION"
echo ""
echo ""
echo " Kernel release : `uname -s` `uname -r`"
echo " Kernel version : `uname -v`"
echo ""
# ---------------------------------------------
# MDEV Support
# (Requires sysfs support in the kernel)
# ---------------------------------------------
echo -n " Mounting /proc : "
mount -n -t proc proc /proc
status $? 1
echo -n " Mounting /sys : "
mount -n -t sysfs sysfs /sys
status $? 1
echo -n " Mounting /dev : "
mount -n -t tmpfs mdev /dev
status $? 1
echo -n " Mounting /dev/pts : "
mkdir /dev/pts
mount -t devpts devpts /dev/pts
status $? 1
echo -n " Enabling hot-plug : "
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
status $? 0
echo -n " Populating /dev : "
mkdir /dev/input
mkdir /dev/snd
mdev -s
status $? 0
# ---------------------------------------------
# Disable power management
# (Requires sysfs support in the kernel)
# ---------------------------------------------
# echo -n " Disabling Power mgmt : "
# echo -n "1" > /sys/power/cpuidle_deepest_state
# status $? 1
# ---------------------------------------------
# Turn off LCD after 1 hour of inactivity
# (Requires sysfs support in the kernel)
# ---------------------------------------------
# echo -n " Turn off LCD after 1 hour : "
# echo -n "3600" > /sys/power/fb_timeout_value
# status $? 1
# ---------------------------------------------
# Mount the default file systems
# ---------------------------------------------
echo -n " Mounting other filesystems : "
mount -a
status $? 0
# ---------------------------------------------
# Set PATH
# ---------------------------------------------
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
# ---------------------------------------------
# Start other daemons
# ---------------------------------------------
echo -n " Starting syslogd : "
/sbin/syslogd
status $? 0
echo -n " Starting telnetd : "
/usr/sbin/telnetd
status $? 0
# ---------------------------------------------
# Done!
# ---------------------------------------------
echo ""
echo "System initialization complete."
# ---------------------------------------------
# Start demo app
# ---------------------------------------------
#if [[ -x /etc/init.d/demo_start ]]; then
# echo " Starting Demo Application..."
# /etc/init.d/demo_start &
# sleep 5
#fi
CONTENT
chmod +x etc/init.d/rcS
cat << "CONTENT" > etc/mdev.conf
audio 0:5 0666
console 0:5 0600
control.* 0:0 0660 @/bin/mv /dev/$MDEV /dev/snd/
dsp 0:5 0666
event.* 0:0 0600 @/bin/mv /dev/$MDEV /dev/input/
fb 0:5 0666
nfs 0:5 0770
null 0:0 0777
pcm.* 0:0 0660 @/bin/mv /dev/$MDEV /dev/snd/
rtc 0:0 0666
tty 0:5 0660
tty0* 0:5 0660
tty1* 0:5 0660
tty2* 0:5 0660
tty3* 0:5 0660
tty4* 0:5 0660
tty5* 0:5 0660
tty6* 0:5 0660
ttyS* 0:5 0640
urandom 0:0 0444
zero 0:0 0666
CONTENT
touch etc/mtab # For filesystem related commands to works
# The following code depends on the exact toolchain path & its depth
# Take only .so's from under libc and that also only at one level
for f in `find /opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/libc -maxdepth 4 -type f -name "*.so*"`
do
dest=`echo ${f} | cut -d/ -f6-`
install -D ${f} ${dest}
# Giving the full path for it to work w/ sudo as well
/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabihf-strip ${dest} 2> /dev/null
done
for f in `find /opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/libc -maxdepth 4 -type l -name "*.so*"`
do
dest=`echo ${f} | cut -d/ -f6-`
mkdir -p `dirname ${dest}`
cp -d ${f} `dirname ${dest}`
done
exit 0
No comments:
Post a Comment