2016-08-17 115 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 

我没有,所以我需要的解决方案的一些线索来解决这个错误的想法。

我不认为错误是在代码中,但CASSE需要的,这是我的计划: 文件结构

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 for c program

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中选择了正确的架构吗? 'file build_dir/target - */scanReport_probe */scanReportProbe'说什么?将它与来自openwrt设备的二进制文件进行比较(例如,将'/ bin/busybox'复制到主机并运行'file')。 –

+0

另外,尝试删除'define Build/Compile'子句和'CONFIGURE_VARS'赋值 - 默认值应该适合你。 –

+0

所有配置都正确。我不知道为什么,但编译这个存储库git://git.openwrt.org/15.05/openwrt.git而不是中继解决了这个问题。 – LuigiDB

回答

0

对于-ash,IIRC,ash是[boot] shell。这是说它无法找到一个特定的命令。

因此,它可能是一个:

(1)在你的rc脚本部分,你在做/etc/init.d/scanReportProbe enable但你正在构建的包使用scanReport_probe。因此,您可能需要在这里或那里添加或删除_和/或一些其他重命名,以便匹配。 (2)如果你给的文件结构是最后一个,我不确定脚本是否在正确的目录中。

(3)脚本的权限是否正确(即执行)?

+0

安装完成后,每个文件都在正确的目录下,而且我还测试了没有init.d脚本的情况。 bin文件夹下的可执行文件具有执行权限'-rwxr-xr-x 1 root root 1527 Aug 17 17:15 scanReportProbe',但是也有'/ bin/scanReportProbe',我收到相同的错误。我还测试了我在网上找到的其他存储库,并且每个人都给我提供同样的错误。 – LuigiDB