Cross Compile to RasPi from Linux/zh CN: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Cross Compile to RasPi from Linux/zh CN
| Old | New | Line | |
|---|---|---|---|
| 1 | + | ### 介绍 | |
| 2 | + | ||
| 3 | + | 这个页面是关于设置交叉/跨平台编译器的,从Linux到[[Lazarus on Raspberry Pi|Raspberry Pi]]。你应该能够在lazarus中或在仅使用的FPC中选择arm作为目标CPU,选择使用ppcrossarm编译器和生成v6 arm二进制文件。Raspberry Pi只是一个arm的具体示例,在其它类似的平台上,只有需要一些微小的修改。 | |
| 4 | + | ||
| 5 | + | - 在这里我们将讨论制作 armhf 软件包,而不是 armel 软件包,这里是一个关于低版本的简单讨论。 | |
| 6 | + | - 在 Ubuntu 21.04 和 Debian 11 Bullseye系统上测试。它应该类似于大多数的Linux平台。 | |
| 7 | + | - 假设**你当前已经有了一个FPC**,可能已经安装Lazarus。你必需使用来自FPC/Lazarus SourceForge网站下载的软件包,来自你的发行版中FPC和Lazarus软件包很可能不会如期工作。 | |
| 8 | + | - 这份安装过程的一大部分是以root用户完成的。以root用户工作可能会弄坏你的系统,请注意。 | |
| 9 | + | ||
| 10 | + | **这个页面正在开发中,所提供的方法正在测试中** | |
| 11 | + | ||
| 12 | + | ### 获取必要的库 | |
| 13 | + | ||
| 14 | + | 首先,我们需要一些来自你的 Raspberry Pi 的适当的当前的库, 这是在我竭尽所能后所测试出的获取必要库的最佳方式。确保你将需要的这些库(用于交叉/跨平台编译)已经安装在你的 Pi 上。 | |
| 15 | + | ||
| 16 | + | > **Note:** 在Raspberry Pi上选择并制作Qt5应用程序可能更有意义,现在,Raspberry Pi操作系统的基本安装不再包括GTK2库。作为依赖项的Qt5比GTK2小很多。因此,在下一步之前,需要在Pi上安装Qt5依赖项:libqt5pas1 和 libqt5pas-dev,它们将带来必要的依赖项。如果你正在使用Lazarus主干版本(又称 trunk),接下来,查看 <https://github.com/davidbannon/libqt5pas> | |
| 17 | + | ||
| 18 | + | 在 Pi 上,我们将归档我们所需要的文件,这不需要 root 权限来执行。 | |
| 19 | + | ||
| 20 | + | `tar czf usr_lib_arm-linux-gnueabihf.tgz /usr/lib/arm-linux-gnueabihf`\ | |
| 21 | + | `tar czf lib_arm-linux-gnueabihf.tgz /lib/arm-linux-gnueabihf` | |
| 22 | + | ||
| 23 | + | 接下来,我们需要 crt 文件,首先,找到它们在哪里,你的文件可能在一个目录中, 在这里不是显示的'Debian 10' (它是Debian 11 bullseye). | |
| 24 | + | ||
| 25 | + | `raspberrypi:~ $ find / -name "crtbegin.o" 2>null`\ | |
| 26 | + | `/usr/lib/gcc/arm-linux-gnueabihf/10/crtbegin.o`\ | |
| 27 | + | `raspberrypi:~ $ (cd /usr/lib/gcc/arm-linux-gnueabihf/10 && tar czf $HOME/crt.tgz crt*.o)` | |
| 28 | + | ||
| 29 | + | 注意:与从一个拥有所以库的系统安装相比,从一个“最基础”安装中获取这些库可能是一个好主意, | |
| 30 | + | ||
| 31 | + | 将这三个文件 248M (或使用Qt5的330k)、7M 和 3K 分别带到linux中,并将它们放置的你的home目录中,接下来,我们将以root用户来出来。 它们将占用大约640M的磁盘空间,可能会包含你永远不会使用的库,但是这样做比你找到真正需要的库要更容易。 | |
| 32 | + | ||
| 33 | + | ### 编译 fpc.cfg | |
| 34 | + | ||
| 35 | + | **有证据证明,这一步骤是非必要的,目前只需要忽略它,它需要更多的研究** 仅有一次更改是必需的,必需告诉编译器我们把哪个特定的arm cpu作为目标 | |
| 36 | + | ||
| 37 | + | `#ifdef cpuarm`\ | |
| 38 | + | `-CpARMV6`\ | |
| 39 | + | `-CfVFPV2`\ | |
| 40 | + | `-OoFASTMATH`\ | |
| 41 | + | `#endif` | |
| 42 | + | ||
| 43 | + | 如果你的 fpc.cfg 是在 /etc中,它可能是在那里,你需要以root用户来编辑它,这没有关系,我们将以root用户来完成大量的工作。因此,从现在起,你将以root用户运行,这意味着必需即为小心。这些命令是需要逐个复制和粘贴的。它们不是脚本! | |
| 44 | + | ||
| 45 | + | ### sudo | |
| 46 | + | ||
| 47 | + | 好的,在这里,我们必需变成root用户,这意味着要非常小心!大多数的linux系统都允许运行sudo,如果不允许的话,尝试 su - | |
| 48 | + | ||
| 49 | + | 如果你没有root用户的密码(或者,不想使用它),那么,重新配置这一整个系统环境,你可以使用一个fpc编译器和fpc源文件来安装基础的编译器到用户的空间,接着从Lazarus源文件构建Lazarus。再强调一次,在用户空间。很好的工作方法,你将需要相应地调整各种路径环境。 | |
| 50 | + | ||
| 51 | + | `sudo -i` | |
| 52 | + | ||
| 53 | + | ### 安装 Pi 库 | |
| 54 | + | ||
| 55 | + | 接下来,我们需要安装必要的来自Pi的这些tar压缩包的库(我们先前移动到这里的)。新库最终在 /usr/lib/arm-linux-gnueabihf - 因此,如果需要的话,很容易清理。 | |
| 56 | + | ||
| 57 | + | `cd / `\ | |
| 58 | + | `tar xzf /home/"$SUDO_USER"/usr_lib_arm-linux-gnueabihf.tgz `\ | |
| 59 | + | `tar xzf /home/"$SUDO_USER"/lib_arm-linux-gnueabihf.tgz`\ | |
| 60 | + | `tar xzf /home/"$SUDO_USER"/crt.tgz -C /usr/lib/arm-linux-gnueabihf ` | |
| 61 | + | ||
| 62 | + | 接下来,安装一下必要的东西,并为其建立符号链接,以便Lazarus能找到它们。 | |
| 63 | + | ||
| 64 | + | `apt install binutils-arm-linux-gnueabihf`\ | |
| 65 | + | `ln -s /usr/bin/arm-linux-gnueabihf-ld /usr/bin/arm-linux-ld`\ | |
| 66 | + | `ln -s /usr/bin/arm-linux-gnueabihf-as /usr/bin/arm-linux-as`\ | |
| 67 | + | `ln -s /usr/bin/arm-linux-gnueabihf-objcopy /usr/bin/arm-linux-objcopy`\ | |
| 68 | + | `ln -s /usr/bin/arm-linux-gnueabihf-strip /usr/bin/arm-linux-strip` | |
| 69 | + | ||
| 70 | + | ### 构建交叉/跨平台编译器 | |
| 71 | + | ||
| 72 | + | 现在,我们构建交叉/跨平台编译器,一系列已编译的arm单元。 | |
| 73 | + | ||
| 74 | + | ``` bash | |
| 75 | + | export FPCVER="3.2.2" | |
| 76 | + | cd /usr/share/fpcsrc/"$FPCVER"/ | |
| 77 | + | ||
| 78 | + | make clean all FPMAKEOPT="-T 4" CPU_TARGET=arm OPT="-dFPC_ARMHF" CROSSOPT="-CpARMV6 -CaEABIHF" CROSSBINDIR=/usr/arm-linux-gnueabihf/bin | |
| 79 | + | ||
| 80 | + | make crossinstall OS_TARGET=linux CPU_TARGET=arm OPT="-dFPC_ARMHF" CROSSBINDIR=/usr/arm-linux-gnueabihf/bin CROSSOPT="-CpARMV6 -CaEABIHF" INSTALL_PREFIX=/usr | |
| 81 | + | ||
| 82 | + | ln -sf /usr/lib/fpc/"$FPCVER"/ppcrossarm /usr/bin/ppcrossarm | |
| 83 | + | ``` | |
| 84 | + | ||
| 85 | + | 好的,完成工作了。按下Ctrl+D组合键来退出以root用户方式的访问和测试! | |
| 86 | + | ||
| 87 | + | ### 测试 | |
| 88 | + | ||
| 89 | + | 测试fpc的实际效果很容易,将hello world源文件放入一个名称为hello.pas的文件中,然后,尝试 - | |
| 90 | + | ||
| 91 | + | `db@U2104G-VirtualBox:~/Pascal/console$ ppcrossarm hello.pas`\ | |
| 92 | + | `Free Pascal Compiler version 3.2.2 [2021/07/19] for arm`\ | |
| 93 | + | `Copyright (c) 1993-2021 by Florian Klaempfl and others`\ | |
| 94 | + | `Target OS: Linux for ARMEL`\ | |
| 95 | + | `Compiling hello.pas`\ | |
| 96 | + | `Linking hello`\ | |
| 97 | + | `4 lines compiled, 0.1 sec` | |
| 98 | + | ||
| 99 | + | `db@U2104G-VirtualBox:~/Pascal/console$ file hello`\ | |
| 100 | + | `hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.0.0, stripped` | |
| 101 | + | ||
| 102 | + | 你可以将这个二进制文件移动到 Pi 中,并在其中测试它是否真的工作。 | |
| 103 | + | ||
| 104 | + | 测试Lazarus实际效果更复杂一些,启动Lazarus,打开一个新的工程,可以在其中设置一个或两个控件,打开 工程-\>工程选项-\>编译器选项-\>配置和目标,并在 目标平台 中,将 目标CPU族 设置为'arm'。 | |
| 105 | + | ||
| 106 | + | 编译和查看,二进制文件是否看起来像这样 - | |
| 107 | + | ||
| 108 | + | `db@U2104G-VirtualBox:~/Pascal/ArmTest$ file project1`\ | |
| 109 | + | `project1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.0.0, not stripped` | |
| 110 | + | ||
| 111 | + | ### 更进一步的信息 | |
| 112 | + | ||
| 113 | + | 这个页面是关于制作**armhf**软件包的,它适合于使用硬件浮点功能的arm芯片。当前的Raspberry Pi是一个示例。另一个示例是**armel**或软浮点功能的arm芯片,它也经常出现在很多系统中。它有可能是从上面的命令行中删除了OPT="-dFPC_ARMHF"中的一部分,使其适用于软浮点功能的工作。这尚未经过测试! | |
| 114 | + | ||
| 115 | + | 二进制文件可以是armhf或armel指令集中ArmV6或ArmV7 (甚至是ArmV8,但是适用于不同规则)。通常,软浮点功能arm软件包可以在一个Raspberry Pi上运行,但是,它也可能会混淆你的软件包管理器。再强调一次,这是理论上存在的。 | |
| 116 | + | ||
| 117 | + | 我发现**readelf**命令对查看一个编译后生成的二进制文件是很有用的,尝试 - | |
| 118 | + | ||
| 119 | + | `readelf -a mybinary | grep Tag `\ | |
| 120 | + | `...`\ | |
| 121 | + | `readelf -h mybinary ` | |
| 122 | + | ||
| 123 | + | 另外一个有用的提示,在这个空间玩时,在更改FPC配置后,使用Lazarus的 Tools-\>RefreshFPCSource 菜单项。(注:原英文表述不明) | |
| 124 | + | ||
| 125 | + | ## 参考 | |
| 126 | + | ||
| 127 | + | - [[Cross compiling|交叉编译/跨平台编译]] | |
| 128 | + | - [[Installing Lazarus|安装Lazarus]] | |
| 129 | + | - [[Installing the Free Pascal Compiler|安装Free Pascal Compiler]] | |
| 130 | + | ||
| 131 | + | # 贡献者和更改 | |
| 132 | + | ||
| 133 | + | - 简体中文版本由 robsean 于 2023-03-17 创建(2023-03-24完成全部翻译)。 | |
| 134 | + | ||
| 135 | + | --- | |
| 136 | + | *From the Free Pascal wiki, page "Cross Compile to RasPi from Linux/zh CN", as it stood on 2023-03-24 after a change by Robsean, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 137 | + | Category: Cross compilation | |
| 138 | + | Category: Linux |
