just short tutorial, no need to write too much, let’s go!!
first download openwrt sdk reffering to openwrt firmware/version you want direwolf to build.
ie:
i’m using NanoPI R2S so i downloaded openwrt-sdk-22.03.3-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64.xz
wget https://downloads.openwrt.org/releases/22.03.3/targets/rockchip/armv8/openwrt-sdk-22.03.3-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64.tar.xz tar -xf https://downloads.openwrt.org/releases/22.03.3/targets/rockchip/armv8/openwrt-sdk-22.03.3-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64.tar.xz cd openwrt-sdk-22.03.3-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64 mkdir -p mypackages/direwolf
that’s it you have direwolf installer for openwrt now!! is that simple.
no, i’m kidding. few more long steps to go 😀
update sdk tree
./scripts/feeds update -a ./scripts/feeds install -a make menuconfig
select Global Build settings
uncheck
- Select all target specific packages by default
- Select all kernel module packages by default
- Select all userspace packages by default
save and exit
create Makefile for direwolf
cd mypackages/direwolf vi Makefile
# # Copyright (C) 2018 Alianiqu Alianiqu@example.net # Copyright (C) 2020 Luceoria # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # modified by YD0BCX include $(TOPDIR)/rules.mk PKG_NAME:=direwolf PKG_VERSION:=1.7.0 PKG_RELEASE:=4 PKG_LICENSE:=BSD 3-Clause PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://kutukupret.com PKG_MD5SUM:=7b3a781fb4fdbf5af12642228630c98b PKG_SOURCE_VERSION:=$(PKG_REV) PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR) include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk ifneq ($(CONFIG_CCACHE),) HOSTCC=$(HOSTCC_NOCACHE) HOSTCXX=$(HOSTCXX_NOCACHE) endif PKG_BUILD_DEPENDS += alsa-lib TARGET_CFLAGS += $(FPIC) define Package/direwolf SECTION:=net CATEGORY:=mypackages DEPENDS:=+libpthread +alsa-lib +alsa-utils +libgps +libhamlib +libudev +kmod-usb-hid TITLE:=Hamradio APRS iGate / Digipeater URL:=@GITHUB/Luceoria/direwolf MAINTAINER:=Luceoria endef define Package/direwolf/description Dire Wolf is a software 'soundcard' AX.25 packet modem/TNC and APRS encoder/decoder. It can be used stand-alone to observe APRS traffic, as a tracker, digipeater, APRStt gateway, or Internet Gateway (IGate). endef define Build/direwolf/Configure $(call Build/Configure/Default --prefix=/usr) endef define Build/direwolf/Compile $(call Build/Compile/Default) endef define Package/direwolf/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/direwolf $(1)/usr/bin/direwolf $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/decode_aprs $(1)/usr/bin/decode_aprs $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/text2tt $(1)/usr/bin/text2tt $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/tt2text $(1)/usr/bin/tt2text $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ll2utm $(1)/usr/bin/ll2utm $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/utm2ll $(1)/usr/bin/utm2ll $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/aclients $(1)/usr/bin/aclients $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/log2gpx $(1)/usr/bin/log2gpx $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/gen_packets $(1)/usr/bin/gen_packets $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/atest $(1)/usr/bin/atest $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ttcalc $(1)/usr/bin/ttcalc $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/kissutil $(1)/usr/bin/kissutil $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/cm108 $(1)/usr/bin/cm108 $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/dwespeak.sh $(1)/usr/bin/dwspeak.sh $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/telemetry-toolkit/telem-* $(1)/usr/bin/ $(INSTALL_DIR) $(1)/usr/share/direwolf $(INSTALL_DATA) $(PKG_BUILD_DIR)/data/tocalls.txt $(1)/usr/share/direwolf/tocalls.txt $(INSTALL_DATA) $(PKG_BUILD_DIR)/data/symbols-new.txt $(1)/usr/share/direwolf/symbols-new.txt $(INSTALL_DATA) $(PKG_BUILD_DIR)/data/symbolsX.txt $(1)/usr/share/direwolf/symbolsX.txt endef $(eval $(call BuildPackage,direwolf))
save and exit
add mypackages to feeds.conf.default
adjust to your openwrt SDK full path. example:
src-git base https://git.openwrt.org/openwrt/openwrt.git;v22.03.3 src-git-full packages https://git.openwrt.org/feed/packages.git^2048c5bbf6c482e45b080eef4c1c531936f7f41b src-git-full luci https://git.openwrt.org/project/luci.git^396f4048bd1f4cae7cb6f085d360081d81ad2d9a src-git-full routing https://git.openwrt.org/feed/routing.git^1a87333f268bcf0a11e3a665a357cb0d4ec2d680 src-git-full telephony https://git.openwrt.org/feed/telephony.git^49abbb97e113ce7a35fe632acf6a8fff48dba5ec src-link mypackages /home/hari/openwrt-sdk-22.03.3-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64/mypackages
save and exit
now let’s prep direwolf itelsf
from current directory
cd ../../dl/ git clone https://www.github.com/wb2osz/direwolf direwolf-1.7.0 cd direwolf-1.7.0 git checkout dev
i don’t want to build direwolf with avahi.
now edit CMakeLists.txt
vi CMakeLists.txt
sreach for AVAHI keyword
/AVAHI
comment the section like this # find_package(Avahi) # if(AVAHI_CLIENT_FOUND) # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_AVAHI_CLIENT") # endif()
now on the same file search for misc (there’re 2 lines)
this misc section only for adding strlcpy and strlcat, openwrt toolchains already has those functions.
/MISC
comment the lines like this
#add_subdirectory(${CUSTOM_MISC_DIR}) and #set(CUSTOM_MISC_DIR "${CUSTOM_EXTERNAL_DIR}/misc")
edit cm108.c as i encounter error when compiling.
vi src/cm108.c
replace around line 678, from
SAFE_STRCPY (things[num_things].devpath, udev_device_get_devpath(dev));
to
SAFE_STRCPY (things[num_things].devpath, udev_device_get_syspath(dev));
save and exit
cd ../ let's compress direwolf1-7.0 directory to direwolf-1.7.0.tar.gz tar -czf direwolf-1.7.0.tar.gz direwolf-1.7.0
create md5 hash
md5sum direwolf-1.7.0.tar.gz hari@APRS:~/openwrt-sdk-22.03.3-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64/dl$ md5sum direwolf-1.7.0.tar.gz 7b3a781fb4fdbf5af12642228630c98b direwolf-1.7.0.tar.gz
copy the result and put to direwolf Make file like this
vi ../mypackages/direwolf/Makefile PKG_MD5SUM:=7b3a781fb4fdbf5af12642228630c98b
save and exit
update feeds.conf.default
./scripts/feeds update mypackages ./scripts/feeds install -a -p mypackages
now we’re ready to go!
compile time, take few days to compile for slow machine like mine.
no, i’m joking.
getback to top level sdk directory
cd ..
make -j $(($(nproc)+1)) package/direwolf/{clean,compile} V=sc
copy direwolf ipk toyour openwrt device(in mycase /tmp directeory) and install some module/packages.
the rest will automatically install by direworlf dependencies.
opkg update opkg install kmod-usb-audio kmod-hid opkg install /tmp/direwolf*.ipk
have fun
DISCLAIMER!!
this build intented to device with more than 64M or more. beacause direwolf needs lot of dependencies.
do it on your own risk.