XiaomiRouter自学之路(13-U-boot支持web更新firmware功能)

题图:gratisography

XiaomiRouter自学之路(13-U-boot支持web更新firmware功能)

上一章节说明小米路由器3触发了web更新firmware的功能,因为下载的源码中已经支持改功能了,只不过小米路由器mini的RESET引脚与源码中的不对应,所以没办法触发,下面我们一起分析下其过程。

1.过程分析


07-U-boot启动过程中我们已经有提到web更新的检测位于/lib_mips/board.c中,我们定位到如下代码:

...
    while( DETECT_WPS() ) {

        // LED ON and wait 0.2s
        LEDON();
        udelay( 200000 );

        // LED OFF and wait 0.8s
        LEDOFF();
        udelay( 800000 );

        counter++;

        // how long the WPS button is pressed?
        printf("\b\b\b\b\b\b\b\b\b\b\b\b%2d second(s)", counter);

        if ( !DETECT_WPS() ){
            break;
        }

        if ( counter >= 4 ){
            break;
        }
    }

可以看到这是对WPS按键的检测,1秒对counter加1,按键放开或counter加到4的时候则跳出while。

DETECT_WPS()的原型如下,位于common/gpio.c中

unsigned long DETECT_WPS(void)
{
    int key = 0;

    if(!mtk7620_get_gpio_pin(WPS_BTN)) {
        key = 1;
        printf("wps buootn pressed!\n");
    }
    return key;
}

由于小米路由器只有一个按键,所以这边就把WPS和RESET当做同一个按键,经测试得到小米路由器mini的按键角为GPIO24,小米路由器3的按键角为GPIO30,至于三个LED对应的引脚实在不想去测试了,没有原理图就是麻烦,如果有人知道不凡告诉我下。

所以我们将include/gpio.h中引脚的定义进行修改即可。

#define RST_BTN     30
#define WPS_BTN     30

接着上面的分析,counter计数后,如果大于0,则进入如下代码:

if ( counter > 0 ) {
    eth_initialize(gd->bd);
    NetLoopHttpd();
} 

先进行网口的初始化eth_initialize(),然后就进入web服务器检查中NetLoopHttpd(),对于里面实现的具体,这边就不进行追踪了,里面内容有点多,我也不能很清楚的理解透。

2.具体操作


上面我们将web的整个过程进行了简单分析,现在我们进行实际操作下。(要对上面所说的引脚改成对于平台的GPIO号,烧录到spi中)

在路由器还没上电之前,先按住RESET键,然后上电,在出现倒计时的时候放开RESET键,可以看到console上出现如下信息:

Press press WPS button for more than 2 seconds to run web failsafe mode

WPS button is pressed for:  3 second(s)

WPS button was pressed for 3 seconds
HTTP server is starting for firmware update...

...

 NetRxPackets[23] = 0x87FEFC40

 KSEG1ADDR(NetTxPacket) = 0xA7FE6C40 

 NetLoopHttpd,call eth_halt ! 
Trying Eth0 (10/100-M)

 Waitting for RX_DMA_BUSY status Start... done


 ETH_STATE_ACTIVE!! 
HTTP server is starting at IP: 192.168.128.1
HTTP server is ready!

这时路由器已经处于NetLoopHttpd()函数的for循环中等待了,我们可以打开浏览器,输入IP:192.168.128.1进行访问web更新页面,如下:


web页面

点击选择文件,将编译好的firmware选中,点击Update firmware,则会出现如下页面:


FIRMWARE UPDATE

此时也可以观察console,可发现firmware的上传,写入到spi flash,reboot的过程,大概如下:


Data will be downloaded at 0x81000000 in RAM
Upgrade type: firmware
Upload file size: 3407876 bytes
Loading: #######################################
         #######################################
         #######################################
         #######################################
         ###################

HTTP upload is done! Upgrading...

****************************
*    FIRMWARE UPGRADING    *
* DO NOT POWER OFF DEVICE! *
****************************

raspi_erase_write: offs:40000, count:340004
raspi_erase: offs:40000 len:340000
....................................................
raspi_write: 81000000 to:40000 len:340000 
....................................................
raspi_read: from:40000 len:10000 
raspi_read: from:50000 len:10000 
raspi_read: from:360000 len:10000 
raspi_read: from:380000 len:10000 
raspi_erase: offs:380000 len:10000
.
raspi_write: 87f711f0 to:380000 len:10000 
.
raspi_read: from:380000 len:10000 
Done!
HTTP ugrade is done! Rebooting...

U-Boot 1.1.3 (Feb 28 2017 - 05:15:56)

Board: Ralink APSoC DRAM:  128 MB
GPIO#1 updated GPIOMODE register: 001a311c -> 001a311d
MT7620 Ai-BR100 gpio init : WPS / RESET pin
GPIO#30 updated GPIOMODE register: 001a311d -> 001a331d
relocate_code Pointer at: 87fb0000

...

Starting kernel ...

[    0.000000] Linux version 3.18.45 (linye@ubuntu) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r49389) ) #1 Tue Feb 21 06:02:12 PST 2017
[    0.000000] Board has DDR2
[    0.000000] Analog PMU set to hw control
[    0.000000] Digital PMU set to hw control
[    0.000000] SoC Type: MediaTek MT7620A ver:2 eco:6

可以看到image被烧录到spi flash中,并正常启动openwrt。

U-boot支持web更新firmware功能的分析就到这边,有感悟时会持续会更新。

注:以上内容都是本人在学习过程积累的一些心得,难免会有参考到其他文章的一些知识,如有侵权,请及时通知我,我将及时删除或标注内容出处,如有错误之处也请指出,进行探讨学习。文章只是起一个引导作用,详细的数据解析内容还请查看XiaomiRouter相关教程,感谢您的查阅。

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

推荐阅读更多精彩内容