智能网关开发与应用 课件 第6章 OpenWrt软件开发_第1页
智能网关开发与应用 课件 第6章 OpenWrt软件开发_第2页
智能网关开发与应用 课件 第6章 OpenWrt软件开发_第3页
智能网关开发与应用 课件 第6章 OpenWrt软件开发_第4页
智能网关开发与应用 课件 第6章 OpenWrt软件开发_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OpenWrt智能网关开发与应用第6章OpenWrt软件开发本章内容导航01.学习目标02.编译构建系统与软件包结构03.HelloWorld开发实践(Makefile,LogAPI,IPK)04.OpenWrt软件启动机制05.软件包补丁制作(Quilt工具)本章学习目标理论知识目标掌握OpenWrt软件包的基本结构组成掌握OpenWrt软件包的制作流程掌握OpenWrt软件自启动的方法掌握OpenWrt软件打补丁的方法核心技能目标使用构建系统编译生成IPK安装包编写init脚本控制软件的自启动和关闭使用quilt工具进行版本管理和补丁制作综合素养目标提高问题解决能力,独立解决开发难题提高动手实践能力,理论应用于实际项目培养创新意识和持续学习能力6.1编译构建系统OpenWrt软件包基本结构OpenWrt软件包典型结构Makefile(必需)软件包核心,定义下载、编译、安装和打包规则。files/(可选)存放软件运行所需的配置文件、初始化脚本等。patches/(可选)存放针对上游源码的补丁文件,用于bug修复或功能定制。src/(可选)OpenWrt内置模块源代码目录,用于非下载式源码构建。核心文件:MakefileOpenWrt软件包的灵魂:从编译到打包的全流程控制中心01.下载Download从指定地址自动获取源代码,确保版本一致性。02.编译Compile调用交叉编译工具链,将源码转换为目标平台可执行文件。03.安装Install将编译产物与配置脚本复制到指定的安装目录结构中。04.打包Package将目录内容封装为标准的IPK安装包,便于分发与部署。核心特点:面向对象的配置范式OpenWrt的Makefile摒弃了传统的复杂规则,通过定义变量和函数来描述软件包,极大地简化了跨平台移植的复杂性,实现了一次编写,多平台编译。6.2HelloWorld开发实践从源码到IPK包的完整流程HelloWorld项目目录结构helloworld/(模块根目录)Makefile顶层构建文件,描述软件包信息和编译规则src/(源代码目录)存放C语言源码文件helloworld.cfiles/(文件目录)存放启动脚本helloworld.init等资源文件顶层Makefile设计:基础定义核心代码结构(Makefile)#引入通用规则include$(TOPDIR)/rules.mk#定义软件包基础信息PKG_NAME:=helloworldPKG_VERSION:=1.0PKG_RELEASE:=1include$(INCLUDE_DIR)/package.mkPKG_NAME(软件包名称)定义软件包的唯一标识,将体现在IPK包名和menuconfig菜单中。PKG_VERSION(软件版本号)指定上游软件的原始版本号,用于区分软件的不同发布版本。PKG_RELEASE(构建版本号)Makefile脚本本身的修订版本,用于区分对同一软件包的不同构建修改。include(引入规则)引入构建系统的通用规则文件(rules.mk)和包定义文件(package.mk)。顶层Makefile设计:软件包定义Makefile核心代码片段#1.定义软件包元数据definePackage/helloworldSECTION:=utilsCATEGORY:=UtilitiesTITLE:=AsimpleHelloWorldprogramendef

#2.定义安装规则(核心)definePackage/helloworld/install$(INSTALL_DIR)$(1)/usr/bin$(INSTALL_BIN)$(PKG_BUILD_DIR)/helloworld$(1)/usr/bin/$(INSTALL_DIR)$(1)/etc/init.d$(INSTALL_BIN)./files/init$(1)/etc/init.d/helloworldendef

#3.生成软件包$(eval$(callBuildPackage,helloworld))Package/helloworld元数据定义定义软件包在menuconfig中的分类(SECTION)、标题(TITLE)等基本信息,是识别软件包的基础。Package/helloworld/install核心安装逻辑指定编译产物的部署路径:将可执行文件复制到/usr/bin,启动脚本复制到/etc/init.d。这是构建IPK包的关键步骤,决定了文件在目标系统中的位置。BuildPackage构建函数调用OpenWrt构建系统的标准函数,基于上述定义生成最终的IPK软件包。系统调试利器:LogAPI接口logread读取日志命令行工具,用于读取系统日志缓冲区的实时内容。logread|grephelloworldlogger写入日志命令行工具,用于向系统日志快速写入自定义信息。logger-tMYTAG"Logmessage"C语言API编程接口代码级日志写入,支持指定日志级别,功能最强大。openlog(...)/syslog(...)/closelog();编译生成IPK安装包01.配置选择进入menuconfig,在Utilities分类下找到helloworld。

[*]编译进固件并生成IPK[M]仅生成IPK包(推荐)02.执行编译在源码根目录执行命令:

makepackage/helloworld/compileV=s

参数说明:V=s显示详细过程,便于调试03.查找安装包编译成功后,IPK包生成路径:

bin/targets/<target>/<subtarget>/packages/

示例文件名:helloworld_1.0-1_mipsel_24kc.ipk在OpenWrt上安装与运行1.安装软件包opkginstallhelloworld_1.0-1_...将生成的IPK包传输至设备后,使用opkg工具进行安装。2.服务管理/etc/init.d/helloworldenable#开机自启start#立即启动若包含自启动脚本,可配置服务开机自启并立即运行。3.直接运行helloworld>Hello,World!直接在终端执行程序,验证输出结果。日志信息会写入系统日志。6.3OpenWrt软件启动机制从init到mon的启动流程解析OpenWrt系统启动流程01.内核启动加载并启动Linux内核,完成硬件初始化。02.执行Init进程内核启动第一个用户进程`/sbin/init`。03.读取配置文件Init进程读取`/etc/inittab`配置文件。04.执行初始化脚本根据配置执行系统初始化脚本`/etc/init.d/rcS`。05.遍历启动目录rcS脚本遍历`/etc/rc.d/`目录下S开头的软链接。06.启动系统服务按数字顺序执行链接指向的脚本,启动所有服务。rc.d目录软链接示例Init脚本结构分析helloworld.init#!/bin/sh/etc/mon#启动与停止优先级配置START=99STOP=15start(){echo"Starting..."/usr/bin/helloworld&}stop(){killallhelloworld}执行入口解析第一行指定由mon脚本解析执行,而非直接由Shell执行,这是OpenWrt系统的标准规范。启动与停止优先级START定义启动顺序(数值越小越先启动),STOP定义停止顺序,确保服务依赖关系正确。核心执行逻辑必须实现start()和stop()函数,封装服务的具体启停命令,是脚本的业务逻辑核心。mon核心函数库start()启动服务,由开发者在脚本中具体实现。stop()停止服务,由开发者在脚本中具体实现。restart()重启服务,默认先调用stop()再调用start()。enable()启用服务,在/etc/rc.d/下创建启动软链接。disable()禁用服务,删除/etc/rc.d/下的启动软链接。enabled()检查服务是否已启用(检查软链接是否存在)。status()检查服务的当前运行状态。标准化管理提供统一接口,支持通过/etc/init.d/scriptstart/stop等命令管理所有服务,简化开发。6.4软件包补丁制作使用Quilt工具管理源码版本为什么需要为软件包打补丁?修复Bug上游源码可能存在一些漏洞或错误,通过打补丁可以快速修复这些问题,保证软件的稳定性和安全性。平台优化针对嵌入式平台(如OpenWrt)的资源限制特性进行优化,例如减小可执行文件体积、降低内存占用等。功能定制在不改变上游源码主干的情况下,灵活增加自定义功能或修改默认行为,满足特定业务需求。版本管理补丁文件可以清晰地记录对源码的所有修改,形成可追溯的变更历史,便于团队协作与长期维护。补丁管理工具:Quilt简介Quilt是一个强大的命令行补丁管理工具,广泛用于Linux内核和各种开源项目的开发中,尤其在OpenWrt构建系统中表现出色。核心思想:补丁栈(PatchStack)将对源码的修改组织成独立单元,像栈一样管理。支持Push(应用)、Pop(移除)、Refresh(更新)等操作,保持修改的独立性。核心优势与特性清晰管理多个相互独立的修改集便于在不同版本源码上复用补丁灵活应对上游源码变更,随时更新补丁应用场景:OpenWrt构建系统原生支持Quilt,是管理软件包patches目录的最佳实践。Quilt基本操作流程1.准备工作:进入源码目录cdpackage/helloworld/src/quiltsetup2.新建补丁:创建补丁文件quiltnew001-add-log-message.patch3.添加文件:追踪修改目标quiltaddhelloworld.c4.修改代码:编辑源文件使用编辑器修改helloworld.c文件内容5.更新补丁:保存修改内容quiltrefresh6.补丁管理:切换与查看quiltpush/pop/series在OpenWrt中集成Quilt补丁补丁文件位置规范helloworld/├──Makefile├──src/└──patches/└──001-add-log-message.patch将生成的.patch文件复制到软件包根目录下的patches/文件夹中。构建系统自动流程触发编译执行makepackage/helloworld/compile自动检测与应用系统自动检测patches/目录,按字母顺序打补丁编译构建补丁应用完成后,继续编译流程最佳实践:建议使用数字前缀命名补丁(如001-xxx.patch)以确保应用顺序。常见问题与解决方案编译失败,如何查看详细错误信息?解决:在编译命令后加上V=s参数,例如makepackage/helloworld/compileV=s,这会输出完整的编译日志,帮助定位问题。IPK包安装成功,但执行提示“notfound”?解决:检查Makefile中的install部分,确保可执行文件被正确安装到了/usr/bin或/bin等系统PATH目录下。服务无法启动,提示“scriptdoesnotexist”?解决:检查files/目录下的启动脚本是否存在,以及Makefile中是否正确将其安装到了/etc/init.d/目录。补丁应用失败(patchdoesnotapply)?解决:通常是源码版本不匹配。需要使用quilt工具重新生成或更新补丁,确保其与当前源码兼容。本章总结:OpenW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论