1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter.git synced 2025-03-09 15:40:20 +00:00
This commit is contained in:
suyuan168 2022-03-09 09:17:42 +08:00
commit 8acb0e6655
22 changed files with 420 additions and 50 deletions

View file

@ -15,4 +15,4 @@ CONFIG_TARGET_SQUASHFS_BLOCK_SIZE=64
CONFIG_KERNEL_SWAP=y
CONFIG_PREINITOPT=y
CONFIG_PACKAGE_kmod-r2ec=y
CONFIG_PACKAGE_uboot-ipq40xx=y
CONFIG_PACKAGE_mnfinfo=y

View file

@ -0,0 +1,58 @@
#
# Copyright (C) 2020 Teltonika
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/download.mk
PKG_NAME:=mnfinfo
PKG_VERSION:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/mnfinfo
SECTION:=net
CATEGORY:=Network
TITLE:=Device mnf-info command line interface
DEPENDS:=+libpthread +libmnfinfo
endef
define Package/libmnfinfo
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Device mnf-info API library
endef
define Package/rpcd-mod-mnfinfo
SECTION:=libs
CATEGORY:=Libraries
TITLE:=mnfinfo rpcd module
DEPENDS:=+rpcd +libmnfinfo
endef
define Build/InstallDev
$(INSTALL_DIR) $(STAGING_DIR)/usr/lib $(STAGING_DIR)/usr/include/libmnfinfo
$(CP) $(PKG_BUILD_DIR)/*.so $(STAGING_DIR)/usr/lib/
$(CP) $(PKG_BUILD_DIR)/src/include/*.h $(STAGING_DIR)/usr/include/libmnfinfo/
endef
define Package/mnfinfo/install
$(INSTALL_DIR) $(1)/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mnf_info $(1)/sbin/mnf_info
endef
define Package/libmnfinfo/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/libmnfinfo.so $(1)/usr/lib/
endef
define Package/rpcd-mod-mnfinfo/install
$(INSTALL_DIR) $(1)/usr/lib/rpcd
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mnfinfo.so $(1)/usr/lib/rpcd/
endef
$(eval $(call BuildPackage,mnfinfo))
$(eval $(call BuildPackage,libmnfinfo))
$(eval $(call BuildPackage,rpcd-mod-mnfinfo))

View file

@ -0,0 +1,35 @@
MNF_SOURCES = src/mnf_info.c
MNF_OBJS = $(MNF_SOURCES:.c=.o)
MNF_TARGET = mnf_info
MNF_RPC_SOURCES = src/mnf_rpc.c
MNF_RPC_OBJS = $(MNF_RPC_SOURCES:.c=.o)
MNF_RPC_TARGET = mnfinfo.so
LIB_SOURCES = src/libmnfinfo.c
LIB_OBJS = $(LIB_SOURCES:.c=.o)
LIB_TARGET = libmnfinfo.so
CFLAGS += -Wall -Wextra -Wpedantic -Werror -Wno-missing-braces -Wno-unused-function -Wno-unused-parameter -fPIC -I src/include
LDFLAGS += -L.
MNF_LDFLAGS =
MNF_RPC_LDFLAGS = -lmnfinfo
RM = rm -f
all: $(LIB_TARGET) $(MNF_RPC_TARGET) $(MNF_TARGET)
$(LIB_TARGET): $(LIB_OBJS)
$(CC) $(LDFLAGS) -shared -o $@ $^
$(MNF_RPC_TARGET): $(MNF_RPC_OBJS) $(LIB_TARGET)
$(CC) $(LDFLAGS) $(MNF_RPC_LDFLAGS) -shared -o $@ $^
$(MNF_TARGET): $(MNF_OBJS) $(LIB_OBJS)
$(CC) $(LDFLAGS) $(MNF_LDFLAGS) -o $@ $^
clean:
$(RM) $(LIB_OBJS) $(LIB_TARGET)
$(RM) $(MNF_RPC_OBJS) $(MNF_RPC_TARGET)
$(RM) $(MNF_OBJS) $(MNF_TARGET)

View file

@ -0,0 +1,25 @@
# libmnfinfo
How it works: depending on the platform, selected in the menuconfig, a different platform flag is defined during compilation. Depending on that flag, a header file with platform-specific MTD field defines is included. Here are all the defines, (currently) used for these headers:
* `MAX_SIM_ID` - maximum allowed SIM index on the platform.
* `MTD_CONFIG_RO` - absolute path of a read-only MTD partition. Used for most field reads.
* `MTD_CONFIG_RW` - absolute path of a read/write MTD partition. Used for SIM PIN value reads/writes.
* `MAC_OFFSET` - MAC field offset in the `MTD_CONFIG_RO` partition.
* `MAC_LENGTH` - MAC field length in the `MTD_CONFIG_RO` partition.
* `NAME_OFFSET` - product name field offset in the `MTD_CONFIG_RO` partition.
* `NAME_LENGTH` - product name field length in the `MTD_CONFIG_RO` partition.
* `WPS_OFFSET` - WPS field offset in the `MTD_CONFIG_RO` partition.
* `WPS_LENGTH` - WPS field length in the `MTD_CONFIG_RO` partition.
* `SERIAL_OFFSET` - product serial code field offset in the `MTD_CONFIG_RO` partition.
* `SERIAL_LENGTH` - product serial code field length in the `MTD_CONFIG_RO` partition.
* `BATCH_OFFSET` - batch index field offset in the `MTD_CONFIG_RO` partition.
* `BATCH_LENGTH` - batch index field length in the `MTD_CONFIG_RO` partition.
* `HWVER_OFFSET` - hardware version index field offset in the `MTD_CONFIG_RO` partition.
* `HWVER_LENGTH` - hardware version index field length in the `MTD_CONFIG_RO` partition.
* `SIMPIN_OFFSET` - SIM card PIN code field offset in the `MTD_CONFIG_RW` partition.
* `SIMPIN_LENGTH` - SIM card PIN code field length in the `MTD_CONFIG_RW` partition.
* `WIFI_OFFSET` - Wi-Fi password field offset in the `MTD_CONFIG_RO` partition.
* `WIFI_LENGTH` - Wi-Fi password field length in the `MTD_CONFIG_RO` partition.
Only defines with actual values should be written. All other defines should be removed from the platform-specific header file.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,115 @@
#include <stdint.h>
#include <stdbool.h>
#define STRING_NA(a) do { (a)[0] = 'N'; (a)[1] = '/'; (a)[2] = 'A'; (a)[3] = 0; } while(0)
#define STRING_NA_LENGTH 3
#define PARTITION_SIZE 0xA0
#define SECTION_SIZE 0x10
#if defined(RUTX_PLATFORM)
#include "rutx.h"
#elif defined(TRB1_PLATFORM)
#include "trb1.h"
#elif defined(TRB2_PLATFORM)
#include "trb2.h"
#elif defined(RUT2_PLATFORM)
#include "rut2.h"
#elif defined(RUT300_PLATFORM) || defined(RUT360_PLATFORM)
#include "rut3.h"
#else
#error Platform not recognized!
#endif
#if !(defined(MAC_OFFSET) && defined(MAC_LENGTH))
#undef MAC_OFFSET
#undef MAC_LENGTH
#define MAC_OFFSET 0
#define MAC_LENGTH STRING_NA_LENGTH
#else
#define MAC_ENABLED
#endif
#if !(defined(NAME_OFFSET) && defined(NAME_LENGTH))
#undef NAME_OFFSET
#undef NAME_LENGTH
#define NAME_OFFSET 0
#define NAME_LENGTH STRING_NA_LENGTH
#else
#define NAME_ENABLED
#endif
#if !(defined(WPS_OFFSET) && defined(WPS_LENGTH))
#undef WPS_OFFSET
#undef WPS_LENGTH
#define WPS_OFFSET 0
#define WPS_LENGTH STRING_NA_LENGTH
#else
#define WPS_ENABLED
#endif
#if !(defined(SERIAL_OFFSET) && defined(SERIAL_LENGTH))
#undef SERIAL_OFFSET
#undef SERIAL_LENGTH
#define SERIAL_OFFSET 0
#define SERIAL_LENGTH STRING_NA_LENGTH
#else
#define SERIAL_ENABLED
#endif
#if !(defined(BATCH_OFFSET) && defined(BATCH_LENGTH))
#undef BATCH_OFFSET
#undef BATCH_LENGTH
#define BATCH_OFFSET 0
#define BATCH_LENGTH STRING_NA_LENGTH
#else
#define BATCH_ENABLED
#endif
#if !(defined(HWVER_OFFSET) && defined(HWVER_LENGTH))
#undef HWVER_OFFSET
#undef HWVER_LENGTH
#define HWVER_OFFSET 0
#define HWVER_LENGTH STRING_NA_LENGTH
#else
#define HWVER_ENABLED
#endif
#if !(defined(SIMPIN_OFFSET) && defined(SIMPIN_LENGTH))
#undef SIMPIN_OFFSET
#undef SIMPIN_LENGTH
#define SIMPIN_OFFSET 0
#define SIMPIN_LENGTH STRING_NA_LENGTH
#else
#define SIMPIN_ENABLED
#endif
#if !(defined(WIFI_OFFSET) && defined(WIFI_LENGTH))
#undef WIFI_OFFSET
#undef WIFI_LENGTH
#define WIFI_OFFSET 0
#define WIFI_LENGTH STRING_NA_LENGTH
#else
#define WIFI_ENABLED
#endif
/*
* mnfinfo_get_*() functions return ptr to static memory, which is not to be free()d!
* the returned memory ptr is safely accessible throughout the using program's runtime
* bad: free(mnfinfo_get_mac());
*
* returns NULL on /dev/mtdX reading failure, "N/A" if the particular device
* doesn't support the field, or a dummy string if the mtdblock space contains garbage
*/
char* mnfinfo_get_mac(void);
char* mnfinfo_get_name(void);
char* mnfinfo_get_maceth(void);
char* mnfinfo_get_sn(void);
char* mnfinfo_get_hwver(void);
char* mnfinfo_get_batch(void);
char* mnfinfo_get_wps(void);
char* mnfinfo_get_wifi_pw(void);
char* mnfinfo_get_sim_pin(uint8_t sim_id);
// returns true on success
bool mnfinfo_set_sim_pin(uint8_t sim_id, const char *pin);

View file

@ -0,0 +1,21 @@
#define MAX_SIM_ID 1
#define MTD_CONFIG_RO "/dev/mtd1"
#define MTD_CONFIG_RW "/dev/mtd1"
#define MAC_OFFSET 0x00
#define MAC_LENGTH 6
#define NAME_OFFSET 0x10
#define NAME_LENGTH 12
#define WPS_OFFSET 0x20
#define WPS_LENGTH 8
#define SERIAL_OFFSET 0x30
#define SERIAL_LENGTH 10
#define BATCH_OFFSET 0x40
#define BATCH_LENGTH 4
#define HWVER_OFFSET 0x50
#define HWVER_LENGTH 4
#define SIMPIN_OFFSET 0x70
#define SIMPIN_LENGTH 4
#define WIFI_OFFSET 0x90
#define WIFI_LENGTH 16

View file

@ -0,0 +1,21 @@
#define MAX_SIM_ID 1
#define MTD_CONFIG_RO "/dev/mtd1"
#define MTD_CONFIG_RW "/dev/mtd1"
#define MAC_OFFSET 0x00
#define MAC_LENGTH 6
#define NAME_OFFSET 0x10
#define NAME_LENGTH 12
#define WPS_OFFSET 0x20
#define WPS_LENGTH 8
#define SERIAL_OFFSET 0x30
#define SERIAL_LENGTH 10
#define BATCH_OFFSET 0x40
#define BATCH_LENGTH 4
#define HWVER_OFFSET 0x50
#define HWVER_LENGTH 4
#define SIMPIN_OFFSET 0x70
#define SIMPIN_LENGTH 4
#define WIFI_OFFSET 0x90
#define WIFI_LENGTH 16

View file

@ -0,0 +1,21 @@
#define MAX_SIM_ID 4
#define MTD_CONFIG_RO "/dev/mtd13"
#define MTD_CONFIG_RW "/dev/mtd14"
#define MAC_OFFSET 0x00
#define MAC_LENGTH 6
#define NAME_OFFSET 0x10
#define NAME_LENGTH 12
#define WPS_OFFSET 0x20
#define WPS_LENGTH 8
#define SERIAL_OFFSET 0x30
#define SERIAL_LENGTH 10
#define BATCH_OFFSET 0x40
#define BATCH_LENGTH 4
#define HWVER_OFFSET 0x50
#define HWVER_LENGTH 4
#define SIMPIN_OFFSET 0x00
#define SIMPIN_LENGTH 4
#define WIFI_OFFSET 0x90
#define WIFI_LENGTH 16

View file

@ -0,0 +1,17 @@
#define MAX_SIM_ID 1
#define MTD_CONFIG_RO "/dev/mtd7"
#define MTD_CONFIG_RW "/dev/mtd7"
#define MAC_OFFSET 0x50
#define MAC_LENGTH 12
#define NAME_OFFSET 0x20
#define NAME_LENGTH 12
#define SERIAL_OFFSET 0x10
#define SERIAL_LENGTH 10
#define BATCH_OFFSET 0x40
#define BATCH_LENGTH 3
#define HWVER_OFFSET 0x30
#define HWVER_LENGTH 4
#define SIMPIN_LENGTH 4
#define SIMPIN_OFFSET 0x70

View file

@ -0,0 +1,21 @@
#define MAX_SIM_ID 2
#define MTD_CONFIG_RO "/dev/mtd1"
#define MTD_CONFIG_RW "/dev/mtd1"
#define MAC_OFFSET 0x00
#define MAC_LENGTH 6
#define NAME_OFFSET 0x10
#define NAME_LENGTH 12
#define WPS_OFFSET 0x20
#define WPS_LENGTH 8
#define SERIAL_OFFSET 0x30
#define SERIAL_LENGTH 10
#define BATCH_OFFSET 0x40
#define BATCH_LENGTH 4
#define HWVER_OFFSET 0x50
#define HWVER_LENGTH 4
#define SIMPIN_OFFSET 0x70
#define SIMPIN_LENGTH 4
#define WIFI_OFFSET 0x90
#define WIFI_LENGTH 16

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -113,7 +113,7 @@ generate_network() {
local ipad
case "$1" in
lan)
ipad=${ipaddr:-"192.168.1.1"}
ipad=${ipaddr:-"192.168.100.1"}
;;
*) ipad=${ipaddr:-"192.168.$((addr_offset++)).1"} ;;
esac
@ -342,7 +342,7 @@ generate_static_system() {
uci -q batch <<-EOF
delete system.@system[0]
set system.system='system'
set system.@system[-1].hostname='Teltonika-$hostname.com'
set system.@system[-1].hostname='OpenMPTCProuter'
set system.@system[-1].timezone='UTC'
set system.@system[-1].ttylogin='0'
set system.@system[-1].log_size='128'
@ -365,9 +365,9 @@ generate_static_system() {
if json_is_a system object; then
json_select system
local hostname
if json_get_var hostname hostname; then
uci -q set "system.@system[-1].hostname=$hostname"
fi
#if json_get_var hostname hostname; then
# uci -q set "system.@system[-1].hostname=$hostname"
#fi
if json_is_a ntpserver array; then
local keys key

View file

@ -1,2 +0,0 @@
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mtdblock15 /log jffs2 defaults 0 0

View file

@ -1,29 +0,0 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=10
STOP=90
NAND_PART="nand_ubi"
boot() {
# check if spi-nand is present
local mtd=$(grep -i -m 1 "$NAND_PART" /proc/mtd | cut -c 4- | cut -d ':' -f1)
[ -z "$mtd" ] && {
return 0
}
[ ! -e /nand_storage ] && {
mkdir /nand_storage
}
# attach mtd device, automatically format if empty
ubiattach /dev/ubi_ctrl -m "$mtd"
# create default volume, if volume not present
[ ! -e /dev/ubi0_0 ] && {
ubimkvol /dev/ubi0 -m -N nand_storage
}
mount -t ubifs -o sync,noatime,rw ubi0:nand_storage /nand_storage/
}

View file

@ -8,7 +8,7 @@ get_hw_info() {
[ -n "$param" -a ${#param} == 12 ] && uci set "system"."@system[0]"."device_code"=$param
hostname=${param:0:6}
[ -n "$hostname" -a ${#hostname} == 6 -a -z "$(uci -q get system.@system[0].hostname)" ] && uci set "system"."@system[0]"."hostname"=Teltonika-$hostname.com
[ -n "$hostname" -a ${#hostname} == 6 -a -z "$(uci -q get system.@system[0].hostname)" ] && uci set "system"."@system[0]"."hostname"=OpenMPTCProuter
routername=${param:0:6}
[ -n "$routername" -a ${#routername} == 6 -a -z "$(uci -q get system.@system[0].routername)" ] && uci set "system"."@system[0]"."routername"=$routername

View file

@ -6,8 +6,8 @@ RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
platform_check_image() {
case "$(board_name)" in
asus,rt-ac42u |\
asus,rt-ac58u)
CI_UBIPART="UBI_DEV"
local ubidev=$(nand_find_ubi $CI_UBIPART)
local asus_root=$(nand_find_volume $ubidev jffs2)
@ -21,6 +21,29 @@ to install the filesystem.
You need to delete the jffs2 partition first:
# ubirmvol /dev/ubi0 --name=jffs2
Once this is done. Retry.
EOF
return 1
;;
zte,mf286d)
CI_UBIPART="rootfs"
local mtdnum="$( find_mtd_index $CI_UBIPART )"
[ ! "$mtdnum" ] && return 1
ubiattach -m "$mtdnum" || true
local ubidev="$( nand_find_ubi $CI_UBIPART )"
local ubi_rootfs=$(nand_find_volume $ubidev ubi_rootfs)
local ubi_rootfs_data=$(nand_find_volume $ubidev ubi_rootfs_data)
[ -n "$ubi_rootfs" ] || [ -n "$ubi_rootfs_data" ] || return 0
cat << EOF
ubi_rootfs partition is still present.
You need to delete the stock partition first:
# ubirmvol /dev/ubi0 -N ubi_rootfs
Please also delete ubi_rootfs_data, if exist:
# ubirmvol /dev/ubi0 -N ubi_rootfs_data
Once this is done. Retry.
EOF
return 1
@ -55,11 +78,28 @@ zyxel_do_upgrade() {
fi
}
platform_do_upgrade_mikrotik_nand() {
local fw_mtd=$(find_mtd_part kernel)
fw_mtd="${fw_mtd/block/}"
[ -n "$fw_mtd" ] || return
local board_dir=$(tar tf "$1" | grep -m 1 '^sysupgrade-.*/$')
board_dir=${board_dir%/}
[ -n "$board_dir" ] || return
local kernel_len=$(tar xf "$1" ${board_dir}/kernel -O | wc -c)
[ -n "$kernel_len" ] || return
tar xf "$1" ${board_dir}/kernel -O | ubiformat "$fw_mtd" -y -S $kernel_len -f -
CI_KERNPART="none"
nand_do_upgrade "$1"
}
platform_do_upgrade() {
case "$(board_name)" in
8dev,jalapeno |\
aruba,ap-303 |\
pangu,l1000 |\
aruba,ap-303h |\
aruba,ap-365 |\
avm,fritzbox-7530 |\
@ -73,10 +113,18 @@ platform_do_upgrade() {
glinet,gl-ap1300 |\
luma,wrtq-329acn |\
mobipromo,cm520-79f |\
zbt,z4019 |\
netgear,wac510 |\
p2w,r619ac-64m |\
p2w,r619ac-128m |\
qxwlan,e2600ac-c2)
nand_do_upgrade "$1"
;;
glinet,gl-b2200)
CI_KERNPART="0:HLOS"
CI_ROOTPART="rootfs"
CI_DATAPART="rootfs_data"
emmc_do_upgrade "$1"
;;
alfa-network,ap120c-ac)
part="$(awk -F 'ubi.mtd=' '{printf $2}' /proc/cmdline | sed -e 's/ .*$//')"
if [ "$part" = "rootfs1" ]; then
@ -92,8 +140,8 @@ platform_do_upgrade() {
CI_KERNPART="linux"
nand_do_upgrade "$1"
;;
asus,rt-ac42u |\
asus,rt-ac58u)
CI_UBIPART="UBI_DEV"
CI_KERNPART="linux"
nand_do_upgrade "$1"
;;
@ -113,11 +161,22 @@ platform_do_upgrade() {
CI_KERNPART="part.safe"
nand_do_upgrade "$1"
;;
mikrotik,cap-ac|\
mikrotik,hap-ac2|\
mikrotik,lhgg-60ad|\
mikrotik,sxtsq-5-ac)
[ "$(rootfs_type)" = "tmpfs" ] && mtd erase firmware
default_do_upgrade "$1"
;;
mikrotik,hap-ac3)
platform_do_upgrade_mikrotik_nand "$1"
;;
netgear,rbr50 |\
netgear,rbs50 |\
netgear,srr60 |\
netgear,srs60)
platform_do_upgrade_netgear_orbi_upgrade "$1"
;;
openmesh,a42 |\
openmesh,a62 |\
plasmacloud,pa1200 |\
@ -125,10 +184,11 @@ platform_do_upgrade() {
PART_NAME="inactive"
platform_do_upgrade_dualboot_datachk "$1"
;;
teltonika,rutx10)
teltonika,rutx |\
zte,mf286d)
CI_UBIPART="rootfs"
nand_do_upgrade "$1"
;;
;;
zyxel,nbg6617)
zyxel_do_upgrade "$1"
;;
@ -137,3 +197,12 @@ platform_do_upgrade() {
;;
esac
}
platform_copy_config() {
case "$(board_name)" in
glinet,gl-b2200)
emmc_copy_config
;;
esac
return 0;
}

View file

@ -830,8 +830,6 @@ define Device/teltonika_rutx
BOARD_NAME := rutx
SOC := qcom-ipq4018
DEVICE_DTS_DIR := ../dts
# DEVICE_DTS := qcom-ipq4018-rutx-12 qcom-ipq4018-rutx-08_10 qcom-ipq4018-rutx-09_11 qcom-ipq4018-rutx-R1 qcom-ipq4018-rutx-STM32
# DEVICE_DTS := qcom-ipq4018-rutx-12
DEVICE_DTS := $(foreach dts,$(notdir $(wildcard $(PLATFORM_DIR)/dts/*.dts)),$(patsubst %.dts,%,$(dts)))
DEVICE_DTS_CONFIG := config@5
KERNEL = kernel-bin | gzip | fit-rutx gzip "$$(KDIR)/{$$(subst $$(space),$$(comma),$$(addprefix image-,$$(addsuffix .dtb,$$(DEVICE_DTS))))}"
@ -840,10 +838,10 @@ define Device/teltonika_rutx
PAGESIZE := 2048
FILESYSTEMS := squashfs
KERNEL_IN_UBI := 1
IMAGES := sysupgrade.bin
IMAGE/sysupgrade.bin := append-ubi | qsdk-ipq-factory-nand | append-rutx-metadata
# IMAGE/sysupgrade.bin := append-ubi | UbootFw | append-rutx-metadata
# DEVICE_PACKAGES := uboot-ipq4xx ipq-wifi-teltonika_rutx kmod-bluetooth kmod-r2ec
IMAGES := factory.bin
IMAGE/factory.bin := append-ubi | qsdk-ipq-factory-nand | append-rutx-metadata
IMAGES += sysupgrade.bin
IMAGE/sysupgrade.bin := append-ubi | qsdk-ipq-factory-nand | append-metadata
DEVICE_PACKAGES := ipq-wifi-teltonika_rutx kmod-bluetooth kmod-r2ec
HW_SUPPORT := io_expander%stm32:shiftreg_1
endef