如何在OpenWRT环境下做开发.doc

上传人:hw****26 文档编号:4204453 上传时间:2019-10-04 格式:DOC 页数:12 大小:173KB
下载 相关 举报
如何在OpenWRT环境下做开发.doc_第1页
第1页 / 共12页
如何在OpenWRT环境下做开发.doc_第2页
第2页 / 共12页
如何在OpenWRT环境下做开发.doc_第3页
第3页 / 共12页
如何在OpenWRT环境下做开发.doc_第4页
第4页 / 共12页
如何在OpenWRT环境下做开发.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、如何在 OpenWRT 环境下做开发 2011-05-05 17:31 之前写过一篇日志,是关于如何搭建自己的 OpenWRT 开发环境。经过最近一段时间的开发 学习和实践,对 OpenWRT 环境的开发有了一定的了解。在这里将我的开发心得做个整理。 1、搭建开发环境 首先,我们需要一个为路由器定制的开发环境,具体可以参考我的另一篇日志:搭建自 己的 OpenWrt 开发环境。这里只做一个简单的补充,在执行 make menuconfig 后,会出 现下图: 其中,图中红框部分是我定制路由器的系统版本,大家可以根据不同的路由器进行不同的 选择;绿框部分表示我们需要编译一个 SDK 开发环境(默

2、认情况下,此项未勾选)。 编译过程中需要通过官网下载很多相关的软件包,所以必须保证能够顺利连上外网。由于 下载速度的限制,编译过程大概需要数小时。编译结束后,所有的产品都会放在编译根目 录下的 bin/yourtarget/. 例如:我所编译的产物都放在./bin/brcm47xx/下,其中文件主 要有几类: (1).bin/.trx 文件: 这些都是在我们所选的 target-system 的类别之下,针对不同路由 器型号、版本编译的路由器固件。这些不同路由器的型号和版本是 openwrt 预先设置好的, 我们不需要更改。至于.bin 和.trx 的区别,一种说法是,第一次刷路由器的时候,需

3、要用. bin 文件,如果需要再升级,则不能再使用.bin 文件,而需要用.trx 文件。原因是,.bin 是将路由器的相关配置信息和.trx 封装在一起而生成的封包,也就是说是包含路由器版本 信息的.trx。在第一次刷固件的时候,我们需要提供这样的信息,而在后续升级时,则不 再需要,用.trx 文件即可。 (2)packages 文件夹: 里面包含了我们在配置文件里设定的所有编译好的软件包。默认 情况下,会有默认选择的软件包。 (3)OpenWrt-SDK.*.tar.bz2: 这个也就是我们定制编译好的 OpenWRT SDK 环境。我们 将用这个来进行 OpenWrt 软件包的开发。例如

4、,我所编译好的 SDK 环境包为: /bin/brcm47xx/OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc- 0.9.30.1.tar.bz2 可以从名称上看出,target system 是 brcm47xx,host system 是 Linux-x86_64,使用的 编译工具以及库是 4.3.3+cs_uClibc-0.9.30.1。 (4)md5sums 文件: 这个文件记录了所有我们编译好的文件的 MD5 值,来保证文件的完整 性。因为文件的不完整,很容易将路由器变成“砖头”。 需要主要的是,编译完成后,一定要将

5、编译好的 bin 目录进行备份(如果里面东西对你很 重要的话),因为在下次编译之前,执行 make clean 会将 bin 目录下的所有文件给清除 掉! 2、 更改原有 packages 在编译根目录下会有一个 dl 的目录,这个目录其实是“download”的简写,在编译前期, 需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装 在所编译的固件中,也就是我们 make menuconfig 的时候,为固件配置的一些软件包。如 果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下, 然后开始编译即可。编译时,会将软件包解压到 build_

6、dir 目录下。 当然,你也可以自己在 dl 里面创建自己的软件包,然后更改相关的配置文件,让 openwrt 可以识别这个文件包。 由于我的项目更改的内容是底层的,需要跟固件一起安装。所以,我使用的方法就是直接 更改 dl 目录下软件包,然后重新进行固件编译。感觉类似于 Linux 的内核编译。反复编过 十多次,没有任何问题。 3、 新建自己的 packages 对于自己新建的 package,而这个 package 又不需要随固件一起安装,换句话说,就是可 以当做一个可选软件包的话。我们可以利用我们的 SDK 环境来单独编译,编译后会生成一 个 ipk 的文件包。然后利用 opkg ins

7、tall xxx.ipk 来安装这个软件。 下面具体说下,如何编译一个 helloword 的软件包。 (1)首先,编写 helloworld 程序 编写 helloworld.c /* * Helloworld.c * The most simplistic C program ever written. * An epileptic monkey on crack could write this code. */ #include #include int main(void) printf(“Hell! O world, why wont my code compile?nn“); r

8、eturn 0; 编写 Makefile 文件 # build helloworld executable when user executes “make“ helloworld: helloworld.o $(CC) $(LDFLAGS) helloworld.o -o helloworld helloworld.o: helloworld.c $(CC) $(CFLAGS) -c helloworld.c # remove object files and executable when user executes “make clean“ clean: rm *.o helloworl

9、d 在这两个文件的目录下,执行 make 应该可以生成 helloworld 的可执行文件。执行 helloworld 后,能够打印出“Hell! O world, why wont my code compile?”。 这一 步,主要保证我们的源程序是可以正常编译的。下面我们将其移植到 OpenWRT 上。 (2)将 OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc- 0.9.30.1.tar.bz2 解压 tar xvf OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_u

10、Clibc- 0.9.30.1.tar.bz2 (3)进入 SDK cd OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1 可以看到里面的目录结构跟我们之前 source 的目录结构基本相同,所需要编译的软件包, 需要放置在 package 目录下 (4)在 package 目录下创建 helloworld 目录 cd package mkdir helloworld cd helloworld (5)创建 src 目录,拷贝 helloworld 文件 mkdir src cp /home/wrt/test/

11、helloworld.c src cp /home/wrt/test/Makefile src (6)在 helloworld 目录下创建 Makefile 文件 这个 Makefile 文件是给 OpenWRT 读的,而之前写的那个 Makefile 文件是针对 helloworld 给编译其读的。两个 Makefile 不在同一层目录下。 touch Makefile vim Makefile Makefile 文件模板内容如下: # # OpenWrt Makefile for helloworld program # # # Most of the variables used her

12、e are defined in # the include directives below. We just need to # specify a basic description of the package, # where to build our program, where to find # the source files, and where to install the # compiled program on the router. # # Be very careful of spacing in this file. # Indents should be t

13、abs, not spaces, and # there should be no trailing whitespace in # lines that are not commented. # # include $(TOPDIR)/rules.mk # Name and release number of this package PKG_NAME:=helloworld PKG_RELEASE:=1 # This specifies the directory where were going to build the program. # The root build directo

14、ry, $(BUILD_DIR), is by default the build_mipsel # directory in your OpenWrt SDK directory PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk # Specify package information for this program. # The variables defined here should be self explanatory. # If you are running Kamikaz

15、e, delete the DESCRIPTION # variable below and uncomment the Kamikaze define # directive for the description below define Package/helloworld SECTION:=utils CATEGORY:=Utilities TITLE:=Helloworld - prints a snarky message endef # Uncomment portion below for Kamikaze and delete DESCRIPTION variable abo

16、ve define Package/helloworld/description If you cant figure out what this program does, youre probably brain-dead and need immediate medical attention. endef # Specify what needs to be done to prepare for building the package. # In our case, we need to copy the source files to the build directory. #

17、 This is NOT the default. The default uses the PKG_SOURCE_URL and the # PKG_SOURCE which is not defined here to download the source from the web. # In order to just build a simple program that we have just written, it is # much easier to do it this way. define Build/Prepare mkdir -p $(PKG_BUILD_DIR)

18、 $(CP) ./src/* $(PKG_BUILD_DIR)/ endef # We do not need to define Build/Configure or Build/Compile directives # The defaults are appropriate for compiling a simple program such as this one # Specify where and how to install the program. Since we only have one file, # the helloworld executable, insta

19、ll it by copying it to the /bin directory on # the router. The $(1) variable represents the root directory on the router running # OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install # directory if it does not already exist. Likewise $(INSTALL_BIN) contains the # command t

20、o copy the binary file from its current location (in our case the build # directory) to the install directory. define Package/helloworld/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/ endef # This line executes the necessary commands to compile our program. # Th

21、e above define directives specify all the information needed, but this # line calls BuildPackage which in turn actually uses this information to # build a package. $(eval $(call BuildPackage,helloworld) (7)返回到 SDK 的根目录 执行 make 进行编译 编译过程会在 build_dir 目录下完成 编译结果会放在 bin/yourtarget/package 目录下 helloworld

22、_1_bcm47xx.ipk (8)上传 helloworld_1_bcm47xx.ipk 使用 sftp 软件上传 helloworld_1_bcm47xx.ipk 至路由器 执行 opkg install helloworld_1_bcm47xx.ipk 输入 hello 然后按 Tab 键,发现 openwrt 中已经有 helloworld 可执行命令。 执行 helloworld 查看程序的效果。 Hell! O world, why wont my code compile? 无线路由开发平台 openwrt 的编译和使用 2010-12-30 20:19:19 标签: 无线路由器

23、 openwrt 内核编译 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究 法律责任。 学期末的课程设计出了个题:无线路由器的软件开发。 平台就是 openwrt。openwrt 是由 Cisco 放出源代码的开放无线路由平台。由于是基于 linux 内核,所以可以将很多 linux 平台下的软件移植到此平台下,然后让无线路由拥有很多意 想不到的功能,例如拿来做 BT 下载器,音乐播放器,小型数据库处理等等。 环境: Ubuntu 10.04,subversion,VMware workstation 7.1.3 首先是得到 openwrt 的源

24、代码。 在 Ubuntu 下,首先安装上 svn 工具: sudo apt-get install subversion 然后装上各种依赖关系包: sudo apt-get install gcc g+ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversi-dev ncurses-term zlib1g-dev sudo apt-get update 然后进入 home 目录,建立文件夹: makedir /openwrt cd /openwrt 然后使用 svn 命令行 c

25、heckout 出源代码: svn checkout svn:/svn.openwrt.org/openwrt/trunk 进入 trunk 文件夹: cd trunk 更新 openwrt: ./scripts/feeds update -a 安装所有包: ./scripts/feeds install -a 这个时候,我觉得有必要把 LUCI 编译进内核,这样就方便以后我们通过 web 来控制 openwrt,而不是通过命令行来控制了。所以加上以下命令: ./scripts/feeds update packages luci ./scripts/feeds install -a -p l

26、uci 这样之后,在编译内核时才会出现 LUci 选项。 由于我没有 Linksys 系列的路由器,而且只是为了体验 openwrt,所以我就把 openwrt 编译 成 VMware workstation 的磁盘镜像,使用 VMware workstation 来模拟一台路由的硬件环境。 以下为符合此情况的配置:(由于编译时会继续从网络上下载相应的包,所以一旦开始编 译,就不要断开连接。但是遇到很大的包,但是下的很慢的,可以中断过程,使用下载过 程去相应的网站上下载之后放入) 首先输入 make menuconfig,开始进入内核配置界面: 1. Target System (x86) -

27、 (X) x86 2. 配目标文件系统为 EXT2 Target Images - * ext2 Target Images - * Build VMware image files (VMDK) 这样就后面编译时产生可以直接在 VM 上用的虚拟硬盘。 配 Web UI : 1) Base system - uci Utility for the Unified Configuration Interfa 2) LuCI 都选上 3) Network - uhttpd uHTTPd - tiny, single threaded HTTP server - uhttpd-mod-lua. uH

28、TTPd - tiny, single threaded HTTP server (Lua plugin) 4) make V=99 编译,时间有点长,完后,在 bin/x86/ 就是最后编译出来的文件了。 5) 拷贝 bin/x86/ ,我的全部路径是 /home/longjindong/openwrt/trunk/bin/x86/ 中的 “openwrt-x86-genericcombined-ext2.vmdk”到 XP 电脑上; XP VM 安装运行 OpenWRT: 1. 创建一个虚拟机 打开 VMware New Virtual Machine . 下一步 下一步 linux 、O

29、ther Linux 2.6.x kernel - 下一步 这里 Vm 名和路径可以自己指定 下一步 网络默认“Use bridged networking” 下一步 这 里的硬盘大小用默认,反证一会要被删掉 完成;这样在 VMware Workstatio 里有 “Other Linux 2.6.x kernel”的虚 拟机了。 2. 加载 OpenWRT 虚拟盘并启动 1) 删创建虚拟机时的虚拟盘 右击 “Other Linux 2.6.x kernel” - Setting Hard Disk Remoe; 2) 加载 OpenWRT 虚拟盘 “Other Linux 2.6.x kernel” - Settin Add Hard Disk Next Use an existing virtual disk - Browse ,选前面 “openwrt-x86-generic-combined-ext2.vmdk” Finish. 3) 点 run 按钮就可以开始运行 OpenWRT。 上图: 输入 192.168.1.1,就可以在浏览器里看见: 这只是编译内核部分,以后把相关的设置和软件开发方面慢慢写出来吧。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。