1.首先是从init/main.c的start_kernel开始,启动/sbin/init程序,如果bootargs中有指定init=linuxrc,则启动对应的init进程
start_kernel - rest_init - kernel_init - /sbin/init
2.init起来后会去读/etc/inittab配置文件执行对应的启动命令:
::sysinit:/etc/init.d/rcS -->读取fstab挂载proc&sys,执行mdev动态生成设备节点
::respawn:-/bin/sh -->以登陆模式启动shell
3.登录shell会首先从/etc/profile文件以及.profile文件(若存在的话)读取命令并执行。如果在进入shell时设置了ENV环境变量,或 者在登录shell的.profile文件中设置了该变量,则shell下一步会从该变量命名的文件中读去命令并执行。因此用户应该把每次登录 时都要执行的命令放在.profile文件中,而把每次运行shell都要执行的命令放在ENV变量指定的文件中。设置ENV环境变量的方法 是把下列语句放在你起始目录的.profile文件中
ENV=$HOME/.anyfilename; export ENV
4.然后根据/etc/profile启动对应的开机程序:
#!/bin/sh
export PATH=/sbin:/bin
export LD_LIBRARY_PATH=/lib
mkdir -p /dev/pts
busybox telnetd&
ulimit -c unlimited
export PATH=$PATH:/config
mkdir -p /dev/bus/usb
mkdir -p /dev/pts
mount -t sysfs none /sys
mount -t tmpfs mdev /dev
mount -t debugfs none /sys/kernel/debug/
mount -t jffs2 mtd:nvrservice /config
mdev -s
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
busybox telnetd&
if [ -e /etc/core.sh ]; then
echo "|/etc/core.sh %p" > /proc/sys/kernel/core_pattern
chmod 777 /etc/core.sh
fi;
if [ -e /config/demo.sh ]; then
/config/demo.sh
fi;