执行openwrt的交叉编译程序时出错

时间:2016-08-17 23:25:22

标签: c package cross-compiling dependency-management openwrt

我尝试将软件导出到openwrt并且我能够生成ipk但是编译后的文件总是给我这个错误

  

-ash:scanReportProbe:not found

我已经尝试了一切,但我无法使其发挥作用。 为了完成这是我为准备环境所做的工作:

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

1 个答案:

答案 0 :(得分:0)

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

所以,它可能是以下之一:

(1)在您的rc脚本部分中,您正在执行/etc/init.d/scanReportProbe enable,但您正在构建的包使用scanReport_probe。因此,您可能需要在此处或那里添加或删除_和/或其他一些重命名,以便事情匹配。

(2)如果您提供的文件结构是最后一个,我不确定该脚本是否在正确的目录中。

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