2016-08-17 8 views
1

Я пытаюсь экспортировать программное обеспечение для OpenWRT и я в состоянии генерировать Ipk но скомпилированный файл всегда дает мне эту ошибкуОшибка при выполнении кросс-скомпилирован программу для OpenWRT

-ash: scanReportProbe : не найдено

Я пробовал все, но я не могу заставить его работать. Для полноты это то, что я сделал для подготовки среды:

git clone git://github.com/openwrt/openwrt.git 
cd openwrt 
./scripts/feeds update -a 
./scripts/feeds install -a 
make defconfig 
make prereq 
make menuconfig 
    [here i selected the package with the M and saved the configuration] 
make tools/install 
make toolchain/install 
make package/scanReport_probe/compile 

Я понятия не имею, о, чтобы исправить эту ошибку, так что мне нужно некоторый намек на решение.

Я не думаю, что ошибка в коде, но в Касс необходимо это моя программа: структура файла

scanReport_probe 
├── LICENSE 
├── Makefile 
├── README.md 
└── src 
    ├── data 
    │ └── THIS IS FOR DATA FILES.txt 
    ├── runScript 
    │ └── scanReportProbe 
    ├── scanReport_probe 
    │ ├── a.c 
    │ └── makefile 
    └── scanReport_probe.conf 

Makefile для OpenWRT

include $(TOPDIR)/rules.mk 

# name of package 
# version number of the sources you're using 
# how many times you've released a package based on the above version number 
PKG_NAME:=scanReport_probe 
PKG_VERSION:=1.0 
PKG_RELEASE:=1 
PKG_LICENSE:=MIT 

# sources will be unpacked into this directory (you shouldn't need to change this) 
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) 

#needed 
include $(INCLUDE_DIR)/package.mk 


# Metadata; information about what the package is for the ipkg listings 
# to keep things simple, a number of fields have been left at their defaults 
# and are not shown here. 
define Package/scanReport_probe 
    SECTION:=utils 
    CATEGORY:=Utilities 
    TITLE:=scanReport_probe 
    URL:=https://github.com/luigiDB/scan-report_probe 
    TITLE:=Scan in monitor mode probe over wifi channel with periodic report to a server through http post. 
    MAINTAINER:=Please refer to github repository page 
endef 

define Package/scanReport_probe/description 
    This is the best tool ever. 
    Scan probe over wifi and at regualar interval send results via http post. 
endef 


define Build/Prepare 
    mkdir -p $(PKG_BUILD_DIR) 
    $(CP) ./src/* $(PKG_BUILD_DIR)/ 
endef 


CONFIGURE_VARS+= \ 
    CC="$(TOOLCHAIN_DIR)/bin/$(TARGET_CC)" 


define Build/Compile 
    $(MAKE) -C $(PKG_BUILD_DIR)/scanReport_probe $(TARGET_CONFIGURE_OPTS) 
endef 

# We'll use the OpenWrt defaults to configure and compile the package. Otherwise we'd need to define 
# Build/Configure - commands to invoke a configure (or similar) script 
# Build/Compile - commands used to run make or otherwise build the source 

define Package/scanReport_probe/install 
    # Now that we have the source compiled (magic huh?) we need to copy files out of the source 
    # directory and into our ipkg file. These are shell commands, so make sure you start the lines 
    # with a TAB. $(1) here represents the root filesystem on the router. 
    # INSTALL_DIR, INSTALL_BIN, INSTALL_DATA are used for creating a directory, copying an executable, 
    # or a data file. +x is set on the target file for INSTALL_BIN, independent of it's mode on the host. 

    # make a directory for the config 
    $(INSTALL_DIR) $(1)/etc/scanReport_probe/ 

    # copy the config 
    $(INSTALL_CONF) $(PKG_BUILD_DIR)/scanReport_probe.conf $(1)/etc/scanReport_probe 

    # make a directory for some random data files required by scanReport_probe 
    $(INSTALL_DIR) $(1)/usr/share/scanReport_probe 

    # copy the data files 
    $(INSTALL_DATA) $(PKG_BUILD_DIR)/data/* $(1)/usr/share/scanReport_probe 

    #make directory bin 
    $(INSTALL_DIR) $(1)/bin 

    # copy the binary 
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/scanReport_probe/scanReportProbe $(1)/bin 

    #make the directory init.d in case isn't present 
    $(INSTALL_DIR) $(1)/etc/init.d 

    #copy script to init.d 
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/runScript/scanReportProbe $(1)/etc/init.d  
endef 


#runned post installation call the enable on the service 
define Package/scanReport_probe/postinst 
    #!/bin/sh 
    # check if we are on real system 
    if [ -z "$${IPKG_INSTROOT}" ]; then 
     echo "Enabling rc.d symlink for scanReportProbe" 
     /etc/init.d/scanReportProbe enable 
    fi 
    exit 0 
endef 


#runned pre uninstallation call the disable on the service 
define Package/scanReport_probe/prerm 
    #!/bin/sh 
    # check if we are on real system 
    if [ -z "$${IPKG_INSTROOT}" ]; then 
     echo "Removing rc.d symlink for scanReportProbe" 
     /etc/init.d/scanReportProbe disable 
    fi 
    exit 0 
endef 

$(eval $(call BuildPackage,scanReport_probe)) 

ас

#include <stdio.h> 
int main(void) 
{ 
     printf("Hello World\n"); 
     return 0; 
} 

makefile для программы c

PROFILE = -O2 -s 
CFLAGS = $(PROFILE) 
LDFLAGS = 

all: main 

# build it 
main: a.o 
    $(CC) $(LDFLAGS) a.o -o scanReportProbe 

a.o: a.c 
    $(CC) $(CFLAGS) -c a.c 

# clean it 
clean: 
    rm *.o a 
+0

Вы уверены, что выбрали правильную архитектуру в menuconfig? Что говорит 'файл build_dir/target - */scanReport_probe */scanReportProbe'? Сравните его с двоичным кодом с вашего устройства openwrt (например, скопируйте '/ bin/busybox' на ваш хост-компьютер и запустите на нем' файл'). –

+0

Также попробуйте удалить опцию 'define Build/Compile' и' CONFIGURE_VARS' - значения по умолчанию должны хорошо работать для вас. –

+0

Все настроено правильно. Я не знаю, почему, но скомпилировать этот репозиторий git: //git.openwrt.org/15.05/openwrt.git, вместо того, чтобы багажник решил проблему. – LuigiDB

ответ

0

Для -ash, IIRC, ash это [загрузочный] корпус. Он говорит, что не может найти определенную команду.

Таким образом, это может быть одним из:

(1) В вашем разделе скрипта гс, вы делаете /etc/init.d/scanReportProbe enable но пакет вы строите использует scanReport_probe. Таким образом, вам может понадобиться добавить или удалить _ здесь или там и/или некоторые другие переименования, чтобы все соответствовало.

(2) Если файловая структура, которую вы дали, является последней, я не уверен, что скрипт находится в правильном каталоге.

(3) Правильно ли разрешены права на сценарий (т. Е. Выполняется)?

+0

После установки каждый файл находится в правильном каталоге, и я также протестировал его без скрипта init.d. У исполняемого файла в папке bin есть разрешение на выполнение '-rwxr-xr-x 1 root root 1527 авг. 17 17:15 scanReportProbe', но также с'/bin/scanReportProbe', я получаю ту же ошибку. Я тестирую также другой репозиторий, который я нашел в Интернете, и каждый дает мне ту же ошибку. – LuigiDB

 Смежные вопросы

  • Нет связанных вопросов^_^