首页 > 拆机刷机 > 正文

Atheros SDK研究与使用(一)
2015-09-26 14:08:08   来源:   评论:0 点击:

最近空闲时间很多,索性研究起了AtherosSDK。正如很多读者所知道的,Alex本人并非软件出身,所以很基础的问题在我看来都很高深,Atheros的SDK也同样如此,看了1,2天代码,我总算研究清楚怎样使用,后续争取将我
最近空闲时间很多,索性研究起了Atheros SDK。正如很多读者所知道的,Alex本人并非软件出身,所以很基础的问题在我看来都很高深,Atheros的SDK也同样如此,看了1,2天代码,我总算研究清楚怎样使用,后续争取将我的研究与使用成果在这里与读者分享。第一阶段的研究目的是如何将自己需要的软件一同编译,最终可以在目标板上运行,本文也正是围绕着这样的主题展开。

Atheros SDK初体验

这次使用的Atheros SDK版本是LSDK-9.2.0,使用的板子是Alex自己设计的基于AR9344的大功率无线AP。按照官方文档中的说明,将源代码解压至工作目录,如下图。

SourceCode-Directory

然后进入build目录运行如下命令

make BOARD_TYPE=db12x BUILD_TYPE=jffs2

因为是第一次使用,需要编译工具链,所以耗费的时间很长,好在编译过程中没有出现任何问题,顺利地完成了全部的编译过程,并得到了最终的二进制文件,如下图。

Images-Built

将得到的二进制文件烧写至Flash,板子可以正常启动,说明以上的操作都是正确的。

变更Flash容量

由于我的设计是16MB Flash,与db12x默认的8MB Flash不符,因此需要更改源代码,将Flash配置为16MB。经过了一段时间的摸索,发现Flash容量定义在了以下文件中

boot/u-boot/include/configs/db12x.h

将其中的的第12行变更为

#define FLASH_SIZE              16

再次编译,烧写得到的二进制文件,发现在u-boot中已经正确地识别为16MB Flash。

分析Makefile

接下来研究如何将自己编写的代码编译成为可执行文件,并在目标板中运行。在通读了build目录中的Makefile文件后,发现其会包含build/scripts目录下相应的Makefile,这样只需要变更build/scripts/db12x下的Makefile即可更改编译进来的软件。按照Atheros官方的注释,也是如此

# Adding make instructions:

# Usually board/scripts/<target> is the correct place to do this.

# IMPORTANT: all “make targets” which add to $(INSTALL_ROOT)

再来分析build/scripts/db12x/Makefile.db12x文件,发现其最开始的一段输出了较多的环境变量,例如

export HAL=$(TOPDIR)/drivers/wlan/hal

export ENETDIR=$(TOPDIR)/linux/drivers/ethernet

分析这样做的好处是方便后续软件版本的变更及增加代码的可读性,我在这里面加了一行

export TOM_DIR=$(TOPDIR)/apps/tom

这样,我就可以将自己的代码放在tom目录下。

build/scripts/db12x/Makefile.db12x中定义了多个编译模块(暂时这样称呼,因为我还不知道其专有名词),例如iptables_build,samba_build等,这些编译模块中的大部分又统一放置于common_mainline中,然后根据/build/scripts/db12x/config.db12x中相应的配置决定启用哪些编译模块,例如本例中config.db12x设定BUILD_ATHR_HOSTAP为1,则根据条件判断语句编译如下模块:

common_mainline: check_tftp rootfs_prep toolchain_build 
        kernel_build kernel_info enet_build busybox_build athr-hostapd athr-wpa_supplicant 
        sar cgi lzma_uimage uboot_mainline samba_build 
        ntfs3g_build $(stage2_build)

到这里,相信读者也一定知道怎样将自己的代码编译进去了,将自己的代码仿照apps/tom目录下,在build/scripts/db12x/Makefile.db12x定义一个唯一的模块如tom_build,并将tom_build添加到common_mainline中即可。

Hello World

按照以上思路,将hello.c放在apps/tom目录下,hello.c的代码内容如下

#include <stdio.h>
int main() {
    printf(“Hello Worldn”);
    return 0;
}

定义tom_build如下

tom_build:
        @echo making Toms Hello World
        sleep 60
        cd $(TOM_DIR) && 
        $(TOOLPREFIX)gcc hello.c -o hello && 
        cp hello $(INSTALL_ROOT)/sbin/hello

再次编译,可以看到正在编译hello.c的过程(Alex故意设置了打印信息及暂停60秒),如下

Making编译完成后,首先进入apps/tom目录,发现已经得到hello可执行文件,使用file命令查看这个可执行文件,结果如下

File-Hello看来交叉编译工具已经正确指定且得到了可在目标板上执行的文件。再次将得到的二进制文件烧写至Flash,启动,运行hello,得到了激动人心的“Hello World”。

 

相关热词搜索:Atheros SDK研究与使用(一)

上一篇:关于 Breed 刷新版 UBNT 固件的一点说明
下一篇:路由器操作系统那点事

分享到: 收藏