文章目录
  1. 1. 基础知识
    1. 1.1. 系统结构
    2. 1.2. 系统的文件结构
    3. 1.3. 基本指令
    4. 1.4. 软件包管理
  2. 2. 实际操作
    1. 2.1. 刷机
    2. 2.2. 登陆 SSH
    3. 2.3. WAN/LAN 网络设置
    4. 2.4. Wi-FI 设置
    5. 2.5. 支持 USB
    6. 2.6. 支持 extroot

使用 TPLINK TL-WR720N V3 无线路由刷 OpenWRT 固件的学习整理。

基础知识


系统结构

MTD(Memory Technology Devices,内存技术设备)是用于访问内存类设备 (ROM、FLASH) 的 Linux 驱动子系统。它的主要目的使 FLASH 类设备更加容易被访问,为此它在硬件和上层提供了一个抽象的接口,使得在操作系统下我们可以像操作硬盘一样操作这个设备。仔细观察过 Linux 启动信息的朋友会看到这么一段话:

[ 0.690000] 5 tp-link partitions found on MTD device spi0.0
[ 0.700000] Creating 5 MTD partitions on "spi0.0":
[ 0.700000] 0x000000000000-0x000000020000 : "u-boot"
[ 0.710000] 0x000000020000-0x00000012a290 : "kernel"
[ 0.730000] 0x00000012a290-0x0000007f0000 : "rootfs"
[ 0.760000] 0x000000300000-0x0000007f0000 : "rootfs_data"
[ 0.760000] 0x0000007f0000-0x000000800000 : "art"
[ 0.770000] 0x000000020000-0x0000007f0000 : "firmware"

这些信息表示当前系统识别到的 FLASH 分区。我们可以用电脑中的计算器计算一下,打开计算器,选择科学型、十六进制,输入名为 art 的分区容量用(800000-7f0000)结果为 10000(十六进制),这个时候点击十进制,系统会自动将结果转换为十进制,再除以 1024 结果为 64(K) 表示这个分区容量为 64 k。在 OpenWRT 的系统中现在对 Atheros 方案实现了自动查找分区结尾。

上面的几个分区,我来说明下(分区名称、分区容量、分区作用):

"u-boot"128KB,设备初始化程序+引导程序代码本身
"kernel"1MB,存放系统内核的二进制代码,按照x86下的讲法是Raw分区,就是这里只有内核的二进制,不存在文件系统。
"rootfs"6.7MB,完整的系统文件包含只读和可写
"rootfs_data"4.9MB,在rootfs中的可写部分的位置
"art"64KB,EEPROM分区,在Atheros的方案中这个分区保存了无线的硬件参数
"firmware"7.9MB,完整的固件位置包含了除"u-boot""art"之外全部的内容

看的晕了? 这,我马上画个简单的图给大家看看:

1

这个是它的分区逻辑。请不要太在意这个地方,有点晕也没关系,继续往后面看,这个地方留着后边慢慢理解。

在系统中,可以执行以下指令查看当前系统分区:

2

系统的文件结构

系统的第一次启动:

  1. 首先 uboot 启动了 Kernel 完成之后,由 Kernel 加载”ROM 分区” (就是 rootfs 减去 rootfs_data 得到的那一块分区)
  2. ROM 分区采用的是 Linux 内核支持的 SquashFS 文件系统 (一种压缩只读文件系统),加载完毕后将其挂载到 /rom 目录 (同时也挂载为根文件系统)。
  3. 系统将使用 JFFS2 文件系统格式化 rootfs_data 这部分并且将这部分挂载到 /overlay 目录。
  4. /overlay 透明挂载为 / 分区。
  5. 将一部分内存挂载为 /tmp 目录。

这个时候大家一定有一个问题:到底根文件系统是哪个?这个是 OpenWRT 设计的一个优点,它采用了一种叫 Overlay 透明挂载技术,首先将 /rom 挂载为 / 根文件,然后再用 /overlay 覆盖在 / 之上,这样,当你进行文件系统的变更,修改,所做的操作将在 overlay 中记录。 rom 是不改变的。而最简单的恢复出厂设置方法,即是删除掉 /overlay下所有文件。

3

大致上而言,系统的启动流程类似 CentOS 这类 x86 下的发行版。由于本文读者多是熟悉 Linux 的朋友,关于系统的启动流程不做详细解释了。

基本指令

OpenWRT 下系统的基本指令没有使用 x86 下的指令包,因为那些指令包容量太大。它使用的是 Busybox 项目。

Busybox 是一个集成了一百多个常用 Linux 命令和工具的软件包 (OpenWRT 下编译可以选择要哪些指令)。除了包含常规指令之外,Busybox 还包含了 grep、find、mount 以及 telnet、http 等复杂工具。其被戏称为 Linux 下的瑞士军刀。

Busybox 在 80% 的情况下与 x86 下的标准指令是完全相同的,有 20% 的情况一些指令的细节参数是不支持的。

常用来需要配置的文件夹和内容:

/etc/ 存放着系统全部的配置文件
/etc/init.d/ 存放着启动的服务脚本
/etc/config/ 存放着OpenWRT的配置文件包括网络等等
/tmp/ 临时文件之外还存放着动态的配置文件
/tmp/TZ 就是系统启动后所使用的时区参数
.....

其它还有很多,我们就不一一介绍。

软件包管理

在 OpenWRT 下使用的软件包管理技术叫做 OPKG,它是一个轻量级的软件包技术,已经成为开源嵌入式的事实标准,它类似 CentOS 下的 YUM,可以实现对预编译的二进制软件下载。

输入 opkg 即可看到整个软件的完整帮助信息。语法格式:opkg [参数…] 子命令 [子参数…],参数有:

update 下载服务器上可用的软件包列表
upgrade <包名> 升级软件包
install <包名> 安装软件包
configure <包名> 配置某一个软件包
remove <包名> 卸载软件包
info [pkg|regexp] 显示出指定软件包的信息

系统命令远比我介绍的要多的多,而且这些命令是我们最常用的。本着深入浅出的态度,大家根据自己的能力,希望学更多的童鞋可以自己详细查看下 opkg 的帮助文档。

opkg 配置文件在 /etc/opkg.conf 可以配置源等参数。

更新 opkg 的包列表,请注意,每次操作 opkg 下载之前都要先执行一次 opkg update,确保包列表是同步的。

实际操作


刷机

之前已经刷过一次 OpenWRT 了,这里说下在 OpenWRT 命令行界面的刷新方法:

cd /tmp/
wget xxxxx
mtd -r write 你的固件文件名.bin firmware 
reboot

登陆 SSH

默认是无法通过 SSH 登陆,先通过 Telnet 192.168.1.1 登陆后配置 root 密码才可以登陆。

WAN/LAN 网络设置

网络配置文件为 /etc/config/network,修改参考如下:

root@OpenWrt:~# vi /etc/config/network

config interface 'loopback'

        option ifname 'lo'

        option proto 'static'

        option ipaddr '127.0.0.1'

        option netmask '255.0.0.0'


### LAN口设置修改,基本不用修改 ###

config interface 'lan'

        option ifname 'eth1'

        option type 'bridge'

        option proto 'static'

        option ipaddr '192.169.1.1'

        option netmask '255.255.255.0'

### WAN口PPPoE ###

config interface 'wan'

        option ifname 'eth0'

#####   option proto 'dhcp'

        option proto 'pppoe'

        option 'username'  'user'

        option 'password' 'password'

Wi-FI 设置

Wi-FI 配置文件为 /etc/config/wireless,下面是设置 Wi-FI 名称为 wr-ow,采用 psk2 认证方式、密码 123456

root@OpenWrt:~# vi /etc/config/wireless

config wifi-device  radio0

        option type     mac80211

        option channel  11

        option hwmode   11ng

        option path     'platform/ar933x_wmac'

        option htmode   HT20

        list ht_capab   SHORT-GI-20

        list ht_capab   SHORT-GI-40

        list ht_capab   RX-STBC1

        list ht_capab   DSSS_CCK-40

        # REMOVE THIS LINE TO ENABLE WIFI:

#####   option disabled 1

config wifi-iface

        option device   radio0

        option network  lan

        option mode     ap

option ssid     wr-ow

#####   option encryption none

        option encryption psk2

        option key 123456

支持 USB

WR720 有一个 USB 接口,可以接入 USB 存储设备。USB要先格式化 OpenWRT 可识别分区,我是在 Debian 下面格式化为 ext4 分区格式的。

先查询接入系统的 USB 硬盘,使用 dmesg 显示信息

[  242.090000] usb 1-1: new high-speed USB device number 2 using ehci-platform

说明是接口是 USB 2.0,需要 kmod-usb2 模块,固件缺省已安装

接下来只需安装 kmod-usg-storage、kmod-fs-ext4内核模块,其他模块已缺省安装,执行:

root@OpenWrt:~# opkg install kmod-usb-storage kmod-fs-ext4

root@OpenWrt:~#reboot

启动后,查看是否已经支持:

root@OpenWrt:~# ls /dev/sda*

/dev/sda   /dev/sda1  /dev/sda2  /dev/sda3

支持 extroot

WR720N 只有 4 MB Flash 存储,根分区放到 Flash上很小,没有空间安装多个软件;并且大部分软件缺省安装到根分区、安装到其他分区很困难,解决办法就是把根分区加载外部(USB)存储上。处理如下。

安装 block-mount

root@OpenWrt:~# opkg update

root@OpenWrt:~# opkg install block-mount

root@OpenWrt:~# reboot

复制 Flash 根分区文件到外部存储

root@OpenWrt:~# mkdir /mnt/sda1

root@OpenWrt:~# mount /dev/sda1 /mnt/sda1

root@OpenWrt:~# mkdir -p /tmp/cproot

root@OpenWrt:~# mount --bind / /tmp/cproot/

root@OpenWrt:/# tar -C /tmp/cproot/ -cvf - . | tar -C /mnt/sda1 -xf -

root@OpenWrt:/# umount /dev/sda1

修改 fstab

root@OpenWrt:~# vi /etc/config/fstab

config 'global'

        option  anon_swap       '0'

        option  anon_mount      '0'

        option  auto_swap       '1'

        option  auto_mount      '1'

        option  delay_root      '5'

        option  check_fs        '0'

### USB硬盘的第一个分区用作根分区###

config 'mount'

        option  target  '/'

        option  device /dev/sda1

        option  fstype  ext4

        option  options rw,sync

        option  enabled '1'

        option  enabled_fsck 0

重启后看到根分区是你的 USB 存储设备了。

文章目录
  1. 1. 基础知识
    1. 1.1. 系统结构
    2. 1.2. 系统的文件结构
    3. 1.3. 基本指令
    4. 1.4. 软件包管理
  2. 2. 实际操作
    1. 2.1. 刷机
    2. 2.2. 登陆 SSH
    3. 2.3. WAN/LAN 网络设置
    4. 2.4. Wi-FI 设置
    5. 2.5. 支持 USB
    6. 2.6. 支持 extroot