除了基本的命令之外,BusyBox 还支持 init 功能,如同其它的 init 一样,BusyBox 的 init 也是完成系统的初始化工作,关机前的工作等等,我们知道在 Linux 的内核被载入之后,机器就把控制权转交给内核,内核启之后做了一些工作,然后找到根文件系统里面的 init 程序,并执行它。init 进程会依次进行以下工作: 为 init 设置信号处理过程; 初始化控制台; 剖析 /etc/inittab 文件; 执行系统初始化命令行,缺省情况下会使用 /etc/init.d/rcS; 执行所有导致 init 暂停的 inittab 命令(动作类型:wait); 执行所有仅执行一次的 inittab命令(动作类型:once); 一旦完成以上工作,init 进程便会循环执行以下进程: 执行所有终止时必须重新启动的 inittab 命令(动作类型:respawn) 执行所有终止时必须重新启动但启动前必须询问用户的 inittab 命令(动作类型:askfirst) 初始化控制台之后,BusyBox 会检查 /etc/inittab 文件是否存在,如果此文件不存在,BusyBox 会使用缺省的 inittab 配置,它主要为系统重引导,系统挂起以及 init 重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1 到 tty4)设置启动 shell 的动作。如果未建立这些设备文件,BusyBox 会报错。 Busybox 的 init 进程在初始化的时候会查看是否有 /etc/inittab 文件,如果有则解析它。 inittab 文件中每一行的格式如下所示: id:runlevel_ignored:action:command id:对 BusyBox 而言,id 用来指定启动进程的控制终端。如果省略,则使用与 init 进程一样的控制终端。 runlevel_ignored:对于 Busybox init 程序,这个字段没有意义,可以省略。 action:表示 init 程序如何控制这个子进程: action 说明 sysinit 为 init 提供初始化命令脚本的路径 wait 告诉 init 必须等到相应的进程完成之后才能继续执行 once 仅执行相应的进程一次,而且不会等待它执行完成 respawn 每当 init 进程监测到该进程终止时,重新启动该它 askfirst 与 respawn 类似,不过 init 进程先输出 “Please press Enter to actvie this console”,等用户输入回车键之后才启动子进程 shutdown 当系统关机(halt/reboot)时,执行相应的进程 restart 当 init 重新启动时(restart init when a QUIT is received),执行相应的进程,通常此处所执行的进程就是 init 本身 ctrlaltdel 当按下 Ctrl + Alt + Delete 组合键时,执行相应的进程 process:要执行的程序,它可以是可执行程序,也可以是脚本 实例: # Note: BusyBox init works just fine without an inittab. If no inittab is # found, it has the following default behavior: # ::sysinit:/etc/init.d/rcS # ::askfirst:/bin/sh # ::ctrlaltdel:/sbin/reboot # ::shutdown:/sbin/swapoff -a # ::shutdown:/bin/umount -a -r # ::restart:/sbin/init # tty2::askfirst:/bin/sh # tty3::askfirst:/bin/sh # tty4::askfirst:/bin/sh # # Boot-time system configuration/initialization script. # This is run first except when booting in single-user mode. # ::sysinit:/etc/init.d/rcS # /bin/sh invocations on selected ttys # # Note below that we prefix the shell commands with a "-" to indicate to the # shell that it is supposed to be a login shell. Normally this is handled by # login, but since we are bypassing login in this case, BusyBox lets you do # this yourself... # # Start an "askfirst" shell on the console (whatever that may be) ::askfirst:-/bin/sh # Start an "askfirst" shell on /dev/tty2-4 tty2::askfirst:-/bin/sh tty3::askfirst:-/bin/sh tty4::askfirst:-/bin/sh # /sbin/getty invocations for selected ttys tty4::respawn:/sbin/getty 38400 tty5 tty5::respawn:/sbin/getty 38400 tty6 # Example of how to put a getty on a serial line (for a terminal) #::respawn:/sbin/getty -L ttyS0 9600 vt100 #::respawn:/sbin/getty -L ttyS1 9600 vt100 # # Example how to put a getty on a modem line. #::respawn:/sbin/getty 57600 ttyS2 # Stuff to do when restarting the init process ::restart:/sbin/init # Stuff to do before rebooting ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff -...
2017年5月
嵌入式、物联网技术交流分享调制指数
调制指数(modulation index,modulation depth) 表示调制变量在载波未经调制时的值的附近的变化程度,在不同的调制类型中有不同的定义。 振幅调制指数(amplitude modulation index) $h=\dfrac{M}{A}=\dfrac{U_{max}-U_{min}}{U_{max}+U_{min}}$ h:调幅指数 M:调制信号幅度(峰值) A:载波信号幅度 $U_{max}$:调幅波包络的最大值 $U_{min}$ :调幅波包络的最小值 h 表明载波振幅受调制控制的程度,一般要求 0 ≤ h ≤ 1,以便调幅波的包络能正确地表现出调制信号的变化。h > 1 的情况称为过调制。 频率调制指数(frequency modulation index) $h=\dfrac{\Delta f}{f_m}$ $\Delta f$ :最大载波频率偏移 $f_m$ :调制信号的最高频率成分 NFM 小于 0.5,WFM 大于 0.5。 相位调制指数(phase modulation index) $h=\Delta \theta$ △θ:信号调制过程中出现的最大相位差 在无线电传输中,频率调制 FM 的优点是它具有较大的信噪比,因此比等功率振幅调制(AM)信号能更好地抑制射频干扰。频率调制和相位调制是角调制的两种互补的主要方法。相位调制常作为实现调频的中间环节。ASK 属于线性变换,PSK 和 FSK 属于非线性变换,非线性变换有更高的抗干扰能...
HTTP 协议知识点
目前 HTTP 协议使用的最多的是 1.1 版本。 HTTP 1.0 与 HTTP 1.1 的区别 1、HTTP 1.1 支持长连接和请求流水线 1.0 只能使用短连接,每次请求完成后断开连接,新的请求需要重建新的连接。而 1.1 则支持长连接(持久连接,Persistent Connection),所以可以在一个连接中传送多个请求和响应,并且可以同时进行。 2、HTTP 1.1 增加 Host 字段 由于 HTTP 1.0 不支持 Host 请求头字段,浏览器无法使用主机头名来明确表示要访问服务器上的哪个 WEB 站点,这样就无法使用 WEB 服务器在同一个 IP 地址和端口号上配置多个虚拟 WEB 站点。1.1 则解决了这个问题。 3、HTTP 1.1 增加了一些新的状态代码,如 100(Continue)、101(Switching Protocols)等 4、HTTP 1.1 新增了 RANGE:bytes,用于断点续传。 5、HTTP 1.1 还提供了与身份认证、状态管理和 Cache 缓存等机制相关的请求头和响应头。 请求 标准协议支持六种请求方法:GET、HEAD、PUT、DELETE、POST、OPTIONS,与 CRUD 的对应关系是:PUT-->CREATE,GET-->READ,POST-->UPDATE,DELETE-->DELETE。 GET 可以直接写 URL 地址处传递数据,因为它没有消息体,需要传输的数据参数只能通过 URL 地址传递。 POST 可以插入消息体,所以客服端向服务端传递数据时可以通过这个消息体传递。 状态消息 当浏览器从 web 服务器请求服务时,服务器会返回状态消息,主要有几类: 1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。 HTTP 请求消息的结构 包括请求行、消息头、空行、消息体。 请求行只能通过一行发送,如:GET /index.html HTTP/1.1 消息头一般包括浏览器信息、用户认证等附加信息 空行用于在有消息体时与消息头分开; 消息体中装有客户端向服务端传输的数据,GET 没有消息体,POST 有消息体。 HTTP 响应消息的结构 包括状态行、消息头、空行、消息体。 状态行包含客服端请求的处理结...