openwrt 学习常用命令及备注( 三 )


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
; comment
token = value
// 以#号和分号开头的均为注释行,并且忽略空白航,配置值以 key=value 形式进行设置,例如:
// 设置打开报文转发为 net.ipv4.ip_forward=1
sysctl.conf文件位置:
package/base-files/files/etc/sysctl.conf
sysctl 是用于修改运行中的内核参数的命令,所有可用的内核参数均在 /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 menuconfig
Build/
Package/
>>构建
软件包模块的编译步骤:准备、配置、编译、安装 。
总结:
通常新增一个模块的主要步骤如下:
1. 在package下增加一个目录,例如hello/;
2. 添加src目录和files目录;
3. src目录存放模块源码;
4. files存放模块的配置文件及启动脚本等;
5. 在hello/下增加Makefile,在Makefile中增加编译脚本和安装脚本 。
6. 编译;
$:' make package/hello/build
7. 生成安装包;
$:' make package/hello/install
或者快速重新进行整个编译过程:
$:' make package/hello/{clean,compile,install}
如果加入平台编译过程,需要在make menuconfig 时选择hello模块,再在隐藏的配置文件.config 中增加一项CONFIG_PACKAGE_hello=y这样就可以在编译整个系统时自动编译软件模块 。
hello示例:Page89
Makefile示例:Page92
【补丁生成及应用工具】
diff工具:
diff -up 或 diff -uprN来创建补丁包 。
命令使用举例:
$:' diff -up ../src/dhcp.c ../src/dhcp_after.c -up > dhcp.patch
// 修改前和修改后的文件进行多个文件的补丁包创建
diff工具主要参数如下:
-p --show-c-function // 在每一个更改处显示C函数


推荐阅读