OpenWrt 刷机
搭建编译环境
下面以WNDR3700v4为例
- 安装ubuntu
- 安装编译软件
sudo apt-get install g++
sudo apt-get install gcc
sudo apt-get install gettext
sudo apt-get install binutiils
sudo apt-get install bzip2
sudo apt-get install libz-dev
sudo apt-get install asciidoc
sudo apt-get install subversion
sudo apt-get install autoconf
sudo apt-get install unzip
sudo apt-get install automake
sudo apt-get install gawk
sudo apt-get install sphinx-common
sudo apt-get install libtool
sudo apt-get install sphinxsearch
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install mercurial
3.下载并编译openwrt源码
mkdir openwrt
sudo chmod 777 openwrt
cd openwrt/
svn co svn://svn.openwrt.org/openwrt/trunk/ # Trunk版本
svn co svn://svn.openwrt.org/openwrt/branches/backfire/ #Backfire版本
cp feeds.conf.default feeds.conf
更新源
./scripts/feeds update -a
安装下载好的包
./scripts/feeds install -a
make deconfig # 检查编译环境
make menuconfig # (*)号是编译进固件,
# (M)是编译但是不编译进固件, 生成 ipkg 文件
make
make V=99 #输出debug信息
make -j x #多线程编译
make clean #清除生成的文件
make dirclean #初始化编译环境
编译好的文件放在bin目录 (trunk/bin/xxx)
4.刷机并开始使用openwrt
tftp -i 192.168.1.1 put *.img
5.ssh登录:
opkg update
opkg install
opkg remove
编译Openwrt SDK
编译选项选择:
Advanced configuration option
Build the OpenWrt SDK
Build the Openwrt Base Toolchain
编译完成之后,交叉编译工具链在类似staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/目录
PATH=$PATH:(toolchain/bin目录)
export PATH
STAGING_DIR=(toolchain目录)
export STAGING_DIR
mips-openwrt-linux-g++ xxx.cpp -o xxx.o
编译基本软件包
make package/cups/compile V=99
feeds里面的包
make package/feeds/packages/xxxxx/compile V=99
编译shadowsocks-libev包
1.下载
cd openwrt/package
git clone https://github.com/madeye/shadowsocks-libev.git
make V=99 package/shadowsocks-libev/openwrt/compile
2.安装
scp shadowsocks-libev-polarssl_1.4.6_ar71xx.ipk user@server:/folder
opkg install shadowsocks-libev-polarssl_1.4.6_ar71xx.ipk
OpenWrt 目录文件结构
openwrt/
└── trunk
├── bin # 用来存放make的结果 ipk
│ └── ar71xx
├── build_dir # 编译目录 (解压,编译,打补丁)
│ ├── host # 建立工具链时的临时目录
│ ├── target-mips_34kc_uClibc-0.9.33.2 #对应硬件的工具链的目录
│ └── toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
#是工具链的安装位置
├── config # 编译配置
├── dl # 下载的tar编译包
├── docs # 帮助文档
├── feeds # 数据源的目录
│ ├── luci
│ ├── management
│ ├── packages
│ ├── routing
│ ├── targets
│ ├── telephony
├── include # 存放 *.mk 文件
│ └── site
├── logs
│ ├── package
│ ├── target
│ ├── toolchain
│ └── tools
├── package # 软件包目录
│ ├── base-files
│ ├── boot
│ ├── devel
│ ├── feeds
│ ├── firmware
│ ├── kernel
│ ├── libs
│ ├── network
│ ├── system
│ └── utils
├── scripts # 对openwrt的包进行管理的perl脚本
│ ├── config
│ └── flashing
├── staging_dir # 交叉编译工具链
│ ├── host
│ ├── target-mips_34kc_uClibc-0.9.33.2
│ └── toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
├── target
│ ├── imagebuilder
│ ├── linux
│ ├── sdk
│ └── toolchain
├── tmp
│ ├── dl
│ └── info
├── toolchain
│ ├── binutils
│ ├── gcc
│ ├── gdb
│ ├── glibc
│ ├── insight
│ ├── kernel-headers
│ ├── musl
│ ├── uClibc
│ └── wrapper
└── tools
OpenWrt编译时配置文件结构:
Target System(Atheros AR7xxx/AR9xxx)
Subtarget (Generic devices with NAND flash)
Target Profile(NETGEAR WNDR3700v4/WNDR4300)
Target Images
Global build Setting
Advanced configureation option(for developers)
Build the OpenWrt Image Builder
Build the OpenWrt SDK # 编译一个SDK开发环境
Package the OpenWrt-baseed Toolchain
Image Configuration
Base system
Administration
Boot loaders
Development
Firmware
Kernel modules
Languages
LuCI
Main
Multimedia
Network
Sound
Utilities
配置网络服务
在openwrt/trunk/package/network目录下
Configuration complete.
( ) /\ _ (
\ | ( \ ( \.( ) _____
\ \ \ ` ` ) \ ( ___ / _ \
(_` \+ . x ( .\ \/ \____-----------/ (o) \_
- .- \+ ; ( O \____
(__ +- .( -'.- <. \_____________ ` \ /
(_____ ._._: <_ - <- _- _ VVVVVVV VV V\ \/
. /./.+- . .- / +-- - . (--_AAAAAAA__A_/ |
(__ ' /x / x _/ ( \______________//_ \_______
, x / ( ' . / . / \___' \ /
/ / _/ / + | \ /
' (__/ / \/
/ \
路由器分区
u-boot: 128kb 设备初始化程序+引导程序代码
kernel: 1M 系统内核的二进制代码
rootfs: 完整的系统文件包含只读和可写
rootfs_data: rootfs中可写的部分
art: EEPROM分区,保存无线硬件厂商
firmware: 完整的固件位置
每个分区在flash中的位置是/dev/mtdblockX,
ROM分区采用的是Linux内核支持的squashFS文件系统,
加载完毕后将其挂载到/rom目录,
系统将使用JFFS2文件系统格式化rootfs_data这部分,
并且将这部分挂载到/overlay目录
将/overlay透明挂载为/分区, 将一部分内存挂载为/tmp目录
dd if=/dev/mtdbloclx of=/tmp/xx
hexdmp -c /tmp/xx
cat /proc/mtd
cat /proc/partitions
OpenWrt路由器目录结构
/etc/ 存放着系统全部的配置文件
/etc/init.d/ 存放着启动的服务脚本
/etc/config/ 存放着OpenWRT的配置文件包括网络等等
/tmp/ 临时文件之外还存放着动态的配置文件
/tmp/TZ 就是系统启动后所使用的时区参数
UCI配置文件格式
Section开始语法: config ‘类型’ ‘名字’
参数定义语法: option ‘键’ ‘值’
列表定义语法: list ‘集合名字’ ‘值’
uci commit mytest //保存配置
uci set wireless.radio0.disabled=0
uci commit wireless
br-lan:虚拟设备,用于LAN口设备桥接的,目前路由器普遍将有线LAN口(一般四个)和WIFI无线接口桥接在一起作为统一的LAN。 lo:虚拟设备,本机自身回环网设备
wlan0:实设备,当启动了wifi功能以后将产生此设备
pppoe-wan:虚拟设备,在PPPOE拨号成功以后产生。
iwinfo: 查看无线当前状态命令
参考链接
新家
Welcome to my Blog.