深入探究Linux下ARM启动脚本(/etc/init.d/rcS)在什么位置被调用

每次启动板子都要重新设置IP地址,很麻烦,就从网上搜搜怎么设置成开机自动修改IP地址。

搜的过程中,想着Linux里面的启动脚本是在哪个地方被调用?想想还是自己理一遍。

(自己理解的启动脚本就是在开机过程中固定调用某几个脚本,但这样感觉会不会有点写死了,Linux可能有更好的解决方案)

百度上全部都是讲如何使用启动脚本的...很少有文章去研究启动脚本在哪个位置被调用......

还是找到了一点蛛丝马迹。

首先,初步搜索“嵌入式Linux系统启动脚本”,大致可以知道:将想要设置某些服务自启动,只需要在/etc/init.d/rcS下添加脚本就行了。

然后,搜索“/etc/init.d/rcS内容分析”,大致可以知道:Linux内核启动过程中,会挂载文件系统,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox 的链接,也就是说,系统起来后运行的第一个程序就是busybox本身。

再然后,busybox会解析“/etc/inittab”配置文件,而/etc/inittab配置文件里面会运行/etc/init.d/rcS这个脚本!

追根溯源,流程大致如下: init程序(linuxrc) -> busybox -> /etc/inittab -> /etc/init.d/rcS

接下来,继续分析一下/etc/init.d/rcS这个脚本,内容如下:

  1. #! /bin/sh // 必须含有这个第一行,表明是bash脚本
  2. /bin/mount -a // 自动加载文件系统,文件系统是通过fstab来配置的
  3. echo " // 原来系统启动后的标志是在这个位子被打印出来的
  4. _ _ _ _ _ _ _ _ _ _ _ _
  5. \ _ _ _ _ _ ___
  6. / /__/ \ |_/
  7. / __ / - _ ___
  8. / / / / / /
  9. _ _ _ _/ / / \_/ \_ ______
  10. ___________\___\__________________
  11. "
  12. ENV_CONF=/etc/conf/env.conf
  13. [ -f ${ENV_CONF} ] && source ${ENV_CONF}
  14. for initscript in /etc/init.d/S[0-9][0-9]* // 遍历/etc/init.d/下面所有S开头,符合格式Snn*格式的服务启动脚本
  15. do
  16. if [ -x $initscript ] ; // 如果服务启动脚本文件存在,执行下面启动流程
  17. then
  18. echo "[RCS]: $initscript"
  19. source $initscript // 执行启动脚本
  20. fi
  21. done

分析后发现,在rcS脚本中,会遍历/etc/init.d/下面所有S开头,符合格式Snn*格式的服务启动脚本,如果有则启动脚本。

总结下吧,如果我们想要在开发板中运行一个脚本,可以有如下操作:

    1.写一个脚本文件,然后在 /etc/inittab配置文件中添加并运行该脚本

    2.写一个脚本文件,脚步文件名符合“S[0-9][0-9]*”,这样在/etc/init.d/rcS脚本执行过程中会被执行

    3.直接在/etc/init.d/rcS脚本文件末尾添加需要的脚本代码

注意!!!

    之前理清了启动流程,以为可以直接修改init.d目录下的文件,然后实际操作的时候发现并不行!

    后来明白原因应该是,这几个文件都是加载根文件系统时被添加进来的,所以,如果要修改启动脚本,必须是在制作根文件系统时,修改这几个脚本文件。如果在系统启动后,通过vi /etc/init.d/rcS修改脚本,那么系统重新启动后,脚本又会恢复成原来的。(因为这几个脚本都是根文件系统下面的,每次启动都从根文件系统下重新拷贝过来)

至此,结束。

(0)

相关推荐

  • iTOP3399开发板Debian系统设置开机自启动脚本

    如果想要开机运行某程序,需要在开发板上编辑"/etc/rc.local"文件,在此文件添加你想开机运行的命令即可.这里给大家做一个示范,我们的需求是开机自启动 hello.sh 脚 ...

  • 干货 | 浅析程序开机自启动

    在<实用 | 10分钟教你搭建一个嵌入式web服务器>.<实用 | 10分钟教你通过网页点灯>及这两篇文章中我们每次都是先登录开发板,再启动我们的boa服务器. 显然,这很不方 ...

  • Linux 什么时候执行rcS启动脚本文件

    Linux内核加载后->执行Linuxc->/bin/busybox解析-> /etc/inittab -> /etc/init.c/rcS->/etc/profile ...

  • LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项

    用uefi装了几次次archlinux,搞的uefi启动选项下多出来好多启动项..这东西重格硬盘也是不好用的.发现以下方法可以解决. efibootmgr   //显示efi的启动项 删除一个引导项 ...

  • 下一个启动的板块

    今天市场再次震荡反弹,涨幅前列的板块基本都是昨天收评[断崖式下跌]中跟大家提到的板块,其中包括上周四跟大家讲的[一个长预期的股票]石化双熊,5个交易日涨幅10%,这么大盘子也是很不错了. 像无人驾驶. ...

  • Linux下文件搜索、查找、查看命令

    Linux下文件搜索、查找、查看命令

  • RocketMQ在Linux中安装启动

    RocketMQ: RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金会作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会 ...

  • 摩托车烧机油最简单的修复方法 可以自己观察下是否启动才会出

    导语:谈论到机油,大家应该都知道,有人问摩托车烧机油最简单的修复方法,还有人问踏板摩托车烧机油怎么办,这到底怎么回事呢?事实上摩托车烧机油最简单的修复方法呢,今天小编就与大家分享摩托车烧机油最简单的修 ...

  • linux下vsftpd的安装及配置使用详细步骤

    安装 yum install vsftpd 新建/home/uftp目录作为用户主目录 mkdir /home/uftp 新建用户uftp: useradd -d /home/uftp -s /bin ...

  • 苏州河沿岸黄浦段(河南路以东)历史探究(下)

    下面用一组老照片来展示解放前本沿岸的风貌(由东向西). 图为在外滩公园向西偏北望 图为外白渡桥鹤马加礼纪念碑 图为在外白渡桥南堍沿苏州路向西眺望(1920年代) 图为划船俱乐部 图为划船俱乐部 图为外 ...

  • Linux下安装配置Tengine:Nginx

    Linux下安装配置Tengine:Nginx 简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性. Tengine的性能和 ...