收藏官网首页
查看: 17644|回复: 0

[经验分享] [OpenWrt]编译记录3

57

主题

156

帖子

716

积分

高级会员

Rank: 4

积分
716
跳转到指定楼层
楼主
发表于 2017-11-24 19:04:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
创建package
OpenWRT有自己的应用程序体系,也就是package,我们可以查看下package里的应用程序
andygao@andygao-VirtualBox:~/openwrt$ ls package/
base-files boot devel feeds firmware kernel libs Makefile network ralink-wifi-mt76x8 system utils
那么我们创建自己的应用程序的方法就是在package创建自己的文件夹
创建gGateway目录
切换到package目录并创建gGateway文件夹。
$cd package/
$mkdir gGateway
切换到gGateway文件夹下,创建文件夹files和src,并创建Makefile文件
编辑Makefile
我们先来看看我创建的makefile文件
andygao@andygao-VirtualBox:~/openwrt/package/gGateway$ cat Makefile include $(TOPDIR)/rules.mkPKG_NAME:=gGatewayPKG_VERSION:=2.5.0PKG_RELEASE:=1PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)include $(INCLUDE_DIR)/package.mkdefine Package/gGateway SECTION:=gGateway CATEGORY:=Extra packages TITLE:=gGateway DEPENDS:=+libc +libpthreadendefdefine Package/gGateway/description        gGateway for OpenWRTendefdefine Build/Prepare        mkdir -p $(PKG_BUILD_DIR)        $(CP) ./src/* $(PKG_BUILD_DIR)/endefdefine Build/Compile        $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS)endefdefine Package/gGateway/install        $(INSTALL_DIR) $(1)/usr/bin/ $(1)/usr/lib/        $(INSTALL_BIN) $(PKG_BUILD_DIR)/objs/gizwits $(1)/usr/bin/        $(INSTALL_BIN) $(PKG_BUILD_DIR)/objs/libgGateway.so $(1)/usr/lib/endef$(eval $(call BuildPackage,gGateway))
我们再一部分一部分的进行说明
include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/package.mk
这2个文件是makefile的一些子文件,里面包含了很多makefile需要的变量。由这些makefile子文件确立软件包加入OpenWrt的方式和方法。$(TOPDIR)/rules.mk一般在Makefile的开头,$(INCLUDE_DIR)/package.mk一般在软件包的基本信息完成后再引入。还有另外一个$(INCLUDE_DIR)/kernel.mk文件,对于软件包为内核时不可缺少。
PKG_NAME:=gGatewayPKG_VERSION:=2.5.0PKG_RELEASE:=1PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)
这里定义了package的一些信息,包括名称,版本号,编译目录等,详细介绍参考后面的参考链接。
define Package/gGateway SECTION:=gGateway CATEGORY:=Extra packages TITLE:=gGateway DEPENDS:=+libc +libpthreadendefdefine Package/gGateway/description        gGateway for OpenWRTendef
这两部分定义了package的一些描述信息,描述的是该package在make menuconfig时的位置及显示信息。
需要重点强调一下的是
DEPENDS,后面的包为多个时必须以空格进行分离,在前面加"+"表示该package被选中时,自动选择依赖package,"+"与依赖package之间不能有空格。
SECTION,包类型,没有使用,可不定义。
define Build/Prepare        mkdir -p $(PKG_BUILD_DIR)        $(CP) ./src/* $(PKG_BUILD_DIR)/endef
编译准备的一些操作,自己开发的package需要修改这部分(一般也无需修改),OpenWRT下一般把自己设计的程序放到src目录下。
define Build/Compile        $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS)endef
编译时的一些操作,一般使用默认即可。OpenWRT目录的CFLAGS等变量可以在这里引用。
define Package/gGateway/install        $(INSTALL_DIR) $(1)/usr/bin/ $(1)/usr/lib/        $(INSTALL_BIN) $(PKG_BUILD_DIR)/objs/gizwits $(1)/usr/bin/        $(INSTALL_BIN) $(PKG_BUILD_DIR)/objs/libgGateway.so $(1)/usr/lib/endef
安装包ipk安装时执行的操作,这部分需要根据自己的程序进行修改。
$(eval $(call BuildPackage,gGateway))
完成package定义后调用eval函数实现各种定义。
其他说明
1、makefile文件每行不能有空格。2、执行语句必须以tab开头,非执行语句不可以用tab开头。编译package
编译准备需要删除tmp目录,然后使用make menuconfig。
$cd ~/openwrt$rm -rf tmp$make menuconfig
该步骤不是必须的,package的编译会自动检索Makefile的修改
$cd ~/openwrt$make
在根目录下对源码进行编译,如果关心编译的具体过程,可使用make V=s。
但是整个编译的时间较长,为了提高调试效率也可以针对某个package进行编译。
$make package/gGateway/compile V=s
清除编译文件
$make package/gGateway/clean V=s
说明
1package是否必须选中(make menuconfig 时选中'M''*')才可以单独编译package,并没有进行验证。2、tab键并不会自动补齐package名称及命令,需要手写。参考资料https://wiki.openwrt.org/doc/devel/packageshttp://blog.csdn.net/teddy99999/article/details/17537545http://blog.csdn.net/lichao_ustc/article/details/42805631
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表