openWrt是实现智能路由器功能的最成功的开源系统主要在于3个方面:领导者、基础设施、实现软件的技术openWrt是linux的发行版openwrt是嵌入式设备上运行的linux系统openWrt 的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统,也加快了开发速度openWrt社区采用6大基础设施工具支撑整个社区的运转:1.代码管理工具git可以跟踪文件和目录的历史信息;2.邮件列表代码审查及代码提交集成的地方;3.自动构建工具buildbot编译机器人,支持持续集成和自动化测试,以及应用程序的自动化部署和软件开发的管理;4.文档管理工具WiKi可以让任何参与人员非常方便地进行编辑、访问和搜索;5.Trac集成WiKi和问题跟踪管理系统的项目管理平台;6.技术论坛技术讨论平台,今天小编就来聊一聊关于openwrt 查看文件夹命令?接下来我们就一起去研究一下吧!

openwrt 查看文件夹命令(学习常用命令及备注)

openwrt 查看文件夹命令

openWrt是实现智能路由器功能的最成功的开源系统。主要在于3个方面:领导者、基础设施、实现软件的技术。openWrt是linux的发行版。openwrt是嵌入式设备上运行的linux系统。openWrt 的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统,也加快了开发速度。openWrt社区采用6大基础设施工具支撑整个社区的运转:1.代码管理工具git。可以跟踪文件和目录的历史信息;2.邮件列表。代码审查及代码提交集成的地方;3.自动构建工具buildbot。编译机器人,支持持续集成和自动化测试,以及应用程序的自动化部署和软件开发的管理;4.文档管理工具WiKi。可以让任何参与人员非常方便地进行编辑、访问和搜索;5.Trac。集成WiKi和问题跟踪管理系统的项目管理平台;6.技术论坛。技术讨论平台。

openWrt英文官网:https://openwrt.org/ 中文官网:http://www.openwrt.org.cn/openWrt技术上的成功秘诀在于:1.统一编译框架;2.统一配置接口(uci);3.开放的软件包管理系统及读写分区系统;4.系统总线(ubus);5.进程管理模块(proc);

openWrt特点:1.代码里不含第三方开源宝,只包含开源包地址连接;2.编译时自动下载源代码、打补丁来满足指定平台要求,并编译,还可以修改Makefile来下载最新的软件包;3.使用LuCI作为最终用户管理界面。LuCI是以Apache许可协议发布的web管理功能代码;4.UCI通用配置管理方法;5.通过脚本来调用iptables来实现防火墙功能,配置保存在UCI文件中;6.开放和可扩展的OPKG格式安装升级包。

路由器的整体架构:管理平面、控制平面、数据转发平面。openWrt是一个基于Linux的智能路由器操作系统,默认内置了一些基础功能,主要功能为3部分:网络功能、系统管理功能、状态监控功能。

【开发环境及编译分析】编译环境:VMware虚拟机、ubuntu系统安装详细步骤:http://blog.csdn.net/u013142781/article/details/50529030安装相关工具和库:(1) 安装 SVN 工具,用于下载 openwrt 源码:$:' sudo apt-get install subversion(2) 安装 git 工具$:' sudo apt-get install git-core(3) 安装依赖的库文件$:' sudo apt-get install gcc g binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils ncurses-term zlib1g-dev libncurses5-dev gawk下载openwrt源码:$:' mkdir openwrt$:' cd openwrt/$:' git clone git://git.openwrt.org/openwrt.git下载完 openwrt 的源码后,为了使 openwrt 支持更多的软件,需要更新和安装其他源上面的软件:$:' ./scripts/feeds update -a$:' ./scripts/feeds install -a编译前的配置:$:' make menuconfig根据CPU和路由器进行配置,配置后生成默认的编译配置文件 .config。编译:$:' make V=s -j4大概 4、5 个小时编译就会完成,V=s可以显示详细的编译过程和出错信息,-j4通过4个线程来编译,会快一些,然后在源码目录 bin 下面生成镜像。openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin 这个就是我们要的镜像。

>> 单独编译一个模块,以TcpDump为例:$:' make package/tcpdump/clean // 清除编译生成的文件$:' make package/tcpdump/prepare // 编译准备,下载、解压缩、打补丁$:' make package/tcpdump/configure // 根据设置选项配置生成Makefile$:' make package/tcpdump/compile // 根据Makefile进行编译$:' make package/tcpdump/install // 生成安装包

openWrt顶层目录含义:config/ // 编译选项配置文件docs/ // 文档目录include/ // 包含准备环境脚本、下载脚本、编译Makefile以及编译指令package/ // 各种功能的安装包scripts/ // 包含准备环境脚本、下载脚本、编译Makefile以及编译指令target/ // 嵌入式平台toolchain/ // 编译器和C库等tools/ // 通用命令,用来生成固件的辅助工具

在openWrt固件中,几乎所有的东西都是软件包(package),可以编译为 .ipk 结尾的安装包,这样就可以很方便的安装、升级和卸载。openWrt编译生成目录含义:dl/ // 编译时下载软件代码包临时目录feeds/ // 扩展软件包目录bin/ // 编译完成后的最终成果目录build_dir/ // 编译中间文件目录staging_dir/ // 编译安装目录log/ // 如果打开了log选项,则编译log保存在该目录下

openWrt典型编译脚本功能:scripts/download.pl // 下载编译软件包源代码scripts/patch-kernel.sh // 打补丁脚本scripts/feeds // 收集扩展包的工具(该命令在编译前需要执行)scripts/diffconfig.sh // 收集和默认配置不同之处的工具scripts/kconfig.pl // 处理内核的配置scripts/deptest.sh // 自动软件包依赖项检查scripts/metadata.pl // 检查metadatascripts/rstrp.sh // 丢弃目标文件中的符号scripts/timestamp.pl // 生成文件的时间戳scripts/ipkg-make-index.sh // 生成软件包的ipkg索引scripts/ext-toolchain.sh // 工具链scripts/strip-kmod.sh // 删除内核模块的符号信息,使文件变小

feeds脚本功能扩展:通过feeds安装软件包后,在后面执行 make menuconfig 命令时,才可以对相关软件包选择是否编译。例如安装 luci-app-firewall 软件包的命令为:./scripts/feeds install luci-app-firewall

【openWrt包管理系统】软件包管理:$:' opkg update// 更新可以安装的软件包列表$:' opkg install// 安装软件包,需要第三个参数传递一个软件包的名称。如 opkg install file$:' opkg remove// 卸载安装包,需要第三个参数传递一个软件包的名称。autoremove可以将不需要的安装包也删除。如 opkg remove file --autoremove$:' opkg upgrade// 升级软件包,需要第三个参数传递一个软件包的名称。一般只用来升级应用(非内核软件)。查询信息:$:' opkg list// 列出所有可使用的软件包$:' opkg list-installed// 列出系统中已经安装的软件包$:' opkg list-changed-conffiles// 列出用户修改过的配置文件$:' opkg files <pkg>// 列出属于这个软件包中的所有文件$:' opkg search <file>// 列出提供file的软件包,需要传递文件的绝对路径$:' opkg find <regexp>// 列出软件包名称和regexp匹配的软件包$:' opkg info [pkg]// 显示已安装pkg软件包的信息$:' opkg download <pkg>// 将软件包pkg下载到当前目录$:' opkg print-architecture// 列出安装包的架构$:' opkg whardepends [-A] [pkg]// 针对已安装的软件包,输出依赖这个软件包的软件包

opkg命令选项:-A 查询所有软件包-d <dest_name> 使用dest_name作为软件包安装的根目录-f <conf_file> 使用conf_file作为opkg的配置文件--nodeps 不按照依赖来安装,只安装软件包自己--autoremove 卸载软件包时自动卸载不再使用的软件包--force-reinstall 强制重新安装软件包

【openWrt系统配置】2017.05.16MVC(Model-View-Control)模式是经典的Web开发编程模式。openWrt也是采用该设计模式,模型层采用统一配置接口UCI(Unified Configuration Interface)。

>>UCI简介配置文件由配置节(section)组成,语法如下:config <type> ["<name>"] #sectionoption <name> "<value>" #option

错误的UCI文件语法:option 'example" "value' (引号没有配对)option example some value with space (带有空格的值缺少引号)

>>统一配置原理openWrt系统的核心配置文件,都位于/etc/config/ 目录下。例如修改网络ip:$:' uci set network.lan.ipaddr=192.168.6.1$:' uci commit network通过运行以下命令修改生效:$:' /etc/init.d/network restart

常用功能配置文件含义:/etc/config/dhcp // dnsmasq软件包配置,包含dhcp和dns设置/etc/config/dropbear // SSH服务器选项/etc/config/firewall // 防火墙设置,包含网络地址转换、包过滤、端口转发等/etc/config/network // 网络配置,包含桥接、接口、路由配置/etc/config/system // 系统配置,包含主机名称、网络时间同步等/etc/config/timeserver // rdate的时间服务列表/etc/config/luci // 基本的LuCI配置/etc/config/wireless // 无限设置和wifi网络定义/etc/config/uhttpd // web服务器选项配置/etc/config/upnpd // miniupnpd UPnP服务设置/etc/config/qos // 网络服务质量的配置文件定义

UCI命令可以写入配置文件配置信息,格式如下:$:' uci [<options>] <command> [<arguments>]$:' uci// 直接输入uci可以查看uci的帮助信息和具体参数

UCI命令含义:add // 增加指定配置文件类型为 section-type 的匿名区段add_list // 对已存在的list选项增加字符串commit // 对给定的配置文件写入修改export // 导出一个机器可读格式的配置import // 以UCI语法导入配置文件changes // 列出配置文件分阶段修改的内容,即未使用 uci commit 提交的修改show // 显示指定的选项、配置节或配置文件get // 获取指定区段选项的值set // 设置指定配置节选项的值delete // 删除指定的配置节或选项rename // 对指定的选项或配置节重命名为指定的名字revert // 恢复指定的选项,配置节或配置文件

UCI API编程接口Libubox:Libubox是openWrt的一个必备的基础库,包含大小端转换、链表、MD5等实用工具基础库,采用Cmake来编译。$:' sudo apt-get install cmake// 安装Cmake工具$:' tar -xzf libubox-2015-06-14-dlc66ef1131d14f0ed197b368d03fxxx.tar.gz$:' cd libubox-2015-06-14$:' cmake -D BUILD_LUA:BOOL=OFF -D BUILD_EXAMPLES:BOOL=OFF.$:' make$:' sudo make install// 头文件 /usr/local/include/libubox;动态链接库libubox.so和libubox.a在/usr/local/lib/目录下

进入dl目录,进行解压缩和编译安装:$:' tar -xzf uci-2015-04-09.1.tar.gz$:' cd uci-2015-04-09$:' cmake -D BUILD_LUA:BOOL=OFF .$:' make$:' sudo make install$:' sudo ldconfig$:' gcc test.c -o test -luci// 编译test.c时连接UCI库

系统内核设置:sysctl.conf是系统启动预加载的内核配置文件,通过sysctl命令去读和设置到系统中。语法格式:# comment; commenttoken = value// 以#号和分号开头的均为注释行,并且忽略空白航,配置值以 key=value 形式进行设置,例如:// 设置打开报文转发为 net.ipv4.ip_forward=1

sysctl.conf文件位置:package/base-files/files/etc/sysctl.confsysctl 是用于修改运行中的内核参数的命令,所有可用的内核参数均在 /proc/sys/ 目录下。常用命令举例:$:' /sbin/sysctl -a// 显示所有的内核配置$:' /sbin/sysctl -n kernel.hostname// 查询kernel.hostname的值$:' /sbin/sysctl -w kernel.hostname="zhangsan"// 修改系统主机名称为zhangsan$:' /sbin/sysctl -p /etc/sysctl.conf// 加载配置

例如:查询是否打开路由转发:$:' cat /proc/sys/net/ipv4/ip_forward打开路由转发设置:$:' echo "1" > /proc/sys/net/ipv4/ip_forward

系统配置文件信息:/etc/rc.local // 想要在开机后就执行的命令可以写入该文件/etc/profile // 为系统的每个登陆用户设置环境变量/etc/shells // openWrt采用的shell是 /bin/ash/etc/fstab // 各种文件系统的描述信息/etc/services // 互联网网络服务类型列表/etc/protocols // 协议定义描述文件

【openWrt系统下的软件开发】>>编译构建系统以dnsmasq软件为例,会有以下文件和目录:/dnsmasq/Makefile // Makefile提供下载、编译、安装、以及生成OPKG安装包的功能/dnsmasq/files/dnsmasq/src

>>Makefile中变量定义PKG_NAME // 软件包名称PKG_VERSION // 软件版本号...以具体Makefile文件中的变量做实际查看。

>>软件包定义$:' make menuconfigBuild/package/

>>构建软件包模块的编译步骤:准备、配置、编译、安装。

总结:通常新增一个模块的主要步骤如下:1. 在package下增加一个目录,例如hello/;2. 添加src目录和files目录;3. src目录存放模块源码;4. files存放模块的配置文件及启动脚本等;5. 在hello/下增加Makefile,在Makefile中增加编译脚本和安装脚本。6. 编译;$:' make package/hello/build7. 生成安装包;$:' make package/hello/install或者快速重新进行整个编译过程:$:' make package/hello/{clean,compile,install}如果加入平台编译过程,需要在make menuconfig 时选择hello模块,再在隐藏的配置文件.config 中增加一项CONFIG_PACKAGE_hello=y这样就可以在编译整个系统时自动编译软件模块。

hello示例:Page89Makefile示例:Page92

【补丁生成及应用工具】diff工具:diff -up 或 diff -uprN来创建补丁包。命令使用举例:$:' diff -up ../src/dhcp.c ../src/dhcp_after.c -up > dhcp.patch// 修改前和修改后的文件进行多个文件的补丁包创建

diff工具主要参数如下:-p --show-c-function // 在每一个更改处显示C函数-u -U NUM --unified[=NUM] // 按统一格式输出,子啊补丁中输出前后NUM行,默认是3行-N --new-file // 在补丁文件里包含新的文件内容-r --recursive // 递归比较子目录,很多文件在不同目录里修改时使用

patch工具:应用补丁命令如下:$:' patch -p1 < ../dhcp.patch恢复应用前的补丁,使用-R参数来执行,即返回到应用补丁前的代码的命令:$:' patch -R -p1 < ../dhcp.patch

如果补丁文件是gzip和bzip2压缩的,使用如下命令:$:' zcat path/to/dhcp_patch.z.gz | patch -p1$:' bzcat path/to/dhcp_patch.z.bz2 | patch -p1

patch工具主要参数如下:-f // 强制打入补丁,不用询问-p1 // 略过一层前导目录-E // 打完补丁后,如果文件内容为空,会将其移除-d // 在指定目录下执行-R // 用于删除补丁--dry-run // 尝试打入补丁,输出打入补丁之后的结果,但不做任何真正修改--verbose // 告诉patch输出当前尽可能多的信息

【GDB调试】2017.05.18GDB是GNU项目开发的针对C/C 的语言代码调试工具。GDB主要有4个功能来帮助捕捉发生bug时的状态:1. 启动应用程序;2. 调试断点点可停住;3. 检查程序中当前的状态;4. 动态改变程序;

启动程序调试:在编译的时候加上 -g 选项即可产生调试信息,通常程序交给客户的时候会使用 -O 选项来优化,有一些编译器不能同时处理 -g 和 -O 选项。例如:$:' g -g hello.c -o hello$:' gdb hello

常用GDB命令:break // 在指定的位置或函数处设置断点run // 开始执行调试程序bt // 查看程序运行栈信息,例如:bt fullcontinue // 在程序中断之后继续执行程序next // 单步执行,如果是函数则执行完这个函数step // 单步执行,如果是函数则进入函数内部set args // 设置启动参数 set argsprint // 输出表达式或变量值quit // 退出程序调试list // 输出现在执行程序停止位置附近的代码help // 输出GDB命令的帮助信息

环境变量设置:(gdb)show paths// 显示程序的查找路径列表(gdb)show environment HOME// 显示系统的环境变量(gdb)set environment varname[=value]// 设置环境变量(gdb)unset environment varname// 取消环境变量设置

设置日志文件:(gdb)set logging on// 经屏幕输出同时输出到文件中,默认输出到当前目录下的 gdb.txt(gdb)set logging off// 关闭log(gdb)set logging file file// 默认输出为gdb.txt 此命令可以将当前输出的log文件名改名(gdb)set logging overwrite// overwrite参数可以每次重写一个全新的文件(gdb)show logging// 输出当前日志的设置

获取帮助,如:$:' help$:' help stack

命令总结:(gdb)run // 启动调试程序(gdb)attach // 关联到正在运行中的进程(gdb)set args // 设置程序启动时的参数(gdb)show args // 显示启动参数(gdb)set environment // 设置环境变量(gdb)show environment // 如果没有参数就显示左右环境变量(gdb)unset environment // 取消环境变量设置(gdb)help // 获取帮助(gdb)apropos // 搜索命令帮助

指令断点管理:break [LOCATION] [thread THREADNUM] [if CONDITION]LOCATION:可以是代码行号、函数名、或者一个带有星号的地址THREADNUM:是线程号,可以用 info threads 命令来查看线程号(gdb)info threads // 查看线程号(gdb)info break // 显示断点信息命令CONDITION:是一个布尔表达式tbreak 用于设置一个临时断点,当命中这个断点后将删除断点。clear 或 delete 可以用于删除断点。

disable 比断点删除更好的办法,暂时不生效,使用的时候可再次启用,格式如下:(gdb)disable [breakpoints] [range...]// breakpoints 为断点编号,如果不指定,表示所有断点都不生效(gdb)enable [breakpoints] [range...]// 启用所指定的断点。例如:(gdb)delete breakpoint 1 // 删除编号为1的断点(gdb)disable breakpoint 1 // 禁止编号为1的断点(gdb)enable breakpoint 1 // 允许编号为1的断点(gdb)clear 50 // 50为源文件行号,该位置的所有断点将被清除

观察点管理:观察点,是一个特殊的断点,如果表达式修改了值程序执行就停止了,表达式可以是变量,也可以是几个变量的组合,有时也叫数据断点。watch // 为表达式设置一个观察点,一旦表达式值发生变化时,马上停止执行程序rwatch // 设置读观察点,读到表达式的值时,程序停止执行awatch // 设置访问观察点,当表达式读或写时,将停止执行程序info watchpoints // 列出当前设置的所有观察点

捕获点管理:使用捕获点调试某些程序事件,如C 异常、共享库的加载、系统调用、进程启动等...当事件发生时,程序会停止执行。throw // 一个C 抛出的异常exec // 当程序执行exec函数创建进程时syscall // 参数为不火系统调用他们的名字或编号load // 加载共享库时fork // 当程序调用fork创建进程时tcatch // 设置临时捕获点

单步调试:continue // continue [ignore-count] 从断点停止的地方恢复程序执行,可缩写为c,ignore-count表示忽略这个位置断点的次数step // 继续执行程序知道控制到达不同的源码行,可进入函数,可缩写为snext // 单步跟踪,继续执行同一函数的下一行代码,不会进入函数,可缩写为nfinish // 继续运行程序直到当前选择的栈帧返回,并输出返回值,可缩写为finuntil // 执行程序直到大于当前已经执行的代码行,在程序循环时经常会用到,即循环体如果执行过一次,使用until命令将执行循环体完成后的下一行代码处停止

查看程序运行栈帧信息:backtrace [full]/[number] // 输出当前整个函数调用栈的信息,整个栈每个帧一行显示。frame // 为选择和输出栈帧up // 选择和输出栈帧down // 不带参数表示选择向下一层栈帧return // 返回到当前栈帧的调用处info frame // 显示栈帧的所有信息

查看运行中的源程序信息:list // 如果没有参数,默认输出当前10行代码或者紧接着上次的代码。list - // 输出当前位置之前的10行代码

查看运行时数据:print // 输出执行程序时的运行数据,可缩写为p,例如:p numx // 输出指定参数的地址信息 - 16进制,例如:x /FMT addressd // 10进制u // 16进制,无符号整型o // 8进制t // 2进制a // 16进制c // 字符格式f // 浮点数格式$pc // 程序计数器$fp // 栈指针$sp // 栈指针$ps // 处理器状态

动态改变程序的执行:print argc=2 // 修改变量的值set // 修改程序值jump // 跳转到指定行或地址来继续执行signal // 向程序发信号call // 调用函数,不输出函数返回值

【网络基础知识】OSI互联网协议层分为7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层TCP/IP协议层次分为4层:应用层、传输层、网络层、数据链路层

网络设备:集线器:HUB,在物理层上实现局域网的互联,可以实现电气信号的恢复和整型。网桥:工作在数据链路层,网桥负责分析目的MAC地址字段是否在对方网络上。路由器:Router,网络层设备,用于将两个或多个不同网络连接在一起。防火墙:Firewall,是在两个或多个网络之间用于设置安全策略的一个或多个系统的组合。

数据链路层:以太网:目前最流行的局域网传输标准。MAC地址:网卡物理地址,长度为6个字节,表示为12个十六进制的数字。例如:08:00:27:26:c5:5d广播域:发送到网络中所有节点的数据分组。网桥和交换机根据MAC地址转发数据帧,不隔离广播域。路由器不会转发广播报文,为广播域的边界。ARP协议:根据主机的IP地址来查询其网卡MAC地址,即通过目标IP知道对方的MAC地址。

IP协议:网络协议层主要包括两部分:IP和ICMP。IP协议是不可靠的、无连接的网络协议,可靠性需要上层协议来保证。IP协议报文格式可以百度查看。

IP地址分类:ipv4("4个字节的32位地址")ipv6 ("16个字节的128位地址")ip地址包括两部分内容,"网络号和主机号"。"A类":0~127 . 0~255 . 0~255 . 0~255 以0为首的8位网络地址 24位本地地址0.0.0.0 "主机号全0不能使用 ",主机号全0代表的是网络号。0.255.255.255 "主机号全1不能用 ",这代表的是该网络的广播地址。127.0.0.0 127.255.255.255"B类":128~191 . 0~255 . 0~255 . 0~255 以10为首的16位网络地址 16位本地"C类":192~223 . 0~255 . 0~255 . 0~255 以110为首的24位网络地址 8位本地"D类":以 1110 为首的32位多播地址(28位多播组号)"E类":以 11110 为首的32位多播地址(27位留后待用)

子网掩码:示例 ip(192.168.129/24, 前面24位全1,即子网掩码255.255.255.0 )

常见的特殊IP地址块:10.0.0.0/8 // A类内部私有地址172.16.0.0/12 // B类内部私有地址192.168.0.0/16 // C类内部私有地址127.0.0.0/8 // 本地回环地址,用于回路测试,不能路由到主机外部169.254.0.0/16 // 自动配置为成功后分配的ip地址0.0.0.0/8 // 本地网络,禁止使用255.255.255.255 // 受限广播地址net.255 // 网络广播地址

ICMP协议:使用IP协议进行传输报文,是一种面向无连接的协议,用于报告传输出错及控制,每一个网络层模块必须实现该协议。例如:ping 命令,实际就是发送ICMP查询报文,用于查询网络连通性。通常步骤:先ping本机ip,其次ping网关地址,最后ping目的主机地址traceroute 命令也是基于ICMP协议的,探测网络报文经过的路径。

传输层协议:网络传输协议主要分为传输控制协议TCP和用于数据报协议UDP。路由器一般工作在IP层,不处理传输层协议,但智能路由器一般带有防火墙功能,需要处理端口号。传输数据之前需要进行3次握手连接,并在传输的中间过程进行确认,保证了数据到达目标地址,如果没有到达将立即重传。

【路由器基础软件模块】libubox提供多种基础通用功能接口,包含链表、平衡二叉树、二进制块处理、key-value链表、MD5等,提供多种sock接口封装,提供一套基于事件驱动的机制及任务队列管理功能。常用uloop接口函数:uloop_fd_add // 将一个新文件描述符增加到事件处理循环中uloop_fd_delete // 从事件处理循环中删除指定的文件描述符uloop_init // 初始化uloop内部将调用epoll_create函数来创建epoll对象uloop_run // 进入事件处理循环中uloop_done // 反初始化uloop,即释放内部epoll对象,删除process对象uloop_end // 设置uloop内部结束循环标志uloop_timeout_set // 设置定时器超时时间,并增加到链表中

jshn是封装JSON对象的转换库,用于脚本语言生成JSON对象和将JSON对象数据取出。JSON是一个轻量级的数据交换格式,易于阅读和编写,对程序来说也容易解析和产生。jshn定义的命令接口:json_init // 初始化JSON对象json_add_string // 增加字符串数据类型,例如json_add_string name jiangjson_dump // 以JSON格式输出所有增加的JSON内容json_add_int // 增加整型数据,例如 json_add_int age 26json_add_boolean // 增加布尔型数据json_set_namespace // 定义命名空间,即定义设置变量的前缀json_load // 将所有内容读入到JSON对象中,并将这些对象设置到环境变量json_get_var // 从环境变量中读取JSON对象的值json_get_type // 从环境变量读取指定JSON对象的类型json_get_keys // 从环境变量中读取JSON对象的所有名称json_get_values // 从环境变量中读取JSON对象的所有值json_select // 选择JSON对象json_add_object // 增加对象,该命令不需要参数json_close_object // 完成对象的增加json_add_array // 增加顺序数组,数组的内容后续通过 json_add_string 增加json_close_array // 完成顺序数组的增加json_cleanup // 清楚jshn所有设置的环境变量

ubusopenWrt提供的一种系统总线,主要提供系统级的进程间通信(IPC)功能。主要由3部分组成:精灵进程、接口库、实用工具。/etc/init.d/ubus中提供ubusd进程的启动,在系统进程启动完成后立即启动,是在网络进程netifd之前启动的,该进程监听一个文件套接字接口和其他应用程序通信。接口库名称为libubus.solibubus.so库中常用接口函数含义:ubus_add_object // 将对象加入到ubus空间中,即客户端可以访问对象ubus_register_subscriber // 增加订阅通知ubus_connect // 连接指定的路径,创建并返回路径所代表的ubus上下文ubus_send_reply // 执行完成方法调用后发送相应ubus_notify // 给对象的所有订阅者发送通知ubus_lookup // 查找对象,参数path为对象的路径,如果为空则查找所有对象ubus_lookup_id // 查找对象的idubus_invoke // 调用对象ubus_register_event_handler // 注册事件处理句柄ubus_send_event // 发送事件消息

ubus命令行工具:ubus提供5种命令行命令。ubus list ... -v // 输出所有注册到ubus RPC服务器的对象ubus call ... // 在指定对象里调用指定的方法并传递消息参数ubus listen ... // 设置一个监听套接字来接收服务器发出的消息ubus send ... // 发出一个通知事件,这个事件可以使用listen命令监听到ubus wait_for ... // 等待多个对象注册到ubus中,当等待对象注册成功后退出

netifd一个管理网络接口和路由功能的后台进程,使用C语言编写的带有RPC能力的精灵进程。netifd不需要shell脚本就可以设置静态ip配置。netifd主要包含设备和接口对象。netifd注册了3中对象,分别是network、network.device、network.interfacenetwork对象方法:restart // 整个进程关闭后重新启动reload // 重新读取配置来初始化网络设备add_host_route // 增加静态主机路由get_proto_handlers // 获取系统所支持的协议处理函数,不需要参数

network.device对象方法:status // 获取物理网卡设备的状态,包含统计信息

network.interface对象方法:up // 启动接口down // 关闭接口status // 查看接口状态add_device // 增加设备remove_device // 删除设备notify_proto // 调用原型函数remove // 删除接口set_data // 设置额外的存储数据

netifd文件:/sbin/ifup // 启动接口/sbin/ifdown // 关闭接口/sbin/devstatus // 获取网卡设备状态/sbin/ifstatus // 获取接口的状态

网络配置文件:网络功能配置信息在文件 /etc/config/network 中。

ifname // 物理网卡接口名称,如 eth0type // 网络类型proto // static表示静态配置,dhcp表示动态配置,PPPoE表示点对点拨号连接ipaddr // ip地址netmask // 网络掩码dns // 域名服务器地址mtu // mtu地址hostname // dhcp请求中的主机名vendorid // dhcp请求中的厂商idipaddr // 建议的ip地址ifname // PPPoE所使用的物理网卡接口名称,如 eth0username // PAP或CHAP认证用户名password // PAP/CHAP认证密码demand // 指定空闲时间之后将连接关闭,以时间为单位计费环境下经常使用openWrt无线接口:#:' iwconfig无线接口配置文件:/etc/config/wireless【IP路由】路由表管理:#:' route -n静态路由配置文件:/etc/config/network策略路由使用 "ip rule" 来管理,有其对应命令格式。

,