openwrt 烧写完成之后, 第一次启动会设置 network 的相关参数, 如 ip地址, mac地址, 等.

这里跟踪一下启动之后直到网络参数设置的过程.

  1. /sbin/init -> procd -> "sysinit" -> /etc/rc.d/xxx

  2. /etc/rc.d/S10boot -> /etc/init.d/boot

  3. /etc/init.d/boot -> /bin/board_detect

  4. /bin/board_detect -> /etc/board.d/02_network

看看 /bin/board_detect 都做了什么:

#!/bin/sh

[ -d "/etc/board.d/" -a ! -f "/etc/board.json" ] && {
for a in `ls /etc/board.d/*`; do
[ -x $a ] || continue;
$(. $a)
done
} [ -f "/etc/board.json" ] || return 1
[ -f "/etc/config/network" ] || {
touch /etc/config/network
/bin/config_generate
}
  1. 如果存在 /etc/board.d 目录, 并且, 普通文件 /etc/board.json 不存在, 则执行 /etc/board.d/ 下的所有脚本

  2. /etc/board.json 被创建了, 则立即返回

    这里搞错了,谢谢回复中的朋友指正。 这段的逻辑是:/etc/board.json 存在的话,则继续往下执行;如果不存在则立即返回。

  3. 没有 /etc/board.json 文件, 说明 /etc/board.d/ 下的脚本没有按预期设置参数, 则继续尝试使用 /bin/config_generate 来设置.

这里的第1步使用 /etc/board.json 文件来保证 /etc/board.d/ 下的脚本只执行一次.

/etc/board.d/02_network 脚本中调用了 lib/functions/uci-defaults-new.sh 中的许多接口, 其中 board_config_update() 和 board_config_flush() 就用来创建 /etc/board.json 文件.

如果 /etc/config/network 文件不存在的话,则创建该文件,并执行 /bin/config_generate。下次开机时,由于 /etc/config/network 已经创建,则 /bin/config_generate 不再执行。

root@OpenWrt:/# cat /etc/board.json
{
"network": {
"lan": {
"ifname": "eth0",
"create_vlan": true,
"macaddr": "00:0c:43:76:20:b8"
}
},
"switch": {
"mt7530": {
"enable": true,
"reset": true,
"vlans": {
"lan": [
0,
1,
2,
3
],
"wan": [
4
],
"vlan3": [
5
]
},
"cpu_port": 6
}
}
}

今天查看 openwrt 14.07 release 版本, 其中对 network 的实现有点细微差别.

14.07 中在 /etc/init.d/boot 脚本会在开机时逐一执行 /etc/uci-deafults/ 目录下的脚本, 执行完之后再删除它. 这就保证了该目录下的脚本只会被执行一次, 以后再重启也不会执行到了. 除非恢复初厂设置.

network 的设置就是在 /etc/uci-defaults/02_network 脚本中完成的.

openwrt network 初始化的更多相关文章

  1. openWRT自学---初始化过程和主要脚本的分析

    参考文档: http://wiki.openwrt.org/doc/techref/process.boot http://blog.csdn.net/jk110333/article/details ...

  2. openwrt network interface(openwrt中的网络接口)

    这篇算是对openwrt网络接口的一个翻译吧,源地址:http://wiki.openwrt.org/doc/networking/network.interfaces network的接口类型:物理 ...

  3. Openwrt笔记-IPv6与启动顺序

    之前使用了nat6方案和x3c8021x实现了校园网上网和IPv6连接:但实际使用时经常出现莫名奇妙的问题.IPv6状态要么是无法连接网络,要么是无法连接Internet:经过研究,发现大概是自启动项 ...

  4. hostapd阅读(openwrt)-2

    深入追踪openwrt下的hostapd之后,发现openwrt无线管理机制格外的复杂,几乎所以的触发与回调均离不开ubus,关于ubus这里不作解释,先大概了解其用途即可(出门左转:https:// ...

  5. OpenWrt网络结构

    原文链接:http://www.freezhongzi.info/?p=104 OpenWrt网络结构 OpenWrt的网络配置很丰富,在我看来几乎可以完成任何网络结构.下图为一个支持OpenWrt的 ...

  6. SFTP客户端代码示例

    参考链接:SFTP客户端代码示例 操作系统:Windows7/8,VS2013 环境:libssh2 1.4.3.zlib-1.2.8.openssl-1.0.1g 原文: “从http://www. ...

  7. ZMQ和MessagePack的简单使用(转)

    近段日子在做一个比较复杂的项目,其中用到了开源软件ZMQ和MessagePack.ZMQ对底层网络通信进行了封装,是一个消息处理队列库, 使用起来非常方便.MessagePack是一个基于二进制的对象 ...

  8. [中英对照]Booting Process in Linux RHEL 7 | Linux RHEL 7启动过程

    Booting Process in Linux RHEL 7 | Linux RHEL 7启动过程 In this post, I will guide you booting process in ...

  9. Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)

    下载安装 OpenSSL 要编译 libssh2,必须先编译好 OpenSSL 的静态库,直接从 http://slproweb.com/products/Win32OpenSSL.html 下载已经 ...

随机推荐

  1. 牛腩新闻发布系统(二):SQLHelper重构(二)

    导读:在上一篇博客中,介绍了简单的SQLHelper重构,即数据库链接,打开和关闭链接的优化等.现在,将介绍参数化查询和执行命令类型的改造. 一.必要性 1,参数化查询 在上篇博客中,在查询的时候,仅 ...

  2. 九度oj 题目1108:堆栈的使用

    题目描述: 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. 输入: 对于每组测 ...

  3. 【Luogu】P2331最大子矩阵(DP)

    题目链接 这题的状态转移方程真是粗鄙. f[i][j][k]表示前i行用了j个矩阵状态为k的时候的最大值. k=0:两列都不选. k=1:取左弃右. k=2:选右弃左. k=3:左右都选,但分属于两个 ...

  4. POJ2096 Collecting Bugs(概率DP,求期望)

    Collecting Bugs Ivan is fond of collecting. Unlike other people who collect post stamps, coins or ot ...

  5. Maven常用参数及其说明【转:http://blog.csdn.net/wangjunjun2008/article/details/18982089】

    Maven常用参数及其说明 -h,--help                              Display help information-am,--also-make         ...

  6. Modular Production Line

     Modular Production Line 时空限制: 1000ms /65536K   An automobile factory has a car production line. Now ...

  7. 16.1113 模拟考试T1

    笔记[问题描述]给定一个长度为m的序列a,下标编号为1~m.序列的每个元素都是1~N的整数.定义序列的代价为累加(1->m-1 abs(ai+1-ai))你现在可以选择两个数x和y,并将序列?中 ...

  8. 星球大战 BZOJ 1015

    星球大战 [问题描述] 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  9. ASP.NET2.0 ObjectDataSource的使用详解《转》

    原文发布时间为:2008-08-02 -- 来源于本人的百度文章 [由搬家工具导入] ASP.NET2.0 ObjectDataSource的使用详解(2) http://mqingqing123.c ...

  10. 使用plantuml生成uml图

    主要包括以下三步: 一.到http://plantuml.com/download 下载plantuml.jar ,我将这个软件放置到home的/home/munication/WORKM/Progr ...