添加自定义的package

添加自定义的package

来源 https://blog.csdn.net/teddy99999/article/details/17537545

参考 https://blog.chaofan.io/archives/how-to-develop-on-openwrt

参考 https://www.cnblogs.com/burnk/p/15806934.html

 

OpenWrt是一个比较完善的嵌入式Linux开发平台,在无线路由器应用上已有100多个软件包。人们可以在其基础上增加软件包,以扩大其应用范围。OpenWrt在增加软件方面使用极其方便,按照OpenWrt的约定就可以很简单完成。
        加入的软件包可以是网上可下载的开源软件或自行开发的软件。為加入软件包需要在package目錄下创建一个目录,以包含软件包的各种信息和与OpenWrt建立联系的文件。然后创建一个Makefile与OpenWrt建立联系,Makefile需要遵循OpenWrt的约定。另外可以創建一個patchs目錄保存patch文件,對下載的源代碼進行適量修改。下面主要介紹Makefile的基本約定。
1、引入文件
OpenWrt使用三个makefile的子文件,分别为:
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk
        由這些makefile子文件確立軟件包加入OpenWrt的方式和方法。$(TOPDIR)/rules.mk一般在Makefile的開頭,$(INCLUDE_DIR)/kernel.mk文件對於軟件包為內核時不可缺少,$(INCLUDE_DIR)/package.mk一般在軟件包的基本信息完成後再引入。
2、编写软件包的基本信息,这些软件包的信息均以PKG_开头,其意思和作用如下:
PKG_NAME表示软件包名称,将在menuconfig和ipkg可以看到。
PKG_VERSION表示软件版本号。
PKG_RELEASE表示Makefile的版本号
PKG_SOURCE表示源代码的文件名。
PKG_SOURCE_URL表示源代码的下载网站位置。@SF表示在sourceforge网站,@GNU表示在GNU网站,還有@GNOME、@KERNEL。獲取方式可以為:git、svn、cvs、hg、bzr等。有關下載方法可參考$(INCLUDE_DIR)/download.mk和$(SCRIPT_DIR)/download.pl。
PKG_MD5SUM表示源代码文件的效验码。用于核对软件包是否正确下载。
PKG_CAT表示源代码文件的解压方法。包括zcat, bzcat, unzip等。
PKG_BUILD_DIR表示软件包编译目录。它的父目录为$(BUILD_DIR)。如果不指定,默认为$(BUILD_DIR)/$( PKG_NAME)$( PKG_VERSION)。
還有一些有關源代碼的定義。
PKG_SOURCE_SUBDIR
PKG_SOURCE_PROTO
PKG_SOURCE_MIRROR
PKG_MIRROR_MD5SUM
PKG_SOURCE_VERSION

3、编译包定义
用户程序和内核模块的定义不一样。用戶態軟件包使用Package,內核模塊使用KernelPackage。
3.1用户程序编译包定义
用户程序的编译包以Package/开头,然后接着软件名,在Package定义中的软件名可以与软件包名不一样,而且可以多个定义。下面使用$(PKG_NAME)只是做一个标示,并非真正使用$(PKG_NAME)。

Package/$(PKG_NAME)
SECTION表示包的类型,预留。
CATEGORY表示分类,在menuconfig的菜单下将可以找到。
TITLE用于软件包的简短描述
DESCRIPTION用于软件包的详细描述,已放弃使用。如果使用DESCRIPTION將會提示“error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description”。
URL表示软件包的下载位置。
MAINTAINER表示维护者,选项。
DEPENDS表示与其他软件的依赖。即如编译或安装需要其他软件时需要说明。如果存在多個依賴,則每個依賴需用空格分開。依賴前使用+號表示默認顯示,即對象沒有選中時也會顯示,使用@則默認為不顯示,即當依賴對象選中後才顯示。
在用戶態的軟件包中沒有內核模塊的AUTOLOAD參數。如果軟件需要在boot時自動運行,則需要在/etc/init.d增加相應的腳本文件。腳本文件需要START參數,說明在boot時的優先級,如果在boot過程啟動後在關閉,則需要進一步設置STOP參數。如果STOP參數存在,其值必須大於START。腳本文件需要start()和stop()兩個函數,start()是執行程序,stop()是關閉程序。關閉程序一般需要執行killall命令。由/etc/rc.d/S10boot知道,裝載內核模塊的優先級為10,需要使用自己設計的內核模塊的程序其START的值必須大於10. 同樣由/etc/rc.d/S40network知道,使用網絡通信的程序其START的值必須大於40。

Package/$(PKG_NAME)/conffiles
本包安裝的配置文件,一行一個。如果文件結尾使用/,則表示為目錄。用於備份配置文件說明,在sysupgrade命令執行時將會用到。

Package/$(PKG_NAME)/description
软件包的详细描述,取代前面提到的DESCRIPTION详细描述。

Build/Prepare
编译准备方法,对于网上下载的软件包不需要再描述。对于非网上下载或自行开发的软件包必须说明编译准备方法。一般的准备方法为:
define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)
        $(CP) ./src/* $(PKG_BUILD_DIR)/
endef
按OpenWrt的习惯,一般把自己设计的程序全部放在src目录下。
Build/Configure
在Automake中需要进行./configure,所以本配置方法主要针对需要配置的软件包而设计,一般自行开发的软件包可以不在这里说明。需要使用本定义的情况,可参考dropbear。

Build/Compile
编译方法,没有特别说明的可以不予以定义。如果不定义将使用默认的编译方法Build/Compile/Default
自行开发的软件包可以考虑使用下面的定义。
define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR) \
                $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"
Endef

Package/$(PKG_NAME)/install
软件包的安装方法,包括一系列拷贝编译好的文件到指定位置。調用時會帶一個參數,就是嵌入系統的鏡像文件系統目錄,因此$(1)表示嵌入系统的镜像目录。一般可以采用下面的方法:
define Package/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/ $(PKG_NAME) $(1)/usr/bin/
endef
INSTALL_DIR、INSTALL_BIN在$(TOPDIR)/rules.mk文件定义,所以本Makefile必须引入$(TOPDIR)/rules.mk文件。
INSTALL_DIR :=install -d -m0755 意思創建所屬用戶可讀寫即執行,其他用戶可讀可執行的目錄。
INSTALL_BIN:=install -m0755意思編譯好的文件到鏡像文件目錄。
如果用戶態軟件在boot時要自動運行,則需要在安裝方法說明中增加自動運行的腳本文件安裝和配置文件安裝方法。
例如:
define Package/mountd/install
        $(INSTALL_DIR) $(1)/sbin/ $(1)/etc/config/ $(1)/etc/init.d/
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/mountd $(1)/sbin/

         $(INSTALL_DATA) ./files/mountd.config $(1)/etc/config/mountd
         $(INSTALL_BIN) ./files/mountd.init $(1)/etc/init.d/mountd
endef
安裝文件放在files子目錄下,不要與源代碼文件目錄src混在一起,以提高可讀性。
使用清晰的文件擴展名,更方便安裝識別文件。
 
Package/$(PKG_NAME)/preinst
软件包安装前处理方法,使用脚本语言,因此定义的第一行需要下面的格式
#!/bin/sh
調用時帶入的參數為嵌入式系統的鏡像目錄。
Package/$(PKG_NAME)/postinst
软件包安装后处理方法,使用脚本语言。
Package/$(PKG_NAME)/prerm
软件包删除前处理方法,使用脚本语言
Package/$(PKG_NAME)/postrm
软件包删除后处理方法,使用脚本语言
3.2内核模块包定义
Linux分为内核态和用户态。开发者开发的内核部分可以直接加入Linux的Kernel程序,也可以生成内核模块以便需要时装入内核。OpenWrt一般希望开发者生成内核模块,在Linux启动后自动装载或手工使用insmod命令装载。内核模块使用KernelPackage开头,其他与一般软件包基本相同。
在内核模块定义中增加
SUBMENU表示子菜单位置,在$(INCLUDE)/kernel.mk对内核模块定义了CATEGORY为kernel modules,所以内核模块在menuconfig中的主菜单为kernel modules,然后有下一级子菜单$(SUBMENU)。在子菜单下可以看到以kmod-$( PKG_NAME)项目。
DEFAULT表示直接编入内核或产生内核模块,y表示直接编入内核,m表示产生内核模块。
AUTOLOAD表示自动装入内核,一般表示方法为:

AUTOLOAD:=$(call AutoLoad, $(PRIORITY),$(AUTOLOAD_MODS))

AutoLoad的第一个参数$(PRIORITY)为优先级,01为最优先,99为最后装载。有关自动装载可以在/etc/modules.d目录下看到,第二个参数$(AUTOLOAD_MODS)模块名,每个模块名以空格符分隔。即可同时装载多个内核模块。
在开发过程最好不要使用自动装载,經過嚴格調試後再使用,可以減輕調試的工作量。
 
4、使用定义
完成前面定义后,必须使用eval函数实现各种定义。其格式为:
对于一般软件包
$(eval $(call Package,$(PKG_NAME)))
或对于内核模块
$(eval $(call KernelPackage,$(PKG_NAME)))
       如果一個軟件包有多個程序,例如:一個應用程序有自己的內核模塊,上面使用的PKG_NAME需要靈活變通。eval函數可能設計多個。也可以當成多個軟件包處理。

 

要把自己的程序加入到openwrt中有两个方法,1)固件是自己编译的,那可以在package目录下下面添加自定义的包
2)固件不是自己编译的话,那可以用openwrt的编译工具链将自己的程序编译成可运行在openwrt上面的可执行程序。

 


一、添加自定义的package
下面通过我自己做的一个实例来说明。我的程序主要是C语言程序。
1)目录结构图如下图所示
http_upgrade/
├── config
│   └── http_url
├── init.d
│   └── get_route_data
├── Makefile
├── rc.d
│   └── S110http_upgrade
└── src
    ├── client.c
    ├── client.h
    ├── debug.c
    ├── debug.h
    ├── http_upgrade.c
    ├── Makefile
    ├── safe.c
    ├── safe.h
    ├── system_status.c
    └── system_status.h

4 directories, 14 files


(可选)config目录主要是放置程序的配置文件
(可选)init.d目录主要是放置自定义的脚本,可以运行程序这些
(可选)rc.d目录主要是放置开机运行程序,我这里是需要将自定义的程序开机启动
(可选)src目录主要是放置源码以及编译源码的makefile文件
(必选)Makefile 这里最关键的就是makefile文件了

2)package下面的makefile详解(我这里写的比较简单,可以参照网上详解和openwrt的源码)

#
# Copyright (C) 2012 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:=http_upgrade  -------包的名字,在make menuconfig中看到的
PKG_RELEASE:=1

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/http_upgrade    ---------------包的目录
  SECTION:=utils
  CATEGORY:=Utilities ---------------------------包放到哪个目录下,这里放到Utilities 下
  TITLE:=ZK contral x86 remote upgrade firmware  ------包的描述
  DEPENDS:=+libpthread +jansson +libcurl   --------------包需要的依赖库
endef

define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)
        $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Configure
endef

define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR) \
                CC="$(TARGET_CC)" \
                CFLAGS="$(TARGET_CFLAGS) -Wall" \
                LDFLAGS="$(TARGET_LDFLAGS)"
endef

define Package/http_upgrade/install  --------------安装过程
        $(INSTALL_DIR) $(1)/etc/init.d   --------------安装目录
        $(INSTALL_BIN) ./init.d/* $(1)/etc/init.d -----将包init.d目录下的文件安装到openwrt下的init.d目录下

        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/http_upgrade $(1)/usr/sbin/  -------将http_upgrade文件安装到openwrt下的/usr/sbin/目录下

        $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_DATA) ./config/* $(1)/etc/config   --------------------------将包下config目录下面的文件安装到openwrt的/etc/config/目录下

        $(INSTALL_DIR) $(1)/etc/rc.d
        $(INSTALL_BIN) ./rc.d/* $(1)/etc/rc.d   ----------------------------------将包下rc.d目录下面的文件安装到openwrt的/etc/rc.d目录下
endef


$(eval $(call BuildPackage,http_upgrade))


2)src目录下的makefile(这个就是c语言的makefile)


all: http_upgrade

http_upgrade:
        $(CC) $(CFLAGS) -o $@ debug.c safe.c system_status.c client.c http_upgrade.c $(LDFLAGS) -lpthread -ljansson -lcurl

clean:
        rm -f http_upgrade

将上面的包添加到openwrt编译目录的package目录下面以后,
make menuconfig 就可以看到自定义的包,将它选上,就可以编译出自定义的ipk了

二、使用openwrt的编译工具链生成可执行文件(这个比较麻烦,需要有automake的基础)

这个automake网上教程很多,可以自行百度,我这里要讲的就是怎么用openwrt的工具链来编译

首先在项目目录下新建一个.sh脚本

将automake的步骤都写在脚本中并在脚本中指定编译工具链


#!/bin/sh

rm -rf /tmp/test

#指定编译工具链
export STAGING_DIR=/home/zyw/work/chaos_calmer/staging_dir
export PATH=$STAGING_DIR/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin:$PATH
export TOOLCHAIN_DIR=$STAGING_DIR/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
export LDCFLAGS=$TOOLCHAIN_DIR/lib/
export LD_LIBRARY_PATH=$TOOLCHAIN_DIR/lib/

STAGING_DIR_TMP=${STAGING_DIR}/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
CLFS_TARGET=mipsel-openwrt-linux
export CC=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-gcc
export CXX=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-c++
export AR=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-ar
export AS=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-as
export LD=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-ld
export NM=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-nm
export OBJDUMP=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-objdump
export RANLIB=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-ranlib
export STRIP=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-strip
export CC_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-gcc
export CXX_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-c++
export AR_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-ar
export AS_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-as
export LD_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-ld
export NM_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-nm
export OBJDUMP_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-objdump
export RANLIB_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-ranlib
export STRIP_FOR_TARGET=${STAGING_DIR_TMP}/bin/${CLFS_TARGET}-strip

#automake
cd /home/zyw/work/http_client
make clean
./autogen.sh
[ $? -ne 0 ] && echo "autogen失败" && exit 1
./configure --host=mipsel-openwrt-linux --prefix=/usr --sysconfdir=/etc/config
make
make DESTDIR=/tmp/test install


通过执行上面的脚本就可以通过openwrt的编译工具链生成可执行文件,拷贝到openwrt路由器上就可以运行了。

********如果编译的时候遇到依赖库不存在,这个时候就需要手动复制到指定目录下

例子:编译的时候提示curl库不存在,解决办法
根据上面指定的工具链是mips还是i386

cd /work/chaos_calmer/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/curl-7.40.0/ipkg-install/usr 目录下
1)将上面usr下的include目录下的所有文件拷贝到指定目录
cd include
cp -R * /home/zyw/work/chaos_calmer/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/include/
cp -R * /home/zyw/chaos_calmer/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include/

2)将上面usr下的lib目录下的所有文件拷贝到指定目录
cd lib
cp -R * /home/zyw/chaos_calmer/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib
cp -R * /home/zyw/barrier_breaker/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib

******如果执行的时候提示lib*不存在,解决办法是将对应lib的ipk安装到openwrt路由器上面,如果安装不上,就只能手动复制到/usr/lib目录下。

 

================

 

##
# The MIT License (MIT)
#
# Copyright (c) 2015 LSGX
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
##

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=mydemo
PKG_VERSION:=1.0.1
PKG_RELEASE:=$(AUTORELEASE)

PKG_MAINTAINER:=Lsgx <lsgx@live.com>
PKG_LICENSE:=MIT

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)

PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=

include $(INCLUDE_DIR)/package.mk

define Package/$(PKG_NAME)
	SECTION:=amip-mytest
	CATEGORY:=Amip
	SUBMENU:=mytest
	TITLE:=This is my test demo
	DEPENDS:=
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Package/$(PKG_NAME)/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/bin/
endef

$(eval $(call BuildPackage,mydemo))

 

# Sources are located relative to Makefile
MAKEFILE_DIR := $(shell readlink -f $(dir $(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))))

# The path of the invoking module
vpath %.c $(MAKEFILE_DIR)
vpath %.cpp $(MAKEFILE_DIR)

# Build flags define
CPPFLAGS += -I. -I$(MAKEFILE_DIR) 
CFLAGS += -fdiagnostics-color -fPIC -export-dynamic
CFLAGS += -Wall -Wextra
ARFLAGS += crs
LDFLAGS += -Wl,--export-dynamic -Wl,-rpath,.:$(MAKEFILE_DIR)
LDLIBS += -L. -L$(MAKEFILE_DIR)

# Build object files
%o: %.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<

%.o: %.cpp
	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<

# Object Sources
EXEC = mydemo
SRCDIRS = .
CSRC += $(wildcard $(SRCDIRS:%=$(MAKEFILE_DIR)/%/*.c))
CSRC := $(strip $(subst $(SRCDIRS:%=$(MAKEFILE_DIR)/%/test_main.c),,$(CSRC)))
CXXSRC += $(wildcard $(SRCDIRS:%=$(MAKEFILE_DIR)/%/*.cpp))
CXXSRC := $(strip $(subst $(SRCDIRS:%=$(MAKEFILE_DIR)/%/test_main.cpp),,$(CXXSRC)))
COBJ = $(CSRC:$(MAKEFILE_DIR)/%.c=%.o)
CXXOBJ = $(CXXSRC:$(MAKEFILE_DIR)/%.cpp=%.o)
OBJS = $(COBJ) $(CXXOBJ)

default: $(EXEC)

$(EXEC): $(OBJS)
	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

.PHONY: clean

clean: 
	$(RM) $(EXEC) $(OBJS)

 

#include <stdio.h>

int main(int argc, char **argv)
{
	puts("Hello, This is my first test demo.");
	return 0;
}

 

echo "feeds update install ..."
./scripts/feeds update -a 
./scripts/feeds install -a

echo "make defconfig ..."
make defconfig V=s

echo "make download ..."
make download -j$(expr $(nproc) + 1)  || make download -j1

echo "make world ..."
make -j$(expr $(nproc) + 1) V=s || make -j1 V=s

echo "make world ..."
make -j$(expr $(nproc) + 1) LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8 V=s

 

root@OpenWrt:~# 
root@OpenWrt:~# cat /etc/opkg/customfeeds.conf 
# add your custom package feeds here
#
# src/gz example_feed_name http://www.example.com/path/to/files

src/gz lsgx_core http://192.168.195.1:9099/targets/x86/64/packages
src/gz lsgx_base http://192.168.195.1:9099/packages/x86_64//base
src/gz lsgx_helloworld http://192.168.195.1:9099/packages/x86_64/helloworld
src/gz lsgx_luci http://192.168.195.1:9099/packages/x86_64/luci
src/gz lsgx_packages http://192.168.195.1:9099/packages/x86_64/packages
src/gz lsgx_routing http://192.168.195.1:9099/packages/x86_64/routing
src/gz lsgx_telephony http://192.168.195.1:9099/packages/x86_64/telephony
src/gz lsgx_amip http://192.168.195.1:9099/packages/x86_64/amip

root@OpenWrt:~# 
root@OpenWrt:~# opkg update
Downloading http://192.168.195.1:9099/targets/x86/64/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_core
Downloading http://192.168.195.1:9099/targets/x86/64/packages/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64//base/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_base
Downloading http://192.168.195.1:9099/packages/x86_64//base/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64/helloworld/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_helloworld
Downloading http://192.168.195.1:9099/packages/x86_64/helloworld/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_luci
Downloading http://192.168.195.1:9099/packages/x86_64/luci/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_packages
Downloading http://192.168.195.1:9099/packages/x86_64/packages/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_routing
Downloading http://192.168.195.1:9099/packages/x86_64/routing/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_telephony
Downloading http://192.168.195.1:9099/packages/x86_64/telephony/Packages.sig
Signature check passed.
Downloading http://192.168.195.1:9099/packages/x86_64/amip/Packages.gz
Updated list of available packages in /var/opkg-lists/lsgx_amip
Downloading http://192.168.195.1:9099/packages/x86_64/amip/Packages.sig
Signature check passed.
root@OpenWrt:~# 
root@OpenWrt:~# ls -alh /var/opkg-lists/
drwxr-xr-x    2 root     root         360 Jan 30 14:22 .
drwxrwxrwt   20 root     root         580 Jan 30 14:22 ..
-rw-r--r--    1 root     root         236 Jan 29 17:50 lsgx_amip
-rw-r--r--    1 root     root         151 Jan 29 17:50 lsgx_amip.sig
-rw-r--r--    1 root     root       12.8K Jan 29 17:50 lsgx_base
-rw-r--r--    1 root     root         151 Jan 29 17:50 lsgx_base.sig
-rw-r--r--    1 root     root       16.1K Jan 29 17:50 lsgx_core
-rw-r--r--    1 root     root         151 Jan 29 17:50 lsgx_core.sig
-rw-r--r--    1 root     root        2.0K Jan 29 17:50 lsgx_helloworld
-rw-r--r--    1 root     root         151 Jan 29 17:50 lsgx_helloworld.sig
-rw-r--r--    1 root     root        5.4K Jan 29 17:50 lsgx_luci
-rw-r--r--    1 root     root         151 Jan 29 17:50 lsgx_luci.sig
-rw-r--r--    1 root     root       11.3K Jan 29 17:50 lsgx_packages
-rw-r--r--    1 root     root         151 Jan 29 17:51 lsgx_packages.sig
-rw-r--r--    1 root     root          21 Jan 29 17:50 lsgx_routing
-rw-r--r--    1 root     root         151 Jan 29 17:51 lsgx_routing.sig
-rw-r--r--    1 root     root          21 Jan 29 17:50 lsgx_telephony
-rw-r--r--    1 root     root         151 Jan 29 17:51 lsgx_telephony.sig
root@OpenWrt:~# 
root@OpenWrt:~# 
root@OpenWrt:~# opkg install mydemo
Installing mydemo (1.0.1-1) to root...
Downloading http://192.168.195.1:9099/packages/x86_64/amip/mydemo_1.0.1-1_x86_64.ipk
Configuring mydemo.
root@OpenWrt:~# 
root@OpenWrt:~# mydemo 
Hello, This is my first test demo.
root@OpenWrt:~# 
root@OpenWrt:~# opkg remove mydemo
Removing package mydemo from root...
root@OpenWrt:~# 
root@OpenWrt:~# mydemo
-ash: mydemo: not found
root@OpenWrt:~# 

 

lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ ./scripts/feeds update amip
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ ./scripts/feeds install -a -p amip
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ echo "CONFIG_FEED_amip=y" > .config
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ echo "CONFIG_PACKAGE_mydemo=m" > .config
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make defconfig V=s
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make download -j$(expr $(nproc) + 1) V=s
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make -j$(expr $(nproc) + 1) LINUX_VERMAGIC:=abf2e0d798db6cc11a74a8215e715cb8 V=s
lsgx@DESKTOP-QSH4TMH:~/develop/lede$
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make package/mydemo/clean V=s lsgx@DESKTOP-QSH4TMH:~/develop/lede$ lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make package/mydemo/compile V=s lsgx@DESKTOP-QSH4TMH:~/develop/lede$ lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make package/index V=s lsgx@DESKTOP-QSH4TMH:~/develop/lede$

 

lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make package/mydemo/clean V=s 
make[2]: Entering directory '/home/lsgx/develop/lede/scripts/config'
make[2]: 'conf' is up to date.
make[2]: Leaving directory '/home/lsgx/develop/lede/scripts/config'
make[1]: Entering directory '/home/lsgx/develop/lede'
make[2]: Entering directory '/home/lsgx/develop/amip/mytest/mydemo'
rm -rf /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1
/home/lsgx/develop/lede/scripts/ipkg-remove mydemo /home/lsgx/develop/lede/bin/packages/x86_64/amip/mydemo_1.0.1-1_x86_64.ipk
removed '/home/lsgx/develop/lede/bin/packages/x86_64/amip/mydemo_1.0.1-1_x86_64.ipk'
rm -f /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/stamp/.mydemo_installed
rm -f /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/packages/mydemo.list
make[2]: Leaving directory '/home/lsgx/develop/amip/mytest/mydemo'
time: package/feeds/amip/mydemo/clean#0.06#1.12#1.15
make[1]: Leaving directory '/home/lsgx/develop/lede'
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ make package/mydemo/compile V=s 
make[2]: Entering directory '/home/lsgx/develop/lede/scripts/config'
make[2]: 'conf' is up to date.
make[2]: Leaving directory '/home/lsgx/develop/lede/scripts/config'
make[1]: Entering directory '/home/lsgx/develop/lede'
make[2]: Entering directory '/home/lsgx/develop/lede/package/libs/toolchain'
echo "libc" >> /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "libgcc" >> /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "libatomic" >> /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "libstdcpp" >> /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "libpthread" >> /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
echo "librt" >> /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo/toolchain.default.install
make[2]: Leaving directory '/home/lsgx/develop/lede/package/libs/toolchain'
time: package/libs/toolchain/compile#0.07#1.26#1.31
make[2]: Entering directory '/home/lsgx/develop/amip/mytest/mydemo'
touch /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.prepared_05c1e5b346d86de89ca9335a1e7f3149_6664517399ebbbc92a37c5bb081b5c53_check
mkdir -p /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1
cp -fpR ./src/* /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/
touch /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.prepared_05c1e5b346d86de89ca9335a1e7f3149_6664517399ebbbc92a37c5bb081b5c53
rm -f /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.configured_*
rm -f /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/stamp/.mydemo_installed
touch /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.configured_68b329da9893e34099c7d8ad5cb9c940
rm -f /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.built
touch /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.built_check
make -C /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1 AR="x86_64-openwrt-linux-musl-gcc-ar" AS="x86_64-openwrt-linux-musl-gcc -c -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1=mydemo-1.0.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" LD=x86_64-openwrt-linux-musl-ld NM="x86_64-openwrt-linux-musl-gcc-nm" CC="x86_64-openwrt-linux-musl-gcc" GCC="x86_64-openwrt-linux-musl-gcc" CXX="x86_64-openwrt-linux-musl-g++" RANLIB="x86_64-openwrt-linux-musl-gcc-ranlib" STRIP=x86_64-openwrt-linux-musl-strip OBJCOPY=x86_64-openwrt-linux-musl-objcopy OBJDUMP=x86_64-openwrt-linux-musl-objdump SIZE=x86_64-openwrt-linux-musl-size CPPFLAGS="-I/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/usr/include -I/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/include/fortify -I/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/include" CFLAGS="-Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1=mydemo-1.0.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" CXXFLAGS="-Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1=mydemo-1.0.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" LDFLAGS="-L/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/usr/lib -L/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/lib -znow -zrelro" LDLIBS=""
make[3]: Entering directory '/home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1'
x86_64-openwrt-linux-musl-gcc -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1=mydemo-1.0.1 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/usr/include -I/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/include/fortify -I/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/include  -c -o mydemo.o mydemo.c
x86_64-openwrt-linux-musl-gcc -L/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/usr/lib -L/home/lsgx/develop/lede/staging_dir/toolchain-x86_64_gcc-11.3.0_musl/lib -znow -zrelro mydemo.o  -o mydemo
make[3]: Leaving directory '/home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1'
touch /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.built
rm -rf /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo.installed /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo
mkdir -p /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo
install -d -m0755 /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo/usr/bin
install -m0755 /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/mydemo /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo/usr/bin/
touch /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo.installed
mkdir -p /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/root-x86/stamp
SHELL= flock /home/lsgx/develop/lede/tmp/.root-copy.flock -c 'cp -fpR /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/.pkgdir/mydemo/. /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/root-x86/'
touch /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/root-x86/stamp/.mydemo_installed
mkdir -p /home/lsgx/develop/lede/bin/targets/x86/64/packages /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo/CONTROL /home/lsgx/develop/lede/staging_dir/target-x86_64_musl/pkginfo
install -d -m0755 /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo/usr/bin
install -m0755 /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/mydemo /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo/usr/bin/
find /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf
export CROSS="x86_64-openwrt-linux-musl-"  NO_RENAME=1 ; NM="x86_64-openwrt-linux-musl-nm" STRIP="/home/lsgx/develop/lede/staging_dir/host/bin/sstrip -z" STRIP_KMOD="/home/lsgx/develop/lede/scripts/strip-kmod.sh" PATCHELF="/home/lsgx/develop/lede/staging_dir/host/bin/patchelf" /home/lsgx/develop/lede/scripts/rstrip.sh /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo
rstrip.sh: /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo/usr/bin/mydemo: executable
(cd /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo/CONTROL; ( echo "$CONTROL"; printf "Description: "; echo "$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; ) > control; chmod 644 control; ( echo "#!/bin/sh"; echo "[ \"\${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; echo "[ -s "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_postinst \$0 \$@"; ) > postinst; ( echo "#!/bin/sh"; echo "[ -s "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_prerm \$0 \$@"; ) > prerm; chmod 0755 postinst prerm;  )
install -d -m0755 /home/lsgx/develop/lede/bin/packages/x86_64/amip
/home/lsgx/develop/lede/staging_dir/host/bin/fakeroot /home/lsgx/develop/lede/staging_dir/host/bin/bash /home/lsgx/develop/lede/scripts/ipkg-build -m "" /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo /home/lsgx/develop/lede/bin/packages/x86_64/amip
Packaged contents of /home/lsgx/develop/lede/build_dir/target-x86_64_musl/mydemo-1.0.1/ipkg-x86_64/mydemo into /home/lsgx/develop/lede/bin/packages/x86_64/amip/mydemo_1.0.1-1_x86_64.ipk
make[2]: Leaving directory '/home/lsgx/develop/amip/mytest/mydemo'
time: package/feeds/amip/mydemo/compile#0.23#2.64#2.85
make[1]: Leaving directory '/home/lsgx/develop/lede'
lsgx@DESKTOP-QSH4TMH:~/develop/lede$ 

 

${workspaceFolder} :表示当前workspace文件夹路径,也即/home/Coding/Test
${workspaceRootFolderName}:表示workspace的文件夹名,也即Test
${file}:文件自身的绝对路径,也即/home/Coding/Test/.vscode/tasks.json
${relativeFile}:文件在workspace中的路径,也即.vscode/tasks.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,也即tasks
${fileBasename}:当前文件的文件名,tasks.json
${fileDirname}:文件所在的文件夹路径,也即/home/Coding/Test/.vscode
${fileExtname}:当前文件的后缀,也即.json
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量

 

	@echo '==========================='
	@echo 'version_abbrev : ' $(version_abbrev)
	@echo '_SINGLE : ' $(_SINGLE)
	@echo 'CFLAGS : ' $(CFLAGS)
	@echo 'ARCH : ' $(ARCH)
	@echo 'ARCH_PACKAGES : ' $(ARCH_PACKAGES)
	@echo 'BOARD : ' $(BOARD)
	@echo 'SUBTARGET : ' $(SUBTARGET)
	@echo 'TARGET_OPTIMIZATION : ' $(TARGET_OPTIMIZATION)
	@echo 'EXTRA_OPTIMIZATION : ' $(EXTRA_OPTIMIZATION)
	@echo 'TARGET_SUFFIX : ' $(TARGET_SUFFIX)
	@echo 'BUILD_SUFFIX : ' $(BUILD_SUFFIX)
	@echo 'SUBDIR : ' $(SUBDIR)
	@echo 'BUILD_SUBDIR : ' $(BUILD_SUBDIR)
	@echo 'SHELL : ' $(SHELL)
	@echo 'IS_PACKAGE_BUILD : ' $(IS_PACKAGE_BUILD)
	@echo 'OPTIMIZE_FOR_CPU : ' $(OPTIMIZE_FOR_CPU)
	@echo 'HOST_FPIC : ' $(HOST_FPIC)
	@echo 'ARCH_SUFFIX : ' $(ARCH_SUFFIX)
	@echo 'GCC_ARCH : ' $(GCC_ARCH)
	@echo 'DL_DIR : ' $(DL_DIR)
	@echo 'OUTPUT_DIR : ' $(OUTPUT_DIR)
	@echo 'BIN_DIR : ' $(BIN_DIR)
	@echo 'INCLUDE_DIR : ' $(INCLUDE_DIR)
	@echo 'SCRIPT_DIR : ' $(SCRIPT_DIR)
	@echo 'BUILD_DIR_BASE : ' $(BUILD_DIR_BASE)
	@echo 'GCCV : ' $(GCCV)
	@echo 'LIBC : ' $(LIBC)
	@echo 'LIBCV : ' $(LIBCV)
	@echo 'REAL_GNU_TARGET_NAME : ' $(REAL_GNU_TARGET_NAME)
	@echo 'GNU_TARGET_NAME : ' $(GNU_TARGET_NAME)
	@echo 'DIR_SUFFIX : ' $(DIR_SUFFIX)
	@echo 'BIN_DIR : ' $(BIN_DIR)
	@echo 'TARGET_DIR_NAME : ' $(TARGET_DIR_NAME)
	@echo 'TOOLCHAIN_DIR_NAME : ' $(TOOLCHAIN_DIR_NAME)
	@echo 'PACKAGE_DIR : ' $(PACKAGE_DIR)
	@echo 'PACKAGE_DIR_ALL : ' $(PACKAGE_DIR_ALL)
	@echo 'BUILD_DIR : ' $(BUILD_DIR)
	@echo 'STAGING_DIR : ' $(STAGING_DIR)
	@echo 'BUILD_DIR_TOOLCHAIN : ' $(BUILD_DIR_TOOLCHAIN)
	@echo 'TOOLCHAIN_DIR : ' $(TOOLCHAIN_DIR)
	@echo 'STAMP_DIR : ' $(STAMP_DIR)
	@echo 'STAMP_DIR_HOST : ' $(STAMP_DIR_HOST)
	@echo 'TARGET_ROOTFS_DIR : ' $(TARGET_ROOTFS_DIR)
	@echo 'TARGET_DIR : ' $(TARGET_DIR)
	@echo 'STAGING_DIR_ROOT : ' $(STAGING_DIR_ROOT)
	@echo 'BUILD_LOG_DIR : ' $(BUILD_LOG_DIR)
	@echo 'PKG_INFO_DIR : ' $(PKG_INFO_DIR)
	@echo 'BUILD_DIR_HOST : ' $(BUILD_DIR_HOST)
	@echo 'STAGING_DIR_HOST : ' $(STAGING_DIR_HOST)
	@echo 'STAGING_DIR_HOSTPKG : ' $(STAGING_DIR_HOSTPKG)
	@echo 'TARGET_PATH : ' $(TARGET_PATH)
	@echo 'TARGET_INIT_PATH : ' $(TARGET_INIT_PATH)
	@echo 'TARGET_CFLAGS : ' $(TARGET_CFLAGS)
	@echo 'TARGET_CXXFLAGS : ' $(TARGET_CXXFLAGS)
	@echo 'TARGET_ASFLAGS_DEFAULT : ' $(TARGET_ASFLAGS_DEFAULT)
	@echo 'TARGET_ASFLAGS : ' $(TARGET_ASFLAGS)
	@echo 'TARGET_CPPFLAGS : ' $(TARGET_CPPFLAGS)
	@echo 'TARGET_LDFLAGS : ' $(TARGET_LDFLAGS)
	@echo 'LIBGCC_S_PATH : ' $(LIBGCC_S_PATH)
	@echo 'LIBGCC_S : ' $(LIBGCC_S)
	@echo 'LIBGCC_A : ' $(LIBGCC_A)
	@echo 'LIBRPC : ' $(LIBRPC)
	@echo 'LIBRPC_DEPENDS : ' $(LIBRPC_DEPENDS)
	@echo 'LIB_SUFFIX : ' $(LIB_SUFFIX)
	@echo 'TARGET_CROSS : ' $(TARGET_CROSS)
	@echo 'TARGET_PATH_PKG : ' $(TARGET_PATH_PKG)
	@echo 'HOSTCC : ' $(HOSTCC)
	@echo 'HOSTCXX : ' $(HOSTCXX)
	@echo 'HOST_CPPFLAGS : ' $(HOST_CPPFLAGS)
	@echo 'HOST_CFLAGS : ' $(HOST_CFLAGS)
	@echo 'HOST_LDFLAGS : ' $(HOST_LDFLAGS)
	@echo 'TARGET_AR : ' $(TARGET_AR)
	@echo 'TARGET_RANLIB : ' $(TARGET_RANLIB)
	@echo 'TARGET_NM : ' $(TARGET_NM)
	@echo 'BUILD_KEY : ' $(BUILD_KEY)
	@echo 'TARGET_CC : ' $(TARGET_CC)
	@echo 'TARGET_CXX : ' $(TARGET_CXX)
	@echo 'KPATCH : ' $(KPATCH)
	@echo 'TARGET_CONFIGURE_OPTS : ' $(TARGET_CONFIGURE_OPTS)
	@echo '==========================='

 

===========================
version_abbrev :  lx-hello
_SINGLE :  export MAKEFLAGS=
CFLAGS : 
ARCH :  mips
ARCH_PACKAGES :  mips_24kc
BOARD :  ar71xx
SUBTARGET :  generic
TARGET_OPTIMIZATION :  -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc
EXTRA_OPTIMIZATION :  -fno-caller-saves
TARGET_SUFFIX :  musl
BUILD_SUFFIX : 
SUBDIR :  package/utils/lx-hello
BUILD_SUBDIR :  package/utils/lx-hello
SHELL :  /usr/bin/env bash
IS_PACKAGE_BUILD :  1
OPTIMIZE_FOR_CPU :  mips
HOST_FPIC :  -fPIC
ARCH_SUFFIX :  _24kc
GCC_ARCH : 
DL_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/dl
OUTPUT_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/bin
BIN_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/bin/targets/ar71xx/generic
INCLUDE_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/include
SCRIPT_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/scripts
BUILD_DIR_BASE :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir
GCCV :  7.5.0
LIBC :  musl
LIBCV :  1.1.24
REAL_GNU_TARGET_NAME :  mips-openwrt-linux-musl
GNU_TARGET_NAME :  mips-openwrt-linux
DIR_SUFFIX :  _musl-1.1.24
BIN_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/bin/targets/ar71xx/generic
TARGET_DIR_NAME :  target-mips_24kc_musl-1.1.24
TOOLCHAIN_DIR_NAME :  toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24
PACKAGE_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/bin/targets/ar71xx/generic/packages
PACKAGE_DIR_ALL :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/packages/ar71xx
BUILD_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24
STAGING_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24
BUILD_DIR_TOOLCHAIN :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24
TOOLCHAIN_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24
STAMP_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/stamp
STAMP_DIR_HOST :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/host/stamp
TARGET_ROOTFS_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24
TARGET_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/root-ar71xx
STAGING_DIR_ROOT :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/root-ar71xx
BUILD_LOG_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/logs
PKG_INFO_DIR :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/pkginfo
BUILD_DIR_HOST :  /home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/host
STAGING_DIR_HOST :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host
STAGING_DIR_HOSTPKG :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/host
TARGET_PATH :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/lsgx/.dotnet/tools
TARGET_INIT_PATH :  /usr/sbin:/usr/bin:/sbin:/bin
TARGET_CFLAGS :  -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -Wno-implicit-fallthrough -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/lx-hello-1.0.1:lx-hello-1.0.1 -Wformat -Werror=format-security -fstack-protector-strong -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/include
TARGET_CXXFLAGS :  -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -Wno-implicit-fallthrough -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -iremap/home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/lx-hello-1.0.1:lx-hello-1.0.1 -Wformat -Werror=format-security -fstack-protector-strong -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/include
TARGET_ASFLAGS_DEFAULT :  -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -Wno-implicit-fallthrough -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/lx-hello-1.0.1:lx-hello-1.0.1 -Wformat -Werror=format-security -fstack-protector-strong -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/include
TARGET_ASFLAGS :  -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -Wno-implicit-fallthrough -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/lx-hello-1.0.1:lx-hello-1.0.1 -Wformat -Werror=format-security -fstack-protector-strong -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/include
TARGET_CPPFLAGS :  -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/usr/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/include/fortify -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/include
TARGET_LDFLAGS :  -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/lib -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/lib -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/usr/lib -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/lib -znow -zrelro
LIBGCC_S_PATH : 
LIBGCC_S :  -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/lib -lgcc_s
LIBGCC_A :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/lib/gcc/mips-openwrt-linux-musl/7.5.0/libgcc.a
LIBRPC :  -lrpc
LIBRPC_DEPENDS :  +librpc
LIB_SUFFIX : 
TARGET_CROSS :  mips-openwrt-linux-musl-
TARGET_PATH_PKG :  /home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/host/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/host/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/toolchain-mips_24kc_gcc-7.5.0_musl-1.1.24/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/bin:/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/lsgx/.dotnet/tools
HOSTCC :  gcc
HOSTCXX :  g++
HOST_CPPFLAGS :  -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/usr/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/host/include
HOST_CFLAGS :  -O2 -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/usr/include -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/host/include
HOST_LDFLAGS :  -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/lib -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/host/usr/lib -L/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/host/lib
TARGET_AR :  mips-openwrt-linux-musl-gcc-ar
TARGET_RANLIB :  mips-openwrt-linux-musl-gcc-ranlib
TARGET_NM :  mips-openwrt-linux-musl-gcc-nm
BUILD_KEY :  /home/lsgx/develop/lede-17.01.4-Mod/key-build
TARGET_CC :  mips-openwrt-linux-musl-gcc
TARGET_CXX :  mips-openwrt-linux-musl-g++
KPATCH :  /home/lsgx/develop/lede-17.01.4-Mod/scripts/patch-kernel.sh
TARGET_CONFIGURE_OPTS :  AR=mips-openwrt-linux-musl-gcc-ar AS=mips-openwrt-linux-musl-gcc -c -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -Wno-implicit-fallthrough -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/home/lsgx/develop/lede-17.01.4-Mod/build_dir/target-mips_24kc_musl-1.1.24/lx-hello-1.0.1:lx-hello-1.0.1 -Wformat -Werror=format-security -fstack-protector-strong -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -I/home/lsgx/develop/lede-17.01.4-Mod/staging_dir/target-mips_24kc_musl-1.1.24/usr/include LD=mips-openwrt-linux-musl-ld NM=mips-openwrt-linux-musl-gcc-nm CC=mips-openwrt-linux-musl-gcc GCC=mips-openwrt-linux-musl-gcc CXX=mips-openwrt-linux-musl-g++ RANLIB=mips-openwrt-linux-musl-gcc-ranlib STRIP=mips-openwrt-linux-musl-strip OBJCOPY=mips-openwrt-linux-musl-objcopy OBJDUMP=mips-openwrt-linux-musl-objdump SIZE=mips-openwrt-linux-musl-size
===========================

 

以下是全部:

APP名称释义
LuCI ---> Applications luci-app-accesscontrol # 访问时间控制
LuCI ---> Applications luci-app-adblock #ADB 广告过滤
LuCI ---> Applications luci-app-adbyby-plus # 广告屏蔽大师 Plus +
LuCI ---> Applications luci-app-adbyby # 广告过滤大师(已弃)
LuCI ---> Applications luci-app-adkill # 广告过滤(已弃)
LuCI ---> Applications luci-app-advanced-reboot #Linksys 高级重启
LuCI ---> Applications luci-app-ahcp # 支持 AHCPd
LuCI ---> Applications luci-app-aliddns # 阿里 DDNS 客户端(已弃,集成至 ddns)
LuCI ---> Applications luci-app-amule #aMule 下载工具
LuCI ---> Applications luci-app-aria2 # Aria2 下载工具
LuCI ---> Applications luci-app-arpbind #IP/MAC 绑定
LuCI ---> Applications luci-app-asterisk # 支持 Asterisk 电话服务器
LuCI ---> Applications luci-app-attendedsysupgrade # 固件更新升级相关
LuCI ---> Applications luci-app-autoreboot # 支持计划重启
LuCI ---> Applications luci-app-baidupcs-web # 百度网盘管理 *
LuCI ---> Applications luci-app-bcp38 #BCP38 网络入口过滤(不确定)
LuCI ---> Applications luci-app-birdl-ipv4 # 对 Birdl-ipv6 的支持 *
LuCI ---> Applications luci-app-birdl-ipv6 # 对 Birdl-ipv4 的支持 *
LuCI ---> Applications luci-app-bird4 #Bird 4(未知)(已弃)
LuCI ---> Applications luci-app-bird6 #Bird 6(未知)(已弃)
LuCI ---> Applications luci-app-bmx6 #BMX6 路由协议
LuCI ---> Applications luci-app-bmx7 #BMX7 路由协议
LuCI ---> Applications luci-app-caldav # 联系人(已弃)
LuCI ---> Applications luci-app-cifsd # 网络共享 CIFS/SMB 服务器 *
LuCI ---> Applications luci-app-cjdns # 加密 IPV6 网络相关
LuCI ---> Applications luci-app-clamav #ClamAV 杀毒软件
LuCI ---> Applications luci-app-commands #Shell 命令模块
LuCI ---> Applications luci-app-cshark #CloudShark 捕获工具
LuCI ---> Applications luci-app-ddns # 动态域名 DNS(集成阿里 DDNS 客户端)
LuCI ---> Applications luci-app-diag-core #core 诊断工具
LuCI ---> Applications luci-app-dnscrypt-proxy #DNSCrypt 解决 DNS 污染
LuCI ---> Applications luci-app-dnsforwarder #DNSForwarder 防 DNS 污染
LuCI ---> Applications luci-app-dnspod #DNSPod
LuCI ---> Applications luci-app-docker #Docker 容器 *
LuCI ---> Applications luci-app-dump1090 # 民航无线频率(不确定)
LuCI ---> Applications luci-app-dynapoint #DynaPoint(未知)
LuCI ---> Applications luci-app-e2guardian #Web 内容过滤器
LuCI ---> Applications luci-app-familycloud # 家庭云盘
LuCI ---> Applications luci-app-filetransfer # 文件传输(可 web 安装 ipk 包)
LuCI ---> Applications luci-app-firewall # 添加防火墙
LuCI ---> Applications luci-app-flowoffload #Turbo ACC 网络加速(集成 FLOW,BBR,NAT,DNS...
LuCI ---> Applications luci-app-freifunk-diagnostics #freifunk 组件 诊断(未知)
LuCI ---> Applications luci-app-freifunk-policyrouting #freifunk 组件 策略路由(未知)
LuCI ---> Applications luci-app-freifunk-widgets #freifunk 组件 索引(未知)
LuCI ---> Applications luci-app-frpc # 内网穿透 Frp
LuCI ---> Applications luci-app-fwknopd #Firewall Knock Operator 服务器
LuCI ---> Applications luci-app-guest-wifi #WiFi 访客网络
LuCI ---> Applications luci-app-gfwlist #GFW 域名列表(已弃)
LuCI ---> Applications luci-app-haproxy-tcp #HAProxy 负载均衡 - TCP
LuCI ---> Applications luci-app-hd-idle # 硬盘休眠
LuCI ---> Applications luci-app-hnet #Homenet Status 家庭网络控制协议
LuCI ---> Applications luci-app-ipsec-virtual**d #virtual** 服务器 IPSec
LuCI ---> Applications luci-app-kodexplorer #KOD 可道云私人网盘
LuCI ---> Applications luci-app-kooldns #virtual** 服务器 ddns 替代方案(已弃)
LuCI ---> Applications luci-app-koolproxy #KP 去广告(已弃)
LuCI ---> Applications luci-app-lxc #LXC 容器管理
LuCI ---> Applications luci-app-meshwizard #网络设置向导
LuCI ---> Applications luci-app-minidlna # 完全兼容 DLNA / UPnP-AV 客户端的服务器软件
LuCI ---> Applications luci-app-mjpg-streamer # 兼容 Linux-UVC 的摄像头程序
LuCI ---> Applications luci-app-mtwifi #MTWiFi 驱动的支持 *
LuCI ---> Applications luci-app-mmc-over-gpio # 添加 SD 卡操作界面(已弃)
LuCI ---> Applications luci-app-multiwan # 多拨虚拟网卡(已弃,移至 syncdial)
LuCI ---> Applications luci-app-mwan #MWAN 负载均衡(已弃)
LuCI ---> Applications luci-app-mwan3 #MWAN3 负载均衡
LuCI ---> Applications luci-app-mwan3helper #MWAN3 分流助手
LuCI ---> Applications luci-app-n2n_v2 #N2N 内网穿透 N2N v2 virtual** 服务
LuCI ---> Applications luci-app-netdata #Netdata 实时监控(图表) *
LuCI ---> Applications luci-app-nft-qos #QOS 流控 Nftables 版
LuCI ---> Applications luci-app-ngrokc #Ngrok 内网穿透(已弃)
LuCI ---> Applications luci-app-nlbwmon # 网络带宽监视器
LuCI ---> Applications luci-app-noddos #NodDOS Clients 阻止 DDoS 攻击
LuCI ---> Applications luci-app-nps # 内网穿透 nps *
LuCI ---> Applications luci-app-ntpc #NTP 时间同步服务器
LuCI ---> Applications luci-app-ocserv #OpenConnect virtual** 服务
LuCI ---> Applications luci-app-olsr #OLSR 配置和状态模块
LuCI ---> Applications luci-app-olsr-services #OLSR 服务器
LuCI ---> Applications luci-app-olsr-viz #OLSR 可视化
LuCI ---> Applications luci-app-openvirtual** #Openvirtual** 客户端
LuCI ---> Applications luci-app-openvirtual**-server # 易于使用的 Openvirtual** 服务器 Web-UI
LuCI ---> Applications luci-app-oscam #OSCAM 服务器(已弃)
LuCI ---> Applications luci-app-p910nd # 打印服务器模块
LuCI ---> Applications luci-app-pagekitec #Pagekite 内网穿透客户端
LuCI ---> Applications luci-app-polipo #Polipo 代理 (是一个小型且快速的网页缓存代理)
LuCI ---> Applications luci-app-pppoe-relay #PPPoE NAT 穿透 点对点协议(PPP)
LuCI ---> Applications luci-app-p p t p-server #virtual** 服务器 p p t p
LuCI ---> Applications luci-app-privoxy #Privoxy 网络代理 (带过滤无缓存)
LuCI ---> Applications luci-app-qbittorrent #BT 下载工具(qBittorrent)
LuCI ---> Applications luci-app-qos # 流量服务质量 (QoS) 流控
LuCI ---> Applications luci-app-radicale #CalDAV/CardDAV 同步工具
LuCI ---> Applications luci-app-ramfree # 释放内存
LuCI ---> Applications luci-app-rp-pppoe-server #Roaring Penguin PPPoE Server 服务器
LuCI ---> Applications luci-app-samba # 网络共享(Samba)
LuCI ---> Applications luci-app-samba4 # 网络共享(Samba4)
LuCI ---> Applications luci-app-sfe #Turbo ACC 网络加速(已弃,移至 flowoffload)
LuCI ---> Applications luci-app-s-s #SS 兲朝上网(已弃)
LuCI ---> Applications luci-app-s-s-libes #SS-libev 服务端
LuCI ---> Applications luci-app-shairplay # 支持 AirPlay 功能
LuCI ---> Applications luci-app-siitwizard #SIIT 配置向导 SIIT-Wizzard
LuCI ---> Applications luci-app-simple-adblock # 简单的广告拦截
LuCI ---> Applications luci-app-softethervirtual** #SoftEther virtual** 服务器 NAT 穿透 *
LuCI ---> Applications luci-app-splash #Client-Splash 是无线 MESH 网络的一个热点认证系统
LuCI ---> Applications luci-app-sqm # 流量智能队列管理(QOS)
LuCI ---> Applications luci-app-squid #Squid 代理服务器
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus # 乳酸菌饮料兲朝上网 Plus+
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus ---> Include s-s New Versiong # 新 SS 代理
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus ---> Include v2 瑞 #v2 瑞透明代理
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus ---> Include Trojan #Trojan 代理 *
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus ---> Include Kcptun #Kcptun 代理
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus ---> Include 违禁软件 Server # 乳酸菌饮料服务器
LuCI ---> Applications luci-app - 乳酸菌饮料 - plus ---> Include 违禁软件 Socks and Tunnel # 乳酸菌饮料代理
LuCI ---> Applications luci-app - 乳酸菌饮料 - pro # 乳酸菌饮料 - Pro(已弃)
LuCI ---> Applications luci-app - 乳酸菌饮料 server-python # 违禁软件 Python 服务器
LuCI ---> Applications luci-app-statistics # 流量监控工具
LuCI ---> Applications luci-app-syncdial # 多拨虚拟网卡(原 macvlan)
LuCI ---> Applications luci-app-tinyproxy #Tinyproxy 是 HTTP (S) 代理服务器
LuCI ---> Applications luci-app-transmission #BT 下载工具
LuCI ---> Applications luci-app-travelmate # 旅行路由器
LuCI ---> Applications luci-app-ttyd # 网页终端命令行
LuCI ---> Applications luci-app-udpxy #udpxy 做组播服务器
LuCI ---> Applications luci-app-uhttpd #uHTTPd Web 服务器
LuCI ---> Applications luci-app-unblockmusic # 解锁网易云灰色歌曲
LuCI ---> Applications luci-app-unbound #Unbound DNS 解析器
LuCI ---> Applications luci-app-upnp # 通用即插即用 UPnP(端口自动转发)
LuCI ---> Applications luci-app-usb-printer #USB 打印服务器
LuCI ---> Applications luci-app-v2 瑞 - server #v2 瑞 服务器
LuCI ---> Applications luci-app-v2 瑞 - pro #v2 瑞透明代理(已弃,集成乳酸菌饮料)
LuCI ---> Applications luci-app-verysync # 微力同步 *
LuCI ---> Applications luci-app-vlmcsd #KMS 服务器设置
LuCI ---> Applications luci-app-vnstat #vnStat 网络监控(图表)
LuCI ---> Applications luci-app-virtual**bypass #virtual** BypassWebUI 绕过 virtual** 设置
LuCI ---> Applications luci-app-vsftpd #FTP 服务器
LuCI ---> Applications luci-app-watchcat # 断网检测功能与定时重启
LuCI ---> Applications luci-app-webadmin #Web 管理页面设置
LuCI ---> Applications luci-app-webshell # 网页命令行终端(已弃)
LuCI ---> Applications luci-app-wifischedule #WiFi 计划
LuCI ---> Applications luci-app-wireguard #virtual** 服务器 WireGuard 状态
LuCI ---> Applications luci-app-wirele 违禁软件 egdb #WiFi 无线
LuCI ---> Applications luci-app-wol #WOL 网络唤醒
LuCI ---> Applications luci-app-wrtbwmon # 实时流量监测
LuCI ---> Applications luci-app-xlnetacc # 迅雷快鸟
LuCI ---> Applications luci-app-zerotier #ZeroTier 内网穿透

支持 iPv6:
1、Extra packages ---> ipv6helper (选定这个后下面几项自动选择了)

Network ---> odhcp6c
Network ---> odhcpd-ipv6only
LuCI ---> Protocols ---> luci-proto-ipv6
LuCI ---> Protocols ---> luci-proto-ppp

2、打开适用于 VMware 的 VM Tools
Utilities ---> open-vm-tools

 

How To Install gcc-8 Only on Ubuntu 18.04

https://devicetests.com/install-gcc-8-ubuntu-18-04

https://askubuntu.com/questions/1028601/install-gcc-8-only-on-ubuntu-18-04

Prerequisites

Before starting, ensure that you have a functioning Ubuntu 18.04 system. You should also have superuser (sudo) privileges.

Step 1: Update Your System

Before installing any new software, it’s a good practice to update your system’s package list. Run the following command in your terminal:

sudo apt-get update

This command fetches the latest list of packages from the repositories.

Step 2: Install gcc-8 and g++-8

The next step is to install gcc-8 and its companion g++-8. Run the following command:

sudo apt-get install gcc-8 g++-8

This command installs both gcc-8 and g++-8 on your system. gcc is the GNU Compiler Collection, and g++ is the compiler for the C++ programming language.

Step 3: Configure gcc-8 as the Default Compiler

After installing gcc-8, you need to configure it as the default compiler. This is where update-alternatives comes in. The update-alternatives command creates, removes, maintains, and displays information about the symbolic links comprising the Debian alternatives system.

Use the following commands:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8

The --install option is used to add alternatives to the system. /usr/bin/gcc is the master link. gcc is the name of its symlink. /usr/bin/gcc-7 and /usr/bin/gcc-8 are the alternatives being introduced for the master link. The numbers 700 and 800 are the priorities of the alternatives. Higher numbers have higher priority.

The --slave option is used to link a group of related alternatives such that when the master is changed, the slave is also changed. /usr/bin/g++ is the slave link, and /usr/bin/g++-7 and /usr/bin/g++-8 are the alternatives for the slave link.

Step 4: Verify the Installation

To verify that gcc-8 is the default version, use the following command:

gcc --version

This command displays the version of gcc that is currently being used by your system. If the installation was successful, it should display gcc-8.

Step 5: Change the Default gcc Version (Optional)

If you want to switch to a different gcc version in the future, use the following command:

sudo update-alternatives --config gcc

This command will display a prompt where you can select the gcc version you want to use.

Conclusion

By following these steps, you can successfully install and configure gcc-8 as the default gcc version on Ubuntu 18.04. This will enable you to compile and run your programs using gcc-8.

 

============= End

 

posted @ 2022-11-06 22:10  lsgxeva  阅读(590)  评论(0编辑  收藏  举报