编译编写简易ipk程序

准备工作

配置编译OpenWrt

 ...
 make menuconfig
 make V=s
 ...

成功编译OpenWrt

  • 发现

成功编译后,发现此文件

 /bin/ramips/OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
  • 解压

然后解压这个文件

 tar xvf OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2

编写简易ipk程序

  • 程序编写

进入上面解压的sdk,会看见一个package,在下新建两个目录

 mkdir -p helloworld/src 

在目录src下新建 helloworld.c:

 #include<stdio.h>  
 #include <unistd.h>  
 int main(void)  
 {  
     printf("Hello world, why won't my code compile?\n\n");  
     return 0;  
 }  

然后在此目录下创建Makefile(注意Makefile的语法)

 helloworld: helloworld.o  
        $(CC) $(LDFLAGS) helloworld.o -o helloworld  
 helloworld.o: helloworld.c  
        $(CC) $(CFLAGS) -c helloworld.c  
 clean:  
        rm *.o helloworld  

然后返回上层目录,即helloworld目录,在此目录下创建一个Makefile

   ##############################################
   #OpenWrt的HelloWorld程序文件
   #
   #
   #大多数这里使用的变量的定义
   #将包括以下指令。我们只需要
   #指定包的基本描述,
   #在哪里建立我们的计划,在哪里可以找到
   #源文件,并在哪里安装
   #编译的程序在路由器上。
   #
   #要非常小心间距在这个文件中。
   #缩进应该是制表符,而不是空格,
   #没有结尾的空格。
   ##############################################
   include $(TOPDIR)/rules.mk
   #名字和版本
   PKG_NAME:=helloworld
   PKG_RELEASE:=1
   #这里指定的地方,我们要构建的程序的目录。
   #建立根目录是$(BUILD_DIR),默认情况下是build_mipsel
   #在OpenWrt的SDK目录下
   PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
   include $(INCLUDE_DIR)/package.mk
   #指定该程序包的信息。
   #这里定义的变量应该解释自己的作用。
   #如果你运行的是Kamikaze,删除描述下面变量并取消了Kamikaze定义,
   #指令进行以下的说明
   define Package/helloworld
        SECTION:=utils
        CATEGORY:=Utilities
        TITLE:=Helloworld -- prints a snarky message
   endef
   #取消下面的Kamikaze部分,并删除上面的描述
   define Package/helloworld/description
        If you can't figure out what this program does, you're probably
        brain-dead and need immediate medical attention.
   endef
   #指定哪些需要做,为构建软件包做好准备。
   #在我们的例子中,我们需要将源文件复制到构建目录。
   #这不是默认设置。在默认情况下使用PKG_SOURCE_URL
   #这不是定义为从网络下载的源代码PKG_SOURCE。
   define Build/Prepare
         mkdir -p $(PKG_BUILD_DIR)
         $(CP) ./src/* $(PKG_BUILD_DIR)/
   endef
   #我们并不需要定义构建/配置或编译/编译指令
   #默认值是合适的编译一个简单的程序,像这样的
   #指定在何处以及如何安装该程序。因为我们只有一个文件,
   #将HelloWorld可执行文件,通过它复制到/bin目录安装到
   #路由器。$(1)变量表示在路由器运行的目录
   #OpenWrt.$(INSTALL_DIR)变量包含一个命令来准备安装
   #目录,如果它不存在。同样$(INSTALL_BIN)包含
   #命令将二进制文件从当前位置复制(在我们的案例中构建
   #的目录)安装目录
   define Package/helloworld/install
       $(INSTALL_DIR) $(1)/bin
       $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/
   endef
   #这一行执行必要的命令来编译我们的程序。
   #以上定义指令指定所有需要的信息,但是这
   #行调用BuildPackage从而实际上使用该信息来
   #创建一个软件包。
   $(eval $(call BuildPackage,helloworld))  
  • 编译程序

然后回到OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.6-linaro_uClibc-0.9.33.2目录,执行

 make
  • 编译过程和结果

编译过程会在build_dir目录下完成

 make[1] world
 make[2] package/compile
 make[3] -C package/helloworld compile
 make[2] package/index

说明编译成功 编译好的文件放置在bin/[yourtarget]/package目录下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值