以一個ser2net軟件包爲例解讀openwrt19.07編譯文件及luci編譯步驟

以一個ser2net軟件包爲例解讀openwrt19.07編譯文件及luci編譯步驟br/>1、包編譯;
第一步拷貝ser2net-3.5.1.tar.gz文件到dl目錄,
並在feeds/package/net/下建立ser2net目錄,並建立Makefile文件;
//包頭信息
PKG_NAME:=ser2net
PKG_VERSION:=3.5.1
PKG_RELEASE:=5
//包位置,會自解壓到build_dir/target-mipsel_24kc_musl/ser2net-3.5.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/ser2net
PKG_HASH:=02f5dd0abbef5a17b80836b0de1ef0588e257106fb5e269b86822bfd001dc862
//其他信息
PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=COPYING
PKG_MAINTAINER:=Michael Heimpold <[email protected]>













PKG_FIXUP:=autoreconf
PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk
//定義包的Luci位置;
define Package/ser2net
  SECTION:=net
  CATEGORY:=Network
  TITLE:=Serial to Network Proxy
  URL:=https://sourceforge.net/projects/ser2net/
endef
//包描述
define Package/ser2net/description
  This project provides a proxy that allows telnet/tcp connections to be made to
  serial ports on a machine.
endef
//定義包的配置文件
define Package/ser2net/conffiles
/etc/config/ser2net
/etc/ser2net.conf
endef
//安裝相關文件到相對應的位置;
define Package/ser2net/install
    $(INSTALL_DIR) $(1)/usr/sbin
    $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ser2net $(1)/usr/sbin/

    $(INSTALL_DIR) $(1)/etc
    $(INSTALL_CONF) ./files/ser2net.conf $(1)/etc/

    $(INSTALL_DIR) $(1)/etc/config
    $(INSTALL_CONF) ./files/ser2net.config $(1)/etc/config/ser2net

    $(INSTALL_DIR) $(1)/etc/init.d
    $(INSTALL_BIN) ./files/ser2net.init $(1)/etc/init.d/ser2net
endef

$(eval $(call BuildPackage,ser2net))

並在該目錄下建立配置文件files目錄,建立三個配置文件
ser2net.conf ->運行參數配置文件
ser2net.config ->web配置文件參數
ser2net.init ->啓動配置文件
2、luci相關內容編譯;
(1)文件目錄結構
htdocs -> luci-status->resources->view->ser2net->
leds.js //三個頁面的js文件;
proxies.js
settings.js
po ->翻譯文件信息;
root ->usr/share/luci-> menu.d ->luci.app-ser2net.json 文件,該文件確定的文件菜單位置,以及菜單頁調用的view文件名;
{
"admin/services/ser2net": {
"title": "ser2net",
"action": {
"type": "firstchild"
},
"depends": {
"acl": [ "luci-app-ser2net" ],
"uci": { "ser2net": true }
}
},





















            "admin/services/ser2net/settings": {
                "title": "Settings",
                "order": 1,
                "action": {
                    "type": "view",
                    "path": "ser2net/settings"
                }
            },

            "admin/services/ser2net/proxies": {
                "title": "Proxies",
                "order": 2,
                "action": {
                    "type": "view",
                    "path": "ser2net/proxies"
                }
            },

            "admin/services/ser2net/leds": {
                "title": "LEDs",
                "order": 3,
                "action": {
                    "type": "view",
                    "path": "ser2net/leds"
                }
            }
        }

    ->usr/share/rpcd/acl.d -> luci-app-ser2net.json
    {
        "luci-app-ser2net": {
            "description": "Grant access to LuCI app ser2net",
            "read": {
                "uci": [ "ser2net" ]
            },
            "write": {
                "uci": [ "ser2net" ]
            }
        }
    }

(1)編譯Makefile 文件內容
include $(TOPDIR)/rules.mk

    LUCI_TITLE:=LuCI Support for ser2net
    LUCI_DEPENDS:=+ser2net

    PKG_LICENSE:=Apache-2.0

    include ../../luci.mk

相應內容在luci/luci.mk文件裏
    拷貝以上htdocs,root,以及po文件內容到相應位置;  
    define Package/$(PKG_NAME)/install
        if [ -d $(PKG_BUILD_DIR)/luasrc ]; then \
          $(INSTALL_DIR) $(1)$(LUCI_LIBRARYDIR); \
          cp -pR $(PKG_BUILD_DIR)/luasrc/* $(1)$(LUCI_LIBRARYDIR)/; \
          $(FIND) $(1)$(LUCI_LIBRARYDIR)/ -type f -name '*.luadoc' | $(XARGS) rm; \
          $(if $(CONFIG_LUCI_SRCDIET),$(call SrcDiet,$(1)$(LUCI_LIBRARYDIR)/),true); \
          $(call SubstituteVersion,$(1)$(LUCI_LIBRARYDIR)/); \
        else true; fi
        if [ -d $(PKG_BUILD_DIR)/htdocs ]; then \
          $(INSTALL_DIR) $(1)$(HTDOCS); \
          cp -pR $(PKG_BUILD_DIR)/htdocs/* $(1)$(HTDOCS)/; \
          $(if $(CONFIG_LUCI_JSMIN),$(call JsMin,$(1)$(HTDOCS)/),true); \
          $(if $(CONFIG_LUCI_CSSTIDY),$(call CssTidy,$(1)$(HTDOCS)/),true); \
        else true; fi
        if [ -d $(PKG_BUILD_DIR)/root ]; then \
          $(INSTALL_DIR) $(1)/; \
          cp -pR $(PKG_BUILD_DIR)/root/* $(1)/; \
        else true; fi
        if [ -d $(PKG_BUILD_DIR)/src ]; then \
          $(call Build/Install/Default) \
          $(CP) $(PKG_INSTALL_DIR)/* $(1)/; \
        else true; fi
    endef
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章