Openwrt编译教程:从头开始所有步骤(日志记录)
- 虚拟机安装linux
- 打开终端
sudo apt-get update
sudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext git subversion libssl-dev libncurses5-dev patch unzip zlib1g-dev
如果是64位系统的话还需要安装32位兼容包
sudo apt-get install libc6:i386 libgcc1:i386 libstdc++5:i386 libstdc++6:i386
在用户目录下mkdir 任意名
cd 任意名
源码下载地址的话可以通过以下网址查看
https://dev.openwrt.org/wiki/GetSource
还有这里要说明一下源码名字
以往教程里面都说backfire是稳定版,trunk是开发板
现在我在此要更正一下
1:trunk是开发板
2:稳定版的话现在大概有4个版本,backfire,AA,BB,CC
3:稳定版都是原来的TRUNK的一个稳定分支
4:backfire感觉是史前文明的产物,最新的ubuntu GCC编译器已经无法兼容backfire的代码,除非降级GCC,否则编译会出错
本人演示的代码用的是openwrt 15.05 最新的稳定版
输入源码的下载命令
git clone git://git.openwrt.org/15.05/openwrt.git
之后
cd openwrt
接下来下载feeds更新,这是为了下载和安装让luci之类的第三方包的源码,如果不进行这步的话配置菜单是没有非op的包给你选的
./scripts/feeds update -a
安装feeds更新
./scripts/feeds install -a
接下来是
make defconfig
检测环境和添加包,之前的环境安装就是根据这个来的
然后
make menuconfig
添加LUCI
路径为LUCI-collections-LUCI
添加中文,添加自定义luci-app
首先
ulimit -s 10240
这个命令是防止爆栈
对make加入多线程编译支持
make V=99 -j线程数
速度比单线程快N倍
下面是修改openwrt各项配置参数所要找的位置:
etc/rc.local |
Package/base-files/files/etc/rc.local |
etc/sysctl.conf |
Package/base-files/files/etc/sysctl.conf |
Etc/config/dhcp:lan |
Package/network/services/dnsmasq/files/dhcp.conf |
Etc/config/dhcp:dnsmasq |
Package/network/services/dnsmasq/files/dnsmasq.init |
etc/config/uhttpd |
Package/network/services/uhttpd/files |
Etc/firewall.user |
Package/network/config/firewall/files/firewall.user |
Etc/config/system |
Package/base-files/files/etc/config/system |
Lib/ipaddr |
Package/base-files/files/lib/ipaddr |
www/* |
Feeds./luci/modules/luci-base/root/www/* |
Etc/config/wireless |
Package/kernel/mac80211/files/lib/wifi/mac80211.sh |
固件体积 |
Target/linux/ar71xx/image/makefile |
型号名 |
Target/linux/ar71xx/base-files/lib/ar71xx.sh |
LED网口配置 |
Target/linux/ar71xx/files/arch/mips/ath79/ |
主板系列配置 |
Target/linux/ar71xx/base-files/etc/uci-defaults |
默认密码 |
Package/base-files/files/etc/shadow |
etc/config/luci |
Feeds./luci/modules/luci-base/root/etc/config/luci |
下面是TP系列单频路由器的配置表:
(水星和迅捷版本号相同 mw300r=fw300r,mw150r=fw150r,mw305r=fw305r)
型号 |
CPU |
灯数 |
wr740n v5,mw150r v5/v6/v8,fw150r v5-v10 |
ar9331 |
8 |
wr740n v6,mw150r v10/v11,fw150r v11 |
ar9331 |
6 |
wr841n v8,mw300r v3/v4 |
ar9341 |
8 |
wr841n v9 |
ar9341 |
6 |
wr841n v10,mw305r v3 |
qca9531 |
6 |
wr841n v11,mw300r v9/v10,mw305r+ v1/v3.1 |
qca9533 |
6 |
mw300r v6/v7 |
mt7620n |
8 |
mw305r v1/fwr200 v1/v2 |
mt7620n |
6 |
mw300r v12,fwr200 v4 |
mt7628kn |
6 |
水星迅捷路由器型号芯片整理
型号 |
芯片 |
内存闪存 |
天线 |
备注 |
310r v1/v2/v3 |
ar9341 |
2/16 |
3 |
|
310r v4,313r v1 |
mt7620n |
1/8 |
3 |
|
310r v5,313r v2 v3,315r v1 |
mt7628kn |
1 |
3 |
|
316r v1 |
qca9533 |
1/8 |
3 |
坑爹功放 |
325r v1,323r v1,320r v1 |
qca9533 |
1/8 |
4 |
|
325r v2 |
bcm5357 |
|
4 |
|
325r v3 |
mt7628kn |
1 |
4 |
|
ar9331系列主板配置在wr741nd-v4中,改网口顺序
AR9331修正方法:以编译tl-wr741n-v4固件为例,找到文件mach-tl-wr741nd-v4.c,在目录attitude_adjustment/target/linux/ar71xx/files/arch/mips/ath79/下,将代码
ath79_setup_ar933x_phy4_switch(true, true); 改为ath79_setup_ar933x_phy4_switch(false, false);或者直接删掉。
AR9341修正方法:以编译tl-wr841n-v8固件为例,在刚才的目录下找到文件mach-tl-wr841n-v8.c,将代码
ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_SW_PHY_SWAP);改为ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_SW_ONLY_MODE);
ath79_switch_data.phy_poll_mask = BIT(0);改为ath79_switch_data.phy_poll_mask = BIT(4);
ath79_eth0_data.phy_mask = BIT(0);改为ath79_eth0_data.phy_mask = BIT(4);
无线名称参数默认值:
无线设置初始化
config wifi-device radio$devidx
option type mac80211
option channel auto
option country CN
option hwmode 11${mode_band}
$dev_id
$ht_capab
# REMOVE THIS LINE TO ENABLE WIFI:
option disabled 0
config wifi-iface
option device radio$devidx
option network lan
option mode ap
option ssid ZUT-$(cat /sys/class/ieee80211/${dev}/macaddress|awk -F ":" '{print $5""$6}'|tr a-z A-Z)
option encryption none