跟 UMU 一起玩 OpenWRT(入门篇9):远程监听

需求

在《跟 UMU 一起玩 OpenWRT(入门篇8):网络摄像机》介绍的 mjpg_streamer 并不能传输声音,所以有了本文!

参考

http://forum.anywlan.com/thread-282658-1-1.html

安装

1. 示例硬件信息

硬件还是选用微软 LifeCam HD-3000,您也可以去淘个便宜的带麦克风的 USB 声卡。

2. 安装程序

1
2
3
opkg update
opkg install kmod-usb-audio
opkg install icecast

如果您打算使用 ogg 格式则安装 ices:

1
opkg install ices

用 mp3 格式则安装 darkice:

1
opkg install darkice

3. 配置

ices 的配置文件(ices-oss.xml)可以去官网(http://www.icecast.org/ices.php)下载整个压缩包,里面有。

经验

由于涉及声音编码,需要大量计算,经过实践,CPU 才 400MHz 的 DIR-505,无论是 ogg 还是 MP3 格式都卡成翔……

请用配置更好的路由器测试,比如如意云 RY-01 的 CPU 是 600MHz 的,勉强可行。

跟 UMU 一起玩 OpenWRT(入门篇8):网络摄像机

需求

买了一个微软 LifeCam HD-3000,已经过了视频聊天的年纪,插到 DIR-505 玩一下吧。

安装

安装过程出奇简单:

1
2
opkg update
opkg install kmod-video-uvc

如果安装失败,看看是不是固件应该升级了,请参考《跟 UMU 一起玩 OpenWRT(入门篇5):升级固件》。

插上摄像头,检查一下 /dev/video0 是否存在,如果不存在,reboot 一下,如果存在,接下来安装和运行应用:

1
2
3
4
5
opkg install mjpg_streamer
# 使用 MJPG 格式,推荐:
mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -p 8080 -w /www/webcam"
# 使用 YUV 格式,多了一个 -y 参数,比较慢,不推荐:
mjpg_streamer -i "input_uvc.so -y -d /dev/video0" -o "output_http.so -p 8080 -w /www/webcam"

其它可选输入参数,例如:

-r 320x240 设置分辨率为320x240

-f 10 设置刷新率

设置用户密码,加输出参数:

-c user:password

调试

打开浏览器,输入 Mhttp://192.168.1.1:8080/,如果没问题,参考网页上的说明操作即可。

由于 DIR-505 性能一般,效果可能不理想,建议在更高配置的路由器上尝试。

如意云使用经验

优点

玩了好多个路由器,有传统,有所谓智能,还是比较赞赏如意云,相反的,之前已经吐槽过小米和圾路由。下面就来说说如意云的好处吧!

  1. 生态完善,支持的移动设备多,连 WP8/8.1 都支持了,UMU 主要手机是 Lumia 822,这个很满足,还有 PC 客户端,方便 PC 和移动设备之间同步数据。插件齐全,虽然很多插件没具体玩过,但至少看数量是不输圾路由的。

  2. 很好滴继承 OpenWRT 的开放性,天生 root 了,或者专业点说,SSH 服务没关闭,直接连,省去很多烦恼,用小米或圾路由,老是怕一升级就要重新 root,好讨厌的感觉……还可以刷 PandoraBox:http://downloads.openwrt.org.cn/PandoraBox/RY-1/

  3. 性价比不错,RY-01 才 81 元,从配置、功能、稳定性来比,差不多价位的传统路由完全不必考虑了。虽说运行内存和外壳材料方面不如圾 1S,但 USB 接口带来不少扩展性是圾 1S 没有的,而且 1S 要 109 元。

  4. 观其高配版 RY-02 配置也不落人后,后劲十足。

    这不是广告:要买的话,千万不要去迅雷商城,那边是 99 元,苏宁还是 81 元。

槽点

  1. 很丑……一股廉价感,还真是对得起价格;

  2. 如意云的 WiFi 密码不能用,.#&等特殊字符,好撒币的做法……

  3. WiFi 信号不如极路由 1S,虽然差距不大,但 UMU 还是通过实测数据挖掘出这个真相。

跟 UMU 一起玩 OpenWRT(入门篇7):安装 LUCI

UMU 不推荐安装 LUCI,还是多打命令好,可以学习更多东西,而且 LUCI 比较浪费存储空间!

1
2
opkg update
opkg install luci-ssl

推荐使用 SSL 版本,比较安全,但比较大,如果装不下可以试试不带 SSL 的:

1
opkg install luci

您可能不习惯默认的主题(luci-theme-bootstrap),Flash 够大的话,还是装个常用的:

1
opkg install luci-theme-openwrt

开启服务:

1
/etc/init.d/uhttpd start

设置开机自动运行(不推荐):

1
/etc/init.d/uhttpd enable

跟 UMU 一起玩 OpenWRT(入门篇6):挂接 U 盘

需求

DIR-505 有一个 USB2.0 接口,给它带来了很大的扩展性,我们可以插 U 盘、移动硬盘等,来做文件共享,或者离线下载等。接下来就先搞定 U 盘,主要参考资料:http://wiki.openwrt.org/doc/howto/usb.storage

安装

1. 安装 USB 和存储器的内核模块

1
2
3
opkg update
opkg install kmod-usb-storage
opkg install kmod-scsi-generic

2. 安装文件系统内核模块

1
opkg install kmod-fs-ext4

3. 安装应用工具

USB 辅助工具、分区、格式化工具,这些非必要,看情况安装:

1
opkg install usbutils fdisk e2fsprogs

调试

1. 测试能否识别 U 盘

不插 U 盘时,输入 lsusb,显示如下

1
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

插入 U 盘后,再 lsusb,发现多了一条,这说明工作正常:

1
2
Bus 001 Device 002: ID 0603:0908 Novatek Microelectronics Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2. 分区

如果 U 盘需要重新分区,请用 fdisk,这里不具体介绍,也可以在 Windows 上用 diskpart 完成,如果您还在路由器上操作,可以参考这个:http://www.leiphone.com/diy-a-smart-router-topic-increase-memory-3.html,第一步: 对设备进行分区。

分区完后,查看一下 /dev 目录里有没有出现硬盘符和分区符:

1
ls /dev | grep sd

上面装了 ext4 文件系统的驱动,因为这个对 OpenWRT 最合适,如果原来不是这个格式,那么安装了 e2fsprogs 后就可以用下面命令格式化了:

1
mkfs.ext4 /dev/sda1

3. 挂载

接下来用 mount 挂接,头尾行是必须,中间的三行是一种防止未挂接好就被写入的机制:

1
2
3
4
5
mkdir /mnt/usb
touch /mnt/usb/USB_DISK_NOT_PRESENT
chmod 555 /mnt/usb
chmod 444 /mnt/usb/USB_DISK_NOT_PRESENT
mount /dev/sda1 /mnt/usb

到这里就可以通过 /mnt/usb 来访问 U 盘了,不过工作才完成一半而已……下面还要让 U 盘能开机自动加载,主要参考:http://wiki.openwrt.org/doc/techref/block_mount 和 http://wiki.openwrt.org/doc/uci/fstab。先安装程序:

1
opkg install block-mount blkid

如果您比较珍惜存储空间,可以不用安装 blkid,block-mount 就行。用 blkidblock info,查看分区的 UUID。比如用 blkid,则 UMU 的 U 盘是显示:

1
2
/dev/mtdblock7: TYPE="squashfs"
/dev/sda1: UUID="16e381bc-d9bb-40fd-9e98-410b346931ef" TYPE="ext4"

接下来输入 block detect 查看一下:

1
2
3
4
5
6
7
8
9
10
11
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'
config 'mount'
    option target '/mnt/sda1'
    option uuid '16e381bc-d9bb-40fd-9e98-410b346931ef'
    option enabled '0'

生成配置文件,并把上面的 target 改为您想要的,enabled 值改为 1:

1
2
3
4
block detect > /etc/config/fstab
uci set fstab.@mount[-1].target='/mnt/usb'
uci set fstab.@mount[-1].enabled=1
uci commit fstab

参考

本文介绍的都是精简过的必须操作,其它可选项请自行参考:http://wiki.openwrt.org/doc/uci/fstab

跟 UMU 一起玩 OpenWRT(入门篇5):升级固件

问题

OpenWRT 的主线于 2014-06-19 06:07:37 UTC 更新了固件,如果不跟随升级,安装内核模块时会失败,比如以下命令:

1
2
opkg update
opkg install kmod-hid

解决

升级固件:

1
2
3
cd /tmp
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin
sysupgrade openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin

跟 UMU 一起玩 OpenWRT(入门篇4):配置网络

前情

在上篇《跟 UMU 一起玩 OpenWRT(入门篇3):工作模式开关》中介绍了如何通过 GPIO 读取获得当前工作模式,现在来实现这个开关的功能。

配置开机启动脚本

主要配置 rc.local 脚本,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
read_gpio() {
(echo $1 > /sys/class/gpio/export) >& /dev/null
(echo "in" > /sys/class/gpio/gpio$1/direction) >& /dev/null
return `cat /sys/class/gpio/gpio$1/value`;
}

read_gpio 19;
v=$?;
read_gpio 20;
v=$v$?;
read_gpio 21;
v=$v$?;
read_gpio 22;
v=$v$?;
read_gpio 23;
v=$v$?;
case "$v" in
11000) v="4th";;
10001) v="ap";;
11001) v="repeater";;
01001) v="hotspot";;
*) v="error";;
esac

if [ "$v" != "error" ]; then
old=`cat /etc/config/working_mode`
if [ "$v" != "$old" ]; then
echo "$v" > /etc/config/working_mode
cp /etc/config/$v/* /etc/config/
logger "working mode: $old -> $v"
else
logger "working mode: $old"
fi
fi

exit 0

根据工作模式配置网络

上一步加的代码是,开机自动复制配置文件覆盖到 /etc/config/ 下,配置文件不需要全部,只要 firewall、network 和 wireless 就行了。按工作模式命名,创建三个目录:

1
2
3
mkdir /etc/config/ap
mkdir /etc/config/repeater
mkdir /etc/config/hotspot

后面,我们会把配置文件写好了,放在这些目录里。

ap 模式

下面以 ap 为例,此模式是网口做 WAN,无线做 LAN,WAN 以 ADSL 接入为例,其它情况自行变通:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uci set wireless.@wifi-device[0].disabled=0;
uci set wireless.@wifi-iface[0].ssid='umu618.com';
uci set wireless.@wifi-iface[0].encryption='psk2+ccmp';
uci set wireless.@wifi-iface[0].key='WiFi 密码';
uci commit wireless;
wifi

uci delete network.lan.ifname
uci delete network.lan.type
uci add network interface
uci rename network.@interface[-1]='wan'
uci set network.@interface[-1].ifname='eth1'
uci set network.@interface[-1]._orig_ifname='eth1'
uci set network.@interface[-1]._orig_bridge='false'
uci set network.@interface[-1].proto='pppoe'
uci set network.@interface[-1].username='宽带账号'
uci set network.@interface[-1].password='宽带密码'
uci commit network

cp /etc/config/firewall /etc/config/ap/
cp /etc/config/network /etc/config/ap/
cp /etc/config/wireless /etc/config/ap/

repeater 模式

再来说一下 repeater,网口做 LAN,无线做一个 AP Client 和一个 AP。注意,以下命令以初始化的配置文件为基础,请事先备份、还原,不要在配置过前面的 ap 模式后直接继续配置,可能会有问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
uci add network interface
uci rename network.@interface[-1]='wwan'
uci set network.@interface[-1].proto='dhcp'
uci commit network
uci set wireless.@wifi-device[0].disabled=0;
uci set wireless.@wifi-iface[0].ssid='umu618.com';
uci set wireless.@wifi-iface[0].encryption='psk2+ccmp';
uci set wireless.@wifi-iface[0].key='WiFi 密码';

uci add wireless wifi-iface
uci set wireless.@wifi-iface[-1].network='wwan'
uci set wireless.@wifi-iface[-1].ssid='现有 WiFi 名字'
uci set wireless.@wifi-iface[-1].device='radio0'
uci set wireless.@wifi-iface[-1].mode='sta'
uci set wireless.@wifi-iface[-1].bssid='现有无线路由器的 MAC 地址'
uci set wireless.@wifi-iface[-1].encryption='psk2+ccmp'
uci set wireless.@wifi-iface[-1].key='现有 WiFi 密码'
uci commit wireless;
wifi

uci get firewall.@zone[1].network
uci show firewall.@zone[1]
uci set firewall.@zone[1].network='wan wan6 wwan'
uci commit firewall
/etc/init.d/firewall restart

cp /etc/config/firewall /etc/config/repeater/
cp /etc/config/network /etc/config/repeater/
cp /etc/config/wireless /etc/config/repeater/