我正在尝试设置一个 scratchbox2 配置,以使用包含真实 raspian 发行版副本的根分区交叉编译 rasberry pi 软件。这似乎工作正常,因为我可以运行 arm 可执行文件,但是因为我试图在没有前缀的复制根分区中使用 gcc,所以名称转换不起作用。我如何 chroot 暂存盒会话?运行 sb2 后运行 chroot 似乎不起作用。
1 回答
初始化 scratchbox2! 后,您不需要 chroot!使用以下过程可以实现您的期望:
确保您在主机系统上设置了交叉编译工具。假设您在 linux 主机 (Ubuntu) 上,您可以使用以下命令安装一个:
sudo apt-get install gcc-arm-linux-gnueabihf
(hard float) 或
sudo apt-get install gcc-arm-linux-gnueabi
如果您在不同的主机上,或者您有不同的工具链用于交叉编译,如 codesourcery 的工具链,只需确保安装适当的版本(硬浮点/软浮点)并将编译器的路径导出到 $PATH 并注意名称(前缀)。
确保您已安装 Qemu。
由于您已经安装了 scratchbox2,假设您的 Rapberrypi 的 rootfs 在主机 pc 上的副本的路径存储在变量 $raspirootfs 中,
cd $raspirootfs
现在使用以下命令初始化 sb2:
sb2-init raspberrypi arm-linux-gnueabi-gcc
Whereraspberrypi
只是目标配置的名称。替换arm-linux-gnuabi-gcc
为您的交叉编译器前缀。
如果这是您的第一个目标配置(如果这是您第一次运行 sb2-init),您可以通过输入以下命令使用默认目标配置启动 sb2:
sb2 -eR
这应该会给您一个提示,例如:
[SB2 emulate raspberrypi] user@pc #
现在 sb2 处于模拟模式并且不在正常模式下,它将尝试远离您的主机二进制文件并使用 qemu 执行 $raspirootfs 中的二进制文件。
进入sb2-show path /etc/apt
在终端中查看 /etc/apt 是如何映射的。它应该显示类似/etc/apt --> $raspirootfs/etc/apt
(而不是主机系统的 /etc/apt)。
安装到仿真系统中:
就像在主机系统上一样。示例:
apt-get install build-essential
交叉编译一些源代码:
cd sourcedir
sb2 ./configure
sb2 make -jN
sb2 make install DESTDIR=$raspirootfs
对于那些尝试使用 scratchbox2 设置交叉编译环境的人,我在这里发了一个帖子:http: //praveenp.com/setting-up-a-cross-compiling-environment-to-build-linux-applications- for-embedded-targets/。对于使用 chroot 进行交叉编译,您可以参考这篇文章: http: //praveenp.com/setting-up-an-environment-using-chroot-for-developing-applications-for-embedded-targets/