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