一、简要说明:
1、首先,CFE(common firmware environment)--它就是一个bootloader,类似u-boot,redboot之类,有点broadcom公司御用之嫌--
最先启动。它的任务只是创造一个简单的环境,让系统先运行起来。除了能够跳转到特定地址上启动操作系统(如Linux)外,
它还能让你download东西到上面,比如download一个linux,然后启动它。
另外,值得一提的是,CFE在启动之后会有1,2秒的时间等待由tftp上传的内核并烧写到flash上,
这就给一些操作系统损坏但CFE还能工作的"砖头"板一个起死回生的机会。请注意一旦linux启动之后,将由linux全部接管系统,
2、这时候就没CFE什么事情了。唯一的瓜葛是CFE传递给内核一个命令行的参数,这个可以在linux启动起来之后用下面的命令查看:
root@OpenWrt:/# cat /proc/cmdline
console=ttyS0,115200 mtdparts=spi_flash:1m(u-boot)ro,3m(kernel),-(rootfs)
之后,linux系统启动起来了。
OpenWRT的启动脚本放在 /etc/init.d 目录下,而系统开机时自动运行/etc/rc.d目录下的脚本。所以在rc.d目录下、有init.d下脚本的链接文件。
整理一下
05 ---------------------- defconfig //加载默认参数
10 ---------------------- boot //启动
39 ---------------------- usb // 加载usbfs
40 ---------------------- network // 设置网卡参数
45 ---------------------- firewall // 防火墙
50 ---------------------- dropbear // sshd server
50 ---------------------- cron // .....
50 ---------------------- telnet // 如果没有修改root密码,则启动telnet server
60 ---------------------- dnsmasq // DHCP 和 DNS 服务端
95 ---------------------- done // 系统启动完成后
96 ---------------------- led // 指示灯
97 ---------------------- watchdog // ...
99 ---------------------- sysctl // 最后,进行必要的内核参数调整
然后,我们加入自己的脚本,实现模块驱动的加载、应用程序的开机自启动等
二、添加测试
1、首先在/etc/init.d里添加需要启动的shell脚本,touch test.sh
#!/bin/sh/etc/rc.common
# /init.d/test.sh
START=50
start()
{
echo "==================
This is test!
=================" >/dev/console
}
2、更改test权限,chmod 777 test.sh
3、在/ect/rc.d目录下做一个链接,启动时系统会按顺序启动rc.d目录下的脚本链接,对应执行init.d目录下的启动脚本。脚本的命名要符合系统规
范,init.d下telnet脚本在rc.d目录下的链接文件名为S50telnet。所以链接文件要在脚本名前加S+启动顺序数字,启动顺序要等系统进行完必要的
初始化。所以我们命名为S95+脚本名。
于是我们的链接命令:
ln -s /etc/init.d/test.sh /etc/rc.d/S95test.sh
然后重启,reboot。在重启完成后你就能发现系统会打印出:
==================
This is test!
=================