




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
openwrt移植简介及平台应用 openwrt 简介 openwrt 编译环境搭建 openwrt 编译及其常见问题 openwrt 固件升级 如何在openwrt环境下做开发 相关资源收集 目录目录 openwrt 简介 openwrt是一个高度模块化、高度自动化的嵌入式linux 系统,拥有强大的网络组件,常常被用于工控设备、电话 、小型机器人、智能家居、路由器以及voip设备中。 openwrt支持各种处理器架构,无论是对arm,x86, powerpc或者mips都有很好的支持。 其多达3000多种软 件包,囊括从工具链(toolchain),到内核(linux kernel), 到软件包(packages),再到根文件系统(rootfs)整个体系, 使得用户只需简单的一个make命令即可方便快速地定制 一个具有特定功能的嵌入式系统来制作固件。 其模块化 设计也可以方便的移植各类功能到openwrt下,加快开发 速度。 openwrt 简介 openwrt的特点 openwrt提供了一个完全可写文件系统 及软件包管理, 它通过简单易用的方式,最大限度地降低了嵌入式linux开 发的门槛,并充分释放并挖掘嵌入式设备的潜能,它允许 您使用软件包的概念来定制嵌入式设备,这使得它能适用 于绝大多数应用。对于开发人员,openwrt提供简单易用 的环境框架来构建应用程序。对于用户来说,这意味着完 全定制的自由,它通过您预想不到的方式让你了解嵌入式 是什么。 开源和free openwrt项目是gpl许可下的完全自由和开 放源码的项目。项目打算将源代码永久存放于openwrt站 点,以便易于获得源代码。 轻松和自由的入门 为什么选择openwrt 为什么使用openwrt? gnu为我们提供了很多免费的软件,我们可以用一个很 低的价钱购买像wrt54g的硬件,做成一个小型的linux 系统,现在openwrt已经提供了近千个多个已编译好的软 件,而且数量还在不断增加,而openwrtsdk更是简化了 嵌入软件开发的工序。 为什么学习openwrt? 你不需要对mips处理器有很深入的了解,也不用懂得如何 去设计一个arm或mips处理器专用的linux内核,因为这些 在网上已有人为你做好,你只需懂得如何安装和使用就行 了,不过你也可以去 找到相关的 资料。如果你对linux系统有一定的认识,并想学习或接触 嵌入式linux的话,openwrt很适合你,你将学会一些无线路 由器的基本知识,以及一般嵌入式linux的开发过程. 为什么选择openwrt 通过openwrt快速构建一个应用平台,openwrt从 交叉编译器,到linux内核,再到文件系统甚至 bootloader都整合在了一起,形成了一个sdk环 境。 随着linux的成熟,大量不同的处理器内核和 应用软件相继出现,当你熟悉这些嵚入式linux的 基本开发流程后,你不再局限于mips处理器和无 线路由器,你可以尝试在其它处理器,或者非无线路 由器的系统移植嵌入式linux, 定制合适自己的应 用软件,并建立一个完整的嵌入式产品。 openwrt 编译环境搭建 首 先, 要有支持编译openwrt的操作系统 。实体机或者虚拟机(vmware 或者 qemu) 里的操作系统都行,这里推荐使用linux系 统。 bsd和mac osx系统也可以编,但不推 荐,且未验证是否可编译成功。下文中我 使用的是ubuntu操作系统,使用 apt-get 来 管理包。 openwrt 编译环境搭建 第二步, 就是安装所需要的各种软件包, 包括编译器,解压工 具,特定的库等. 这些工作可以简单的通过键入以下命令 (通 常需要root 或者是 sudo 权限),以root权限安装下列软件包( 可能并不完整,会有提示,提示缺少即装就可以了): 32位(x86)请执行下列命令: # apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev 64位(x86_64)请执行下列命令(多装了哪些库或软件包呢 ?请您仔细看一看哦): # apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs lib32gcc1 libc6-dev-i386 openwrt 编译环境搭建 参考 本列表中 所列的编译环境所需要软件 包或库。 某些依赖的为库或软件包也许操作系统中 已经安装过,此时apt-get会作出提示(提 示您忽略或重新安装的) openwrt 编译环境搭建 最 后下载一份完整的 openwrt 源码到编译 环境中。关于openwrt的源代码下载,途径 有二,一是通过 svn ,一是通过 git,建议 使用 svn ,因为openwrt主要以 svn 来维 护openwrt系统的版本。另外,请注意 openwrt中不同的分支版本,一个是用得较 多的开发快照,俗称 trunk,二是稳定版, 俗称 backfire。 openwrt 编译环境搭建 安装subversion 若你想通过svn下载源代码,你需安装 subversion。subversion,或称svn, 是 openwrt的project中用来控制版本的系统, 它非常类似的 cvs的界面和使用条款。 执 行下述命令即可安装svn,很容易的: # apt-get install subversion openwrt 编译 subversion 安装完毕,通过svn命令可获 取得到一份openwrt纯净源代码。您还得 创建一个目录以便存放获取得到的openwrt 源代码,要获取源代码你还得输入 subversion命令来获取 (svn里这种操作称 之为check out) 。 openwrt 编译 编译流程 编译专属于您的设备的特定openwrt固件以一下五个步骤: 通过subversion命令获得源代码; 更新(或安装) package feeds 创建一个默认配置以检查编译环境是否搭建好了 (假 如需要的话); 用menuconfig来配置即将编译生成的固件映像文件 的配置项; 最后开始编译固件; openwrt 编译 下载源代码 最后,下载一份完整的openwrt源代码。你可选择: 下载稳定发行版,或 下载开发版 (俗称“trunk”版)。 使用发行版的源码 openwrt公开发行的稳定版为 openwrt 10.03 “backfire“。 此版本是最稳定的,但也许不包括最新更新的补丁或最新 编写的出的新功能。 下述代码即举例说明了通过svn从brandkfire获得backfire源 代码(此版本意思是从trunk分支的补丁也在backfire版本中 了,即包含修复补丁): openwrt 编译 # mkdir openwrt/ # cd openwrt/ # svn co svn://openwrt/branches/backfire 您也可以通过下述命令,下载不含修复补丁的 backfire的原版源码: # svn co svn://openwrt/tags/backfire_10. 03 注解: 上述svn命令将在当前目录创建一个 openwrt/backfire/ 子目录,此目录包含此命令获 取到的源代码。 openwrt 编译 使用开发版源代码 当前的开发版本分支(trunk)已包含最新的实验补丁。此分 支或许还突破了openwrt原来所不支持的硬件设备的限制 哦,惊喜的同时也有风险存在。mkdir openwrt/ cd openwrt/ svn co svn://openwrt/trunk/(回车后等 待下载) svn 回滚 或 svn 指定版本 需要的版本是 28007,操作: svn co svn://openwrt/trunk -r 28007 回滚或到指定版本:svn up -r 28007 指定luci版本 cd trunk/feeds/luci svn up -r r7612 openwrt 编译 关于openwrt dreambox openwrt中文网 创建于2010年2月14日 建立了技术论坛、开发站点、下载中心。 主要是为openwrt的中文化,以及固件的易用性。 获取dreambox trunk开发版svn代码库 # svn co svn://dreambox/trunk openwrt-pandorabox openwrt 编译 开始准备编译 首先跟进并更新源代码 因openwrt的源代码随时都会变动,故此命令将 确保您所获取得到的源码的最新性。 如果你用的是backfire版本的源码: cd openwrt/backfire/ 如果你用的是trunk版本的源码: cd openwrt/trunk/ svn up ./scripts/feeds update -a ./scripts/feeds install -a openwrt 编译 下一步是检查编译环境,若可进行编译则 生成默认配置: make defconfig 若defconfig回显提示缺少软件包或编译库 等依赖,则按提示安装所缺软件包或库等 即可,不难的,细心点就行。 进入编译组件包菜单 make menuconfig openwrt 编译 make menuconfig会有一个编译管理器,在里面可以选择 型号、op功能组件,需要用到方向键、回车键、空格键 。方向键是移动光标,回车键是确认,空格键是选择(在 选项框按下空格键,*号是编译进固件,m是编译但是不编 译进固件)。 1.选择cpu型号 target systematheros ar71xx/ar7240/ar913x/ar934x 2.选择路由型号 target profile-tp-link tl-wr703 3.添加luci lucicollections luci openwrt 编译 4.添加luci的中文语言包 lucitranslations- luci-i18n-chinese 5.添加ddns luciapplications luci-app-ddns. 6.添加usb挂载 base system block-mount 7.添加硬盘格式支持 kernel modules filesystems kmod-fs-ext4 8.添加utf8编码 kernel modules native language support kmod-nls-utf8 9.添加usb扩展支持 kernel modules usb support kmod-usb-storage-extras. 110.添加自动挂载工具 utilities filesystem badblocks openwrt 编译 开始编译make v=99,最后会得到一个4m的带中文 luci的tl-wr703n固件。 网上固件下载网址: / 在编译的时候需要比较长的时间,因为要下载很多 软件包,假如编译下载不成功,可以退出,自己去 下载后放入dl的文件夹下,再继续编译。 如果出现编译错误,请再次检查开始编译前那些依 赖程序装好了没有 ,如果还有错误请看后面的编译出 现的常见问题。 openwrt 编译 若编译成功,会出现如下图所示: openwrt 编译 编译成功后,在/openwrt/trunk/bin/ar71xx 目录下可见如下2个固件, openwrt-ar71xx-generic-tl-wr703n-v1- squashfs-factory.bin 出厂带配置的固件 openwrt-ar71xx-generic-tl-wr703n-v1- squashfs-sysupgrade.bin 在原来的openwrt基础上更新的固件 openwrt 编译 内核配置 make kernel_menuconfig命令是进去配 kernel 这和普通的linux kernel的 make menuconfig没有什么区别 ,在 machine selection加一个选择board,选tl -wr703n supprot。其他需要什么就配置 什么,与linux内核一样。配置完后重新编 译。 openwrt 编译 修改默认ssid,添加wifi配置 修改mac80211.sh文件,位于package/mac80211/files/lib/wifi option disabled 1改成0,默认开启wifi。 option disabled 0下添加 option htmode ht40+ option channel 1 option country cn option txpower 17 option ssid openwrt-wr703 option htmode ht40+ 使用40mhz频宽,但只支持1-7信道。ht40-,支持5- 13信道。ht20 支持1-13信道,20mhz频宽 option channel 1使用信道1,1-13之间。若有限定频宽,信道参考如上。 option country cn 设定wifi标准为中国 option txpower 17 发射功率为17dbm,大约50mw。按实际板子的功率来设 置。 openwrt 编译 修改root密码 由于openwrt默认是没有密码的,所以ssh没法连接 ,只能连接telnet,我们只要做到让openwrt开启 时就配置好密码就可以了! 修改shadow文件,位于package/base-files/files/etc 如需要密码为root: root:$1$ioswlaew$jwht3bwuhtq7vklywxwpv 0:15811:0:99999:7: 将密码修改成root。 编译的常见问题 一、普遍问题 a.在menuconfig中找不到所需的组件,用脚本 ./scripts/feeds 安装对应的package,嫌麻烦直接“-a“,就 是时间长点。 b.编译完成后bin目录下找不到生成的固件,恭喜你,你犯 了跟我一样2b的错误,你选择的组件过大,导致所需的固 件大小操作targets源代码中的限制,解决方法,如果确定 你的flash比较大,修改源代码,各个路由器不同网上找, 否则减少组件,只选择最基本的组件。 c.编译错误,查看错误信息。make的时候加参数v=99, 为便于查找错误可以重导向一下2 return 0; 如何在openwrt环境下做开发 编写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 helloworld 在这两个文件的目录下,执行make 应该可以生成helloworld的可执行 文件。执行helloworld后,能够打印出“hell! o world, why wont my code compile?”。 这一步,主要保证我们的源程序是可以正常编译的 。下面我们将其移植到openwrt上。 如何在openwrt环境下做开发 将openwrt-sdk-ar71xx-for-linux-i686-gcc-4.3.3+cs_uclibc-.tar.bz2解压 tar xvf openwrt-sdk-ar71xx-for-linux-i686-gcc-4.3+cs_uclibc-.3.tar.bz2 (3)进入sdk cd openwrt-sdk-ar71xx-for-linux-i686-gcc-4.3.3+cs_uclibc- 可以看到里面的目录结构跟我们之前source的目录结构基本相同,所需要编译的软件包, 需要放置在package目录下 (4)在package目录下创建helloworld目录 cd packag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论