将 OpenWRT 移植到一个商业无线路由器过程中的一些要点

最近在将 OpenWRT 移植到一个商业无线路由器,中间遇到的一些问题,在此记录下。

首先是商业路由器和对应的小米路由器的硬件列表:

硬件 商业路由器 Xiaomi Router 3 Pro Xiaomi MiWiFi 3G v2
CPU mt7621 mt7621 mt7621
无线模块 mt7615e mt7615e MT7603E MT7612E
switch mt7621内置 (mt7530) mt7621内置 (mt7530) mt7621内置 (mt7530)
Flash w25q128 (16M bytes) Nand 256M Bytes Nor 16M Bytes
内存 256M bytes 512M bytes 128M bytes
串口波特率 57600 115200 115200
USB

最重要的是 cpu + 无线模块,需要找到一款硬件类似并支持 OpenWRT 的路由器,在此基础上进行移植,这样工作量最低。我选了小米路由器3 Pro(该路由器已停产,可以买二手的),CPU 和无线模块是相同的。另外选了小米 3G V2,Flash 比较相似。
查看 OpenWRT 所有设备的 WLAN信息可查阅这个链接 https://openwrt.org/toh/views/toh_admin_wlandriver,通过该信息可以找到与自己设备相类似的 OpenWRT 路由器。

移植主要是两个步骤:
首先通过 uboot 下载 initramfs-kernel.bin 文件,可以调试大多数的硬件移植。(网口、无线部分)
网口移植好后,通过 initramfs-kernel.bin 的网页,升级 squashfs-sysupgrade.bin 文件,调试升级。

移植一:波特率
商业路由器的波特率是57600,通过 tftp 下载运行 openwrt-ramips-mt7621-xiaomi_mi-router-3-pro-initramfs-kernel.bin,串口由于波特率问题,变成乱码,修改下面的文件:target/linux/ramips/dts/mt7621_xiaomi_mi-router-3-pro.dts

-               bootargs = "console=ttyS0,115200n8";
+               bootargs = "console=ttyS0,57600n8";

波特率即完成移植。(详细步骤见我的另一篇博客文章OpenWRT 设备修改串口波特率

移植二:Flash
Flash 不同于 Xiaomi route 3 pro 而类似于 Xiaomi MiWiFi 3G v2,需要将 Nand的 flash 的硬件去掉。即删除 target/linux/ramips/dts/mt7621_xiaomi_mi-router-3-pro.dts 中的 nand 部分。

&nand {
    status = "okay";

    partitions {
                ......
    };
};

添加 Nor Flash 部分:

+&spi0 {
+        status = "okay";
+        flash@0 {
+               compatible = "w25q128", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "Bootloader";
+                               reg = <0x0 0x30000>;
+                               read-only;
+                       };
+
+                       partition@30000 {
+                               label = "Config";
+                               reg = <0x30000 0x10000>;
+                               read-only;
+                       };
+
+                       factory: partition@40000 {
+                               label = "Factory";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x50000 0xfb0000>;
+                       };
+                };
+        };
+ };

非常重要的一点是:在移植前,先查看下商业路由器串口打印的 MTD 信息。Flash 的内容要和商业路由器的 MTD 信息一致。Booter、配置、无线校准数据有三个独立的分区,位置和大小不要随意修改。
另外,"Factory" 分区是无线校准部分的数据(包含 mac 地址),所以在 “partition” 前有添加 "factory: "。这部分出错的话,无线部分即使正常工作,性能也会有影响。

移植三:Switch 部分
MT7621 有两个千兆口,一个一般用来做 WAN 口,另一个接 switch 做 LAN 口。而商业路由器只用了一个千兆口接 switch,将 switch 的两个口,一个做 WAN,一个做 LAN(牺牲带宽降成本的做法)。
需要将一个千兆口删除掉:

-&gmac1 {
-       status = "okay";
-       label = "wan";
-       phy-handle = <&ethphy4>;
-
-       nvmem-cells = <&macaddr_factory_e000>;
-       nvmem-cell-names = "mac-address";
-};

另一个配置成 lan wan 两个口:

&switch0 {
    ports {
        port@1 {
            status = "okay";
            label = "lan1";
        };
        port@0 {
            status = "okay";
            label = "wan";
            nvmem-cells = <&macaddr_factory_e000>;
            nvmem-cell-names = "mac-address";
        };
    };
};

移植四:无线部分
这部分小米 3 Pro 和商业路由器是一致的,无需修改。(商业路由器使用的是 MTK 某个版本的SDK(非OpenWRT),但产测的数据结构是相同的)

移植五:升级配置
小米的使用 NAND,商业路由器使用 NOR,NAND Flash 的 kernel 分区是单独的,NOR Flash 的kenel 和 rootfs 是拼接在一起的,因此升级文件的制作和升级过程是不一样的。(如果把小米 3 Pro 的 sysupgrade.bin 文件后缀修改为 tar,可以解压成三个文件,但小米 Route 3G V2 是不行的)
如果这部分没有修改,升级后,启动串口会打印

## Booting image at bc050000 ...
Bad Magic Number,73797375 

需要修改的两个文件即可:
target/linux/ramips/image/mt7621.mk

 define Device/xiaomi_mi-router-3-pro
-  $(Device/nand)
+  $(Device/dsa-migration)
   $(Device/uimage-lzma-loader)
-  IMAGE_SIZE := 255488k
+  IMAGE_SIZE := 14848k
   DEVICE_VENDOR := Xiaomi
   DEVICE_MODEL := Mi Router 3 Pro
-  IMAGES += factory.bin
-  IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
-       check-size
   DEVICE_PACKAGES := kmod-mt7615-firmware kmod-usb3 kmod-usb-ledtrig-usbport
   SUPPORTED_DEVICES += xiaomi,mir3p
 endef

target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh

@@ -111,7 +111,6 @@ platform_do_upgrade() {
        tplink,ec330-g5u-v1|\
        wifire,s1500-nbn|\
        xiaomi,mi-router-3g|\
-       xiaomi,mi-router-3-pro|\
        xiaomi,mi-router-4|\
        xiaomi,mi-router-ac2100|\
        xiaomi,mi-router-cr6606|\

这两个文件的修改思路,就是比较小米 3 Pro 和小米 3G V2 的这部分的差别,修改成小米 3G V2 即可。

总结:移植时,可以借助 OpenWRT 的大量已支持的设备,在此基础上开发,可以大幅减小开发工作量。

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

推荐阅读更多精彩内容