已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
openwrt移植简介及平台应用 openwrt简介openwrt编译环境搭建openwrt编译及其常见问题openwrt固件升级如何在openwrt环境下做开发相关资源收集 目录 openwrt简介 openwrt是一个高度模块化 高度自动化的嵌入式linux系统 拥有强大的网络组件 常常被用于工控设备 电话 小型机器人 智能家居 路由器以及voip设备中 openwrt支持各种处理器架构 无论是对arm x86 powerpc或者mips都有很好的支持 其多达3000多种软件包 囊括从工具链 toolchain 到内核 linuxkernel 到软件包 packages 再到根文件系统 rootfs 整个体系 使得用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来制作固件 其模块化设计也可以方便的移植各类功能到openwrt下 加快开发速度 openwrt简介 openwrt的特点openwrt提供了一个完全可写文件系统及软件包管理 它通过简单易用的方式 最大限度地降低了嵌入式linux开发的门槛 并充分释放并挖掘嵌入式设备的潜能 它允许您使用软件包的概念来定制嵌入式设备 这使得它能适用于绝大多数应用 对于开发人员 openwrt提供简单易用的环境框架来构建应用程序 对于用户来说 这意味着完全定制的自由 它通过您预想不到的方式让你了解嵌入式是什么 开源和freeopenwrt项目是gpl许可下的完全自由和开放源码的项目 项目打算将源代码永久存放于openwrt站点 以便易于获得源代码 轻松和自由的入门 为什么选择openwrt 为什么使用openwrt gnu为我们提供了很多免费的软件 我们可以用一个很低的价钱购买像wrt54g的硬件 做成一个小型的linux系统 现在openwrt已经提供了近千个多个已编译好的软件 而且数量还在不断增加 而openwrtsdk更是简化了嵌入软件开发的工序 为什么学习openwrt 你不需要对mips处理器有很深入的了解 也不用懂得如何去设计一个arm或mips处理器专用的linux内核 因为这些在网上已有人为你做好 你只需懂得如何安装和使用就行了 不过你也可以去http www linux mips org找到相关的资料 如果你对linux系统有一定的认识 并想学习或接触嵌入式linux的话 openwrt很适合你 你将学会一些无线路由器的基本知识 以及一般嵌入式linux的开发过程 为什么选择openwrt 通过openwrt快速构建一个应用平台 openwrt从交叉编译器 到linux内核 再到文件系统甚至bootloader都整合在了一起 形成了一个sdk环境 随着linux的成熟 大量不同的处理器内核和应用软件相继出现 当你熟悉这些嵚入式linux的基本开发流程后 你不再局限于mips处理器和无线路由器 你可以尝试在其它处理器 或者非无线路由器的系统移植嵌入式linux 定制合适自己的应用软件 并建立一个完整的嵌入式产品 openwrt编译环境搭建 首先 要有支持编译openwrt的操作系统 实体机或者虚拟机 vmware或者qemu 里的操作系统都行 这里推荐使用linux系统 bsd和macosx系统也可以编 但不推荐 且未验证是否可编译成功 下文中我使用的是ubuntu操作系统 使用apt get来管理包 openwrt编译环境搭建 第二步 就是安装所需要的各种软件包 包括编译器 解压工具 特定的库等 这些工作可以简单的通过键入以下命令 通常需要root或者是sudo权限 以root权限安装下列软件包 可能并不完整 会有提示 提示缺少即装就可以了 32位 x86 请执行下列命令 apt getinstallbuild essentialasciidocbinutilsbzip2gawkgettext gitlibncurses5 devlibz devpatchunzipzlib1g dev64位 x86 64 请执行下列命令 多装了哪些库或软件包呢 请您仔细看一看哦 apt getinstallbuild essentialasciidocbinutilsbzip2gawkgettext gitlibncurses5 devlibz devpatchunzipzlib1g devia32 libs lib32gcc1libc6 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 getinstallsubversion openwrt编译 subversion安装完毕 通过svn命令可获取得到一份openwrt纯净源代码 您还得创建一个目录以便存放获取得到的openwrt源代码 要获取源代码你还得输入subversion命令来获取 svn里这种操作称之为 checkout openwrt编译 编译流程编译专属于您的设备的特定openwrt固件以一下五个步骤 通过subversion命令获得源代码 更新 或安装 packagefeeds 创建一个默认配置以检查编译环境是否搭建好了 假如需要的话 用menuconfig来配置即将编译生成的固件映像文件的配置项 最后开始编译固件 openwrt编译 下载源代码最后 下载一份完整的openwrt源代码 你可选择 下载稳定发行版 或下载开发版 俗称 trunk 版 使用发行版的源码openwrt公开发行的稳定版为openwrt10 03 backfire 此版本是最稳定的 但也许不包括最新更新的补丁或最新编写的出的新功能 下述代码即举例说明了通过svn从brandkfire获得backfire源代码 此版本意思是从trunk分支的补丁也在backfire版本中了 即包含修复补丁 openwrt编译 mkdiropenwrt cdopenwrt svncosvn svn openwrt org openwrt branches backfire您也可以通过下述命令 下载不含修复补丁的backfire的原版源码 svncosvn svn openwrt org openwrt tags backfire 10 03注解 上述svn命令将在当前目录创建一个openwrt backfire 子目录 此目录包含此命令获取到的源代码 openwrt编译 使用开发版源代码当前的开发版本分支 trunk 已包含最新的实验补丁 此分支或许还突破了openwrt原来所不支持的硬件设备的限制哦 惊喜的同时也有风险存在 mkdiropenwrt cdopenwrt svncosvn svn openwrt org openwrt trunk 回车后等待下载 svn回滚或svn指定版本需要的版本是28007 操作 svncosvn svn openwrt org openwrt trunk r28007回滚或到指定版本 svnup r28007指定luci版本cdtrunk feeds lucisvnup rr7612 openwrt编译 关于openwrtdreamboxopenwrt中文网创建于2010年2月14日建立了技术论坛 开发站点 下载中心 主要是为openwrt的中文化 以及固件的易用性 获取dreamboxtrunk开发版svn代码库 svncosvn openwrt编译 开始准备编译首先跟进并更新源代码因openwrt的源代码随时都会变动 故此命令将确保您所获取得到的源码的最新性 如果你用的是backfire版本的源码 cdopenwrt backfire 如果你用的是trunk版本的源码 cdopenwrt trunk svnup scripts feedsupdate a scripts feedsinstall a openwrt编译 下一步是检查编译环境 若可进行编译则生成默认配置 makedefconfig若defconfig回显提示缺少软件包或编译库等依赖 则按提示安装所缺软件包或库等即可 不难的 细心点就行 进入编译组件包菜单makemenuconfig openwrt编译 makemenuconfig会有一个编译管理器 在里面可以选择型号 op功能组件 需要用到方向键 回车键 空格键 方向键是移动光标 回车键是确认 空格键是选择 在选项框按下空格键 号是编译进固件 m是编译但是不编译进固件 1 选择cpu型号targetsystem atherosar71xx ar7240 ar913x ar934x2 选择路由型号targetprofile tp linktl wr7033 添加luciluci collections luci openwrt编译 4 添加luci的中文语言包luci translations luci i18n chinese5 添加ddnsluci applications luci app ddns 6 添加usb挂载basesystem block mount7 添加硬盘格式支持kernelmodules filesystems kmod fs ext48 添加utf8编码kernelmodules nativelanguagesupport kmod nls utf89 添加usb扩展支持kernelmodules usbsupport kmod usb storage extras 110 添加自动挂载工具utilities filesystem badblocks openwrt编译 开始编译makev 99 最后会得到一个4m的带中文luci的tl wr703n固件 网上固件下载网址 http downloads openwrt org 在编译的时候需要比较长的时间 因为要下载很多软件包 假如编译下载不成功 可以退出 自己去下载后放入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编译 内核配置makekernel menuconfig命令是进去配kernel这和普通的linuxkernel的makemenuconfig没有什么区别 在machineselection加一个选择board 选tl wr703nsupprot 其他需要什么就配置什么 与linux内核一样 配置完后重新编译 openwrt编译 修改默认ssid 添加wifi配置修改mac80211 sh文件 位于package mac80211 files lib wifioptiondisabled1改成0 默认开启wifi optiondisabled0下添加optionhtmodeht40 optionchannel1optioncountrycnoptiontxpower17optionssidopenwrt wr703optionhtmodeht40 使用40mhz频宽 但只支持1 7信道 ht40 支持5 13信道 ht20支持1 13信道 20mhz频宽optionchannel1使用信道1 1 13之间 若有限定频宽 信道参考如上 optioncountrycn设定wifi标准为中国optiontxpower17发射功率为17dbm 大约50mw 按实际板子的功率来设置 openwrt编译 修改root密码由于openwrt默认是没有密码的 所以ssh没法连接 只能连接telnet 我们只要做到让openwrt开启时就配置好密码就可以了 修改shadow文件 位于package base files files etc如需要密码为root root 1 ioswlaew jwht3bwuhtq7vklywxwpv0 15811 0 99999 7 将密码修改成root 编译的常见问题 一 普遍问题a 在menuconfig中找不到所需的组件 用脚本 scripts feeds安装对应的package 嫌麻烦直接 a 就是时间长点 b 编译完成后bin目录下找不到生成的固件 恭喜你 你犯了跟我一样2b的错误 你选择的组件过大 导致所需的固件大小操作targets源代码中的限制 解决方法 如果确定你的flash比较大 修改源代码 各个路由器不同网上找 否则减少组件 只选择最基本的组件 c 编译错误 查看错误信息 make的时候加参数v 99 为便于查找错误可以重导向一下2 1参考 make j2v 992 1 teeopenwrt log 编译的常见问题 二 openwrt中root用户鉴权问题 开始编译可能会出错 信息如下 pleasedonotcompileasroot 在 trunk include prereq build mk中修改如下 把root改为noroot 这样编译就可以用root用户了 不受限制 definerequire non root shellwhoami root shellwhoami noroot endef 编译的常见问题 三 修改固件大小修改分区大小 在trunk tools firmware utils src mktplinkfw c id tl wr703nv1 hw id hwid tl wr703n v1 hw rev 1 layout id 4mlzma 只改此 8mlzma除了mktplinkfw c那个文件 你还需要修改这个trunk target linux ar71xx image makefile找自己对应的路由型号的那行代码然后将 4mlzma 改成 8mlzma openwrt固件升级 在webluci界面中选择系统 备份 升级 添加升级的固件文件 执行升级 openwrt固件升级 因为版本不同 所以有些在webluci界面上更新固件会提示文件格式不对 或者内核启动不了 只能在uboot下采用tftp来烧写 pc上ip 192 168 1 100 bin固件放在tftpboot文件夹 路由器 192 168 1 1 在uboot下采用如下命令 setenvserverip192 168 1 100setenvipaddr192 168 1 1tftpboot0 x80000000openwrt ar71xx generic tl wr703 v1 squashfs factory binerase0 x9f020000 0 x3c00000 x7c0000 8m cp b0 x800000000 x9f0200000 x7c0000bootm0 x9f020000 如何在openwrt环境下做开发 在之前编译的openwrt开发环境下 在执行makemenuconfig后 会出现下图 下图蓝色光标一栏选中表示我们需要编译一个sdk开发环境 默认情况下 此项未勾选 然后在make编译后在bin文件夹下的packages中有sdk定制环境包 如何在openwrt环境下做开发 packages文件夹 里面包含了我们在配置文件里设定的所有编译好的软件包 默认情况下 会有默认选择的软件包 3 openwrt sdk tar bz2 这个也就是我们定制编译好的openwrtsdk环境 我们将用这个来进行openwrt软件包的开发 例如 我所编译好的sdk环境包为 bin ar71xx openwrt sdk ar71xx for linux i686 gcc 4 3 3 cs uclibc 0 9 30 1 tar bz2可以从名称上看出 targetsystem是ar71xx hostsystem是linux i686 使用的编译工具以及库是4 3 3 cs uclibc 0 9 30 1 需要注意的是 编译完成后 一定要将编译好的bin目录进行备份 如果里面东西对你很重要的话 因为在下次编译之前 执行makeclean会将bin目录下的所有文件给清除掉 如何在openwrt环境下做开发 更改原有packages在编译根目录下会有一个dl的目录 这个目录其实是 download 的简写 在编译前期 需要从网络下载的数据包都会放在这个目录下 这些软件包的一个特点就是 会自动安装在所编译的固件中 也就是我们makemenuconfig的时候 为固件配置的一些软件包 如果我们需要更改这些源码包 只需要将更改好的源码包打包成相同的名字放在这个目录下 然后开始编译即可 编译时 会将软件包解压到build dir目录下 当然 你也可以自己在dl里面创建自己的软件包 然后更改相关的配置文件 让openwrt可以识别这个文件包 由于我的项目更改的内容是底层的 需要跟固件一起安装 所以 我使用的方法就是直接更改dl目录下软件包 然后重新进行固件编译 感觉类似于linux的内核编译 如何在openwrt环境下做开发 新建自己的packages新建的package 而这个package又不需要随固件一起安装 换句话说 就是可以当做一个可选软件包的话 我们可以利用我们的sdk环境来单独编译 编译后会生成一个ipk的文件包 然后利用opkginstallxxx ipk来安装这个软件 下面具体说下 如何编译一个helloword的软件包 1 首先 编写helloworld程序 编写helloworld c helloworld c themostsimplisticcprogrameverwritten anepilepticmonkeyoncrackcouldwritethiscode include includeintmain void printf hell o world whywon tmycodecompile n n return0 如何在openwrt环境下做开发 编写makefile文件 buildhelloworldexecutablewhenuserexecutes make helloworld helloworld o cc ldflags helloworld o ohelloworldhelloworld o helloworld c cc cflags chelloworld c removeobjectfilesandexecutablewhenuserexecutes makeclean clean rm ohelloworld在这两个文件的目录下 执行make应该可以生成helloworld的可执行文件 执行helloworld后 能够打印出 hell o world whywon tmycodecompile 这一步 主要保证我们的源程序是可以正常编译的 下面我们将其移植到openwrt上 如何在openwrt环境下做开发 将openwrt sdk ar71xx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑龙江省哈尔滨市萧红中学2025-2026学年八年级上学期期中物理试题(解析版)
- 护理学专业课件下载(大学版)
- 养老护理员全国竞赛老年沟通话术与技巧课件
- 鹅口疮康复期饮食:滋阴忌燥方
- 过期妊娠产前护理与风险评估
- 家庭护理常见误区与规避
- 重症患者转运的安全管理与风险防控
- 品牌展览设计方案
- 《GB-T 7187.1-2021运输船舶燃油消耗量 第1部分:海洋船舶计算方法》专题研究报告
- 电商行业运营专员用户活跃度绩效评定表
- 人民群众是历史的创造者
- (高清版)DZT 0368-2021 岩矿石标本物性测量技术规程
- 2024年中国邮政集团湖北分公司招聘笔试参考题库含答案解析
- 《逻辑的力量》 统编版高中语文选择性必修上册
- matlab上机实验指导书
- 煤矿班组长培训课件
- GB/T 4957-2003非磁性基体金属上非导电覆盖层覆盖层厚度测量涡流法
- 行政事业单位无形资产管理办法模板
- GB 18564.1-2006道路运输液体危险货物罐式车辆第1部分:金属常压罐体技术要求
- 《烹饪美学》教学课件-项目四-烹饪造型艺术
- 防溺水防溺水课件
评论
0/150
提交评论