1. 程式人生 > >openwrt之新增OpenWrt軟體包概述

openwrt之新增OpenWrt軟體包概述

第一章 新增OpenWrt軟體包概述

新增軟體包

​ 在原始碼 package 目錄下建立一個目錄,以包含該軟體包的各種資訊和與 OpenWrt 建立聯絡的檔案。然後建立一個 Makefile 與 OpenWrt 建立聯絡,Makefile 需要遵循 OpenWrt 的約定。另外可以建立一個 patchs 目錄儲存 patch 檔案,對下載的原始碼進行適量修改。

Makefile引入檔案

OpenWrt 使用三個 makefile 的子檔案,分別為:

include $(TOPDIR)/rules.mk 
include $(INCLUDE_DIR)/kernel.mk 
include
$(INCLUDE_DIR)/package.mk # 由這些 makefile 子檔案確立軟體包加入 OpenWrt 的方式和方法

編寫軟體包基本資訊

軟體包的資訊均以 PKG_開頭: 
PKG_NAME 表示軟體包名稱,將在 menuconfig 和 ipkg 可以看到。 
PKG_VERSION 表示軟體包版本號。 
PKG_RELEASE 表示 Makefile 的版本號。 
PKG_SOURCE 表示原始碼的檔名。 
PKG_SOURCE_URL 表示原始碼的下載網站位置。@SF 表示在 sourceforge 網站,@GNU 表示在 GNU 網站,還有@GNOME、@KERNEL。 
PKG_MD5SUM 表示原始碼檔案的效驗碼。用於核對軟體包是否正確下載。 
PKG_CAT 表示原始碼檔案的解壓方法。包括 zcat, bzcat, unzip 等。
PKG_BUILD_DIR 表示軟體包編譯目錄。它的父目錄為$(BUILD_DIR)。如果不指定,預設為$(BUILD_DIR)/$( PKG_NAME)/$( PKG_VERSION)。

編譯包定義

應用程式和核心驅動模組的定義不一樣。應用程式軟體包使用 Package,核心驅動模組使用 KernelPackage。

  1. 應用程式編譯包的定義

    應用程式的編譯包以 Package/開頭,然後接著軟體名,在 Package 定義中的軟體名可以與軟體包名不一樣,而且可以多個定義。

  2. 核心驅動模組包的定義

    Linux 分為核心空間和使用者空間。開發者開發的核心部分可以直接加入 Linux 的 Kernel程式,也可以生成核心模組以便需要時裝入核心。OpenWrt 一般希望開發者生成核心模組,在 Linux 啟動後自動裝載或手工使用 insmod 命令裝載。核心模組使用 KernelPackage 開頭,其他與一般應用軟體包基本相同。

  3. 使用定義

    完成前面定義後,必須使用 eval 函式實現各種定義。其格式為:

    
    # 對於一般應用軟體包
    
    $(eval $(call Package,$(PKG_NAME)))
    
    # 對於核心驅動模組
    
    $(eval $(call KernelPackage,$(PKG_NAME)))
  4. 例項

    這裡列舉 widora 的 web配網頁的驅動

#
Copyright (C) 2013-2014 OpenWrt.org
#
This is free software, licensed under the GNU General Public License v2.
See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
PKG_NAME:=webui
PKG_RELEASE:=1
PKG_BUILD_DIR:=(BUILD_DIR)/(PKG_NAME) #使用(PKG_NAME)只是做一個標示,並非真正使用(PKG_NAME)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

define Package/webui
    SECTION:=Ralink SDK Mango #包的型別
    CATEGORY:=Ralink SDK Mango #表示分類,在 make menuconfig 的選單下將可以找到
    TITLE:=setwifi by web #軟體包簡短描述
    DEPENDS := #與其他軟體的依賴
endef

define Package/webui/description #軟體包的詳細描述
    This package provides  UCI for wifi Configuration.
endef

define Build/Prepare #編譯準備方法
        echo
endef

define Build/Compile #編譯方法
        echo
endef

define Package/webui/install #軟體包的安裝方法
    $(INSTALL_DIR) $(1)/www/
    $(CP) ./files/www/* $(1)/www/
endef

(eval (call BuildPackage,webui)) #使用 eval 函式實現各種定義