windows篇=============================
小撸路由是啥?小撸路由顾名思义就是@小撸撸过的 WR703N 之类的路由(系统基于OpenWrt)!因为它使用起来非常方便,而且具有很高的性价比,所以拿来当搭建智能家居系统的核心组件。要想让小撸路由改行服务于智能家居系统,那就得为它专门写一套程序去指挥它。
因为小撸路由使用的芯片是基于 MIPS 架构的 AR9331芯片,所以要想在 Windows系统 上编译能跑的程序就必须使用交叉编译工具链,下面是下载连接,下载后安装后就可以了。(小提示:这个链接是国外的,下载速度貌似很慢很慢,用迅雷也不顶用。当时下载拖了好久才拖下来,真是坑爹啊!!!在群 小撸路由·智能家居
284427089 【点击加入群 小撸路由·智能家居】 中已经共享)
https://sourcery.mentor.com/public/gnu_toolchain/mips-linux-gnu/mips-2014.05-27-mips-linux-gnu.exe
环境安装好后下面就开始编写小撸路由上的第一个程序:Hello World, Xiaolu Router!!! 随便找个地方新建一个空白记事本文件并改名为main.cpp
写上下面代码保存。
#include <stdio.h>
int main()
{
printf("Hello World, Xiaolu Router!!!\n");
return 0;
}
使用交叉编译工具链把代码编译成小撸路由上能跑的程序。默认安装的话工具链应该在
C:\Users\用户名\MentorGraphics\Sourcery_CodeBench_Lite_for_MIPS_GNU_Linux\bin
这个路径之下,如果找不到就不关我的事了 :) 最好把这个路径加入环境变量中,这样随便在哪都可以使用里面的工具。
编译命令如下:
mips-linux-gnu-gcc -static -msoft-float -O2 -o main main.cpp
因为 mips 架构的CPU都不带浮点协处理器,所以必须指定使用软件模拟浮点计算,不然会出错的!-msoft-float 这个参数就是这个用意。
如果一切顺利的话,在目录下应该可以看到一个main
的文件,说明已经成功编译!把这个文件上传至小撸路由,然后执行。不出意外控制台应该看到如下内容:
Hello World, Xiaolu Router!!!
至此,小撸路由上的第一个程序已经搞定!
========================================linux篇====================
linux交叉编译工具链 搜索JS9331 百度网盘 OpenWrt-Toolchain-ar71xx-for-mips_34kc-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2
openwrt 编程器固件的制作方法
对于我们的ar9331小板子,用的flash是Winbond W25Q64 (8 MB)。
- AP121 (AR9331) U-Boot for YY150 modified by onejacky: cd_meatbirds@126.com
- DRAM: 64 MB
- FLASH: Winbond W25Q64 (8 MB)
- LED on during eth initialization...
8M的FLASH:flash地址从0x000000~0x7FFFFF
ttl访问flash的地址从0x9F000000~0x9F7FFFFF
- flash起始地址 flash终止地址 TTL终止地址 TTL起始地址
- uboot 0x00000000 0x0001FFFF 0x9F01FFFF 0x9F000000 //0x20000 128k
- fw 0x00020000 0x007DFFFF 0x9F7DFFFF 0x9F020000 //0x7c0000 7936K
- xxx 0x007E0000 0x007EFFFF 0x9F7EFFFF 0x9F7E0000 //0x10000 64k
- art 0x007F0000 0x008FFFFF 0x9F7FFFFF 0x9F7F0000 //0x10000 64k
分4步来制作ar9331小板的full.bin
1.uboot.bin
在这个128k的bin文件中2个地方要注意:第一,在0x1FC00处存有mac;第二,在0x1FE00处存有pin
uboot.bin 可以直接移植在谷歌上有个开源的项目有源代码,编译一下就好了。如果懒得去编译,只想做个备份以后用的话,可以采用以下的方法
cat /proc/mtd
dd if=/dev/mtd0 of=uboot.bin
然后用winscp 下载到电脑中
2.fw.bin
openwrt 自己make menuconfig make V=99 编译吧
3.xxxx
做一个64k的空白的bin文件就好了,里面全部填充FF
自己用c写一个也可以生成一个empty_ff.bin的文件
- #include<stdio.h>
- #include<stdlib.h>
- #include<unistd.h>
- #include<fcntl.h>
- int main(void)
- {
- int fd;
- int i;
- char buf[2] = {0xff,0x0};
- fd = open("empty_ff.bin", O_RDWR | O_CREAT, 0666);
- for(i = 0;i < 64*1024 ; i++)
- write(fd,buf,1);
- close(fd);
- return 0;
- }
art.bin分区提取
dd if=/dev/mtd4 of=art.bin
最后采用cat 连接起来就好了
cat uboot.bin fw.bin empty_ff.bin art.bin > full.bin