logo资料库

openwrt学习教程.pdf

第1页 / 共161页
第2页 / 共161页
第3页 / 共161页
第4页 / 共161页
第5页 / 共161页
第6页 / 共161页
第7页 / 共161页
第8页 / 共161页
资料共161页,剩余部分请下载后查看
1 基础
1.1 安装编译环境
1.2 下载源码
1.3 配置
1.4 编译
1.5 清理工程
1.6 编译/清理单个软件包
1.7 烧写固件
2 UCI(统一配置接口)
2.1 概述
2.2 实例操作
3 网络配置
3.1 概述
3.2 配置成交换机
3.3 配置成路由器
3.4 配置Wireless
3.5 查询接口状态信息(IP地址、子网、网关、DNS等)
3.5.1 查询逻辑interfere的第一个IPv4地址:network_get_ipaddr
3.5.2 查询逻辑interfere所对应的L3层Linux网络设备:network_get_device
3.5.3 查询逻辑接口的第一个IPv4子网:network_get_subnet
3.5.4 查询逻辑接口(interfere)的IPv4网关:network_get_gateway
3.5.5 查询逻辑interfere的DNS服务器:network_get_dnsserver
3.5.6 查询逻辑interfere所使用的协议:network_get_protocol
3.5.7 查询逻辑interfere的状态(UP/DOWN):network_is_up
4 升级固件
5 配置DHCP服务器和DNS服务器
5.1 公用选项配置
5.2 配置DHCP地址池
6 添加软件包
6.1 概述
6.2 实例:添加应用程序软件包
6.3 实例:添加内核模块
7 Openwrt源码树目录组织结构
8 Openwrt Buildroot工作过程概述
9 启动脚本(Init Scripts)
9.1 概述
9.2 实例:实现6.2节的helloworld开机自启动
9.3 procd init script
10 通过shell脚本操作UCI配置
11 Openwrt启动流程
11.1 Openwrt固件生成过程(基于MPR-A2硬件平台)
11.2 Openwrt启动流程:procd
11.3 Openwrt启动流程:/etc/preinit
11.4 Openwrt启动流程:/etc/rc.d/S*
12 Failsafe模式(故障恢复模式)
13 防火墙
13.1 理论知识
13.2 UCI防火墙配置实例
13.2.1 MAC地址过滤
13.2.2 端口转发
14 配置PPPOE Server
15 LuCI
15.1 配置Openwrt支持LuCI
15.2 LuCI
15.3 实例一:call
15.4 实例二:template
15.5 实例三:cbi
15.6 CBI参考手册
15.6.1 Map
15.6.2 section
15.6.3 option
15.6.4 Tab
15.6.5 实例
15.7 国际化
15.8 主题
15.9 在Openwrt源码中添加LuCI模块
15.10 开启LuCI缓存
16 支持U盘
17 opkg
17.1 安装软件包
17.2 删除软件包
17.3 查询已安装软件包
17.4 更新软件包
17.5 安装目的地
18 GPIO
18.1 确定引脚所对应的GPIO
18.2 GPIO-LED
18.3 GPIO-KEY
18.4 按键控制
19 上网认证
19.1 概述
19.2 Wifidog接口协议
19.2.1 网关心跳
19.2.2 设备登陆及认证
19.2.3 流量统计
19.2.4 设备下线(主动)
19.2.5 设备下线(超时)
19.3 Wifidog配置
19.3.1 网关ID(可选)
19.3.2 外部网络接口(可选)
19.3.3 网关接口(必须)
19.3.4 网关内部局域网IP地址(可选)
19.3.5 Wifidog消息页面(可选)
19.3.6 认证服务器(必须,可重复)
19.3.7 是否后台运行(可选)
19.3.8 Wifidog监听端口(可选)
19.3.9 超时检测间隔、心跳间隔、流量统计间隔(可选)
19.3.10 超时时间(可选)
19.3.11 白名单(可选)
19.3.12 防火墙规则(必须)
19.4 实例(认证服务器)
19.5 实例:使用LuCI配置wifidog
19.5.1 编写代码测试
19.5.2 添加软件包
19.6 实例:使用LuCI显示wifidog状态
19.6.1 编写代码测试
19.6.2 添加软件包
20 带宽控制
20.1 测试
20.1.1 方式一
20.1.2 方式二
21 添加新型号(Target Profile)
22 Openwrt menuconfig解析
23 出厂配置
23.1 网络
23.2 WIFI
23.3 System
23.4 LuCI
23.5 DHCP
23.6 防火墙
23.7 U盘/SD卡挂载
23.8 uhttpd
23.9 sysupgrade
24 制作补丁
25 WIFI命令
25.1 iw
25.2 iwinfo
25.2.1 查看当前wifi信息
25.2.2 扫描周围的AP
25.2.3 列出设备发送功率对照表
25.2.4 列出设备频率通道对照表
26 3G
26.1 配置Openwrt软件包
26.2 配置WAN口
26.3 连接效果
27 挂载NFS
28 串口登陆验证
29 WIFI中继(伪桥接模式)
30 远程调试
30.1 搭建环境
30.2 调试实例
31 软路由(x86)
1 基础 参考资料:嵌入式 Linux 学习笔记 http://pan.baidu.com/s/1fEfG6 参考书籍: 《TCPIP 协议族(第 4 版)》 《图解 TCP_IP_第 5 版》 《深入理解 LINUX 网络技术内幕》 《追踪 Linux.TCP/IP 代码运行:基于 2.6 内核.秦健》 《802.11 无线网络权威指南 第二版(中文版)》 淘宝店铺:http://yytec2008.taobao.com 个人 QQ:809205580 技术交流群:153530783 1.1 安装编译环境 root@zjh-vm:/home/work# apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
1.2 下载源码 在 Openwrt 的官方网站 https://openwrt.org 上可以看到目前的最新稳定版为 BarrierBreaker 14.07,在自己的虚拟机 Ubuntu 系统中创建一个工作目录 root@zjh-vm:/home/work# mkdir openwrt 然后使用 svn 工具下载最新稳定版的源代码,下载完成后,进入 barrier_breaker 目录 root@zjh-vm:/home/work# cd openwrt root@zjh-vm:/home/work/openwrt# svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker root@zjh-vm:/home/work/openwrt# cd barrier_breaker/ 首先可以执行 make help 查看一些帮助 root@zjh-vm:/home/work/openwrt/barrier_breaker# make help This is the buildsystem for the OpenWrt Linux distribution. Please use "make menuconfig" to configure your appreciated configuration for the toolchain and firmware. You need to have installed gcc, binutils, bzip2, flex, python, perl, make, find, grep, diff, unzip, gawk, getopt, subversion, libz-dev and libc headers. Run "./scripts/feeds update -a" to get all the latest package definitions defined in feeds.conf / feeds.conf.default respectively and "./scripts/feeds install -a" to install symlinks of all of them into package/feeds/. Use "make menuconfig" to configure your image. Simply running "make" will build your firmware. It will download all sources, build the cross-compile toolchain, the kernel and all choosen applications. You can use "scripts/flashing/flash.sh" for remotely updating your embedded system via tftp. The OpenWrt system is documented in docs/. You will need a LaTeX distribution and the tex4ht package to build the documentation. Type "make -C docs/" to build it. To build your own firmware you need to have access to a Linux, BSD or MacOSX system (case-sensitive filesystem required). Cygwin will not be supported because of the lack of case sensitiveness in the file system. Sunshine! Your OpenWrt Project http://openwrt.org 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
执行 svn info 查看当前下载的源码的修订版本 root@zjh-vm:/home/work/openwrt/barrier_breaker# svn info Path: . Working Copy Root Path: /home/work/openwrt/barrier_breaker URL: svn://svn.openwrt.org/openwrt/branches/barrier_breaker Relative URL: ^/branches/barrier_breaker Repository Root: svn://svn.openwrt.org/openwrt Repository UUID: 3c298f89-4303-0410-b956-a3cf2f4a3e73 Revision: 43660 Node Kind: directory Schedule: normal Last Changed Author: nbd Last Changed Rev: 43618 Last Changed Date: 2014-12-11 22:39:40 +0800 (四, 11 12 月 2014) Openwrt 会经常更新源码,可以执行 svn update 更新已下载的源码 root@zjh-vm:/home/work/openwrt/barrier_breaker# svn update Updating '.': Restored '.gitignore' U target/linux/generic/patches-3.10/645-bridge_multicast_to_unicast.patch U target/linux/generic/patches-3.10/644-bridge_optimize_netfilter_hooks.patch ……………………………… U tools/firmware-utils/src/mktplinkfw.c U toolchain/Makefile Updated to revision 44071. 现在已经更新到 44071 版本了,现在再次执行 svn info 查看修订版本 root@zjh-vm:/home/work/openwrt/barrier_breaker# svn info Path: . Working Copy Root Path: /home/work/openwrt/barrier_breaker URL: svn://svn.openwrt.org/openwrt/branches/barrier_breaker Relative URL: ^/branches/barrier_breaker Repository Root: svn://svn.openwrt.org/openwrt Repository UUID: 3c298f89-4303-0410-b956-a3cf2f4a3e73 Revision: 44071 Node Kind: directory Schedule: normal Last Changed Author: nbd Last Changed Rev: 44065 Last Changed Date: 2015-01-21 00:41:46 +0800 (三, 21 1 月 2015) 更新 Feeds root@zjh-vm:/home/work/openwrt/barrier_breaker# ./scripts/feeds update -a Updating feed 'packages' from 'https://github.com/openwrt/packages.git;for-14.07' ... remote: Counting objects: 123, done. remote: Compressing objects: 100% (76/76), done. remote: Total 123 (delta 70), reused 92 (delta 39) Receiving objects: 100% (123/123), 13.89 KiB | 0 bytes/s, done. 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
Resolving deltas: 100% (70/70), completed with 19 local objects. From https://github.com/openwrt/packages ad7c25a..71719eb for-14.07 -> origin/for-14.07 Updating ad7c25a..71719eb 使下载的软件包可以出现在 make menuconfig 配置菜单中 root@zjh-vm:/home/work/openwrt/barrier_breaker# ./scripts/feeds install 或者 root@zjh-vm:/home/work/openwrt/barrier_breaker# ./scripts/feeds install –a 注意:./scripts/feeds 这个脚本只是使软件包可以出现在 make menuconfig 配置菜单中,而并不是真正的安装或者编译 软件。 1.3 配置 Openwrt 默认不允许使用 root 用户操作,若要使用 root 用户操作可以修改 include/prereq-build.mk 这个文件 root@zjh-vm:/home/work/openwrt/barrier_breaker# vi include/prereq-build.mk define Require/non-root [ "$$(shell whoami)" != "root" ] Please do not compile as root. \ define Require/non-root endef $(eval $(call Require,non-root, \ )) 这里首先定义了一段检查 root 用户的代码,然后通过 call 函数调用这段代码。我们把调用部分屏蔽即可使用 root 用户 编译。 define Require/non-root endef #$(eval $(call Require,non-root, \ )) [ "$$(shell whoami)" != "root" ] Please do not compile as root. \ 注:最新的 trunk 版已经取消这个限制了。 执行 make menuconfig 打开配置菜单 root@zjh-vm:/home/work/openwrt/barrier_breaker# make menuconfig 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
每个选项前面都有一个[ ]标签,我们可以选择 y,m 和 n  选择 y 设置为<*>,表示将软件包编译进固件 image 文件;  选择 m 设置为,表示软件包会被编译,但不会编译进固件 image 文件。Openwrt 会把设置为 M 选项的软件包编译后再制作成一个以 ipk 为后缀(.ipk)的文件,然后在设备上通过 opkg 来安装到设 备上;  选择 n 设置为<>,表示不编译该软件包。 配置主要包括 4 个部分  Target system(目标系统)  Package selection(软件包选择)  Build system settings(编译系统设置)  Kernel modules(内核模块配置) 我们这里先简单配置一下,具体的以后再讲。 首先配置目标系统,根据自己的设备选择 SOC 类型,我使用的设备使用是 RT5350,是 Ralink 公司的 SOC,8MB Flash, 32MB SDRAM,从 http://wiki.openwrt.org/toh/start 这个地址得知 openwrt 支持的设备 因此 Target System 配置如下 Target Profile 对应上面列表的 mpr-a2 当配置完成并保存配置后,openwrt 将根据你的配置创建一个配置文件.config root@zjh-vm:/home/work/openwrt/barrier_breaker# vi .config 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
如果要配置 busybox,可以进行如下操作 root@zjh-vm:/home/work/openwrt/barrier_breaker# make menuconfig Base system ---> 从 busybox 这个菜单按回车就可以进入 busybox 的配置界面了。 如果要配置内核选项可以执行 make kernel_menuconfig root@zjh-vm:/home/work/openwrt/barrier_breaker# make kernel_menuconfig <*> busybox................................ Core utilities for embedded Linux ---> 1.4 编译 可以直接执行 make 进行编译 root@zjh-vm:/home/work/openwrt/barrier_breaker# make 添加 make 编译选项 root@zjh-vm:/home/work/openwrt/barrier_breaker# make -j 3 V=s -j:多进程编译,这样编译快些。-j 指定的参数一般为你的 CPU 核数+1,比如双核 CPU 就指定为 3 V=s:输出编译的详细信息,这样编译出错时,我们才知道错在哪里 编译成功后,会在 bin 目录下生成固件文件 其中的 openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin 就是用来烧写到设备的固件。 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
1.5 清理工程 root@zjh-vm:/home/work/openwrt/barrier_breaker# make clean 删除/home/work/openwrt/barrier_breaker/bin 和/ home/work/openwrt/barrier_breaker/ build_dir 这 2 个目录 root@zjh-vm:/home/work/openwrt/barrier_breaker# make dirclean 删除/home/work/openwrt/barrier_breaker/bin、/ home/work/openwrt/barrier_breaker/ build_dir、 / home/work/openwrt/barrier_breaker/staging_dir、/ home/work/openwrt/barrier_breaker/staging_di r/toolchain 和 / home/work/openwrt/barrier_breaker/staging_dir root@zjh-vm:/home/work/openwrt/barrier_breaker# make distclean 删除所有编译的或者配置的和下载的 feeds 内容以及下载的软件包源码,还有.config 配置文件。 1.6 编译/清理单个软件包 以 uci 这个软件包为例 root@zjh-vm:/home/work/openwrt/barrier_breaker# make package/system/uci/compile V=s 编译 清理 root@zjh-vm:/home/work/openwrt/barrier_breaker# make package/system/uci/clean V=s 1.7 烧写固件 打开 tftpd32,把刚才编译生成的固件 openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin 拷贝到 tftpd32 软件目录 下面的操作根据自己的设备的 u-boot 操作,不同的 u-boot 操作步骤和设置不同。 用网线连接设备和电脑,用串口线连接设备和电脑,打开 SecureCRT,波特率设置为 57600。给设备上电启动设备, 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
在倒计时时按 4 进入命令行界面 设置 tftpboot 相关参数 RT5350 # set ipaddr 192.168.0.100 设置设备 IP 地址 RT5350 # set serverip 192.168.0.104 设置 tftp 服务器 IP 地址,即与你的设备相连的电脑的 IP 地址 RT5350 # set bootfile openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin 设置要下载的固件名称 RT5350 # save 将设置写入 Flash 执行 reset 重启设备,在倒计时时按 2 进入 tftp 烧写固件步骤 选择 y 进入设备 IP 设置步骤,之前已经设置好了,这里就不用再设置了,直接一路回车 个人 QQ:809205580 技术交流群:153530783 淘宝店铺:http://yytec2008.taobao.com
分享到:
收藏