OpenWrt 自学笔记(3)------openwrt包制作


OpenWRT下使用的软件包管理技术叫做OPKG,它是一个轻量级的软件包技术,和apt-get差不多可以下载和安装程序。

语法格式:opkg [参数...] 子命令 [子参数...],参数有:

update 下载服务器上可用的软件包列表
upgrade <包名> 升级软件包
install <包名> 安装软件包
configure <包名> 配置某一个软件包
remove <包名> 卸载软件包
info [pkg|regexp] 显示出指定软件包的信息

这是几个常用的还有别的不在一一讲解

接下来介绍包的编译安装


1. 首选配置编译出SDK包如图


SDK包生成在改目录下linux64@linux:~/openwrt/openwrt/bin/ar71xx$


(1)是对应路由器的固件

(2)是生成的SDK包

 

2.解压SDK包

$tar xvf  OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
$cd  OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64
$ls 如图

上图就是我们SDK 软件包内的内容
3.创建自己的helloworld包
$cd package(SDK包下的package)
$ mkdir helloworld
$ cd helloworld

helloworld$ mkdir  src
helloworld$ touch Makefile

helloworld$  cd src
src$ touch helloword.c Makefile

在helloworld 中输入如下代码
    
    
  1 #include<stdio.h>
  2 
  3 int main(int argc, const char *argv[])
  4 {
  5 
  6 
  7     printf("hello world\n");
  8     return 0;
  9 }

在helloworld.c当前文件夹的Makfile输入

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

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

clean :
    rm *.o helloworld

整个过程下来,package目录结构如下:

package
|-- helloworld
|   |-- Makefile
|   `-- src
|       |-- helloworld.c
|       `-- Makefile
`-- Makefile

4.自建包的编译

我们要编写的是 package/helloworld/Makefile 这个文件。

在这个文件中,我们要描述 helloworld 包的信息,比如:如何配置、如何编译、如何打包、安装等等信息。
这个文件与一般的 Makefile 格式还不一样,详见OpenWrt上的说明文档:OpenWrt官网Packages说明

这里我就依照例子编写 helloworld/Makefile:

  1 include $(TOPDIR)/rules.mk
  2 
  3 PKG_NAME:=helloworld
  4 PKG_NAME:=1
  5 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
  6 
  7 include $(INCLUDE_DIR)/package.mk
  8 
  9 define Package/helloworld
 10     SECTICON:=utils
 11     CAYEGORY:=Utilities
 12     TITLE:=helloworld -- prints a snarky message
 13 endef
 14 
 15 define Package/helloworld/description
 16 It's my frist package demo
 17 endef
 18 
 19 define Build/Prepare
 20     echo "Here is Package/Prepare"
 21     mkdir -p $(PAK_BUILD_DIR)/
 22 endef
 23                                                                                                     
 24 define Package/helloworld/install
 25     echo "Here is Package/install"
 26     $(INSTALL_DIR) $(1)/bin
 27     $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld &(1)/bin/
 28     endef
 29 
 30 $(eval $(a=call BuildPackage, helloworld))

然后回到 OpenWrt-SDK 目录下,执行:make V=s,结果有以下错误提示:

$ make V=s
ERROR: please fix package/helloworld/Makefile - see logs/package/helloworld/dump.txt for details

说是我写的这个Makefile有错,请查看 dump.txt 文件。无奈只好去看看到底错在哪里啰。

打开 OpenWrt-SDK/logs/package/helloworld/dump.txt 文件:

Package:  helloworld
Version: 1
Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread 
Conflicts: 
Menu-Depends: 
Provides: 
Section: opt
Category: Extra packages
Title: 
Maintainer: 
Source: 
Type: ipkg
Description: 
@@
Makefile:32: *** invalid syntax in conditional.  Stop.

前面那么多行信息没什么用,最重要的是最后一行,好像是说32行条件语法错误。赶紧打开 package/helloworld/Makefile,定位到32行看看。结果是:

$(eval $(call BuildPackage, helloworld))

这个,我何错之有呢?

最后反复排查,原来是 "BuildPackage," 逗号后面与 "helloworld" 之间多了个空格。不会吧!多个空格少个空格都会导致语法错误?

好了,改正过来了。

$(eval $(call BuildPackage,helloworld))  #去掉空格

$ make V = vs

生成了 helloworld_1_ar71xx.ipk 。find 一下,看在哪里。
$ find -name helloworld*.ipk
./bin/ar71xx/packages/base/helloworld_1_ar71xx.ipk


5.安装helloworld

将刚生成的 helloworld_1_ar71xx.ipk 文件用 scp 传到目标路由上。本人的路由IP为:192.168.1.2

$ scp bin/ar71xx/packages/base/helloworld_1_ar71xx.ipk root@192.168.1.2:
root@192.168.1.2's password: 
helloworld_1_ar71xx.ipk                 100% 1993     2.0KB/s   00:00
 -----------------------------------------------------
root@OpenWrt:~# ls
helloworld_1_ar71xx.ipk
root@OpenWrt:~# opkg install helloworld_1_ar71xx.ipk 
Installing helloworld (1) to root...
Configuring helloworld.
root@OpenWrt:~#

安装完成后,执行一下试试看。

root@OpenWrt:~# helloworld 
This is my hello word!

用which命令查看 helloworld 安装的路径:

root@OpenWrt:~# which helloworld
/bin/helloworld

在 /bin/ 路径下。



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值