【问题标题】:Why can't I run custom application on my Beaglebone board? [duplicate]为什么我不能在我的 Beaglebone 板上运行自定义应用程序? [复制]
【发布时间】:2020-05-21 06:49:57
【问题描述】:

我已经为我的 beaglebone 板交叉编译了这个小应用程序:

/* led_test.c */

int main(int argc, char const *argv[])
{
    return 0;
}

编译成功,但如果我尝试在目标板上运行应用程序,我会得到:

# cd /bin/
# ls -la | grep led_test
-rwxr-xr-x    1 default  default      13512 Feb  5  2020 led_test
# led_test 
-sh: ./led_test: not found

为什么我不能在我的 Beaglebone 板上运行自定义应用程序?谁能给我解释一下,好吗?

关于我的环境的一些信息:

1. work-station: Ubuntu 18.04.4 LTS x86-64
2. target machine: ARMv7 beaglebone board
3. cross-compiler: gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf
4. I built u-boot and Linux kernel with this toolchain and mounted rootfs via NFS.

UPD 1:

我尝试使用这个./led_test 而不是led_test。没关系,因为我的应用是放在/bin目录下的。

【问题讨论】:

  • 对您的代码运行ldd,例如,目标中的任何其他可执行文件。告诉我们你看到了什么。
  • 而不是ldd,更好地使用(在带有交叉编译器的构建机器上):readelf -d led_test。它提供了可执行文件所需的共享库列表。检查这些是否存在于您的系统中。

标签: linux-kernel beagleboneblack buildroot beagleboard rootfs


【解决方案1】:

尝试通过绝对路径运行,或者如果您在目录中运行为 ./led_test 另外,显示文件的输出 文件 /bin/led_test 或者使用 gdb 运行应用程序

【讨论】:

  • 我的应用被放入/bin,这就是为什么我可以使用jush led_test,而不是./led_test :)
  • # ./led_test -sh: ./led_test: not found # strace ./led_test execve("./led_test", ["./led_test"], [/* 16 vars */] ) = -1 ENOENT (没有这样的文件或目录) write(2, "strace: exec: 没有这样的文件或目录"..., 40strace: exec: 没有这样的文件或目录) = 40 exit_group(1) = ? +++ 以 1 +++ 退出
【解决方案2】:

您的用户空间可能不是使用编译二进制文件时使用的跨工​​具链构建的。也许你用它编译了内核,但这并不重要,重要的是rootfs。

您的程序是动态链接的。当程序运行时,内核真正加载动态链接器,然后将可执行文件与库一起映射到进程的地址空间。

要查看动态链接器,请在您的主机或二进制文件的目标系统上运行 readelf -l。示例:

$ readelf -l a.out

Elf file type is EXEC (Executable file)
[... more lines ...]
      [Requesting program interpreter: /lib/ld-linux-armhf.so.3]
[... more output ...]

带有program interpreter 的行是要查找的文件。 file 也会提供此信息。可能是此处命名的文件未在您的 rootfs 上预设。那就是错误来自的“文件未找到”。

您需要做的是为您正在使用的 rootfs 使用正确的交叉工具链(使用相同的 C 库版本)或使用相同的工具链构建新的 rootfs。

查看 buildroot 以轻松制作新的、简单的 BeagleBone Black rootfs,这比使用 Yocto/Poky 制作更快、更简单。

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2021-11-07
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多