openwrt软件安装包ipk的编译方法

方法主要有两种:1) SDK编译  2)源码编译

 

1.SDK编译软件安装包IPK

   从上边的教程我们已经可以看到怎么去获得SDK包了,然后怎么使用这个包,看教程:

   http://my.oschina.net/hevakelcj/blog/410633

 

   这个教程已经详实地介绍了编译的步骤,步骤是没有问题的。但是!SDK编译比较坑,就算你完全正确,他就是给你报错,我就死在了下图这个错误上:

 

     

   意思是makefile 32行前边少了个Tab,但是无论是怎么改,他就是报错 = = 所有努力都是徒劳无意义的。

   同样的代码同样的makefile,在用源码编译的方法是完全可行的。

   所以,强烈采用源码编译而不是SDK编译。

2.源码编译软件安装包IPK

  前边的教程已经讲到怎么编译出ipk包了,其实就是那个步骤,下边讲讲怎么写自己package,下边以helloworld为例:

 

  先创建自己的包目录,以及外层makefile:

mkdir helloworld

cd helloworld

mkdir src

vi makefile

 然后在这个makefile里边填写如下内容,(内容可以参考官网的说明)

复制代码
include $(TOPDIR)/rules.mk

# Name and release number of this package

PKG_NAME:=helloworld

PKG_RELEASE:=1


PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk
    
define Package/helloworld

        SECTION:=utils

        CATEGORY:=Utilities
    
        TITLE:=helloworld -- prints a snarky message
    
endef


    
# Uncomment portion below for Kamikaze and delete DESCRIPTION variable above

    
define Package/helloworld/description
        It is Duval`s demo.
endef

define Build/Prepare
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef
 
#define Build/Compile
#    $(MAKE) -C $(PKG_BUILD_DIR) \   
#        $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"
#endef


define Package/helloworld/install
    $(INSTALL_DIR) $(1)/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/
endef
    
$(eval $(call BuildPackage,helloworld))
复制代码

然后 进入src,去编写helloworld.C

cd src
vi helloworld.c

helloworld.c 里边填写

复制代码
#include<stdio.h>
    
int main(void)
    
{

    printf("yyyy\n");

    return 0;

}
复制代码

为helloworld.c编写makefile

vi makefile

makefile 里边填写

复制代码
# build helloworld executable when user executes "make"  

    
helloworld: helloworld.o  


    $(CC) $(LDFLAGS) helloworld.o -o helloworld  

    
helloworld.o: helloworld.c  

    $(CC) $(CFLAGS) -c helloworld.c  

# remove object files and executable when user executes "make clean"  

clean:  

    rm *.o helloworld  

 
复制代码

然后把 这个helloworld的package包拷贝到源码的./package目录下边。

然后运行

make defconfig

make menuconfig

然后在 menuconfig的菜单中找到helloworld,具体是菜单那里,就看你外层makefile怎么写的。然后找到后在前边勾选M ,表示仅编译不固化到固件中。

然后运行编译

make -j1 V=s

最后在bin目录下可以找到自己要的ipk包。

posted @   流水江湖  阅读(3681)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示