Jump to content

wolowizard

Forum Members
  • Posts

    8
  • Joined

  • Last visited

Everything posted by wolowizard

  1. Тут уже поднимали вопрос организации систем "умного дома" на роутере - предлагаю очередную вариацию. К роутеру по USB подключается плата Arduino Nano, к которой в свою очередь подключены модули управления нагрузкой и приемник. В качестве датчиков используются китайские беспроводные датчики от метеостанций. Датчики опрашиваются каждые 10 минут, и в зависимости от времени суток и температуры в комнатах формируется сигнал на включение/выключение привода радиаторов отопления. Бонусом показания датчиков температуры и давления пишутся в базу данных, потом можно смотреть статистику. Управление системой через веб-интерфейс. Система очень неплохо себя показала в эксплуатации - после перевода дома на оплату по счетчикам средний счет за отопление уменьшился в два раза. Исходники и руководство по установке лежат здесь: https://github.com/ezaykin/modsensor
  2. Здравствуйте! Пытаюсь собрать свой пакет, который будет использовать входящую в состав Entware библиотеку libmodbus. Успешно установил тулчейн, собрал и запустил "Helloworld" отсюда: https://github.com/zyxmon/zyxel-keenetic-packages/tree/master/package/built/helloworld Далее пытаюсь запустить свой пакет modsensor, который будет использовать функционал библиотеки libmodbus. Программа собирается, но на роутере не работает, выдавая ошибку /opt/bin/sh: modsensor: not found Ошибка возникает, когда я пытаюсь слинковать исполняемый файл с библиотекой libmodbus. Функции библиотеки пока что даже не используются. Библиотека на роутере установлена, сам файл тоже есть в наличии: root@Keenetic_Giga:/opt/bin# file modsensor modsensor: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 3.2.0, stripped strace выдает следующее: root@Keenetic_Giga:/opt/bin# strace modsensor execve("/opt/bin/modsensor", ["modsensor"], 0x7fe7bda0 /* 20 vars */) = -1 ENOENT (No such file or directory) fstat64(2, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0 write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory ) = 40 getpid() = 6013 exit_group(1) = ? +++ exited with 1 +++ вывод ldd: root@Keenetic_Giga:/opt/bin# ldd modsensor libmodbus.so.5 => /opt/lib/libmodbus.so.5 (0x77b76000) libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x77b50000) libc.so.6 => /opt/lib/libc.so.6 (0x779c2000) /lib/ld.so.1 => /opt/lib/ld.so.1 (0x77b8f000) Вроде как и файл есть, и ссылки на библиотеки верные, однако программа не работает. Подозреваю, что ошибка может быть в Makefile. Makefile для исполняемого файла: LIBS=-lmodbus modsensor: modsensor.o $(CC) $(LDFLAGS) $(LIBS) modsensor.o -o modsensor modsensor.o: modsensor.c $(CC) $(CFLAGS) -c modsensor.c clean: rm *.o modsensor Makefile для пакета: include $(TOPDIR)/rules.mk PKG_NAME:=modsensor PKG_VERSION:=1.0.0 PKG_RELEASE:=1 TARGET_CFLAGS=-I$(STAGING_DIR)/opt/include/modbus TARGET_LDFLAGS=-L$(STAGING_DIR)/opt/lib PKG_BUILD_DEPENDS:=libmodbus PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) include $(INCLUDE_DIR)/package.mk define Package/$(PKG_NAME) SECTION:=utils CATEGORY:=Utilities DEPENDS:=+libmodbus TITLE:=$(PKG_NAME) MAINTAINER:=SuperExpert endef define Package/$(PKG_NAME)/description reading sensor`s values from modbus device. endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ $(TARGET_CONFIGURE_OPTS) endef CONFIGURE_VARS+=\ CC="$(TOOLCHAIN_DIR)/bin/$(TARGET_CC)" define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/opt/bin $(CP) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/opt/bin endef $(eval $(call BuildPackage,$(PKG_NAME))) Если убрать линковку с libmodbus, то программа работает. Помогите составить Makefile с линковкой библиотеки. Возможно, если библиотеку включить непосредственно в программу то все заработает, но хотелось бы разобраться как сделать правильно.
×
×
  • Create New...