添加自己的软件包

openwrt的package目录下存放着系统使用的一写软件包,现在来尝试自己编写一个简单的软件包,然后把它编译进系统中

1、在package目录下创建一个新的文件夹hello
2、在hello文件夹下创建Makefile
3、创建src文件夹,用来存放我们的源码
4、进入src文件夹,创建文件hello.c和Makefile

回到上一层,编写Makefile

# 
# Copyright (C) 2006-2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
#添加系统的一些文件,里面有定义好的变量
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
#软件包的名字
PKG_NAME:=hello
#版本
PKG_VERSION:=1.0
#makefile版本
PKG_RELEASE:=1
#编译之后存放的路径
PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
#定义包的属性
define Package/hello
 SECTION:=utils			#包的种类
  CATEGORY:=Utilities		#在menuconfig下的目录
  TITLE:= myy-hello		#标题
endef
define Package/bridge/description
 my package hello for openwrt		#描述
endef
#编译准备,创建目录,这个目录中包含的变量在引入的文件中被定义
#其实就是在build_dir目录下创建hello目录,并把src下的文件全部拷贝过去
define Build/Prepare
 mkdir -p $(PKG_BUILD_DIR)
 $(CP) ./src/* $(PKG_BUILD_DIR)/
endef
#安装,编译好的文件存放的地方
define Package/hello/install
 $(INSTALL_DIR) $(1)/bin
 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/bin/
endef
#使用BuildPackage宏来编译hello软件包
$(eval $(call BuildPackage,hello))

src下的文件 hello.c

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

Makefile

all : hello
.PHONY : all
hello : hello.o
 $(CC) -o $@ $<
 %.o : %.c
 $(CC) -c $<
 clean:
 rm hello hello.o

到这里就完成了,按照网上的提示接下来执行make menuconfig就可以看到自己的软件包hello,然后选择,make即可。但是,事情总不会这么一帆风顺,执行make menuconfig发现在Utilities目录下并没有刚才创建的软件包的信息,然后我就去看别的已经被选择上的软件包中的Makefile文件,看看我是否遗漏了哪里,找了很久,并没有什么发现,虽然我的Makefile很简单,但是该有的地方都有,按道理它是不会出现这样的问题,接下来的时间我又去查看各种配置文件,我也把配置文件中的hello软件包的开关配置添加进去了(y),然而还是没有。万般无奈之际发现了一个隐藏文件.config,在这个文件里并没有我配置的编译选项,也就是说和之前在别的配置文件中写的配置选项并没有生效,于是我打算单独编译这个软件包

make package/hello/compile -j1 V=s

果然出现了问题,按照提示打开了/logs/package/hello/dump.txt
在这里插入图片描述
报这些错我也不知道什么意思,我之前是按照别人的Makefile去改的,如是我从别人的Makefile里把这几行复制过来,奇迹般的编译成功了,接下来执行
make menuconfig

在这里插入图片描述
在这里插入图片描述hello终于出现了,然后选择,保存退出,执行make,发现hello确实被编译进了系统
在这里插入图片描述
在这里插入图片描述
烧写新的系统,测试
在这里插入图片描述
在这里插入图片描述
之前创建了PKG_BUILD_DIR目录,并把src目录下的文件都拷贝过去了,来看看这个文件究竟在哪里
在build_dir目录下的target中发现了hello文件夹,里面有src的全部文件,还有一些编译生成的文件
在这里插入图片描述
在这里插入图片描述
还有编译安装后的可执行文件被放在了bin目录下,在bin/package下发现了编译好的ipk软件包
在这里插入图片描述

发布了33 篇原创文章 · 获赞 2 · 访问量 1026

猜你喜欢

转载自blog.csdn.net/weixin_41791581/article/details/103085590