搭建编译环境

下面以WNDR3700v4为例

  1. 安装ubuntu
  2. 安装编译软件

    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: 查看无线当前状态命令

参考链接

跟hoowa学做智能路由


Welcome to my Blog.