【智能路由器】系列文章连接
http://blog.csdn.net/u012819339/article/category/5803489

openwrt根目录

先看看openwrt初次编译好后的目录结构:

如上图所示:
arvik_note:本人更改软件包记录笔记,不必理会。
include:存放 *.mk 文件
build_dir:建立工具链时的临时目录,解压、编译、补丁等文件存放点
staging_dir:工具链的安装位置
target:平台相关代码及配置文件
dl:下载目录,编译期间从网上下载的数据包都会放在此目录,数据包会解压到build_dir目录下
package:包含了我们在配置文件里设定懂得所有编译好的软件包
feeds:执行./srcipts/feeds install后的缓存文件存放点
bin:对应平台编译好的二进制文件以及相关ipk文件


创建软件包

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓以下内容摘自官方WIKI ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

构建方法

openwrt靠Makefile文件来添加软件,Makefile文件最关键,一般来说它提供了下载、编译、安装这个软件包的步骤。
这里Makefile的格式跟一般的Makefile不一样,因为它的功能跟普通Makefile就是不一样的。它是一种编写方便的模板。
以package/bridge/Makefile文件为例:

include $(TOPDIR)/rules.mkPKG_NAME:=bridge
PKG_VERSION:=1.0.6
PKG_RELEASE:=1PKG_BUILD_DIR:=$(BUILD_DIR)/bridge-utils-$(PKG_VERSION)
PKG_SOURCE:=bridge-utils-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/bridge
PKG_MD5SUM:=9b7dc52656f5cbec846a7ba3299f73bd
PKG_CAT:=zcatinclude $(INCLUDE_DIR)/package.mkdefine Package/bridgeSECTION:=baseCATEGORY:=NetworkTITLE:=Ethernet bridging configuration utility#DESCRIPTION:=This variable is obsolete. use the Package/name/description define instead!URL:=http://bridge.sourceforge.net/
endefdefine Package/bridge/descriptionEthernet bridging configuration utilityManage ethernet bridging; a way to connect networks together toform a larger network.
endefdefine Build/Configure$(call Build/Configure/Default,--with-linux-headers=$(LINUX_DIR))
endefdefine Package/bridge/install$(INSTALL_DIR) $(1)/usr/sbin$(INSTALL_BIN) $(PKG_BUILD_DIR)/brctl/brctl $(1)/usr/sbin/
endef$(eval $(call BuildPackage,bridge))

软件包变量

建立一个软件包不需要太多工作;大部分工作都隐藏在其它的 makefiles 中,编写工作被抽象成对几个变量的赋值。

PKG_NAME -软件包的名字, 在 menuconfig 和 ipkg 显示
PKG_VERSION -软件包的版本,主干分支的版本正是我们要下载的
PKG_RELEASE -这个 makefile 的版本
PKG_BUILD_DIR -编译软件包的目录
PKG_SOURCE -要下载的软件包的名字,一般是由 PKG_NAME 和 PKG_VERSION 组成
PKG_SOURCE_URL -下载这个软件包的链接
PKG_MD5SUM -软件包的 MD5 值
PKG_CAT -解压软件包的方法 (zcat, bzcat, unzip)
PKG_BUILD_DEPENDS -需要预先构建的软件包,但只是在构建本软件包时,而不是运行的时候。它的语法和下面的DEPENDS一样。
PKG_*变量定义了从何处下载这个软件包;@SF是表示从sourceforge网站下载的一个特殊关键字。md5sum用来检查从网上下载的软件包是否完好无损。PKG_BUILD_DIR定义了软件包源代码的解压路径。

注意到上面示例文件底部的最后一行吗?这是最为关键的BuildPackage宏。它是在$(INCLUDE_DIR)/package.mk文件里定义的。BuildPackage宏只要求一个参数,即要编译的软件包名,在本例中是”bridge”。所有其他信息都通过宏来获得,这提供了一种内在的简洁性。比如BuildPackage需要软件包的一大串描述信息,我们并不要向它传递冗长的参数,因为我们已经约定描述信息定义在DESCRIPTION宏,BuildPackage从里面读取就可以了。

BuildPackage相关的宏

Package/
描述软件包在menuconfig和ipkg中的信息,可以定义如下变量:
SECTION - 软件包类型 (尚未使用)
CATEGORY - menuconfig中软件包所属的一级目录,如Network
SUBMENU - menuconfig中软件包所属的二级目录,如dial-in/up
TITLE - 软件包标题
DESCRIPTION - 软件包的详细说明
URL - 软件的原始位置,一般是软件作者的主页
MAINTAINER - (optional) 软件包维护人员
DEPENDS - (optional) 依赖项,运行本软件依赖的其他包

Package/conffiles (可选)

软件包需要复制的配置文件列表,一个文件占一行

Build/Prepare (可选)

一组解包源代码和打补丁的命令,一般不需要。

Build/Configure (可选)

如果源代码编译前需要configure且指定一些参数,就把这些参数放在这儿。否则可以不定义。

Build/Compile (可选)

编译源代码命令。

Package/install

软件安装命令,主要是把相关文件拷贝到指定目录,如配置文件。

Package/preinst

软件安装之前被执行的脚本,别忘了在第一句加上#!/bin/sh。如果脚本执行完毕要取消安装过程,直接让它返回false即可。

Package/postinst

软件安装之后被执行的脚本,别忘了在第一句加上#!/bin/sh。

Package/prerm

软件删除之前被执行的脚本,别忘了在第一句加上#!/bin/sh。如果脚本执行完毕要取消删除过程,直接让它返回false即可。

Package/postrm

软件删除之后被执行的脚本,别忘了在第一句加上#!/bin/sh。

为什么一些定义是”Package/”前缀,另一些定义却是”Build”前缀?这是因为我们支持一个特性:从单个源代码构建多个软件包。OpenWrt工作在一个Makefile对应一个源代码的假设之上,但是你可以把编译生成的程序分割成任意多个软件包。因为编译只要一次,所以使用全局的”Build”定义是最合适的。然后你可以增加很多“Package/”定义,为各软件包分别指定安装方法。建议你去看看dropbear包,这是一个很好的示范。

提示:

对于所有在pre/post, install/removal脚本中使用的变量,都应该使用"$$"代替"$"。这是告诉make暂时不要解析这个变量,而是把它当成普通字符串以及用"$"代替"$$"。

在编辑好Makefile文件,并放到指定目录后,这个新的软件包将在下次执行make menuconfig时出现,你可以选择这个软件包,保存退出,用make编译。现在就把一个软件成功移植到OpenWrt中了!

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑以上内容摘自官方WIKI ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

创建软件包arvik_hello

按照如下命令步骤:
先建一个软件集合的目录arvik_app

cd ./packet
mkdir arvik_app

在arvik_app目录下建立arvik_hello目录

cd ./arvik_app
mkdir arvik_hello

接着在arvik_hello中建立src目录和Makefile文件

cd ./arvik_hello
mkdir src
touch Makefile

该处Makefile文件内容如下,可参照上面软件包变量读懂每句含义,在此不赘述。需要注意的是代码里每行行末是没有空格的,否则可能会出错。 好了,openwrt就靠这个Makefile来添加我们的arvik_hello软件包了。

#########################################
#author:arvik
#email:1216601195@qq.com
#csdn:http://blog.csdn.net/u012819339
#########################################include $(TOPDIR)/rules.mkARVIK_APP_DIR:=arvik_appPKG_NAME:=arvik_helloPKG_VERSION:=1.0.0PKG_RELEASE:=1PKG_BUILD_DIR:=$(BUILD_DIR)/$(ARVIK_APP_DIR)/$(PKG_NAME)include $(INCLUDE_DIR)/package.mkdefine Package/$(PKG_NAME)SECTION:=UtilitiesCATEGORY:=Arvik_ApplicationsTITLE:=a Test Program offer by arvikMAINTAINER:=arvik
endef define Package/$(PKG_NAME)/descriptionThis is a test program that provides a MAkefile template !
endef define Build/Preparemkdir -p $(PKG_BUILD_DIR)$(CP) ./src/* $(PKG_BUILD_DIR)/
endefdefine Build/Configure
endefdefine Package/$(PKG_NAME)/install$(INSTALL_DIR) $(1)/usr/bin$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/bin/
endef$(eval $(call BuildPackage,$(PKG_NAME)))

下面就进入src目录来建立我们软件源文件和Makefile文件了。

cd ./src
touch hello.c
touch Makefile

hello.c内容如下:

#include <stdio.h>int main()
{printf("arvik hello world!\n");return 0;
}

此处Makefile文件内容如下:

#########################################
#author:arvik
#email:1216601195@qq.com
#csdn:http://blog.csdn.net/u012819339
#########################################EXEC:=arvik_hello
SRC:=hello.call: $(EXEC)
$(EXEC): $(SRC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC) $(LDLIBS).PHONY:clean
clean:-rm -f $(EXEC) *.elf *.gdb *.o

检验软件包

make menuconfig

退回openwrt根目录,执行make menuconfig,找到Arvik_Applications选项,进入

再选择arvik_hello

重新编译一次即可(或者单独只编译一次arvik_hello即可,命令 make package/arvik_app/arvik_hello/compile V=99)。

运行arvik_hello

root@OpenWrt:/# arvik_hello
arvik hello world!

成功!


好啦,本文到此结束,作者arvik,【智能路由器】系列文章见
http://blog.csdn.net/u012819339/article/category/5803489
【智能路由器】博客专栏:http://blog.csdn.net/column/details/znrouter.html

【智能路由器】openwrt创建用户软件包相关推荐

  1. 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)

    NAS是我觉得家里必不可少的一台设备,NAS 全称 Network Attached Storage,即网络附加存储服务器,它通过自身的操作系统和 SMB/NFS/CIFS/FTP 等多种通信协议来给 ...

  2. 一文万字带你入门智能路由器OpenWrt系统,并在虚拟中安装配置OpenWrt

    一.什么是智能路由器 接入网络的家庭用户终端越来越多,路由器控制越来越复杂,因此需要一个智能网关来管理家庭的设备,智能路由器就是这个网关. 另外,这个智能网关直接连在互联网上,需要隔离家庭网和互联网的 ...

  3. 智能路由器OpenWrt 开发环境 及 编译分析(一)

    OpenWrt 开发环境及编译分析 OpenWrt的版本:Chaos Calmer 15.05 软件源:软件源就是一个应用程序安装库,很多很多的应用软件都在这个库里面.只要设定好软件源,就能很方便的安 ...

  4. 智能路由器-OpenWRT 系列一 (OpenWRT 刷机)

    现在没有了网络,估计大家都不知道该怎么消遣娱乐了. 电影.音乐.聊天.视频 .网络资讯,缺了网络,什么都搞不起.不过随着上网的时间越来越久,就会发现家庭网络不怎么好用,或者说是家里的路由器不怎么好用. ...

  5. 智能路由器-OpenWRT 系列四 (挂载移动设备)

    每次ssh登陆OpenWRT安装新软件时,都必须更新opkg opkg update 安装驱动 为了可以识别U盘/移动硬盘,必须安装相关的驱动. 一类是usb相关的驱动 opkg install km ...

  6. 智能路由器-OpenWRT 系列三 (OpenWRT安装LuCI网络配置)

    OpenWRT 安装 LUCI 每次ssh登陆OpenWRT安装新软件时,都必须更新opkg opkg update 安装LUCI opkg install luci 安装luci中文语言包, 不同O ...

  7. 智能路由器开发之OpenWrt简介

    智能路由器开发之OpenWrt简介 1. 引言 1.1 智能路由器的重要性和应用场景 智能路由器作为网络通信的核心设备,具有重要的地位和广泛的应用场景.传统的路由器主要提供基本的网络连接功能,但随着智 ...

  8. 《智能路由器开发指南》——1.1 OpenWrt简介

    本节书摘来异步社区<智能路由器开发指南>一书中的第1章,第1.1节,作者:张永智 ,李章明,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.1 OpenWrt简 ...

  9. 《智能路由器开发指南》——第1章 智能路由器概述 1.1 OpenWrt简介

    本节书摘来自异步社区<智能路由器开发指南>一书中的第1章,第1.1节,作者 张永智,李章明,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第1章 智能路由器概述 ...

最新文章

  1. 炎热夏天到底如何让自己更凉快? - 生活至上,美容至尚!
  2. socket sock inet_sock 等关系
  3. TeamCity : 自动触发 Build
  4. 利用rsync如何同步单个文件
  5. python ui自动化测试框架_Python自动化测试框架
  6. Shortest Prefixes
  7. c语言yuv图片cb,YUV格式图像基础
  8. 前端实现在线预览word(docx),pdf,excel类型的文件
  9. MIPI.DSI.LCD點屏筆記_AT070TN92(800x480)_THC63LVDF84B_深圳富元智FX6
  10. 使用java、html5以及wPaint实现在线编辑图片并保存到FTP中的功能,在线图片为iis服务
  11. IDE和SATA双硬盘安装全攻略
  12. 三菱mode bus tcp通讯_plc以太网通讯模块介绍
  13. 猿创征文|云原生|kubernetes学习之多账户管理--权限精细化分配放啊(两种方式-sa和用户)
  14. 使用MobileViT替换YOLOv5主干网络
  15. C语言实现易语言变量框,【VC】发一个自己用c语言写的仿易语言的文本_取文本左边函数把...
  16. 添加飞船图像:创建ship类与在屏幕上绘制飞船
  17. 价值链-名词解释01
  18. python程序实验教程_20192428 实验一《Python程序设计》实验报告
  19. 计算机国际会议开幕词,国际会议英文开幕词
  20. 12. 橡皮擦技术博客写作课,第一版收尾篇,写作也要懂点心理学

热门文章

  1. (转)王国斌:牛市还是熊市应该在意吗?
  2. tps,rps,qps,hps的区别
  3. m_map包 绘制世界地图并投点(matlab)
  4. SE-Net:Squeeze-and-Excitation blocks
  5. 结合MBTI人格理论探讨爱因斯坦的两次婚姻
  6. 严蔚敏版数据结构(C语言版)算法实现代码
  7. MySQL 安全方案设计
  8. 微信小程序首次进入引导提示自定义组件
  9. 基于物联网的环境监控系统设计与实现
  10. Linux查看pcie槽位