编译OpenWrt-LEDE版本
在OpenWRT 15.05以后已经更换为LEDE。
编译环境
Ubuntu 16.04
设备
树莓派3 Mode B一个
编译

1) 准备环境 sudo apt-get update && sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip subversion mercurial

2) 下载源码 git clone https://git.lede-project.org/source.git

3)  更新所有包依赖 ./scripts/feeds update -a

4)  安装所有包依赖 ./scripts/feeds install -a

5)  检查配置 make defconfig

6)  修改编译选项

我们使用命令make menuconfig会进入一个定制内核的界面, 因为我们使用的是树莓派3B,所以我们需要修改的地方主要有以下3点: . Target System -> Broadcom BCM27xx . SubTarget -> BCM2710 64 bit based boards . Target Profile -> (Raspberry Pi 3) B (64 bit)

为了确保编译通过,在这里我们其他的暂时不进行修改,保持默认选项即可。修改完的界面如下图:

使用键盘方向键选择Save保存后即可。

7) 开始编译

make V=s -j4 V=s 表示输出全部编译信息,j4表示使用4个线程。正常情况下,等待1~2个小时,即可完成编译,这是在 source(你的源码更目录) -> bin -> targets -> brcm2708 -> brcm2710目录下会有lede-brcm2708-bcm2710-rpi-3-ext4-sdcard.img.gz这个文件。

8) 烧录

在ubuntu系统下使用dd命令将lede-brcm2708-bcm2710-rpi-3-ext4-sdcard.img.gz解压后得到的imagelede-brcm2708-bcm2710-rpi-3-ext4-sdcard.img文件写入到sdcard中。具体命令为 sudo dd if=/home/james/Desktop/lede-brcm2708-bcm2710-rpi-3-ext4-sdcard.img of=/dev/sdb bs=4M 将sdcard插回树莓派,开机,正常情况下系统就可以工作起来了,当然这时路由功能其实还没法使用。

9) 开机调试

使用网线插入树莓派另一端与电脑连接,使用ssh方式连接树莓派,这里我使用PUTTY。然后修改相关文件。

1.修改vim /etc/config/network,将内容改为:

    config interface 'loopback' 
    option ifname 'lo' 
    option proto 'static' 
    option ipaddr '127.0.0.1' 
    option netmask '255.0.0.0'
    config globals 'globals'
    option ula_prefix 'fd11:8629:b448::/48'
    config interface 'lan'
    option type 'bridge'
    option ifname 'eth0'
    option proto 'static'
    option ipaddr '192.168.2.1'
    option netmask '255.255.255.0'
    option ip6assign '60'


2. 同理修改 vim /etc/config/wireless将内容修改为:

config wifi-device radio0
        option type     mac80211
        option channel  11
        option hwmode   11g
        option path 'platform/soc/3f300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
        option htmode   HT20
        # REMOVE THIS LINE TO ENABLE WIFI:
#        option disabled 0

config wifi-iface
        option device   radio0
        option network  lan
        option mode     ap
        option ssid     [yourname] #这里输入wifi名
        option encryption psk2
        option key      [yourwifikey] #这里输入wifi密码 


3. 允许通过wan连接ssh

vim /etc/config/firewall修改为:

#open ssh on wan interface
config rule                
        option src              wan
        option dest_port        22
        option target           ACCEPT     
        option proto 

. 安装luci,安装后可以通过浏览器去访问路由
/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable
到此就可以访问路由了。重启树莓派,将网线接入路由器,这时候我们查看无线网络应该就可以使用了。

到时这样配置感觉好麻烦,我们能否在编译之前配置好,编译完烧录进树莓派之后不需要配置任何东西,马上可以使用呢?答案是肯定的,下面我们来实现。

配置默认设置

1. 配置luci make menuconfig

LuCI -> 1. Collections -> 选择luci
LuCI -> 1. Collections -> 选择luci-ssl

2. 配置network /home/james/RasPI/source/package/basefiles/files/bin/config_generate修改

generate_static_network() {
    uci -q batch <<-EOF
        delete network.loopback
        set network.loopback='interface'
        set network.loopback.ifname='lo'
        set network.loopback.proto='static'
        set network.loopback.ipaddr='127.0.0.1'
        set network.loopback.netmask='255.0.0.0'
        delete network.globals
        set network.globals='globals'
        set network.globals.ula_prefix='auto'
        #添加以下设置
        delete network.wan
        set network.wan='interface'
        set network.wan.proto='dhcp'
        set network.wan.ifname='eth0'
    EOF
}
generate_network() {
    local ifname macaddr protocol type ipaddr netmask

    json_select network
        json_select "$1"
            json_get_vars ifname macaddr protocol ipaddr netmask
        json_select ..
    json_select ..

    [ -n "$ifname" ] || return

    # force bridge for multi-interface devices (and lan)
    case "$1:$ifname" in
        *\ * | lan:*) type="bridge" ;;
    esac

    uci -q batch <<-EOF
        delete network.$1
        set network.$1='interface'
        set network.$1.type='$type'
        set network.$1.proto='none'
    EOF

    [ -n "$macaddr" ] && uci -q batch <<-EOF
        delete network.$1_dev
        set network.$1_dev='device'
        set network.$1_dev.name='$ifname'
        set network.$1_dev.macaddr='$macaddr'
    EOF

    case "$protocol" in
        static)
            local ipad
            case "$1" in
                #修改IP地址
                lan) ipad=${ipaddr:-"192.168.2.1"} ;;
                *) ipad=${ipaddr:-"192.168.$((addr_offset++)).1"} ;;
            esac

            netm=${netmask:-"255.255.255.0"}

            uci -q batch <<-EOF
                #删除ifname选项
                set network.$1.proto='static'
                set network.$1.ipaddr='$ipad'
                set network.$1.netmask='$netm'
                set network.$1.ip6assign='60'
            EOF
        ;;

3. 配置无线网络 /home/james/RasPI/source/package/kernel/mac80211/files/lib/mac80211.sh

detect_mac80211() {
    devidx=0
    config_load wireless
    while :; do
        config_get type "radio$devidx" type
        [ -n "$type" ] || break
        devidx=$(($devidx + 1))
    done

    for _dev in /sys/class/ieee80211/*; do
        [ -e "$_dev" ] || continue

        dev="${_dev##*/}"

        found=0
        config_foreach check_mac80211_device wifi-device
        [ "$found" -gt 0 ] && continue

        mode_band="g"
        channel="11"
        htmode=""
        ht_capab=""

        iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20
        iw phy "$dev" info | grep -q '2412 MHz' || { mode_band="a"; channel="36"; }

        vht_cap=$(iw phy "$dev" info | grep -c 'VHT Capabilities')
        cap_5ghz=$(iw phy "$dev" info | grep -c "Band 2")
        [ "$vht_cap" -gt 0 -a "$cap_5ghz" -gt 0 ] && {
            mode_band="a";
            channel="36"
            htmode="VHT80"
        }

        [ -n $htmode ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"

        if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; then
            path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
        else
            path=""
        fi
        if [ -n "$path" ]; then
            path="${path##/sys/devices/}"
            case "$path" in
                platform*/pci*) path="${path##platform/}";;
            esac
            dev_id="set wireless.radio${devidx}.path='$path'"
        else
            dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"
        fi

        uci -q batch <<-EOF
            set wireless.radio${devidx}=wifi-device
            set wireless.radio${devidx}.type=mac80211
            set wireless.radio${devidx}.channel=${channel}
            set wireless.radio${devidx}.hwmode=11${mode_band}
            ${dev_id}
            ${ht_capab}
            #设置默认wifi名称、加密方式、密码
            set wireless.default_radio${devidx}=wifi-iface
            set wireless.default_radio${devidx}.device=radio${devidx}
            set wireless.default_radio${devidx}.network=lan
            set wireless.default_radio${devidx}.mode=ap
            set wireless.default_radio${devidx}.ssid=Your_RAPI
            set wireless.default_radio${devidx}.encryption=psk2
            set wireless.default_radio${devidx}.key=test1234567
EOF
        uci -q commit wireless

        devidx=$(($devidx + 1))
    done
}  


4. 配置防火墙

/home/james/RasPI/source/package/network/config/firewall/firewall.config

#open ssh on wan interface
config rule                
        option src              wan
        option dest_port        22
        option target           ACCEPT     
        option proto

5. 修改完以上几个文件,重新编译,然后烧录到树莓派,搞定。

开机接上网线,不需要任何设置,就可以畅享无线网络了。你也可以通过浏览器访问路由器主页了。
到此就暂时告一段落了。