Raspberry Pi

最近买了一个 Raspberry Pi ,原意是想鼓捣成一个支持 IPv6 的路由器。趁着放假先来玩一下。

材料预备

以下是必须的材料:

  1. Raspberry Pi 电路板
  2. 无线网卡
  3. SD 卡
  4. Micro USB 线:电源线

以下是可选的:

  1. 移动电源,5V/2A
  2. HDMI 显示器
  3. 网线

其实还需要一个 ARM 系统……这个就看个人爱好了……作为长期的逗逼 Arch 党,我就选择了 Arch ……

装系统

这样把文件烧进去

dd if=arch.img of=/dev/sdX

速度什么的,不要在意这些细节。

由于我没有 高富帅 的显示器,所以我就只能 headless 地装了。 树莓派的 wiki 还是挺好的。

用 NetworkManager 和网线连接树莓派的时候,要把 method 改成 Shared 。我一开始不知道怎么搞于是怎么都搜不到树莓派。用网线连上去之后就可以

nmap -T5 -n -p 22 --open --min-parallelism 200 10.42.0.0/24

这样搜索树莓派了。后面的 ip 记得改掉。只要能够 ssh 上去,系统就可以算装好了。

很多次是把卡插进去后没反应。在 fanhq 的帮助下,我才知道我根本就不懂 ARM 那套理论。一个 SD 卡烧好后其实是可以跑的,只不过需要等一等。我发现这文件系统好脆弱,一不小心就会跪。这是在提示我们多做备份吗 = =

配置

非常惊讶的是清华居然有 archlinuxarm 的仓库,于是就用了这个仓库。

由于买东西的时候附赠了一个京东的小度 Wi-Fi ,于是我就准备用这个 USB 无线网卡了。一开始还写了下如何自己编译 MT7601U 的驱动,后来发现我想多了,这货的驱动没有实现 nl80211 所以没法 AP-mode 。我还是再考虑买个无线网卡吧。

由于没有屏幕,导致 debug 特别蛋碎,所以决定买一 个屏幕 根数据线。似乎有个东西叫做 Adafruit 954 可以利用 GPIO 转 USB 来输出错误信息。但是这货似乎挺高贵的我买不到,于是只好买了根 PL2303HX 。

根据这 make 的速度,哪位勇士敢在树莓派上 make 一个 Firefox 吗?!(据说交叉编译是个坑?)

……于是我先挖一个坑,回 THU 在搞去了。

GPIO 系列

买了根 PL2303HX 的线,按照网上的图片插上去后 dmesg | tail 可以看到

[17314.401925] pl2303 3-3:1.0: pl2303 converter detected
[17314.402457] usb 3-3: pl2303 converter now attached to ttyUSB

这种东西,这表示系统已经识别好了 PL2303HX 了。而且树莓派的 POWER 已经打开了有木有!

然后怒上 minicom -b 115200 -o -D /dev/ttyUSB0 发现什么都没有……发现 Arch 已经跪了……我还是老老实实用 Raspbian 吧。最后还是用回了 Debian 系 →_→

开始刷 Raspbian ……继续 dd 吧。

然后插回 Raspberry Pi 发现 minicom 已经有反应了!可以显示出 tty 的界面了!好了现在可以正式开始调教了……(一脸血)

后来一直是网络有问题,每次都提示什么 lo 被定义了两次,最后发现是 nano 某次把文件编码换成了 Mac 导致出现了奇怪的问题。

由于我用的是 shadowsocks-libev 所以又要自己编译。这次 git 似乎出了点小问题,大概是 SSL 检验的时候没有证书结果跪了。跑一下

export GIT_SSL_NO_VERIFY=1

就好了。

由于 shadowsocks 已经调教好了, modprobe ipv6 一下就可以直接用了。

用 privoxy 设置了一个 http 代理,于是 iPad/iPhone 都可以用了。剩下的就等无线网卡的到来啦……感觉放 AP 是个坑 →_→ 不要再像上次那个小度 Wi-Fi 一样这么蛋疼地编译驱动了……

赞 privoxy ,配置文件语法相当于 pac 了(不过没 js 支持),用这两句话就可以不用 shadowsocks 去上 tsinghua 校内网了:

forward-socks5 / 127.0.0.1:8188 .
forward .tsinghua.edu.cn .

无线网卡

我用的无线网卡是 Tp-Link WN725N ,因为已知这是支持 Pi 的。插上去后 lsusb 发现识别出来了,还好……开始装驱动

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-???.tar.gz
tar -zxvf 8188eu-???.tar.gz
sudo install -p -m 644 8188eu.ko /lib/modules/3.10.18+/kernel/drivers/net/wireless
sudo insmod /lib/modules/3.10.18+/kernel/drivers/net/wireless/8188eu.ko
sudo depmod -a
sudo reboot

那个 ??? 是什么详见 这里

重启后 ifconfig 就可以看见 wlan0 了。然后开始配置 hostapd 。一开始提示找不到 nl80211 ,modprobe mac80211 就可以 OK 了。

然后配置 udhcpd :

  1. 把 interface 改成 wlan0
  2. 把 dns 改成 8.8.8.8
  3. 把 router 改成 192.168.0.1

然后就可以放心的 /etc/init.d/udhcpd start 了。

发现一件奇怪的事, iw list 啥都不出来,但是 iwconfig/ifconfig 就可以出来,iwlist scan 还可以正常的使用,不明真相(虽然两者属于不同的工具包,但是为什么会有这样奇怪的问题呢)。想找到解决方法找了很久没找到,索性不管了。

中间遇到了很多奇葩的错误调了很久,例如我现在的 hostapd 不是原版的 hostapd ,而是 这里 的。原版的 hostapd 会提示有如下提示:

random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
Could not open file /sys/class/net/wlan0/phy80211/name: No such file or directory
netlink: Operstate: linkmode=0, operstate=6
nl80211: Set mode ifindex 3 iftype 2 (STATION)
nl80211: Failed to set interface 3 to mode 2: -19 (No such device)
nl80211: Try mode change after setting interface down
nl80211: Set mode ifindex 3 iftype 2 (STATION)
nl80211: Failed to set interface 3 to mode 2: -19 (No such device)
nl80211: Interface mode change to 2 from 0 failed
nl80211 driver initialization failed.

和 iw 是一样的症状,不明真相。但是换了二进制文件后确实可以用了,不过注意 driver 要写成 rtl871xdrv

udhcpd

是我姿势不对吗…… udhcpd 在我手里简直是一大坑货,不知道坑了我多少时间……换成 dnsmasq 马上就好了。

大概就是……我终于可以建 wifi 了,但是连不上……有时候的奇怪情况是手机可以连上去,但是笔记本就连不上去了;如果笔记本连上去,那么手机就连不上去了。我一开始以为是 hostapd 的原因,搜了一下没找到,看到很多次都是卡在 Setting network address 这里,没有获得 ip、dns、gateway 之类的东西,我就想是不是 udhcpd 没有启动。一看果然没有启动,于是我就去启动了一下,过不了多久居然又关了,有时候甚至是启动都启动不起来。一怒之下换成了 dnsmasq ,于是就好了。发现 log 真是一个好东西,一开始 dnsmasq 没有配置好,发现它有 log 功能,于是看了看 /var/log/syslog 明白是哪里有问题然后就好做了。

还差最后一个东西就是网桥了……

这篇文章 的帮助下,成功搭好了 NAT 网桥……

P.S. 刚买了 Raspberry Pi 就发现一个叫做 Cubieboard 的东西……