From 9d1907616bf1f304bf957bcded5af1ab0000371b Mon Sep 17 00:00:00 2001 From: Anthony Hinsinger Date: Tue, 15 May 2018 16:11:21 +0200 Subject: [PATCH] Initial commit --- Config.in | 2 + README.md | 17 ++++++ board/ttngw/genimage-ttngw.cfg | 33 ++++++++++++ board/ttngw/post-build.sh | 13 +++++ board/ttngw/post-image.sh | 12 +++++ board/ttngw/rootfs-overlay/etc/init.d/S10spi | 35 ++++++++++++ configs/ttngw_defconfig | 42 +++++++++++++++ external.desc | 2 + external.mk | 1 + package/lora-gateway/Config.in | 4 ++ package/lora-gateway/lora-gateway.mk | 25 +++++++++ package/packet-forwarder/Config.in | 5 ++ package/packet-forwarder/S52packetforwarder | 57 ++++++++++++++++++++ package/packet-forwarder/packet-forwarder | 2 + package/packet-forwarder/packet-forwarder.mk | 24 +++++++++ 15 files changed, 274 insertions(+) create mode 100644 Config.in create mode 100644 README.md create mode 100644 board/ttngw/genimage-ttngw.cfg create mode 100755 board/ttngw/post-build.sh create mode 100755 board/ttngw/post-image.sh create mode 100755 board/ttngw/rootfs-overlay/etc/init.d/S10spi create mode 100644 configs/ttngw_defconfig create mode 100644 external.desc create mode 100644 external.mk create mode 100644 package/lora-gateway/Config.in create mode 100644 package/lora-gateway/lora-gateway.mk create mode 100644 package/packet-forwarder/Config.in create mode 100755 package/packet-forwarder/S52packetforwarder create mode 100644 package/packet-forwarder/packet-forwarder create mode 100644 package/packet-forwarder/packet-forwarder.mk diff --git a/Config.in b/Config.in new file mode 100644 index 0000000..9cd949f --- /dev/null +++ b/Config.in @@ -0,0 +1,2 @@ +source "$BR2_EXTERNAL_ATOY_PATH/package/lora-gateway/Config.in" +source "$BR2_EXTERNAL_ATOY_PATH/package/packet-forwarder/Config.in" diff --git a/README.md b/README.md new file mode 100644 index 0000000..34065a3 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# a|toy Buildroot 2 external tree + +## TheThingsNetwork gateway + +This projet create an image for a raspberrypi board running the TTN packet forwarder. You need a SX1301 extension board. + +* Clone buildroot2 +* Clone this repository + +Then, generate the sdcard image : + +```bash +cd /into/buildroot2 +make BR2_EXTERNAL=/this/repository ttngw_defconfig && make +``` + +You'll find the generated image into output/images/sdcard.img. Just "dd" it on your sdcard (or use etcher on OSX). diff --git a/board/ttngw/genimage-ttngw.cfg b/board/ttngw/genimage-ttngw.cfg new file mode 100644 index 0000000..0a54724 --- /dev/null +++ b/board/ttngw/genimage-ttngw.cfg @@ -0,0 +1,33 @@ +image boot.vfat { + vfat { + files = { + "bcm2710-rpi-3-b.dtb", + "bcm2710-rpi-3-b-plus.dtb", + "bcm2710-rpi-cm3.dtb", + "rpi-firmware/bootcode.bin", + "rpi-firmware/cmdline.txt", + "rpi-firmware/config.txt", + "rpi-firmware/fixup.dat", + "rpi-firmware/start.elf", + "rpi-firmware/overlays", + "zImage" + } + } + size = 32M +} + +image sdcard.img { + hdimage { + } + + partition boot { + partition-type = 0xC + bootable = "true" + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + } +} diff --git a/board/ttngw/post-build.sh b/board/ttngw/post-build.sh new file mode 100755 index 0000000..19cdfe7 --- /dev/null +++ b/board/ttngw/post-build.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +set -u +set -e + +# Mount first partition to access config files +if [ -e ${TARGET_DIR}/etc/fstab ]; then + if ! grep -qE '^\/dev\/mmcblk0p1' "${TARGET_DIR}/etc/fstab"; then + cat << __EOF__ >> "${TARGET_DIR}/etc/fstab" +/dev/mmcblk0p1 /mnt vfat defaults,ro 0 0 +__EOF__ + fi +fi diff --git a/board/ttngw/post-image.sh b/board/ttngw/post-image.sh new file mode 100755 index 0000000..39f68ba --- /dev/null +++ b/board/ttngw/post-image.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +# Enable SPI +if ! grep -qE '^dtparam=spi=on' "${BINARIES_DIR}/rpi-firmware/config.txt"; then + cat << __EOF__ >> "${BINARIES_DIR}/rpi-firmware/config.txt" + +# enable SPI +dtparam=spi=on +__EOF__ +fi diff --git a/board/ttngw/rootfs-overlay/etc/init.d/S10spi b/board/ttngw/rootfs-overlay/etc/init.d/S10spi new file mode 100755 index 0000000..43558c7 --- /dev/null +++ b/board/ttngw/rootfs-overlay/etc/init.d/S10spi @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Load SPI modules +# + +start() { + printf "Load SPI kernel modules: " + + modprobe spi-bcm2835 + modprobe spidev +} +stop() { +} + +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/configs/ttngw_defconfig b/configs/ttngw_defconfig new file mode 100644 index 0000000..3b7accb --- /dev/null +++ b/configs/ttngw_defconfig @@ -0,0 +1,42 @@ +BR2_arm=y +BR2_cortex_a53=y +BR2_ARM_FPU_NEON_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 4.14 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,c117a8bccf37bfba323065b566cf999ed4629a4a)/linux-c117a8bccf37bfba323065b566cf999ed4629a4a.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2709" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2710-rpi-3-b bcm2710-rpi-3-b-plus bcm2710-rpi-cm3" + +BR2_PACKAGE_RPI_FIRMWARE=y + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_TARGET_ROOTFS_EXT2_SIZE="128M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi3/post-build.sh $(BR2_EXTERNAL_BAR_42_PATH)/board/ttngw/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_BAR_42_PATH)/board/ttngw/post-image.sh board/raspberrypi3/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="--add-pi3-miniuart-bt-overlay" + +# TTNGW specific options and packages +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_BAR_42_PATH)/board/ttngw/rootfs-overlay" +BR2_TARGET_GENERIC_ROOT_PASSWD="azerty" +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y +BR2_PACKAGE_PACKET_FORWARDER=y diff --git a/external.desc b/external.desc new file mode 100644 index 0000000..1d30de6 --- /dev/null +++ b/external.desc @@ -0,0 +1,2 @@ +name: ATOY +desc: Custom projects using BR2 diff --git a/external.mk b/external.mk new file mode 100644 index 0000000..261fd6c --- /dev/null +++ b/external.mk @@ -0,0 +1 @@ +include $(sort $(wildcard $(BR2_EXTERNAL_ATOY_PATH)/package/*/*.mk)) diff --git a/package/lora-gateway/Config.in b/package/lora-gateway/Config.in new file mode 100644 index 0000000..ac5e429 --- /dev/null +++ b/package/lora-gateway/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_LORA_GATEWAY + bool "lora-gateway" + help + This is the lora gateway package from The Things Network diff --git a/package/lora-gateway/lora-gateway.mk b/package/lora-gateway/lora-gateway.mk new file mode 100644 index 0000000..7053efd --- /dev/null +++ b/package/lora-gateway/lora-gateway.mk @@ -0,0 +1,25 @@ +LORA_GATEWAY_VERSION = legacy +LORA_GATEWAY_SITE = https://github.com/TheThingsNetwork/lora_gateway.git +LORA_GATEWAY_INSTALL_STAGING = YES +LORA_GATEWAY_SITE_METHOD = git + +define LORA_GATEWAY_CONFIGURE_CMDS + sed -i -e 's/PLATFORM= kerlink/PLATFORM= imst_rpi/g' $(@D)/libloragw/library.cfg +endef + +define LORA_GATEWAY_BUILD_CMDS + CROSS_COMPILE=arm-buildroot-linux-uclibcgnueabihf- LD=$(TARGET_LD) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) all +endef + +define LORA_GATEWAY_INSTALL_STAGING_CMDS + $(INSTALL) -d -m 0755 $(STAGING_DIR)/opt/ttn/libloragw + $(INSTALL) -D -m 0755 $(@D)/libloragw/library.cfg $(STAGING_DIR)/opt/ttn/libloragw/library.cfg + $(INSTALL) -D -m 0755 $(@D)/libloragw/libloragw.a $(STAGING_DIR)/opt/ttn/libloragw/libloragw.a + $(INSTALL) -d -m 0755 $(STAGING_DIR)/opt/ttn/libloragw/inc + $(INSTALL) -D -m 0755 $(@D)/libloragw/inc/*.h $(STAGING_DIR)/opt/ttn/libloragw/inc/ +endef + +define LORA_GATEWAY_INSTALL_TARGET_CMDS +endef + +$(eval $(generic-package)) diff --git a/package/packet-forwarder/Config.in b/package/packet-forwarder/Config.in new file mode 100644 index 0000000..a12bf22 --- /dev/null +++ b/package/packet-forwarder/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_PACKET_FORWARDER + bool "packet-forwarder" + select BR2_PACKAGE_LORA_GATEWAY + help + This is the lora packet forwarder package from The Things Network diff --git a/package/packet-forwarder/S52packetforwarder b/package/packet-forwarder/S52packetforwarder new file mode 100755 index 0000000..7af06e3 --- /dev/null +++ b/package/packet-forwarder/S52packetforwarder @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Starts Lora packet forwarder +# + +# Allow a few customizations from a config file +test -r /etc/default/packet-forwarder && . /etc/default/packet-forwarder + +reset_sx1301() { + echo "$SX1301_RESET_BCM_PIN" > /sys/class/gpio/export + echo "out" > /sys/class/gpio/gpio$SX1301_RESET_BCM_PIN/direction + echo "0" > /sys/class/gpio/gpio$SX1301_RESET_BCM_PIN/value + sleep 0.1 + echo "1" > /sys/class/gpio/gpio$SX1301_RESET_BCM_PIN/value + sleep 0.1 + echo "0" > /sys/class/gpio/gpio$SX1301_RESET_BCM_PIN/value + sleep 0.1 + echo "$SX1301_RESET_BCM_PIN" > /sys/class/gpio/unexport +} + +start() { + printf "Starting LoRa packet forwarder: " + umask 077 + + reset_sx1301 + + cd /etc/ttn + start-stop-daemon -S -b -q -p /var/run/packet-forwarder.pid \ + --exec /usr/bin/poly_pkt_fwd -- $PACKETFORWARDER_ARGS + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +stop() { + printf "Stopping LoRa packet forwarder: " + start-stop-daemon -K -q -p /var/run/packet-forwarder.pid + [ $? = 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/packet-forwarder/packet-forwarder b/package/packet-forwarder/packet-forwarder new file mode 100644 index 0000000..d20492f --- /dev/null +++ b/package/packet-forwarder/packet-forwarder @@ -0,0 +1,2 @@ +# GPIO connected to SW1301 reset pin +SX1301_RESET_BCM_PIN=17 diff --git a/package/packet-forwarder/packet-forwarder.mk b/package/packet-forwarder/packet-forwarder.mk new file mode 100644 index 0000000..9911a46 --- /dev/null +++ b/package/packet-forwarder/packet-forwarder.mk @@ -0,0 +1,24 @@ +PACKET_FORWARDER_VERSION = legacy +PACKET_FORWARDER_SITE = https://github.com/TheThingsNetwork/packet_forwarder.git +PACKET_FORWARDER_SITE_METHOD = git +PACKET_FORWARDER_DEPENDENCIES = lora-gateway + +define PACKET_FORWARDER_CONFIGURE_CMDS +endef + +define PACKET_FORWARDER_BUILD_CMDS + LGW_PATH=$(STAGING_DIR)/opt/ttn/libloragw CROSS_COMPILE=$(TARGET_CROSS) LD=$(TARGET_LD) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) all +endef + +define PACKET_FORWARDER_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/poly_pkt_fwd/poly_pkt_fwd $(TARGET_DIR)/usr/bin/poly_pkt_fwd + $(INSTALL) -D -m 0644 $(@D)/poly_pkt_fwd/global_conf.json $(TARGET_DIR)/etc/ttn/global_conf.json + $(INSTALL) -D -m 0644 package/thethingsnetwork/packet-forwarder/packet-forwarder $(TARGET_DIR)/etc/default/packet-forwarder +endef + +define PACKET_FORWARDER_INSTALL_INIT_SYSV + $(INSTALL) -D -m 755 package/thethingsnetwork/packet-forwarder/S52packetforwarder \ + $(TARGET_DIR)/etc/init.d/S52packetforwarder +endef + +$(eval $(generic-package))