openwrt之新增OpenWrt軟體包概述
阿新 • • 發佈:2019-02-15
第一章 新增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。
應用程式編譯包的定義
應用程式的編譯包以 Package/開頭,然後接著軟體名,在 Package 定義中的軟體名可以與軟體包名不一樣,而且可以多個定義。
核心驅動模組包的定義
Linux 分為核心空間和使用者空間。開發者開發的核心部分可以直接加入 Linux 的 Kernel程式,也可以生成核心模組以便需要時裝入核心。OpenWrt 一般希望開發者生成核心模組,在 Linux 啟動後自動裝載或手工使用 insmod 命令裝載。核心模組使用 KernelPackage 開頭,其他與一般應用軟體包基本相同。
使用定義
完成前面定義後,必須使用 eval 函式實現各種定義。其格式為:
# 對於一般應用軟體包 $(eval $(call Package,$(PKG_NAME))) # 對於核心驅動模組 $(eval $(call KernelPackage,$(PKG_NAME)))
例項
這裡列舉 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 函式實現各種定義