openwrt添加自己的應用程序

在開發自己的openwrt固件時往往會編寫自己的應用程序,那麼如何使用openwrt的框架將自己的代碼嵌套進去呢?然後隨編譯出來的固件一起下載的設備中呢,或者動態選擇的方式裝載呢?

下面兩種方式根據自己的理解一一說明,希望可以幫助的別人:
- 隨固件一起打包fw
- 通過ipk方式選擇安裝

首先新建自己的packages

下面具體說下,如何編譯一個zl380tw的軟件包。假如我們的openwrt目錄爲$<TOPDIR>

1、在$<TOPDIR> /package目錄下創建zl380tw目錄及相關的目錄
mkdir -p $<TOPDIR>/package/zl380tw/src
mkdir -p $<TOPDIR>/package/zl380tw/include
mkdir -p $<TOPDIR>/package/zl380tw/lib
cd $<TOPDIR>/package/zl380tw
ls
include  lib  src

2、創建編寫自己的source code
通過第一步文件目錄準備好了後,開始準備編寫自己的source code了,在此編寫的有8個c文件
ls src
tw_hal_verify.c  vproc_data_types.h   zl380twolf_config.h
tw_ldfwcfg.c     zl380twolf_firmware.c  zl380twolf_firmware.h
tw_spi_access.c  zl380twolf_config.c

3、編寫自己的source code makefile
這個src目錄下的makefile實際上和wrt沒有太多關係,也就是一個正常的編譯規則脫離了wrt同樣make也可以編譯出自己的target obj
下面貼一下src/Makefile或許可以幫到別人
cat /src/Makefile
#seven
#TOOLCHAINDIR=/home/seven/work/mtk/openwrt/mt7620v1505/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin
#CC=$(TOOLCHAINDIR)/mipsel-openwrt-linux-uclibc-gcc

PROGS_SPI_ACCESS:=tw_spi_access
PROGS_TW=tw

INSTDIR=$(prefix)/usr/bin
INSTMODE=0755
INSTOWNER=root
INSTGROUP=root

OBJS2 := zl380twolf_firmware.o
OBJS1 := zl380twolf_config.o
#TW_OBJS=tw.o
OBJS = $(OBJS1) $(OBJS2)
CPPFLAGS+=-I./ -I../include
LDFLAGS+= -L../lib -lzl380tw -static

all: $(PROGS_SPI_ACCESS) $(PROGS_TW)

$(PROGS_SPI_ACCESS): $(OBJS) tw_spi_access.c
     $(CC) $^ $(CPPFLAGS) $(LDFLAGS) $(LDLIBS) -o $@

$(PROGS_TW): $(OBJS)  tw_hal_verify.c
     $(CC) $^ $(CPPFLAGS) $(LDFLAGS) $(LDLIBS) -o $@

#$(OBJS): tw_spi_access.c twolf.o
#     $(CC) $(CFLAGS) $(LDFLAGS) -o $@

$(OBJS1): zl380twolf_config.c
     $(CC) -c $(CPPFLAGS) $^ -o $@
     #$(CC) tw_spi_access.c zl380twolf_config.c zl380twolf_firmware.c $(CFLAGS) $(LDFLAGS) -o $(PROGS)
$(OBJS2): zl380twolf_firmware.c
     $(CC) -c $(CPPFLAGS) $^ -o $@

install: $(PROGS_SPI_ACCESS) $(PROGS_TW)
     $(INSTALL) -d $(INSTDIR)
     $(INSTALL) -m $(INSTMODE) -o $(INSTOWNER) -g $(INSTGROUP) $(PROGS_SPI_ACCESS) $(INSTDIR)
     $(INSTALL) -m $(INSTMODE) -o $(INSTOWNER) -g $(INSTGROUP) $(PROGS_TW) $(INSTDIR)

clean:
     rm -f $(PROGS_SPI_ACCESS) $(PROGS_TW) *.o core

4、創建openwrt解析的Makefile
這個makefile纔是真正高手wrt讀取自己的應用程序創建編譯產出的的一個規則,它所在的位置爲用戶程序的頂層目錄即zl380tw目錄下
cd $<TOPDIR>/package/zl380tw
ls
include  lib  Makefile  src

同樣貼一下
cat Makefile
#seven
include $(TOPDIR)/rules.mk          //像其他package一樣添加規則
#include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:= zl380tw     //包的名字 可以隨便取
PKG_RELEASE:=1               //自定義
PKG_VERSION:=1.0              //自定義

include $(INCLUDE_DIR)/package.mk     //讀取package規則
#PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)

define Package/zl380tw          //創建菜單條目
     SECTION:=utils                    //屬於哪個類別,在此屬於utils
     CATEGORY:=Utilities
     TITLE:=Microsemi r/w test     //在菜單顯示標題
endef

define Package/zl380tw/description  //描述信息 自定義
     ZL380tw building test
endef

define Build/Prepare               //創建包編譯位置
     mkdir -p $(PKG_BUILD_DIR)/src
     $(CP) ./src/* $(PKG_BUILD_DIR)/src/
     $(CP) ./include $(PKG_BUILD_DIR)/
     $(CP) ./lib $(PKG_BUILD_DIR)/
endef

define Build/Compile     //編譯路徑 此處會執行src/Makefile創建目標程序
     $(MAKE) -C $(PKG_BUILD_DIR)/src \
     $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"
endef

define Package/zl380tw/install     //此處對目標文件產出位置做安排,如果不想打包進fw,需要移除此項,然後通過 opkg install xxx.ipk安裝
     $(INSTALL_DIR) $(1)/usr/bin
     $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/tw $(1)/usr/bin
     $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/tw_spi_access $(1)/usr/bin
     $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/raklink $(1)/usr/bin
endef

$(eval $(call BuildPackage,zl380tw))     

通過以上幾步就可以實現自己程序添加到wrt框架中

剩下的就是執行make menuconfig選擇剛纔添加的package並且make -j4 V=99進行編譯
$make menuconfig 
Utilities  --->   
  │ │                               < > yunbridge..................................... Arduino YUN bridge library                        │ │  
  │ │                               <*> zl380tw............................................... Microsemi r/w test                        │ │  
  │ │                               < > zsh.......................................................... The Z shell 
編譯過程會在build_dir目錄下完成
編譯結果會放在 bin/[yourtarget]/package目錄下
如果打包進fw,會在usr/bin下找到可執行文件
如果採用opk方式,需要將ipk包下載到目標板中執行opkg install *.ipk




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章