前面几期都是在做准备工作,这一期我们开始实际操作。很多教程的开始都喜欢用HelloWorld来先做个演示,我也不例外,在硬件开发板教程里流水灯就是一种HelloWorld,程序简单,只要控制GPIO就能实现,并且直观明显。现在开始动手将HG255d实现流水灯功能,实现后的效果是这样的:
如果你感兴趣,那我们就先来动手操作一下,算是控制开发板的第一步。
首先编译环境是在linux_32位下进行的,需要搭建一个linux开发环境,这里以Ubuntu14.04为例,
$ sudo apt-get update
$ sudo apt-get install git g++ make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim
编译工具链我们使用Ralink的SDK里提供的,如果想自己编译也可以,网上有很多教程可以借鉴,SDK目录下Tools文件夹下的 buildroot-gcc342.tar.bz2 文件就是编译工具链,在Linux下的操作为:
1. 进入SDK/Tools目录 cd xxxx/RFDemo/Tools
2. 解压buildroot-gcc342.tar.bz2文件到/opt目录下 tar -jvxf buildroot-gcc342.tar.bz2 -C /opt
3. (可选) 将/opt/buildroot-gcc342/bin/ 目录添加到Path变量中: vim ~/.profile 在末尾加入
# MIPS Toolchain mipsel-linux-xxx
PATH=$PATH:/opt/buildroot-gcc342/bin
重启后执行 mipsel-linux-gcc -v 就可以看到工具链的版本信息。
编译工具准备好后,开始生成我们想要的流水灯程序,这里因为我们想作最小的改动实现最小的功能,我就不单独生成工程了,而是直接在Uboot上修改,采用给Uboot打补丁的形式来演示我们的流水灯程序。这里再说明一下,以后的演示示例我都是已补丁的形式给出,这样做的好处有两点:1.对于复杂的工程可以清楚的看到修改了哪些地方;2.patch文件的操作是可逆的,实验完成后可以恢复。
进入SDK的Code/Uboot目录下 然后执行 patch -p1 < ../Patch/led_run.patch
如图所示:
然后执行 make menuconfig 就会出现编译配置程序,将所有选项改成下图的状态:
然后 Exit 选择 yes 保存并退出。
再执行 make 生成 uboot.bin 可执行文件
编译完成后如果在当前目录下生成了 u-boot 文件 就说明编译成功,接着就可以进行下一步啦,如果不成功,就细心找找原因。将 uboot.bin 文件放到OpenOCD的bin目录下 ,运行OpenOCD服务,如果不清楚请详细看前几期介绍,再使用telnet工具访问OpenOCD服务 telnet 127.0.0.1 4444 ,telnet成功后执行两条命令:
halt 和 run_uboot
结果如下所示:
>Open On-Chip Debugger > halt target state: halted target halted in MIPS32 mode due to debug-request, pc: 0x9f000380 > ralink_init > run_uboot 125248 bytes written at address 0x00200000 downloaded 125248 bytes in 3.163181s (38.668 KiB/s) >
如果显示如下的信息,你会惊喜的发现我们的开发板已经动起来了,流水灯程序就这样跑起来了。具体的原理我们以后分析,先来个小的Demo演示一下增加点兴趣。
如果显示如下的信息,你会惊喜的发现我们的开发板已经动起来了,流水灯程序就这样跑起来了。具体的原理我们以后分析,先来个小的Demo演示一下增加点兴趣。
这里需要注意一下如果在执行halt命令后pc的值为pc:0x00000000,那么说明你的开发板的U-Boot还能正常运行并将JTAG接口初始化为了GPIO口,这种情况需要将flash的53和54引脚短接再开机,正常识别后再断开即可,具体参考:
当然,做完实验后要清理现场,因为Code目录下的程序以后还要用到,所以我们要把刚才的修改再还原回去,执行下面两个步骤就OK:
1. make distclean
2. patch -R -p1 < ../Patch/led_run.patch
到这里《路由器就是开发板》的准备工作就讲完了,下一期开始我会从源码分析问题,先说U-Boot再讲OpenWRT。
---------------------------------------------------------------------------
SDK下载地址: https://github.com/aggresss/RFDemo