参考小梅哥的教程。
我在AC540 socfpga上完成EtherCAT主站搭建之后,需要远程调试主站程序,每当AC540开机之后,都需要输入/etc/init.d/ethercat start命令启动主站,比较麻烦。我希望EtherCAT能够在系统开机后自动启动,且无需在控制台输入程序运行命令。
添加用户程序到 Linux 系 统自启动
修改
/etc/rc5.d/S90gsrd_init.sh脚本,
在
S90gsrd_init.sh
文件中,以
start
)和
stop)标记的脚本段 内,结束符
“
;;
”
之前插入用户希望启动的程序文件名即可。
root@socfpga:~# cat /etc/rc5.d/S90gsrd_init.sh
#!/bin/sh
case "$1" in
start)
if [ "`cat /sys/class/fpga/fpga0/status`" == "user mode" ]; then
modprobe gpio-altera
fi
/www/pages/cgi-bin/scroll_server &
IP=`ifconfig eth0 | head -n 2 | tail -n 1 | sed s/inet\ addr:// | sed s/\ Bcast.*// | sed s/\ *//g`
IP_CHECK=`echo $IP | sed 's/\(\([0-9]\{1,3\}\)\.\)\{3\}\([0-9]\{1,3\}\)//g'`
if [ "$IP_CHECK" != "" ]; then
IP="No IP obtained"
fi
printf '\e[2J' > /dev/ttyLCD0
printf "$IP" > /dev/ttyLCD0
printf "\n" > /dev/ttyLCD0
printf Hello\ Tim! > /dev/ttyLCD0
/etc/init.d/ethercat start &
;;
stop)
ID=`ps | grep scroll_server | awk '{print $1;}'`
kill $ID
;;
esac
注意事项
(1)插入自己的脚本时,不要插入到以 if fi 标记的脚本内容中间。
(2)插入的程序可执行文件名使用绝对路径,不能使用相对路径。
(3)用户程序可执行文件后面插入空格之后加上一个“&”可以让程序以后 台模式运行,这样能够不影响其他程序的工作。否则系统会阻塞在这个 程序的执行位置,无法继续向下运行。
修改脚本之后,使用“:wq”命令退出脚本,使用“reboot”命令重启系统, 然后就可以测试用户程序是否执行了。
测试结果如下。
关于Linux系统的运行级别
如果用户查看
/etc
下的文件,会发现有
rc0.d~rc6.d
共
7
个以
rc 开 头的目录,那么我们又是如何知道,应该去修改
rc5.d 中的脚本内容 的呢?这就涉及到
Linux
系统运行接班的问题。下面针对
Linux 系统 运行级别做简单介绍。
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc0.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc1.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc2.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc3.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc4.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc5.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rc6.d
drwxr-xr-x 2 root root 4096 Sep 28 04:35 rcS.d
Linux 系统的 7 个运行级别(runlevel)
运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常 启动
运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
运行级别 2:多用户状态(没有 NFS)
运行级别 3:完全的多用户状态(有 NFS),登陆后进入控制台命令行模式
运行级别 4:系统未使用,保留
运行级别 5:X11 控制台,登陆后进入图形 GUI 模式
运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
运行级别的原理:
在目录/etc/init.d 下有许多服务器脚本程序,一般称为服务(service) 在/etc 下有 7 个名为 rcN.d 的目录,对应系统的 7 个运行级别 rcN.d 目录下都是一些符号链接文件,这些链接文件都指向 init.d 目录下 的 service 脚本文件,命名规则为 K+nn+服务名或 S+nn+服务名,其中 nn 为两位数字。 系统会根据指定的运行级别进入对应的 rcN.d 目录,并按照文件名顺序检 索目录下的链接文件
对于以 K 开头的文件,系统将终止对应的服务
对于以 S 开头的文件,系统将启动对应的服务
查看运行级别用:runlevel
进入其它运行级别用:init N,比如运行级别 0 为关机,运行级别 6 为 重启系统,如果输入 init 0,则系统会关机,输入 init 6,则系统会重启。
了解了
Linux 系统的运行级别,我们就可以通过手动的去修改对应 启动级别里面的脚本内容,甚至自己新建一个
sh 脚本来执行更复杂 的开机启动内容了。