2019年8月30日金曜日

Openwrtでオレオレなパッケージ

Openwrtでオレオレなパッケージ

温度差と仕事が忙しすぎて、やる気が1/10くらいになっている。
睡眠不足だし、悪循環だよね。
今回は、オレオレなパッケージを作ってみる。
ドライバーの作り方も整理したかったけど、また後で。

オレオレなパッケージ

この手順通りでやってみる
https://openwrt.org/docs/guide-developer/helloworld/start

クロスコンパイルツールチェーンの準備

make toolchain/install

HelloWorldをやってみる

ソースの準備

https://openwrt.org/docs/guide-developer/helloworld/chapter2
まずはこの手順に従い、対象となるHelloWorldを作成する。
[myapp/helloworld/helloworld.c]
#include <stdio.h>
int main(void)
{
    printf("\nHello, world!\n\n");
        return 0;
}
https://openwrt.org/docs/guide-developer/helloworld/chapter3

Makefileの準備

Makefileは上記サンプルからパスのみ変更
[mypackages/examples/helloworld/Makefile]
include $(TOPDIR)/rules.mk

# Name, version and release number
# The name and version of your package are used to define the variable to point to the build directory of your package: $(PKG_BUILD_DIR)
PKG_NAME:=helloworld
PKG_VERSION:=1.0
PKG_RELEASE:=1

# Source settings (i.e. where to find the source codes)
# This is a custom variable, used below
SOURCE_DIR:=/******/myapp/helloworld

include $(INCLUDE_DIR)/package.mk

# Package definition; instructs on how and where our package will appear in the overall configuration menu ('make menuconfig')
define Package/helloworld
 SECTION:=examples
 CATEGORY:=Examples
 TITLE:=Hello, World!
endef

# Package description; a more verbose description on what our package does
define Package/helloworld/description
 A simple "Hello, world!" -application.
endef

# Package preparation instructions; create the build directory and copy the source code. 
# The last command is necessary to ensure our preparation instructions remain compatible with the patching system.
define Build/Prepare
 mkdir -p $(PKG_BUILD_DIR)
 cp $(SOURCE_DIR)/* $(PKG_BUILD_DIR)
 $(Build/Patch)
endef

# Package build instructions; invoke the target-specific compiler to first compile the source file, and then to link the file into the final executable
define Build/Compile
 $(TARGET_CC) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/helloworld.o -c $(PKG_BUILD_DIR)/helloworld.c
 $(TARGET_CC) $(TARGET_LDFLAGS) -o $(PKG_BUILD_DIR)/$1 $(PKG_BUILD_DIR)/helloworld.o
endef

# Package install instructions; create a directory inside the package to hold our executable, and then copy the executable we built previously into the folder
define Package/helloworld/install
 $(INSTALL_DIR) $(1)/usr/bin
 $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin
endef

# This command is always the last, it uses the definitions and variables we give above in order to get the job done
$(eval $(call BuildPackage,helloworld))
結構たくさんやることあるね
https://openwrt.org/docs/guide-developer/helloworld/chapter4

feedとして登場させるための準備

[feeds.conf]
src-link mypackages /******/mypackages
ソースはmyapp、Makefileはmypackagesという設定のようだ。
このあたりは、パラメータで自由に出来るところ。

パッケージの生成

./scripts/feeds update mypackages
./scripts/feeds install -a -p mypackages
これで、
[bin/packages/aarch64_cortex-a53/mypackages]に
Packages
Packages.gz
Packages.manifest
Packages.sig
helloworld_1.0-1_aarch64_cortex-a53.ipk
が生成された!
memuconfigで組み込んだり、単独でコンパイルすることも出来そうだ。
make package/helloworld/compile



やったー。

パッケージのインストール・実行

ここまでくれば、いつものパッケージと同じ
opkg install helloworld_1.0-1_aarch64_cortex-a53.ipk

0 件のコメント:

コメントを投稿