rc的init过程:
rc.c 里的main()函数里,如果是执行的程序是init,会执行到这:init_main_loop()//代码在init.c

/* Basic initialization */
init_time();//设置时间
system("dev_init.sh")//这句会执行/sbin/dev_init.sh ,dev_init.sh又会执行/sbin/mtd_storage.sh 建立各大种脚本, //,执行 启动脚本-初始化,就是自定义设置-》脚本-》[url=]在路由器初始化前执行:[/url]
init_nodes();//建立设备节点
init_mdev();//安装设备驱动,/etc/mdev.conf是从重建的,哈哈,
....
init_router(); //这是一个重要函数,启动路由的各个服务(就是各个程疗啦,代码位于rc.c) //把各种服务启动后,会执行启动后脚本,就是自定义设置-》脚本-》[url=]在路由器启动后执行:[/url]
                                                      //所以,要自己加一个新的程序能开机就启动,要在这里面加代码哦,或者写在启动后执行的脚本里。。。。。。。
下面进入信号的处理,init进程变成一个后台 通知服务,处理各种通知

还是科普下linux的信号处理机制:《深入理解linux内核》里讲的有:

特定的事件都是有定义的,具体的百度下,本RC里用的,主要是两个:SIGUSR1(这个是用户自定义的)和SIGALRM(定时信号,用于与硬件相关操作)

在shared/notify_rc.c里,是所有产生通知的地方,会在"/tmp/rc_notification" "/tmp/rc_action_incomplete" 这两个文件夹,建立通知名称,然后用kill(1, SIGUSR1);通知/init 程序执行信号处理(init的pid=1,内核启动后启动的第一个程序)
看init.c里信号处理主循环的代码:
                if (sig_usr1_received) {
                        sig_usr1_received = 0;
                        handle_notifications();
                }
                if (sig_alrm_received) {
                        sig_alrm_received = 0;
#if defined (USE_USB_SUPPORT) || defined (USE_STORAGE)
                        on_deferred_hotplug_dev();
#endif

如果是一些通知,发送kill(1, SIGUSR1)过来的,会执行handle_notifications();//一个超长超多if...elseif...else,里面就是各个通知怎么处理啦
如果支持USB,有定时信号(像由handle_notifications()也会产生些,看代码nvram_set_int_temp("usb_hotplug_md", 1);alarm(5);)alarm()这个函数,会触发SIGALRM信号。
所以,绕来绕去,又到了rc里了。

很多人想加功能么,首先要这个程序本身能运行,对吧,都不能运行肯定就不行啦,我们想要的,是要能更方便的修改这个程疗的参数。这就是网页端存在的理由。
这个网页端的每个页面,都是表单与提交表单,
响应的页面start_apply.htm吧。最行,都执行了这三个函数:
<% update_variables(); %>//更新参数,会执行user\httpd\web_ex.c里的update_variables_ex()
<% asus_nvram_commit(); %>//更新nvram
<% notify_services(); %>//通知相应服务重启,这里也绕到rc的init的信号处理啦。
如果要自己新增功能,要在参数里加你程序需 要的参数,最后,加相应的通知,和通知相关的处理函数。
也有另一种做法,新增的程序,功能是执行一个脚本,然后从脚本时启动你想要的功能和程序。。。。。你以后想改,只需要改这个脚本就行,更有扩展性,对不对,感觉有点像宏内核与微内核的关系。

分析Padavan的代码二相关推荐

  1. 分析Padavan的代码三

    前面说到httpd的几个重要流程,update_variables(); asus_nvram_commit(); notify_services();这就是更改设置后的几个操作:1.更新参数集:2. ...

  2. 分析Padavan源代码,二

    2019独角兽企业重金招聘Python工程师标准>>> 接着上回说:https://www.right.com.cn/forum/thread-212972-1-1.html rc的 ...

  3. WGCNA分析 | 全流程代码分享 | 代码二

    – 关于WGNCA的教程,本次的共有三期教程,我们同时做了三个分析的比较,差异性相对还是比较大的,详情可看WGCNA分析 | 你的数据结果真的是准确的吗??,这里面我们只是做了输出图形的比较差异,具体 ...

  4. 二维正态分布图python代码_Python数据可视化正态分布简单分析及实现代码

    Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候... 正态分布(Normaldistribution),也称"常态分布",又名高斯分布(Gaussiandi ...

  5. 20189208 2018-2019-2 《移动平台开发实践》分析小组项目代码

    20189208 2018-2019-2 <移动平台开发实践>分析小组项目代码 一.代码的组成部分 app: manifests AndroidManifest.xml java com. ...

  6. 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. Adaboost算法原理分析和实例+代码(简明易懂)

    Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333   ...

  8. 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路

    文章目录 1 前言 2 回顾 2.1 主要内容 2.2 知识点回顾 3 实战分析 3.1 代码编写阶段 3.2 预编译阶段 3.2.1 No such file or directory (找不到某个 ...

  9. 【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现

    [机器学习]聚类算法DBSCAN.K-means.Mean Shift对比分析及具体代码实现 一.DBSCAN算法(具有噪声的基于密度的聚类方法) 1.算法原理 基于数据分布密度不同对数据进行聚类,把 ...

  10. Lab4 DPCM 压缩系统的实现和分析——C语言代码实现

    Lab4 DPCM 压缩系统的实现和分析--C语言代码实现 一.实验原理 原理实现框图如下: 将输入的像素值与前一个像素值的预测值作差,并对差值进行编码 编码后的差值一路直接输出 编码后的差值另一路通 ...

最新文章

  1. sqlite-1.0.0源码执行的基本流程概述
  2. COM线程模型的行为
  3. 自动化测试8大元素定位之xpath语法
  4. 图片预览------photoswipe 使用
  5. redis工具类_SpringBoot 操作 Redis 数据
  6. 关于String的常用方法
  7. 瑞利信道建模 matlab程序原理到实现
  8. 【Python打卡2019】20190421之52周存钱挑战
  9. 三八节活动答题运营复盘
  10. unity人物添加动作进行播放
  11. CDR各版本文件不兼容的原因
  12. Java简单雷电游戏代码
  13. 竞价排名真不是谁出价最高,一定排在最前面(史上最大误会)
  14. 为啥IEEE754浮点数尾数用原码不用补码?
  15. 快速完成小程序转App的方法
  16. 右键我的电脑无法打开计算机管理的解决方法
  17. Java筛选重复名字输出单一的,java - 输入:一个单词的字符串。 打印给定字符串的所有重排,而无需重复。 爪哇 - 堆栈内存溢出...
  18. word 显示所有书签
  19. 基于NOVATEK NT98332 的AI智能监控录影DVR方案
  20. 六级(2020/12-1) Text1

热门文章

  1. html360全景图原理,HTML5中Canvas如何实现360度全景图
  2. 黑马程序员_java语言基础_概述
  3. 图解|什么是蒙提霍尔问题(三门问题)
  4. 微生物组-扩增子16S分析第10期(线上/线下同时开课,本年最后一期)
  5. 移动端网站设计需要注意的四要点
  6. 随心情更新的学习笔记——JS代码之栈的佩兹的糖果盒
  7. Phython学习—— 基础语法
  8. ios 应用跳转商店
  9. editplus java显示竖线_EditPlus对齐竖线怎么调出来?
  10. Android系统应用开发