广告招募

当前位置:全球装备网 > 技术中心 > 所有分类

如何使用distcc对树莓派(Raspberry Pi)进行构建

2025年05月17日 18:11:14      来源:广州智维电子科技有限公司 >> 进入该公司展台      阅读量:22

分享:

在树莓派(Raspberry Pi)上本地构建可能很慢。见的方法是交叉编译,这样速度会更快,但需要更多的设置。还有第三个选择,就是使用 distcc,它以透明的方式将编译分发到远程计算机。与交叉编译相比,设置distcc会稍微简单些,但是与本地构建相比,我们还获得了速度。

distcc程序可以在网络上的多台机器上分发构建。今天,我们将使用distcc在运行Rasbian 8.0的老款树莓派B型上设置和编译CANlib,将编译分发到运行Ubuntu 16.04的Linux计算机上。

设置主机

首先,我们需要设置和配置我们的Ubuntu主机。

安装所需的软件包

使用apt安装所需软件包distccgit.


$ sudo apt update$ sudo apt install distcc$ sudo apt install git

获取并设置工具链

树莓派基金会在其GitHub存储库中提供了一个即用的工具链。创建一个目录并从GitHub获取工具链。我们只对版本感兴趣,而不是所有的历史版本,所以我们使用参数 --depth 1 .

$ mkdir ~/rpi_cross$ cd ~/rpi_cross$ git clone  --depth 1

现在我们必须确保当distcc调用我们的编译器时,它应该使用我们的交叉编译器。为此,我们创建指向编译器的符号链接。

$ cd tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin$ ln -s arm-linux-gnueabihf-c++ c++$ ln -s arm-linux-gnueabihf-cc cc$ ln -s arm-linux-gnueabihf-cpp cpp$ ln -s arm-linux-gnueabihf-g++ g++$ ln -s arm-linux-gnueabihf-gcc gcc

配置distcc

对在/etc/default/distcc路径内的distcc配置文件进行编辑。

  1. STARTDISTCC设置为“true”,以便在引导时启动distcc守护程序、distccd
  2. 更改ALLOWEDNETS以允许网络或个人电脑连接。我们只允许树莓派连接,所以在这里设置它的IP地址。
  3. 注释排除包含‘LISTENER=”127.0.0.1″‘的行,否则distcc将只环回接口。
  4. 使用JOBS设置允许的任务。您可以使用nproc命令获取计算机上可用的处理器数。在我们的机器上,我们想要将任务数量限制为两个。

/etc/default/distcc路径下的编辑后的配置文件现在如下(注释省略):

STARTDISTCC="true"ALLOWEDNETS="192.168.0.27"NICE="10"JOBS="2"ZEROCONF="false"

现在我们需要确保distcc找到并使用我们的工具链。我们通过在 /etc/init.d/distcc中的PATH变量首先包含交叉工具链的路径来实现。我们的用户在Ubuntu主机上被命名为“ubu”,所以行变成:

PATH=/home/ubu/rpi_cross/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

重新加载systemd,因为我们更改了init脚本,还需启动distccd

sudo systemctl daemon-reloadsudo systemctl start distcc

设置树莓派

我们现在可以设置和配置我们的树莓派。

安装所需的软件包

使用apt安装所需的软件包。在内核上bc命令要求可执行make prepare

sudo apt updatesudo apt install distccsudo apt install bc

设置和配置distcc

创建指向distcc的符号链接。

$ cd /usr/local/bin$ sudo ln -s /usr/bin/distcc c++$ sudo ln -s /usr/bin/distcc cc$ sudo ln -s /usr/bin/distcc cpp$ sudo ln -s /usr/bin/distcc g++$ sudo ln -s /usr/bin/distcc gcc

设置distcc环境变量。注意,你必须在每次登录时都这样设置,除非你把它们放在/etc/profile路径中。

  1. DISTCC_HOSTS环境变量设置为以空格分隔的主机列表。我们仅将主机IP地址192.168.0.2添加到我们的单主机。
  2. 如果不想在本地编译任何内容,就设置环境变量“DISTCC_SKIP_LOCAL_RETRY”=1
$ export DISTCC_HOSTS="192.168.0.2"$ export DISTCC_SKIP_LOCAL_RETRY=1

查找正确版本的Linux头文件

如何找到要使用的Linux头文件版本见博文《在树莓派Raspberry Pi上构建CANlib

获取和创建Linux头文件

如何下载和提取内核源码也同样在博文《在树莓派Raspberry Pi上构建CANlib》里进行了描述。

现在我们可以按照博文《在树莓派Raspberry Pi上构建CANlib》所述设置内核配置并创建头文件。但是,这次我们将使用distcc工具链并将编译任务发送到我们的Ubuntu主机。

$ sudo modprobe configs$ zcat /proc/config.gz > .config$ make prepare$ make modules_prepare



这两个make命令现在花了大约两分钟,比本地构建只少一分钟,但仍然减少大约30%的时间。

使用的版本

主机使用以下版本:





OS                     Ubuntu 16.04 x86_64 with kernel 4.4.0-21-generic distcc                 version 3.1 (package version 3.1-6.2)            raspberrypi/tools.git  rev 6376a50ed059b3c852ce3836981ba5ff07d6b368 



客户端,树莓派B型使用以下版本:

OS Rasbian 8.0 with kernel 4.4.11+

distcc version 3.1 (package version 3.1-6.2)

firmware.git rev 3b98f7433649e13cf08f54f509d11491c99c4c0b

linux.git rev 233755da0e7903fccb41f0b8c14e1da5244b69ec





版权与免责声明:
1.凡本网注明"来源:全球装备网"的所有作品,版权均属于全球装备网,转载请必须注明全球装备网。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。 4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。