免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

OpenWRT如何創建軟件包

這篇文章給大家分享的是有關OpenWRT如何創建軟件包的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創新互聯從2013年成立,先為南昌等服務建站,南昌等地企業,進行企業商務咨詢服務。為南昌企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

第一步:生成SDK

make menuconfig 選上 “Build the OpenWRT SDK”

在 trunk目錄下,執行:

$ make menuconfig

選擇對應的"Target System"與"Target Profile",并選上"Build the OpenWrt SDK"。

OpenWRT如何創建軟件包

然后 Save,退出。再make一次。

$ make V=99

make 完成之后,在 bin/ar71xx/ 目錄下會生成SDK的壓縮文件:

OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2

第二步:安裝SDK

將上面所生成的 OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2 復制到其它路徑下(指可以不在OpenWrt的源碼路徑下),再解壓出來。

比如我將其放到 ~/Workspace/OpenWRT/ 路徑下:

$ cp bin/ar71xx/OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2 ~/Workspace/OpenWRT
$ cd ~/Workspace/OpenWRT
$ tar jxvf OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2

在 ~/Workspace/OpenWRT/ 路徑下就生成了 OpenWrt-SDK-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686 目錄。

為了方便,我將這個長長的目錄名簡化為:OpenWrt-SDK。修改后,完整的路徑是:~/Workspace/OpenWRT/OpenWrt-SDK

據說這個目錄結構跟 OpenWrt的源碼目錄結構差不多。

第三步:創建helloworld項目

其實,這里可以是任意我們想要加入的程序,庫等。這里就以helloword為例。

在任意路徑下,創建helloword項目。比如這里還是在 ~/Workspace/OpeWRT 目錄下。

$ cd ~/Workspace/OpenWRT
$ mkdir helloword
$ cd helloword
$ touch helloword.c Makefile

在 ~/Workspace/OpenWRT/ 目錄下創建了 helloword 目錄,并生成 helloword.c與Makefile文件。

如下為 helloworld.c的內容:

#include <stdio.h>

int main()
{
    printf("This is my hello word!\n");
    return 0;
}

Makefile的內容:

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

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

clean :
    rm *.o helloworld

首先,確保在程序沒問題,在本地能正常編過。為了檢驗一下,可以就地 make 一下,看程序本身有沒有問題。

這個程序都如些之簡單了,本人自己了make了一下,OK,再run了一下,正常。

第四步:創建helloworld包

進入 OpenWrt/Packages/ 并在該目錄下創建 helloworld 目錄,并進入該目錄。

$ cd ~/Workspace/OpenWrt/OpenWrt-SDK/package
$ mkdir helloworld
$ cd helloworld

將我們第三步寫的程序復制到這個目錄下來,更名為src。再新建一個 Makefile 文件。

$ cp -r ../../../helloworld src
$ touch Makefile

整個過程下來,package目錄結構如下:

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

package/Makefile 不要去修改它。

我們要編寫的是 package/helloworld/Makefile 這個文件。

在這個文件中,我們要描述 helloworld 包的信息,比如:如何配置、如何編譯、如何打包、安裝等等信息。
這個文件與一般的 Makefile 格式還不一樣,詳見OpenWrt上的說明文檔:OpenWrt官網Packages說明

這里我就依照例子編寫 helloworld/Makefile:

include $(TOPDIR)/rules.mk

PKG_NAME:=helloworld
PKG_RELEASE:=1

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

include $(INCLUDE_DIR)/package.mk

define Package/helloworld
    SECTION:=utils
    CATEGORY:=Utilities
    TITLE:=Helloworld -- prints a snarky message
endef

define Package/helloworld/description
    It's my first package demo.
endef

define Package/helloworld/Prepare
    echo "Here is Package/Prepare"
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Package/helloworld/install
    echo "Here is Package/install"
    $(INCLUDE_DIR) $(1)/bin
    $(INCLUDE_BIN) $(PKG_BUILD_DIR)/helloworld$(1)/bin/
endef

$(eval $(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,">。不會吧!多個空格少個空格都會導致語法錯誤?!

好了,改正過來了。

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

現在 make V=s 不再是剛才那個錯了。

make[3]: Entering directory `/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/package/helloworld'
CFLAGS="-Os -pipe -mno-branch-likely -mips32r2 <此處省略好長串...>" 
CXXFLAGS="-Os -pipe -mno-branch-likely -mips32r2 <此處省略好長串...>" 
LDFLAGS="<此處省略好長串...>" 
make -j1 -C /home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/build_dir/target-mips_34kc_uClibc-0.9.33.2/helloworld/. 
AR="mips-openwrt-linux-uclibc-gcc-ar" 
AS="mips-openwrt-linux-uclibc-gcc -c -Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float" 
LD=mips-openwrt-linux-uclibc-ld 
NM="mips-openwrt-linux-uclibc-gcc-nm" 
CC="mips-openwrt-linux-uclibc-gcc" 
GCC="mips-openwrt-linux-uclibc-gcc" 
CXX="mips-openwrt-linux-uclibc-g++" 
RANLIB="mips-openwrt-linux-uclibc-gcc-ranlib" 
STRIP=mips-openwrt-linux-uclibc-strip 
OBJCOPY=mips-openwrt-linux-uclibc-objcopy 
OBJDUMP=mips-openwrt-linux-uclibc-objdump 
SIZE=mips-openwrt-linux-uclibc-size 
CROSS="mips-openwrt-linux-uclibc-" 
ARCH="mips" ;
make[4]: Entering directory `/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/build_dir/target-mips_34kc_uClibc-0.9.33.2/helloworld'
make[4]: *** No targets specified and no makefile found.  Stop.  # 錯誤:沒有找 Makefile 文件!!
make[4]: Leaving directory `/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/build_dir/target-mips_34kc_uClibc-0.9.33.2/helloworld'
make[3]: *** [/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/build_dir/target-mips_34kc_uClibc-0.9.33.2/helloworld/.built] Error 2
make[3]: Leaving directory `/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/package/helloworld'
make[2]: *** [package/helloworld/compile] Error 2
make[2]: Leaving directory `/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK'
make[1]: *** [/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK/staging_dir/target-mips_34kc_uClibc-0.9.33.2/stamp/.package_compile] Error 2
make[1]: Leaving directory `/home/hevake_lcj/Workspace/OpenWRT/my-packages/OpenWrt-SDK'
make: *** [world] Error 2

為什么 build_dir/target-mips_34kc_uClibc-0.9.33.2/helloworld 目錄下沒有 Makefile 文件?

我們要好好排查一個 package/helloworld/Makefile 文件中的 Package/helloworld/Prepare 宏。

define Package/helloworld/Prepare
    echo "Here is Package/Prepare"
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

好像這個宏壓根沒有被執行到。

為什么呢?

<今天太晚了,明天再整>

<接著昨晚的問題>

最后與例子仔細比對,發現原來我將 "Build/Prepare" 寫成了 "Package/helloworld/Prepare"。

最終完整的 Makefile 文件如下:

include $(TOPDIR)/rules.mk

PKG_NAME:=helloworld
PKG_RELEASE:=1

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

include $(INCLUDE_DIR)/package.mk

define Package/helloworld
    SECTION:=utils
    CATEGORY:=Utilities
    TITLE:=Helloworld -- prints a snarky message
endef

define Package/helloworld/description
    It's my first package demo.
endef

define Build/Prepare   #已修正
    echo "Here is Package/Prepare"
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Package/helloworld/install
    echo "Here is Package/install"
    $(INSTALL_DIR) $(1)/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/
endef

$(eval $(call BuildPackage,helloworld))   #已去除逗號后面的空格

這次 make -j1 V=s 成功了。生成了 helloworld_1_ar71xx.ipk 。find 一下,看在哪里。

$ find -name helloworld*.ipk
./bin/ar71xx/packages/base/helloworld_1_ar71xx.ipk

第五步:試驗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

SSH登陸路由器,并安裝 helloworld_1_ar71xx.ipk包。

$ ssh root@192.168.1.2
root@192.168.1.2's password: 

BusyBox v1.23.2 (2015-05-03 12:46:04 CST) built-in shell (ash)
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (Bleeding Edge, r45594)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------
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/ 路徑下。

感謝各位的閱讀!關于“OpenWRT如何創建軟件包”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

本文題目:OpenWRT如何創建軟件包
URL鏈接:http://m.newbst.com/article48/gdeghp.html

成都網站建設公司_創新互聯,為您提供虛擬主機面包屑導航定制網站網頁設計公司品牌網站設計品牌網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設