Raspberry Pi
最近买了一个 Raspberry Pi ,原意是想鼓捣成一个支持 IPv6 的路由器。趁着放假先来玩一下。
材料预备
以下是必须的材料:
- Raspberry Pi 电路板
- 无线网卡
- SD 卡
- Micro USB 线:电源线
以下是可选的:
- 移动电源,5V/2A
- HDMI 显示器
- 网线
其实还需要一个 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 :
- 把 interface 改成 wlan0
- 把 dns 改成 8.8.8.8
- 把 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 的东西……