前些天看到了这位博主的《路由器就是开发板》教程:
跟着这位博主的教程一步步复现,从中也学习到了很多知识,uboot也可以拷贝到RAM中运行。
只不过在刷写flash这部分卡住了,刷完之后拔掉JLINK,手动关闭开启电源,然后TTL并没有输出任何log。 我使用了下面四种教程介绍的方法:
1.通过Web Failsafe刷
代码中本机的ip我通过改rt2880.h改为了
#define CONFIG_SERVERIP 192.168.1.10
#define CONFIG_IPADDR 192.168.1.20
由于我编译出来的uboot.bin
超出了这个网页更新大小的限制,于是改了uboot代码:
还是rt2880.h
//#define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES ( 128 * 1024 )
//改为如下
#define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES ( 192 * 1024 )
我看代码是一开机不管选什么都会自动选”5″,即web failsafe模式,于是改代码board.c,1605行:
BootType = getc();
// if ((BootType < '1' || BootType > '5') && (BootType != '7') && (BootType != '8') && (BootType != '9'))
//BootType = '5';
printf("\n\rYou choosed %c\n\n", BootType);
将BootType = '5';
注释掉
通过编译成功的带httpd的uboot.bin
,用openocd拷贝到内存中运行,开机选择5
进入web failsafe模式,此时打开浏览器输入192.168.1.20
,进入带openwrt字样的网页,选择uboot.bin
然后点击更新:
更新后如上图,虽然显示Rebooting...
,但是板子并没有重启,而且没有log输出,网络也不通,很明显uboot没有启动,具体原因不明,如果有知道的小伙伴欢迎下方留言,不胜感激!
2.通过uboot command,用tftp32刷
还是使用刚才的uboot,加载到内存运行后,开机输入4进入命令行
此时将tftp32.exe
复制到uboot.bin
文件夹下,并点开(不需要额外配置)
进入命令行模式后按行输入:
setenv serverip 192.168.1.103 //设置默认连接的tftp服务器的地址,我台式电脑的ip
tftpboot 0x80100000 uboot.bin //连接tftp服务器,下载uboot.bin文件到RAM中的0x80100000地址中
protect off all //取消flash写保护功能
erase 0xBF000000 0xBF03FFFF //将flash中0xbf000000~0xbf03ffff的内容擦除
cp.b 0x80100000 0xBF000000 0x40000 //将RAM中 0x80100000开始内容复制到flash中0xbf000000内,大小为0x40000
protect on all //打开flash写保护功能
saveenv //保存变量到flash
此时可以看到擦除并写入flash成功,我重启了路由器,但是现象和第一种一样,开机没log,网络不通,uboot应该还是没有启动。
3.openocd flash_uboot命令刷
由于在openocd下使用flash_uboot
命令刷写会报错误:
error writing to flash at address 0xbf000000 at offset 0x00000000
flash write_bank bank_id filename offset
根据这篇文章下面的评论,修改了 openocd-ralink.cfg
文件:第十七期 U-Boot norflash 操作原理分析 《路由器就是开发板》
此时可以每秒钟256字节速率写进去:
此时重启路由器的现象同上,不行。
4.uboot刷机模式刷入
这个刷机模式就是uboot刚启动时选择的9
模式
此时重启路由器,现象同上。
分享出来我刷机的过程,希望能找出问题所在,欢迎热心的大家在下面留言!
================ 2021/3/14更新 ================
昨晚想出来为什么了,并且刷进去uboot和自己编了一晚上的openwrt了。
原来是我犯了低级错误:之前按教程在make menuconfig页面选的是编译RAM版本。
在这个页面改成如图的ROM即可,再sudo make
编译
之后进入RAM里的uboot,选择9
进入tftp刷uboot的模式:
这样它刷完后rebooting就可以进入flash中的uboot了。
同样,在开机的时候选择2
可以进入刷openwrt的页面,下图是成功进入openwrt:
至此,flash刷写完毕。
但是问题是这个我编译的openwrt并没有什么作用,在浏览器输入192.168.1.1
和192.168.1.20
都连接无响应,并且上不了网,估计openwrt固件编译的不对。后面我再熟悉一下openwrt功能,可能会再更新,希望复刻这个项目的朋友可以少走一些弯路。谢谢观看!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36997.html