pcDuino v2 实现无线热点

请严格按照以下步骤进行

准备头文件

下载编译需要的头文件:

$sudo apt-get install pcduino-linux-headers-3.4.29+

更新内核支持NAT

编译或直接下载内核

打开这个链接,下载下面提供的内核文件:pcduino_a10_hwpack_20131226.tar

如果你有时间的话也可以按照他的教程来自己编译内核。也可以参考这里

内核安装

首先,将 pcduino_a10_hwpack_YYYYMMDD.tar.xz 放到pcDuino的~下。

  1. 为从nand 启动的板子更新kernel

    依次执行如下命令:

    $ tar xvf pcduino_a10_hwpack_YYYYMMDD.tar.xz -C /tmp
    $ sudo mount /dev/nanda /boot
    $ sudo cp /tmp/kernel/* /boot -f
    $ sudo mv /lib/modules/3.4.29+ /lib/modules/3.4.29_old
    $ sudo cp /tmp/rootfs/lib/modules/3.4.29+ /lib/modules/ -ar
    $ sudo sync
    $ sudo umount /boot/
    $ sudo reboot
    
  2. 为从存储卡启动的板子更新kernel

    依次执行如下命令:

    $ tar xvf pcduino_a10_hwpack_YYYYMMDD.tar.xz -C /tmp
    $ sudo mount /dev/mmcblk0p1 /boot
    $ sudo cp /tmp/kernel/* /boot -f
    $ sudo mv /lib/modules/3.4.29+ /lib/modules/3.4.29_old
    $ sudo cp /tmp/rootfs/lib/modules/3.4.29+ /lib/modules/ -ar
    $ sudo sync
    $ sudo umount /boot/
    $ sudo reboot
    

注意,此方法不会重装ubuntu

编译安装网卡驱动

参考这里

先执行一下:

$sudo apt-get update
$sudo apt-get install isc-dhcp-server

然后下载驱动:

http://pan.baidu.com/s/1xfP8K

然后执行如下命令:

$cd  /usr/src/linux-headers-3.4.29+/arch
$sudo cp  arm  armv7l  -rf
$sudo reboot

然后删除原有的8188cu.ko

$sudo rm  /lib/modules/3.4.29+/kernel/drivers/net/wireless/rtl8192cu/8192cu.ko

注意,这里做完后最好不要重启,一重启网卡便连不上了,otg和无线都无效,只能通过hdmi或者debug port继续进行下一步

然后执行:

$unzip  RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
$cd  RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911
$chmod +x install.sh
$sudo ./install.sh

等大概5min。

安装hostapd

执行如下命令:

$git clone https://github.com/jenssegers/RTL8188-hostapd
$cd RTL8188-hostapd/hostapd
$sudo make install

等大概5min

然后执行:

$cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd
$tar xvf  wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
$cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd/  (这里和教程不一样)
$sudo make install

等大概5min

配置hostapd

这里注意一下,在控制台输入:

$ifconfig

出现类似:

wlan4     Link encap:以太网  硬件地址 00:**:**:**:**:**
          inet 地址:192.168.1.1  广播:192.168.1.255  掩码:255.255.255.0
          inet6 地址: ***::***:*******:17fd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:23487 错误:0 丢弃:8569 过载:0 帧数:0
          发送数据包:22220 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000
          接收字节:4629020 (4.6 MB)  发送字节:10508030 (10.5 MB)

时,记下来你的无线网卡标识(这里是wlan4)。

然后,执行:

$sudo vi /etc/hostapd/hostapd.conf

然后修改:

interface=wlan*   #根据你自己的接点修改(上面获得的标识),我的是wlan4。

保存以后执行:

$sudo service hostapd restart

然后你应该会看到hostapd成功运行了。

配置AP固定ip

执行:

$sudo vi /etc/network/interfaces

在后面添加:

auto wlan4  #注意这里要和上面一样
iface wlan4 inet static
       address 192.168.1.1
       netmask 255.255.255.0

配置dhcp

执行:

$vi /etc/dhcp/dhcpd.conf

在最后添加:

subnet 192.168.1.0 netmask 255.255.255.0{
  range 192.168.1.2 192.168.1.200;
  option routers 192.168.1.1;
}

执行:

$sudo service isc-dhcp-server restart

应该可以看到isc-dhcp-server正常启动了。

设置开机启动

注意,这一步很重要,如果不设置开机启动,那么重启以后,wifi连不上,otg连不上,只能接hdmi或者debug port了。

依次执行:

(hostapd启动后dhcpd才能启动,dhcpd关闭hostapd才关闭)
$update-rc.d hostapd defaults 80 20
$update-rc.d isc-dhcp-server defaults 90 10

配置NAT

执行:

$sudo vim  /etc/modules

修改该文件:

8192cu
rt5370sta
tun  #插入这一行

然后安装:

$sudo apt-get install iptables

reboot

重启完后(会比之前久一点),你会搜到wifi热点信号了。能连上,但是不能上网,于是我们继续。

设置转发

参考这里

开机后执行:

$sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
$sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这时,你再重连一下热点,你会发现可以上网了!

设置开机启动转发

每次开机都要输入命令才能上网太麻烦了。我们把它设置成开机启动:

执行:

$sudo vi /etc/sysctl.conf

#net.ipv4.ip_forward=1#去掉。

然后执行:

sudo crontab -e

添加:

@reboot sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

现在开机就可以连上网了!

但是!

刷完内核以后,发现gpio驱动不见了。整个/lib/modules/3.4.29+/kernel/drivers/hardwarelib/驱动都丢失了。搜索讨论了一番,应该是官方img里面的编译设置不是默认的设置(坑!)。

我们可以将官方的hardwarelib文件夹拷贝回来解决这个问题。到这里下载lib文件,放到~目录下。然后执行:

$ unzip hardwarelib.zip
$ sudo mv hardwarelib/ /lib/modules/3.4.29+/kernel/drivers/
$ sudo modprobe gpio
$ sudo modprobe adc

输入:

$ io_test

如果没有输出** faild,那么就成功了。