相信大家都在shell命令行里通过敲指令加载过驱动和应用程序,但是如果每次开机都要重新敲一遍这些加载
指令的话那太麻烦了,肯定有方法使其可以开机自动启动的。既然shell可以解析命令行,那我们把这些命令行
放到一个文件里,开机启动的时候让shell去解析这个文件,然后去执行不就行了。
你一定有印象在uboot中的bootargs中一般会有init=/linuxrc,这个参数传递给内核后,内核启动后第一个要
执行的文件就是根目录下的linuxrc。linuxrc是一个指向busybox的链接,也就是实际执行的是busybox,
busybox会做什么呢?busybox会去解析/etc/inittab来获取配置信息,然后去执行。
inittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化
脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。
基本格式:
id:runlevels:action:process
2440 inittab内容:
# /etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
tty1::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount-a –r
::sysinit:/etc/init.d/rcS 表示系统初始化文件为rcS。如果你的文件中不是这样的,不要奇怪,不同的文件系统
对应的脚本名称是不同的,但思想是一样的。
/etc/init.d/rcS
rcS就是一个脚本文件,我们把需要加载的驱动和应用程序的指令放进这个文件里即可,shell可以像解析
我们输入的命令行那样去解析这个脚本文件里的命令。
如加载驱动根目录下的驱动mydrive.ko
insmod /mydrive.ko
在命令行这样输入,在脚本文件里也相同。
加载应用程序my_app,my_app路径如果在/bin /usr/bin /sbin /usr/sbin 里的话可以直接执行
my_app
如果在其它目录的话前面加上路径即可,如在根目录下
/my_app
rcS内容:
#!/bin/sh
ifconfig eth0192.168.1.17
mount -a
mkdir /dev/pts
mount -t devptsdevpts /dev/pts
echo /sbin/mdev> /proc/sys/kernel/hotplug
mdev -s
blankset 0
/display_time
blankset是我放在/usr/bin目录下的程序,0是参数,通过echo $PATH 可以知道哪些目录下的程序可以直接执行,
不需要加路径。
默认的是/bin /usr/bin /sbin /usr/sbin 。
display_time是我放在根目录下的应用程序。
如果觉得驱动程序和应用程序都加在rcS中有点乱,我们可以在/etc/inittab中加上一个类似rcS的脚本文件,
然后把这一类程序都放在这个脚本文件中。
仿照 ::sysinit:/etc/init.d/rcS
加入我们把所有的驱动程序都放在一个根目录下的install脚本文件中,那么在/etc/inittab里加上一句:
::wait:/install
wait表示执行install脚本文件,并等待它执行完成
所有驱动类的加载就可以放在install脚本文件里,如果要加载的内容很多时,这样会有条理一点。
应用程序也是类似的,也可以新建一个脚本文件来完成应用程序的加载。