Chinaunix首页 | 论坛 | 博客
  • 博客访问: 835056
  • 博文数量: 72
  • 博客积分: 3078
  • 博客等级: 少校
  • 技术积分: 942
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-16 20:10
  • 认证徽章:
个人简介

此博客已停用

文章存档

2016年(1)

2015年(33)

2014年(25)

2011年(13)

分类: LINUX

2015-05-25 17:09:10

本次移植以cleanwrt大神的u-boot_mt7620-master.zip为蓝本,以SDK4300里的u-boot为实验代码。

感谢Manfeel、cleanwrt、Piotr Dymac、uip的作者Adam Dunkels。

源码随后上传至github。

https://github.com/widora /u-boot-mt7688

蓝本代码网址如下:

https://github.com/cleanwrt/u-boot_mt7620

首先保证SDK4300的u_boot能正常编译通过,环境OK。

我的主机win7,virtualbox,Xubuntu14.04.1@32bit

1、将u-boot_mt7620-master中的httpd目录全部复制到u-boot-mt7688。(此目录中包含一个java工具,运行需要java环境,过后再说)

$cp -rf u-boot_mt7620-master/httpd/  u-boot-mt7688/

2、将u-boot_mt7620-master中net目录下的httpd.c httpd.h 复制到u-boot-mt7688/net/目录。

$ cp -rf u-boot_mt7620-master/net/httpd.c u-boot-mt7688/net/

$ cp -rf u-boot_mt7620-master/net/httpd.h u-boot-mt7688/net/

3、更改顶层Makefile,在194行增加+LIBS +=httpd/libhttpd.a

4、更改net目录下的Makefile,在30行增加httpd.o

5编辑u-boot-mt7688/net/net.c源码,在78行增加以下头文件包含。


/* for web failsafe mod , added by mango 20150525 */

#include "httpd.h"

#include "../httpd/uipopt.h"

#include "../httpd/uip.h"

#include "../httpd/uip_arp.h"

改后如下:

102行增加如下全局变量定义以及函数声明:

  1. /* for web failsafe mod , added by mango 20150525 */
  2. unsigned char *webfailsafe_data_pointer = NULL;
  3. int    webfailsafe_is_running = 0;
  4. int    webfailsafe_ready_for_upgrade = 0;
  5. int    webfailsafe_upgrade_type = WEBFAILSAFE_UPGRADE_TYPE_FIRMWARE;
  6. void NetReceiveHttpd( volatile uchar * inpkt, int len );
  7. extern int do_reset( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] );

1172行增加接收函数,以便在web failsafe模式使用uip协议栈接收处理网络数据:

  1. if ( webfailsafe_is_running ) {
  2.                NetReceiveHttpd( inpkt, len );
  3.                  return;
  4.         }
在文件末尾增加三个函数,从蓝本的net/net.c中将后面三个函数粘贴到此。以#define BUF ((struct uip_eth_hdr *)&uip_buf[0])开头的那段代码。
至此,net.c文件修改完毕。

6、编辑u-boot-mt7688/lib_mips/board.c源码,在1291行找到board_init_r函数:找到1950行的OperationSelect调用,在此函数前增加如下代码:

  1. /*web failsafe*/
  2.     int counter = 1;
  3.     udelay(500000);
  4.     if ( counter > 0 ) {
  5.         printf( "\n\nWPS button was pressed for %d seconds\nHTTP server is starting for firmware update...\n\n", counter );
  6.         eth_initialize(gd->bd);
  7.         NetLoopHttpd();
  8.     } else {
  9.         printf( "\n\nCatution: WPS button wasn't pressed or not long enough!\nContinuing normal boot...\n\n" );
  10.     }
  11. /*failsafe
先保证能启动web failsafe模式,也就是counter==1强制进入该模式(ctrl+c退出)。

7、修改u-boot-mt7688/lib_generic/string.c文件,关闭STRSTR的编译选项。

8、修改u-boot-mt7688/include/net.h,在340行增加如下代码:


在362行增加两个函数的声明:

9、修改u-boot-mt7688/include/configs/rt2880.h文件,在99,100行设置IP,由于默认IP不太顺眼,我设置为
CONFIG_SERVERIP 192.168.1.10
CONFIG_IPADDR 192.168.1.20
这一点还请自便。
在该文件末尾位置,增加对web failsafe一些必要的参数设置:
将以下代码加在497行:
/*
 * Web Failsafe configuration
 */
//#define WEBFAILSAFE_UPLOAD_RAM_ADDRESS CFG_LOAD_ADDR
#define WEBFAILSAFE_UPLOAD_RAM_ADDRESS 0x81000000


// U-Boot partition size and offset
#define WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS CFG_FLASH_BASE


#define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES ( 128 * 1024 )
#define UPDATE_SCRIPT_UBOOT_SIZE_IN_BYTES "0x20000"


// Firmware partition offset
#define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS CFG_KERN_ADDR


// ART partition size and offset
#define WEBFAILSAFE_UPLOAD_ART_ADDRESS CFG_FACTORY_ADDR


#define WEBFAILSAFE_UPLOAD_ART_SIZE_IN_BYTES ( 64 * 1024 )


// max. firmware size <= (FLASH_SIZE -  WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES)
#define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES ( 320 * 1024 )


// progress state info
#define WEBFAILSAFE_PROGRESS_START 0
#define WEBFAILSAFE_PROGRESS_TIMEOUT 1
#define WEBFAILSAFE_PROGRESS_UPLOAD_READY 2
#define WEBFAILSAFE_PROGRESS_UPGRADE_READY 3
#define WEBFAILSAFE_PROGRESS_UPGRADE_FAILED 4


// update type
#define WEBFAILSAFE_UPGRADE_TYPE_FIRMWARE 0
#define WEBFAILSAFE_UPGRADE_TYPE_UBOOT 1
#define WEBFAILSAFE_UPGRADE_TYPE_ART 2


10、回到u-boot-mt7688顶层make clean;make编译出错,提示找不到gpio.h。

无奈,底层LED控制和WPS按键读写都没写,暂时先将net/httpd.c文件中的LED相关都注视掉。再编译即可。
接下来编译都没问题,看到

此时可以看到已经生成了uboot.bin文件,该文件可以用spi flash下载器刷到flash中测试了。
此次移植,涉及到的所有需要更改的文件如下(其中httpd代表整个目录):

不足:暂时还未将LED控制与BUTTON读取部分搞定,先暂时做一个版本,等全部搞定后再推送一次最终版本。
uboot启动:

浏览器访问:

阅读(7098) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册