编译自己的openwrt

前置条件

  1. 编译环境:Linuxmint 18.2 64-Bit
  2. 路由器型号:TP-LINK TL-WR720N v3, 改过硬件:16M Flash / 64M Memory
  3. 编译过程中会频繁下载东西,需要有网络良好的环境。整个编译过程可能会持续1到2个小时。

注意事项

  1. 请不要用root用户编译!
  2. 编译命令请在OpenWrt编译环境的根目录下运行,例如: ~/openwrt
  3. 编译环境所在的每一级目录的目录名称都不要有空格,
    OpenWrt的目录所有者要改成root以外的用户。 (sudo chown -R user:username /openwrt/)

编译原因

官方有原版的WR720N固件:https://downloads.openwrt.org/

优点是方便,缺点是不能自己定制,因为我是改过 Flash 大小的,必须自己编译。

最主要的我想在路由器里运行ngrok,WR720N的CPU AR9331属于MIPS架构,GO直到GO1.6才支持MIPS64,GO1.8才支持MIPS。在此之前也有大神用C语言重写ngrok,具体可以看大神在github上的项目。虽然说GO1.8之后的版本开始支持MIPS架构,但是需要系统内核开启FPU(Float Point 语言Unit,浮点运算单元)才能使用。这次编译最主要的就是开启内核的FPU功能。

开始编译

以下是我对改过硬件的 TL-WR720N 编译适合的固件的步骤:

1. 获取最新源码

如何获取源码可查看:https://dev.openwrt.org/wiki/GetSource

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

也可以获取特定分支的源码,例如我们获取 15.05 branch (Chaos Calmer) 这个分支 。以下步骤都使用的这份源码

git clone git://git.openwrt.org/15.05/openwrt.git

2. 修改源码,使其适用于 16M Flash。

参考的这篇文章: http://wiki.openwrt.org/toh/tp-link/tl-wr703n#mb_flash_mod

进入源码目录 cd openwrt

打开 target/linux/ar71xx/image/Makefile 这个文件。将如下内容

define Device/tl-wr720n-v3
    $(Device/tplink-4mlzma)
    BOARDNAME := TL-WR703N
    DEVICE_PROFILE := TLWR720
    TPLINK_HWID := 0x07030101
    CONSOLE := ttyATH0,115200
endef

改为:

define Device/tl-wr720n-v3
    $(Device/tplink-16mlzma)
    BOARDNAME := TL-WR703N
    DEVICE_PROFILE := TLWR720
    TPLINK_HWID := 0x07030101
    CONSOLE := ttyATH0,115200
endef

打开 tools/firmware-utils/src/mktplinkfw.c 这个文件。将如下内容:

.id             = "TL-WR720Nv3",
.hw_id          = HWID_TL_WR720N_V3,
.hw_rev         = 1,
.layout_id      = "4Mlzma",

改为:

.id             = "TL-WR720Nv3",
.hw_id          = HWID_TL_WR720N_V3,
.hw_rev         = 1,
.layout_id      = "16Mlzma",

3. 下载和安装所有可用的 Feeds(可选)

feeds其实就是外围的软件源,如luci就是其中之一,不是OpenWrt核心开发组的。还是执行这一步比较好。feeds的说明参考这篇文章:http://wiki.openwrt.org/doc/devel/feeds

./scripts/feeds update -a
./scripts/feeds install -a

4. 检查依赖软件

运行下面的命令(3选1!),让OpenWrt编译系统检查编译环境中缺失的软件包:

make menuconfig         # 总体配置,推荐使用此命令
make defconfig                  # 默认配置
make prereq                         #
# 如果以上3个命令都运行了,编译会出错!

根据提示安装对应的软件。如果以前没装过build-essential这个包的话,这次也要安装这个包。

5. 总体配置

make menuconfig

输入以上命令之后,会进入一个命令行图形界面,界面最上面是用法。

  • <*> 该代码将被放入固件中 (on the SqashFS partition)
  • < > 该代码将不会被编译
  • <M> 该代码将被交叉编译,生成的ipk软件包将被放在 /buildsystem/bla/bla/bla, 但该软件包不会放入固件中

以下是我的一些配置。

  • 选择 CPU 型号
    Target System 选为 Atheros ARM7xxx/ARM9xxx

  • 选择路由器型号
    Target Profile 选为 TP-LINK TP-WR720N

  • 启用 Web 管理界面 LuCI
    LuCI → Collections → 选中 luci

  • 添加 LuCI 中文支持
    LuCI → Modules → Translations → 选中 Chinese (zh-cn)

  • 添加支持USB自动mount功能
    添加USB相关支持
    Kernel modules —> USB Support —> <*> kmod-usb-core.
    Kernel modules —> USB Support —> <*> kmod-usb-ohci.
    Kernel modules —> USB Support —> <*> kmod-usb-uhci.
    Kernel modules —> USB Support —> <*> kmod-usb-storage.
    Kernel modules —> USB Support —> <*> kmod-usb-storage-extras.
    Kernel modules —> USB Support —> <*> kmod-usb2.
    添加USB挂载
    Base system —> <*>block-mount
    添加自动挂载工具
    Utilities —> Filesystem —> <*> badblocks
    添加文件系统支持
    Kernel modules —> Filesystems —> <*> kmod-fs-ext4 (移动硬盘EXT4格式选择)
    Kernel modules —> Filesystems —> <*> kmod-fs-vfat(FAT16 / FAT32 格式 选择)
    Kernel modules —> Filesystems —> <*>kmod-NTFS(NTFS选择,具体是什么忘记了,总之有NTFS字样的)
    添加UTF8编码,CP437编码,ISO8859-1编码
    Kernel modules —> Native Language Support —> <> kmod-nls-utf8
    Utilities ---> disc ---> <
    > fdisk.................................... manipulate disk partition table
    Utilities ---> <*> usbutils................................... USB devices listing utilities

6. 内核配置

make kernel_menuconfig

进入文本行图形界面后,开启FPU。

  • Kernel type → 选中 MIPS FPU Emulator

7. 编译

make

更多编译选项参考文章最后面的链接。整个编译过程会比较久,这段时间可以去做点别的事情,比如我打完make命令之后就去洗澡睡觉了。囧......

编译好了之后可在 bin/ar71xx 目录找到生成的固件:

  • openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
  • openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin

刷机

(待定,这一步我没有做。我买路由器的时候淘宝商家已经刷了明月永在的固件和不死uboot,我是直接刷openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin的。而且也没有出现过刷死的情况。)

我所使用的 U-Boot 是这个:https://github.com/pepe2k/u-boot_mod
步骤如下:

  1. 将电脑 IP 设置为 192.168.1.2, 子网掩码设置为 255.255.255.0;
  2. 断开路由器的电源,用网线连接好电脑和路由器;
  3. 按住路由器的 Reset 按钮,插上电源,待路由器灯闪四次后放开,放开后,路由器灯会快闪一次,代表进入了恢复模式;
  4. 用电脑浏览器打开 http://192.168.1.1/index.html, 打开后,上传固件;
  5. 上传完固件后,等一段时间,待机器自动重启此时可将电脑 IP 设置为自动获取。

配置系统

这里可以参考我的另外一篇笔记。

错误(后续)处理

  1. 关于自己编译的系统不能安装官方软件源的软件。

安装不了的软件大多是跟内核相关的,一般都会带有kmod字样,如kmod-fs-ext4。这是因为官方软件源的软件编译时用的内核和我们自己的不一样,就算opwnwrt正式版的已经发布,但是github上的代码还是会更新,包括内核版本。比如官方的Chaos Calmer内核是3.18.21,我从github上下的内核时3.18.45。这时候在安装命令之后加上 --force-depends即可

opkg install kmod-fs-ext4 --force-depends

  1. 路由器指示灯一直在闪烁

这个是因为在编译固件时没有选择led灯的配置项,系统就采用默认值。可以用以下的命令设置LED灯。以下命令最好加入到开机启动项中。

LED灯长亮:

echo "1" > /sys/devices/platform/leds-gpio/leds/tp-link:blue:system/brightness

LED灯熄灭:

echo "0" > /sys/devices/platform/leds-gpio/leds/tp-link:blue:system/brightness

LED灯闪烁:

cd /sys/devices/platform/leds-gpio/leds/tp-link:blue:system/
echo timer > trigger
echo 100 > delay_on
echo 100 > delay_off

注意:延时时间(delay_on)要小于255。

参考文章:

  1. 编译自己的 OpenWrt 固件
  2. OpenWrt编译系统 – 安装
  3. OpenWrt Buildroot – 使用说明
  4. Ubuntu下交叉编译kcptun go语言源码 for openwrt
  5. System configuration
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容