2009年11月12日

inittab和rcS初探

本來只是想說要看pxa300啟動時跑的畫面的,結果...

BusyBox v1.01 (2006.08.31-08:53+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
Processing /etc/profile... Done


找到了/etc/profile
E:\cygwin\home\Jim\300\rel\target\rootfs_from_rootfs_tar_gz\etc\profile
echo
echo -n "Processing /etc/profile... "
export QTDIR="/usr/qpe"
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
export LD_LIBRARY_PATH="/usr/local/lib:/usr/lib:/lib:/usr/qpe/lib:/lib/lib"

export HOSTNAME="$(hostname)"

export OLDPWD=/root
export HOME=/root

後來又想到之前提過的init和rcS檔,所以就翻了一下學長論文,其中提到
Linux kernel 在執行完系統初始化設定(包含設置記憶體、Scheduler、中斷向量表 載入驅動程式等等) 之後,會將控制權以 kernel thread 的形式轉移給 user space的第一個程式:init

在 Embedded Linux 的環境下,init 一般包含於 busybox 中

當Linux kernel將控制權轉移給init時,init會讀取/etc下的相關檔案,一般是讀取/etc/inittab,再由/etc/inittab引入/etc/init.d/rcS等相關檔案執行系統環境的設定及初始化的動作,包含掛載檔案系統、執行相關應用程式及產生shell讓使用者可以透過特定指令與作業系統互動;busybox透過以上的流程來完成系統最後的相關設定。


於是就跑去研究了一下busybox,inittab的語法(和pc上的busybox不太一樣)

Understanding Busybox Inittab
http://linuxembedded.blogspot.com/2006/11/understanding-busybox-inittab.html

BusyBox init 详解
http://blog.chinaunix.net/u3/100239/showart_2035495.html

busybox的init初始化进程
http://linux.chinaunix.net/techdoc/net/2009/02/11/1061665.shtml

其實在busybox的目錄下就有一個inittab範例,說明都寫得很詳細了
E:\cygwin\home\Jim\release-sourceforge\android-pxa270\app\busybox-1.6.1\examples\inittab
用pxa300的inittab和學長的tiny rootfs的inittab比較過後,發現長得差不多

E:\cygwin\home\Jim\300\rel\target\rootfs_from_rootfs_tar_gz\etc\inittab
::sysinit:/etc/init.d/rcS
ttyS0::respawn:-/bin/sh
#ttyS2::respawn:-/bin/sh
#tty1::respawn:-/bin/sh
#tty2::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -

E:\cygwin\home\Jim\release-sourceforge\android-pxa270\rootfs\rootfs_from_tiny_rootfs_tgz\etc\inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
#::once:-/bin/sh
#ttyS0::respawn:-/bin/sh
#ttyS2::respawn:-/bin/sh
#tty1::respawn:-/bin/sh
#tty2::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -
看完後,摸摸腦袋,還是不太了解,總之inittab之後要執行的就是rcS啦,到時候會把要開機所做的事情都放在那邊,設定路徑等等的...


E:\cygwin\home\Jim\release-sourceforge\android-pxa270\rootfs\rootfs_from_tiny_rootfs_tgz\etc\init.d\rcS
#! /bin/sh

# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

hostname -F /etc/HOSTNAME

# mount proc and devpts filesystem
/bin/mount -a
mount -o remount,rw /dev/root /

if [ -n "$IN_INITLOG" ]; then
    IN_INITLOG=
fi

if [ ! -f /etc/HOSTNAME ]; then
    echo ${HOSTNAME} > /etc/HOSTNAME
fi

touch /var/log/wtmp
chmod 0664 /var/run/utmp /var/log/wtmp

# Delete stale subsystem files.
rm -f /var/lock/subsys/*

# Delete stale pid files
rm -f /var/run/*.pid

# Load modules
if [ -f /etc/rc.d/rc.modules ]; then
 /etc/rc.d/rc.modules
fi

/etc/init.d/rc.local

1 則留言:

NO-CARRIER 網卡無法啟動

 工作時,由於想要啟動linux OS的網卡, 發現某張新設定的網卡一直無法啟動,就算下指令UP了,但是也沒有順利啟動 所以爬文後,想要確認該網卡的status, 發現某行為: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu...