树莓派基本配置

1 前言

目标:配置无线网卡,使可以通过ssh远程控制树莓派。

硬件:树莓派B+,TP-Link TL-WN725N v2无线网卡。

系统:Raspbian。

2 配置

2.1 基本配置

系统写入SD卡后,第一次加电,会出现一个配置界面。主要需要配置的,是扩展文件系统到整个SD卡(选项1)、是否默认进入图形界面(选项3)、区域及语言选项(选项4)、ssh(选项8)。建议不要默认进入图形界面,字符界面运行startx也可进图形界面。可随时使用raspi-config进入这一配置界面。

下图是在cygwin用ssh连接树莓派后,运行sudo raspi-config后的截图。界面显示有些问题,但选项都是一致的。

basic-configuration-of-raspberrypi_01

2.2 网络配置

要远程访问树莓派,必须固定其IP地址。我这里的无线路由器是192.168.1.0/24子网,因此给有线和无线网卡分别分配了192.168.1.81和192.168.1.80两个IP。

我这里介绍的配置方法,被Debian参考手册称为“传统(legacy)”方法。

2.2.1 interfaces文件

树莓派没有用到Network Manager,网络接口是编辑/etc/network/interfaces设置的,下面是其内容:

auto lo

iface lo inet loopback
iface eth0 inet static
        address 192.168.1.81
        netmask 255.255.255.0
        gateway 192.168.1.1

allow-hotplug wlan0
iface wlan0 inet manual
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

iface home inet static
        address 192.168.1.80
        netmask 255.255.255.0
        gateway 192.168.1.1
auto lo
“auto”用来识别以-a参数运行ifup时应该启用的物理接口(这一参数被用在系统启动脚本中)。每条“auto 接口”命令应占据一行,ifup根据列出的顺序依次启用接口。
allow-hotplug wlan0
“allow-”用来识别应从各种子系统启用的接口。“ifup --allow=hotplug eth0 eth1”只会启用列在“allow-hotplug”行中的eth0或eth1。注意“allow-auto”和“auto”是同义词。
iface lo inet ...
iface eth0 inet ...
iface wlan0 inet ...
iface default inet ...
“iface”后是逻辑接口名。在最简单的情况下,如果不存在mapping配置,逻辑接口名与物理接口名相同。接口名后是接口所使用的地址族(address family),“inet”是TCP/IP,“inet6”是IPv6。
... inet loopback
... inet static
... inet manual
... inet dhcp
“inet”后是用来配置接口的方法。“loopback”方法用来定义IPv4 loopback接口;“static”方法定义接口的静态IPv4地址,包含的选项有address、netmask、broadcast、metric、gateway、pointopoint、hwaddress、mtu、scope;“manual”方法默认不配置接口,需通过外部程序(ifupdown以外的程序)配置或手动配置;“dhcp”方法使用“dhclient、pump、udhcpc、dhcpcd”这些工具中任意一个,通过DHCP获取IP地址(这一方法的选项就不列出了,因为上述工具不一定会使用这里配置的信息)。
iface default ...
iface home ...
结合wpa_supplicant.conf的内容(见下节),配置无线网卡的具体参数。

2.2.2 wpa_supplicant.conf文件

当前最安全的无线加密标准是WPA2,主流无线设备都支持这一标准。Debian通过wpasupplicant软件包提供对WPA/WPA2的支持,其配置文件是/etc/wpa_supplicant/wpa_supplicant.conf。树莓派默认安装了此软件包,且配置为“漫游模式(roaming mode)”。

要让一个无线接口使用漫游模式,必须使用inet的manual方法,并用wpa-roam命令指出wpa_supplicant.conf配置文件的位置(见上一节interfaces文件中iface wlan0那两行内容)。下面是wpa_supplicant.conf的内容:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="Home_AP"
        psk="password"
        scan_ssid=1
        key_mgmt=WPA-PSK
        id_str="home"
}
update_config=1
是否允许wpa_supplicant更新配置文件。这一选项用来允许wpa_supplicant在配置发生变化的时候覆盖配置文件(例如,使用wpa_cli或wpa_gui添加了新的网络配置信息块,或修改了密码)。若要让wpa_cli或wpa_gui所做的修改永久保存,需把它的值设置为1。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
控制接口(control interface)的参数。若提供了这一参数,wpa_supplicant会打开一个控制接口,以便外部程序通过这个接口管理wpa_supplicant。这一参数只要存在,就表明启用了控制接口。“DIR=/var/run/wpa_supplicant”,Linux和BSD系统会使用这里提供的目录创建UNIX domain socket,用来监听外部程序的状态信息请求和配置请求,推荐使用/var/run/wpa_supplicant这一目录;“GROUP=netdev”,wpa_supplicant默认以gid 0(root)运行,若要允许非root用户使用控制接口,则使用GRUOP指出使用控制接口的用户组,并相应创建此用户组。
network={
        ssid="Home_AP"
        psk="password"
        scan_ssid=1
        key_mgmt=WPA-PSK
        id_str="home"
}
配置无线网络参数。“ssid”,无线网名称;“psk”,无线网密码;“scan_ssid”,“1”表示扫描SSID-specific Probe Request帧(可用来查找不接受广播SSID或使用多个SSID的AP),“0”表示关闭这一功能(默认为0);“key_mgmt”,可接受的鉴定密钥管理协议(authenticated key management protocol)列表;“id_str”,用于外部脚本的识别字符,其值会通过wpa_cli以WPA_ID_STR这一环境变量的方式传递给外部脚本,方便用于网络配置(目前我把它的作用理解为虚拟网卡,“id_str=home”通知/sbin/wpa_action去“ifup home”,如果没有“id_str”,/sbin/wpa_action会“ifup default”)。

2.3 网卡驱动

一件很悲剧的事情,是树莓派默认不支持TP-Link TL-WN725N v2无线网卡,需要自行编译驱动;更悲剧的事情,是这款无线网卡所使用的Realtek 8188eu芯片在Realtek官网没有提供驱动下载;最最悲剧的,是当我找到了驱动源码,打算编译的时候,发现树莓派官网提供的Raspbian镜像中所包含的内核是树莓派基金会自己编译的内核,没有提供相应的kernel headers。于是,只有先换用Raspbian自带内核,再编译网卡驱动。步骤如下:

  1. 安装内核。linux-image-rpi-rpfv这一元软件包(metapackage)会根据树莓派基金会当前推荐的版本(3.12)来安装内核。目前用下面命令安装的是linux-image-3.12-1-rpi、linux-headers-3.12-1-rpi和linux-headers-3.12-1-common三个包。
    $ sudo apt-get install linux-image-rpi-rpfv linux-headers-rpi-rpfv
  2. 让系统使用新安装的内核。编辑/boot/config.txt,在文件结尾添加下面几行内容。添加完成后保存,并重启系统。
    # use Raspbian kernel for kernel module compile
    kernel vmlinuz-3.12-1-rpi
    initramfs initrd.img-3.12-1-rpi
  3. 系统重启后,下载网卡驱动源代码,解压缩。然后编译并安装驱动。
    $ wget -c https://github.com/lwfinger/rtl8188eu/archive/master.zip
    $ unzip master.zip
    $ cd rtl8188eu-master
    $ make all
    $ sudo make install
    
  4. 加载网卡驱动。
    sudo modprobe 8188eu
  5. 让系统启动时自动加载驱动,编辑/etc/modules文件,添加“8188eu”。添加后文件内容如下:
    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.
    # Parameters can be specified after the module name.
    
    snd-bcm2835
    8188eu
    

3 参考文档

3.1 TP-Link TL-WN725N V2 works out of the box on Raspbian

3.2 Howto get the Raspbian kernel installed with headers (solution)

3.3 man interfaces

3.4 /usr/share/doc/wpasupplicant/README.modes.gz

3.5 /usr/share/doc/wpasupplicant/examples/wpa_supplicant.conf.gz

Visits: 626

此条目发表在树莓派分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

18 + 7 =