(Basat en http://downloads.openwrt.org/kamikaze/docs/openwrt.html#x1-380002.1.2 )
Una vegada fet el checkout amb kamikaze hem d'anar a la carpeta packages i crear un directori (nom del packet) amb un fitxer Makefile i dues carpetes patches i files.
cd <kamikaze_path> mkdir package/<package_name>/ mkdir package/<package_name>/patches mkdir package/<package_name>/files
Després hem de crear el Makefile on donarem tota la informació per què el make world de la compilació trobi les fonts i pugui cross-compliar les fonts.
Fent el paquet 'hello':
# Hem de definir les variables:
# $APACHE_HOME (on tinguem el web server)
# $KAMIKAZE_PATH on hem fet el checkout del svn de openwrt
mkdir hello-0.1
cd hello-0.1
# Creem el programa.
cat <<EOF > hello.c
#include <stdio.h>
int main ( void )
{
printf("Hola graciasensefils!");
return(0);
}
EOF
# Creem el seu Makefile
cat <<EOF > Makefile
all: hello
clear:
rm -f hello
EOF
cd ..
tar -zcvf hello-0.1.tgz hello-0.1
CHECKSUM=`md5sum -b hello-0.1.tgz|cut -d ' ' -f 1`
cp hello-0.1.tgz $APACHE_HOME
cd $KAMIKAZE_PATH
mkdir package/hello
mkdir package/hello/patches
# Creem el Makefile del paquet.
cat <<EOF >package/hello/Makefile
#Id hello.c 2008 07 29 agusti moll
include $(TOPDIR)/rules.mk
PKG_NAME:=hello
PKG_VERSION:=0.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
PKG_SOURCE_URL:=http://localhost/
EOF
echo "PKG_MD5SUM:=$CHECKSUM" >>package/hello/Makefile
cat <<EOF >>package/hello/Makefile
PKG_CAT:=zcat
PKG_BUILD_DIR:=$(BUILD_DIR)/hello-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
define Package/hello
SECTION:=other
CATEGORY:=Test system
TITLE:=Programa tipic per provar la sortida estandard
URL:=http://localhost/
endef
define Package/hello/description
Tipic programa per fer testing de la sortida estandar, i
provar una compilacio amb openwrt.
endef
CONFIGURE_ARGS += \
--with-linux-headers="$(LINUX_DIR)" \
define Package/hello/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/usr/bin/
endef
$(eval $(call BuildPackage,hello))
EOF
# Ara ja haurà de sortir al llistat de paquets, a la categoria que
# hem definit, "Test system"
make menuconfig
# Una vegada sel·leccionat ja podem compilar.
make world V=99
La idea és la mateixa que l'exemple anterior però el paquet en comptes de estar descarregable vía URL, el tenim directament en el directori del paquet.
Exemple basat en <kamikaze_path>/package/mtd
# A $KAMIKAZE_PATH inicialitzem el path del kamikaze
cd $KAMIKAZE_PATH
mkdir package/hello2/
mkdir package/hello2/src/
cat <<EOF > package/hello2/src/hello2.c
#include <stdio.h>
int main ( void )
{
printf("Hola graciasensefils!");
return(0);
}
EOF
# Creem el seu Makefile
cat <<EOF > package/hello2/src/Makefile
all: hello2
clear:
rm -f hello2
EOF
cat <<EOF > package/hello2/Makefile
# $Id: hello2.c 2008 07 29 agusti moll
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=hello2
PKG_RELEASE:=1
PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/hello2
SECTION:=other
CATEGORY:=Test system
TITLE:=Yet anther Hello program, without package .tgz.
endef
define Package/hello2/description
Yet anther hello program.
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
$(TARGET_CONFIGURE_OPTS) \
CFLAGS="$(TARGET_CFLAGS) -Dtarget_$(BOARD)=1"
endef
define Package/hello2/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hello2 $(1)/usr/bin/
endef
$(eval $(call BuildPackage,hello2))
EOF
# Ara ja haurà de sortir al llistat de paquets, a la categoria que
# hem definit, "Test system"
make menuconfig
# Una vegada sel·leccionat ja podem compilar.
make world V=99