小米路由器开发¶
用ROM刷机¶
ROM下载地址: http://www1.miwifi.com/miwifi_download.html
下载页->点击ROM,选择对应的路由器版本进行下载.
首先,请先准备一个U盘,并确保这个U盘的格式为FAT或FAT32.
接下来,就是具体的操作流程了。
- 将ROM包放在U盘的根目录下,命名为miwifi.bin
- 断开小米路由器的电源,将U盘插入路由器的USB接口
- 按下reset按钮后重新接入电源,待指示灯变为黄色闪烁状态后松开reset键
- 等待5~8分钟,刷机完成之后系统会自动重启并进入正常的启动状态(指示灯由黄灯常亮 变为蓝灯常亮),此时,说明刷机成功完成
如果出现异常/失败/U盘无法读取状态,会进入红灯状态,建议重试或更换U盘再试。
开启SSH¶
参考: https://jingyan.baidu.com/article/624e7459ae65e834e8ba5afd.html
注意:先删除掉上一步骤遗留的文件miwifi.bin, 否则会刷rom而不刷ssh.
- 注册小米账号, 并在路由器管理界面绑定小米账号
- 访问 http://miwifi.com/miwifi_open.html , 点击页面中下方的”开启SSH工具”
- 依次点击“下载工具包”“接受”,需要注意的是,协议中已经写明,开启ssh后得到root权限, 同时意味着放弃保修服务.
- 按照上一步下载时页面的提示, 将下载的ssh工具安装到小米路由器
- 安装完成后,使用ssh客户端登录即可,用户名是root,密码是下载ssh工具时候给出的密码
交叉编译环境搭建¶
我们一般不会直接在小米路由器上直接进行开发, 而是在PC机上建立交叉编译环境, 开发, 编译代码然后将其部署到小米路由器上. 这里给出的是在Linux上搭建交叉编译环境的过程.
访问 http://miwifi.com/miwifi_open.html , 点击页面中下方的”插件开发文档”, 在弹出的对话框中选择对应的产品型号下载相应的sdk
目前小米路由器各型号与其对应的芯片, sdk版本的对照表如下表所示:
下载后解压, 并将
<sdk>/toolchain/bin
添加到PATH:export PATH=$PATH:/home/zzq/sdk_package_r3p/toolchain/bin
交叉编译库或工具¶
这里以几个例子给出交叉编译的方法.
编译libpcap¶
解压libpcap源码包并进入主目录
设置环境变量, 指定gcc等编译工具, 除了用export命令外, 也可以以KEY=VALUE的形式 作为参数写在./configure后面:
export CC=mipsel-xiaomi-linux-uclibc-gcc export AR=mipsel-xiaomi-linux-uclibc-ar export RANLIB=mipsel-xiaomi-linux-uclibc-ranlib
注意 对于r3p sdk, 其host与r1c sdk编译时一致, 但gcc等不一样, 如果仅指定host, 如果系统还存在r1c sdk且路径在PATH中, 则编译将通过, 但编译出的软件不能用于r3p路由器.
./configure --host=mipsel-openwrt-linux --with-pcap=linux
make
注意 configure几个参数的含义
–build: 编译用的当前平台, 一般不用指定, configure会自动检测
–host: 编译出的软件将运行于的平台, 也可以不指定, 默认与–build值相同
–target: 编译出的软件将处理什么平台的文件, 一般编译编译器之类的软件才会使用此选项
当–build值!=–host值时, 为交叉编译
示例
–build –host –target 含义 mipsel-linux mipsel-linux mipsel-linux 在mips平台上编译给mips用的软件, 它处理mips平台文件 i386-linux mipsel-linux mipsel-linux 在x86平台上交叉编译给mips用的软件, 它处理mips平台文件 i386-linux i386-linux mipsel-linux 在x86平台上编译给x86用的软件, 它处理mips平台文件的软件 mipsel-linux i386-linux mipsel-linux 在mips平台上交叉编译给x86用的软件, 它处理mips平台文件
编译helloworld¶
- 编写helloworld.c, 仅printf输出hello world字符串
mipsel-xiaomi-linux-uclibc-gcc -o helloworld helloworld.c
这里用的是R3P sdk.
编译gdb¶
gdb-7.8.1以上版本需要C++编译器支持C++11, 而r1c sdk中的g++仅支持C++0x. r3p sdk中的g++支持C++11.
如果要在MIPS平台上运行gdb-7.8.1, 需要修改源码, 否则运行时会报错: “GDB bug: target.c (gdb_signal_from_host): unrecognized real-time signal”, 方法是修改<gdb_root>/gdb/common/signals.c, 在第346行左右添加最后一个if语句:
else if(hostsig == 128)
return GDB_SIGNAL_UNKNOWN;
另外gdb依赖libtermcap, 在编译之前还需要交叉编译termcap, 并在编译gdb前通过LDFLAGS 指定libtermcap.a所在位置:
export LDFLAGS=-L(libtermcap.a所在的目录, 它也需要交叉编译)
export LIBS=-ltermcap
其他¶
在小米路由器上部署静态网页¶
参考: https://jingyan.baidu.com/article/b24f6c82dbcecc86bee5da77.html
- 小米路由器中已经提供了一个http服务器sysapihttpd, 根据参考链接修改
/etc/sysapihttpd/sysapihttpd.conf
, 配置自己的html页路径, 然后运行/etc/init.d/sysapihttpd restart
重启http服务器即可