---

title: OPENWRT编译之树莓派4B

date: 2019-11-24

categories: Linux

tags: rpi

---

# 环境配置说明

- 适用硬件:Raspberry Pi 4B

- 编译系统:Debian For WSL

- 参考借鉴:[参数配置](https://mlapp.cn/374.html) | [LuCI配置](https://www.right.com.cn/forum/thread-344825-1-1.html) | [网卡设置](https://www.right.com.cn/forum/thread-406062-1-1.html)

```bash

# 安装编译工具

sudo apt-get update

sudo apt-get install build-essential asciidoc binutils bzip2 \

gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev \

lib32gcc1 libc6-dev-i386 subversion flex uglifyjs libssl-dev upx \

gcc-multilib p7zip p7zip-full msmtp texinfo libglib2.0-dev xmlto \

git-core qemu-utils libelf-dev autoconf automake libtool autopoint \

curl wget device-tree-compiler rsync

```

# 获取编译源码

> 1. 注意:不要使用root用户编译,最好使用梯子来加速源码的下载速度

> 2. 编译完成后把bin/targets/brcm27xx/bcm2711/openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz解压后的img文件刷入SD卡中即可

> 3. 可选lean版魔改源码替换官方源码:https://github.com/coolsnowwolf/lede

```bash

# 设置代理来加速源码下载,没有代理可跳过或根据需求设置

# export all_proxy="127.0.0.1:7890"

# 获取openwrt官方源码

mkdir openwrt

cd openwrt/

git clone https://git.openwrt.org/openwrt/openwrt.git ./

# 以后每次编译前建议执行以下三行命令更新源码

git pull

./scripts/feeds update -a

./scripts/feeds install -a

make defconfig # 测试编译环境

make menuconfig # 进入固件配置界面

make download -j8 V=s # 下载所需源码,请尽量使用梯子

make -j1 V=s # 首次编译推荐用单线程

# 再次编译前建议使用make clean清理

make clean # 清除bin目录

make dirclean # 清除bin目录和交叉编译工具及工具链目录

make distclean # 清除所有相关的东西,包括下载的软件包,配置文件,feed内容等

```

# 可选内核配置

```bash

# 额外配置内核参数,一般不需要配置

# 只能包含到内核而不能作为模块,因为编译后的模块不会添加到固件内

make kernel_menuconfig # 进入内核配置界面

# 修改的内核参数会保存到openwrt/target/linux/bcm27xx/bcm2711/config-5.4

# 和openwrt/target/linux/generic/config-5.4合成最终内核配置文件

# openwrt/build_dir/target-aarch64_cortex-a72_musllinux-bcm27xx_bcm2711/linux-5.4.42/.config

```

# 固件编译配置

1. 简单的make menuconfig参数配置,除必选配置外的其他项可根据需求自行选择

2. 基础配置

```bash

# 必选配置

Target System -> Broadcom BCM27xx

Subtarget -> BCM2711 boards (64 bit)

Target Profile -> Raspberry Pi 4B

# 镜像参数

Target Images -> ext4 # ext4格式的固件可方便地调整分区大小

Target Images -> squashfs # squashfs格式的固件可恢复出厂设置

Target Images -> Kernel partition size = 64 # boot分区大小为64M

Target Images -> Root filesystem partition size = 512 # root分区大小为512M

# 可选工具

Base system -> block-mount # 在LuCI界面添加<挂载点>菜单

Base system -> blockd # 自动挂载设备

Base system -> wireless-tools # 无线扩展工具

Administration -> htop # 添加htop命令

Firmware -> rt2800-usb # 选择你需要的网卡固件,默认即可

```

3. 内核模块

```bash

# 文件系统

Kernel modules -> Filesystems -> kmod-fs-ext4

Kernel modules -> Filesystems -> kmod-fs-ntfs

Kernel modules -> Filesystems -> kmod-fs-squashfs

Kernel modules -> Filesystems -> kmod-fs-vfat

Kernel modules -> Filesystems -> kmod-fuse

# 网卡支持

Kernel modules -> Network Devices -> kmod-xxx # 有线网卡支持,跟以下几项可根据需求选择性添加

Kernel modules -> Wireless Drivers -> kmod-rt2800-usb # 添加Ralink RT5370芯片的USB无线网卡驱动

Kernel modules -> USB Support -> kmod-usb-net -> kmod-usb-net-sr9700 # 添加USB2.0的有线网卡SR9700芯片支持

Kernel modules -> USB Support -> kmod-usb-net -> kmod-usb-net-rtl8152 # 添加USB2/3的有线网卡RTL8152/3芯片支持

Kernel modules -> USB Support -> kmod-usb-net -> kmod-usb-net-asix # 添加支持亚信的有线网卡支持

Kernel modules -> USB Support -> kmod-usb-net -> kmod-usb-net-asix-ax88179  # 添加USB3.0的有线网卡芯片AX88179的驱动

# USB支持

Kernel modules -> USB Support -> kmod-usb-core # 启用USB支持

Kernel modules -> USB Support -> kmod-usb-hid # USB键鼠支持

Kernel modules -> USB Support -> kmod-usb-ohci # 添加OHCI支持

Kernel modules -> USB Support -> kmod-usb-uhci # 添加UHCI支持

Kernel modules -> USB Support -> kmod-usb-storage # 启用USB存储

Kernel modules -> USB Support -> kmod-usb-storage-extras

Kernel modules -> USB Support -> kmod-usb-usb2 # 开启USB2支持

Kernel modules -> USB Support -> kmod-usb-usb3 # 开启USB3支持

```

4. LuCI配置

```bash

# LuCI设置

LuCI -> Collections -> luci # 开启luci

LuCI -> Modules -> Translations -> Chinese(zh-cn) # 中文支持

LuCI -> Themes -> luci-theme-material # 添加主题

# LuCI应用

LuCI -> Applications -> luci-app-aria2 # 下载工具

LuCI -> Applications -> luci-app-firewall # 防 火 墙

LuCI -> Applications -> luci-app-hd-idle # 硬盘休眠

LuCI -> Applications -> luci-app-opkg # 软 件 包

LuCI -> Applications -> luci-app-qos # 服务质量

LuCI -> Applications -> luci-app-samba4 # 网络共享

LuCI -> Applications -> luci-app-frpc # 内网穿透

LuCI -> Applications -> luci-app-shadowsocks-libev # 翻墙软件

LuCI -> Applications -> luci-app-upnp # UPnP服务

LuCI -> Applications -> luci-app-wol # 网络唤醒

......

```

5. 其他工具

```bash

Network -> Download Manager -> ariang # Aria2管理页面

Network -> File Transfer -> Aria2 Configuration -> *** # 选择Aria2支持的功能

Network -> File Transfer -> curl # 添加curl命令

Network -> File Transfer -> wget # 添加wget命令

Utilities -> Compression -> bsdtar # tar打包工具

Utilities -> Compression -> gzip # GZ 压缩套件

Utilities -> Compression -> xz-utils # XZ 压缩套件

Utilities -> Compression -> unzip # zip解压工具

Utilities -> Compression -> zip # zip压缩工具

Utilities -> Disc -> fdisk # 磁盘分区工具

Utilities -> Disc -> lsblk # 磁盘查看工具

Utilities -> Editors -> vim # vim编辑器

Utilities -> Filesystem -> ntfs-3g # NTFS读写支持

Utilities -> Filesystem -> resize2fs # 分区大小调整

Utilities -> Terminal -> screen # 添加screen

Utilities -> pciutils # 添加lspci命令

Utilities -> usbutils # 添加lsusb命令

```

6. IPv6支持

```bash

Global build settings -> Enable IPv6 support in packages # 启用IPv6项

Network -> odhcp6c # IPv6客户端

Network -> odhcpd-ipv6only # IPv6服务端

Network -> Firewall -> ip6tables # IPv6防火墙

LuCI -> Protocols -> luci-proto-ipv6 # WebUI支持

```

# 手动配置网卡

1. 用网线连接自己的电脑和树莓派,LEDE默认的IP为静态 192.168.1.1,可以将电脑网卡设置为静态IP:192.168.1.2 来访问树莓派上的LEDE管理界面。

2. 设置2.4G无线:网络 -> 无线 选项卡中点修改,基本设置中设置为Legacy模式,频宽2.4GHz和信道自选(切勿使用自动信道和自动频宽),高级设置中国家代码AU。接口配置中模式:接入点AP,网络:lan,然后设置无线安全加密WPA2-PSK和密码等,其余默认即可。

3. 设置5G无线:网络 -> 无线 选项卡中点修改,基本设置中设置为AC模式,只能使用36信道和频宽为20Mhz或者40Mhz才能用作AP(切勿使用自动信道和自动频宽),高级设置中国家代码AU。接口配置中模式:接入点AP,网络:lan,然后设置无线安全加密WPA2-PSK和密码等,其余默认即可。

4. 设置WAN口 网络 -> 接口 选项卡中添加一个新接口命名为"wan",协议根据自己的网络情况自行选择(我的是DHCP客户端),在 物理设置 中单选接口为eth0,先保存但别应用。设置LAN口 网络 -> 接口 选项卡中编辑lan网卡的物理设置,在无线网络和自定义接口上打上钩填上"eth0.1", 并取消原本eth0前的钩后保存。

# 自动配置网卡

> 在openwrt目录下新建一个名为files的文件夹,openwrt在编译的时候,会把files文件夹里的文件编译到固件的根目录。

> 在files/etc/config/中新建两个文件:network,wireless内容如下用来分别配置接口和无线

```bash

# openwrt/files/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 'fd38:13ae:ceeb::/48'

config interface 'lan'

option type 'bridge'

option proto 'static'

option ipaddr '192.168.1.1'

option netmask '255.255.255.0'

option ip6assign '60'

option ifname 'eth0.1'

option _orig_ifname 'eth0 wlan0'

option _orig_bridge 'true'

config interface 'wan'

option ifname 'eth0'

option proto 'dhcp'

option _orig_ifname 'erspan0'

option _orig_bridge 'false'

```

```bash

# openwrt/files/etc/config/wireless

config wifi-device 'radio0'

option type 'mac80211'

option channel '36'

option hwmode '11a'

option path 'platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'

option htmode 'VHT40'

config wifi-iface 'default_radio0'

option device 'radio0'

option mode 'ap'

option encryption 'none'

option ssid 'RPI4'

option network 'lan'

```

# 其他实用技巧

1. 系统 -> LED配置中:LED0是绿色灯,LED1是红色灯,可以用来当无线收发的指示灯

2. 使用:`cat /sys/class/thermal/thermal_zone0/temp` 查看CPU温度

3. 在Samba中使用root用户除了执行smbpasswd -a root添加用户外,还需要注释模板中的:`#invalid users = root`

4. 使用Win10 WSL环境编译的,编译前建议先将Win10系统变量剔除,否则可能报错:`export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`

5. 单核编译大概需要4个小时,中间可能会有几次错误,有的错误可跳过对后续编译没有影响

6. 在OpenWRT的 `.config` 文件中内核的选项都是形如 `CONFIG_KERNEL_XXX` 。自己手动添加内核选项时不要忘了在中间添加 `_KERNEL_` 前缀。

7. Goproxy代理失败报错的解决方法:`export GO111MODULE=on` 和 `export GOPROXY=https://goproxy.cn`

```bash

go: github.com/armon/go-socks5@v0.0.0-20160902184237-e75332964ef5: Get "https://proxy.golang.org/github.com/armon/go-socks5/@v/v0.0.0-20160902184237-e75332964ef5.mod": dial tcp 172.217.27.145:443: connect: connection refused

```