XiaomiRouter自学之路(01-项目背景)
公司是做无线路由器的,加入公司一年多了,没能按意愿学到更多有关linux驱动及其相关的知识,这在我以前的文章2016总结和2017愿景中也有提到,我只能在其他时间进行自行充电,所以才有了现在这个自学的项目XiaomiRouter。
一次偶然的机会,租的房子网络不稳定,以为路由器坏了,想想一个Tenda路由器也用了这么久应该换了,就在房间用不需要太好,选择了小米路由器3,路由器还没到就发现原本的Tenda路由器好好的。
公司开发的路由器是在开源的openwrt系统基础上开发,但自己都没真正搭建openwrt系统或对其他厂家的路由器进行刷机,于是就打算用刚买回来的小米路由器3进行刷机测试。
在网络上下载了开发版固件进行刷机安装ssh等,发现挺无聊的,就是更新安装,都在应用层操作。我更想去接触源码,更改底层的驱动等。
弄过linux驱动的应该都清楚,一般我们的CPU根据特定几个引脚电平的组合可以使用不同的方式进行启动,发现小米路由器3使用的是nand flash进行存储启动的,这就尴尬了。
个人肯定不会去买nand烧录器,一个都要到千百来块,而且芯片拆下来手动焊接可不容易,关键是小米官方的固件u-boot启动后既然没有倒计时,想要在u-boot阶段进行在线更新都没办法。所以得找到用spi flash启动的,同是MT7620平台的路由器才有可能自己开发。
查阅后发现小米路由器mini就是,于是又买了个小米路由器mini,下面将小米路由器mini和小米路由器3的硬件信息进行对比:
可以观察到两个平台其实都是一样的,就是存储方式不一样,小米路由器mini使用的是16M的spi flash进行存储,小米路由器3使用的是128M的nand flash进行存储,所以应该可以使用小米路由器mini来进行研究。
在观察小米路由器mini和小米路由器3的硬件PCB板,发现小米路由器3上面有个与小米路由器mini一样的spi flash的接口,就是没有焊接芯片。
所以又有了新的想法,现在既然小米路由器3上面有spi flash的接口,那我是不是也可以将此处的spi flash焊接上,烧上mini的固件,然后更改启动方式,使小米路由器3也能从spi flash启动,然后试着去写nand flash的驱动,这样小米路由器3也有办法更改u-boot了。
经过几天的资料查找,软件部分应该可以实现,u-boot使用MTK开源SDK里面的u-boot,系统使用开源的openwrt系统,硬件部分现在还不确定,毕竟没有小米路由器3的原理图等,担心后面没办法找到引脚使小米路由器3切换到spi flash启动, 但至少可以用小米路由器mini进行自学之路。
现在按自己有限的能力进行初步的项目方向安排
- 软硬件平台搭建
- GitHub环境搭建(U-boot、Openwrt)
- 小米路由器mini U-boot实现,spi启动、tftp更新、引导Openwrt等
- 小米路由器mini Openwrt基础功能实现,应用层的知识暂时先不考虑
- 小米路由器3 U-boot实现,spi/nand启动、tftp更新、引导Openwrt等
- 小米路由器3基础功能实现,应用层的知识暂时先不考虑
通过这一过程可以学习到很多知识,自己搭建环境,需要把u-boot和openwrt的nand移植好,期间还会有spi、net等多方面的知识,虽然还不知道自己是否有能力实现计划中的功能,可能会走很多弯路,但我会将自己学习的过程进行记录,持续不断的往目标前进,就算没能全部成功也可以学到很多知识。
项目背景的分析就到这边,有感悟时会持续会更新。
注:以上内容都是本人在学习过程积累的一些心得,难免会有参考到其他文章的一些知识,如有侵权,请及时通知我,我将及时删除或标注内容出处,如有错误之处也请指出,进行探讨学习。文章只是起一个引导作用,详细的数据解析内容还请查看XiaomiRouter相关教程,感谢您的查阅。