Openwrt

前段时间还搞了一下 openwrt 定制,记录一下。

openwrt 提供了很方便的方式让你可以在 x86 机器上面定制路由器固件,到 https://archive.openwrt.org/ 下载对应的源码就可以。

比如我用的是这个 https://archive.openwrt.org/barrier_breaker/14.07/ar71xx/generic/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64.tar.bz2barrier_breaker 是版本, ar71xx 是 cpu 架构。解压之后目录类似如下

drwxr-xr-x 12 wd wd 4.0K Mar 29 17:18 .
drwxr-xr-x  3 wd wd 4.0K Mar 26 20:32 ..
drwxr-xr-x  3 wd wd 4.0K Mar 27 10:40 bin
drwxr-xr-x  3 wd wd 4.0K Oct  1  2014 build_dir
-rw-r--r--  1 wd wd  94K Oct  1  2014 .config
drwxr-xr-x  2 wd wd 4.0K Oct  1  2014 dl
drwxr-xr-x  3 wd wd 4.0K Mar 26 20:37 include
-rw-r--r--  1 wd wd 5.0K Sep 21  2014 Makefile
-rw-r--r--  1 wd wd 570K Oct  1  2014 .packageinfo
drwxr-xr-x  4 wd wd 4.0K Oct  1  2014 packages
-rw-r--r--  1 wd wd  331 Oct  1  2014 repositories.conf
-rw-r--r--  1 wd wd  11K Sep 21  2014 rules.mk
drwxr-xr-x  4 wd wd 4.0K Sep 21  2014 scripts
drwxr-xr-x  3 wd wd 4.0K Oct  1  2014 staging_dir
drwxr-xr-x  3 wd wd 4.0K Oct  1  2014 target
-rw-r--r--  1 wd wd 128K Sep 21  2014 .targetinfo
drwxr-xr-x  2 wd wd 4.0K Mar 27 10:40 tmp

编译的命令如下

make image \
    PROFILE=TLWR703 \
    PACKAGES="firewall -ip6tables -kmod-ip6tables -kmod-ipv6 -odhcp6c -ppp -ppp-mod-pppoe -liblua -libubus-lua -libuci-lua -luci-app-firewall -luci-i18n-english -luci-lib-ipkg -luci-lib-lmo -luci-lib-sys -luci-proto-core -luci-proto-ppp -luci-sgi-cgi -luci-theme-base -luci-theme-openwrt kmod-mii kmod-usb-net kmod-usb-net-cdc-ether usb-modeswitch curl" \
    FILES=files/

编译结果会放在 bin/ar71xx/ 下面

-rw-r--r-- 1 wd wd  827 May 13 10:08 md5sums
-rw-r--r-- 1 wd wd 2.2M May 13 10:08 openwrt-ar71xx-generic-root.squashfs
-rw-r--r-- 1 wd wd 1.9M May 13 10:08 openwrt-ar71xx-generic-root.squashfs-64k
-rw-r--r-- 1 wd wd 3.8M May 13 10:08 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
-rw-r--r-- 1 wd wd 2.9M May 13 10:08 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
-rw-r--r-- 1 wd wd 1.5M May 13 10:08 openwrt-ar71xx-generic-uImage-gzip.bin
-rw-r--r-- 1 wd wd 1.1M May 13 10:08 openwrt-ar71xx-generic-uImage-lzma.bin
-rwxr-xr-x 1 wd wd 3.2M May 13 10:08 openwrt-ar71xx-generic-vmlinux.bin
-rwxr-xr-x 1 wd wd 3.3M May 13 10:08 openwrt-ar71xx-generic-vmlinux.elf
-rw-r--r-- 1 wd wd 1.5M May 13 10:08 openwrt-ar71xx-generic-vmlinux.gz
-rw-r--r-- 1 wd wd 1.1M May 13 10:08 openwrt-ar71xx-generic-vmlinux.lzma
-rwxr-xr-x 1 wd wd 1.2M May 13 10:08 openwrt-ar71xx-generic-vmlinux-lzma.elf

那个 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 就是我那个路由器的出厂固件。简直简单到没法说了。

前面那个编译命令里面, PROFILE 是指定要编译的路由器,这个必须得是固件支持的,可以在 target/linux/ar71xx/generic/profiles/ 目录看到。

00-default.mk  8devices.mk  atheros.mk   buffalo.mk  dragino.mk   ew.mk          jjplus.mk   netgear.mk   pcs.mk      rosewill.mk  tp-link.mk   wd.mk
01-minimal.mk  alfa.mk      atlantis.mk  compex.mk   easylink.mk  gl-connect.mk  linksys.mk  oolite.mk    planex.mk   senao.mk     trendnet.mk  zcomax.mk
02-ath5k.mk    allnet.mk    bhu.mk       d-link.mk   engenius.mk  hiwifi.mk      nclink.mk   openmesh.mk  redwave.mk  sitecom.mk   ubnt.mk      zyxel.mk

PACKAGES 指定了要包含的包,可以在 packages/ 目录下面看到有的包。

FILES 指定了自己定义要包含到固件里面的文件。可以把这个目录当作 / 来放文件,比如你放到 files/abc 下面的文件,将来会在路由器的 /abc 下面。

.:
etc

./etc:
banner  config  crontabs  dropbear  run.sh

./etc/config:
dropbear  firewall  network  system  wireless

./etc/crontabs:
root

./etc/dropbear:
authorized_keys

后面还给 wr703n 接了一个华为 4g usb E8372h 型号,支持了 4g 上网。需要的包是这些, kmod-mii kmod-usb-net kmod-usb-net-cdc-ether usb-modeswitch ,华为这个 usb 支持 ether 方式使用,并且 usb-modeswitch 直接就支持,不用自己配置。把 eth1 作为 wan 就可以了。

中国联通的信道

  • 3G: WCDMA Band 1/8
  • 4G: LTE-FDD 1/3/8 LTE-TDD 40/41

参考的一些文章