SharpZaurus设备设置交叉编译开发环境
作者:不想与你见面_637 | 来源:互联网 | 2017-06-25 11:52
文章标题:SharpZaurus设备设置交叉编译开发环境。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
当编译器运行在一个为另一系统产生可执行程序的系统上时,就会出现交叉编译——当目标系统没有编译工具的本地设置时,或者当主机系统更快或具有更多资源时,这是一个重要的概念。在这篇 how-to 文章中,Peter Seebach 讨论了交叉编译环境的初始设置(使用 Sharp Zaurus 手持计算机作为焦点),并且介绍了工具的安装、基本编译、在 Sharp Zaurus 手持计算机上安装程序,以及像创建使用 configure 脚本的程序这样的高级问题。 通常,程序是在一台计算机上编译,然后再分布到将要使用的其他计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,该过程就叫做交叉编译。 除了兼容性这个明显的好处之外,交叉编译还由于以下两个原因而非常重要: 当目标系统对其可用的编译工具没有本地设置时。 当主机系统比目标系统要快得多,或者具有多得多的可用资源时。 在这篇文章中,我将使用手持计算机的 Sharp Zaurus 系列作为焦点,讨论交叉编译环境的初始设置。我将介绍工具的安装、基本编译问题、如何在手持计算机上安装程序,以及像创建使用 configure 脚本的程序这样的高级问题。如果按照文章的组织顺序阅读,您将最大地从本文受益,因为本文类似于一个教程,每一步都以逻辑顺序相连。 首先,我将给出交叉编译的一个简洁的概览。 理解交叉编译 如果您熟悉交叉编译环境,则可以跳过这一节。但是如果不了解交叉编译,则请继续往下阅读。 我使用的开发系统是 x86 体系结构的 Linux 系统。我在 SuSE Linux 8.2 上测试了这些指令。测试的目标系统是 Sharp Zaurus SL-5600 和 C700。本文假设您具有 Unix 开发实践的工作背景,并使用过命令行。 正如我前面提到的,当编译器运行在一个为另一个系统产生可执行程序的系统上而且两个系统使用不同的操作环境时就会出现交叉编译。 另外,当目标系统不具有它自己的编译工具时,或者当开发者可以平衡主机系统潜在更好的性能或更多的资源时,交叉编译是有用的。 当提到交叉编译器时,我不仅仅是指将一种编程语言的代码转换成对象代码的软件,还指其他必要的开发工具: 一个汇编器,它是编译器工具链后端的一部分。 一个链接器,它是编译器工具链后端的另一部分。 用于处理可执行程序和库的一些基本工具,比如strings。 例如,strings 实用工具(它输出对象模块的文本字符串)可能是有用的,但是主机环境版本对目标环境二进制系统并不怎么有用。Zaurus 的交叉开发工具中包含 strings。 在 Zaurus 上本地运行编译器是可能的,但是系统的局限性阻碍有效的工作,这也是使交叉编译为开发者带来福音的另一个原因。典型台式机的显示器和键盘非常有利于编辑工作。另外,台式机的内存、处理器和存储容量也更能满足编译的资源需要。 现在,让我们来安装所需的工具。 安装工具 开始,您必须下载几个软件包。可以从 Sharp 的 Web 站点(在 参考资料 部分有到该站点的链接)得到这些软件包,并且必须下载为 RPM。您需要以下主要的软件包: 交叉编译器 (gcc)。 库 (glibc)。 包含文件 (头文件)。 “其他工具”——一个包含交叉开发环境中常用工具的软件包 。 接下来,安装 RPM。要做这一点,需要 root 权限。建议的安装方法是为每个文件重复 rpm -Uvh filename.rpm。 文件安装在 /opt/Embedix 目录中。该目录有一个稍微不寻常的结构——实际的二进制文件安装在 /opt/Embedix/tools/bin 目录中,具有到安装在 /opt/Embedix/tools/arm-linux/bin 目录中的这些二进制文件的符号链接。例如,/opt/Embedix/tools/arm-linux/bin/gcc 是到 /opt/Embedix/tools/bin/arm-linux-gcc 的一个符号链接。二者都可以使用。 编译一个简单的测试程序,快速测试已经正确地安装了工具。我推荐传统的 "Hello, world!" 程序,这易于测试: 清单 1. 测试正确的安装 #include int main(void) { printf("Hello, world!"); return 0; } 将该测试程序保存在一个叫做 hello.c 的文件中,并编译它。到编译器的两条路径都可以工作——我喜欢使用 /opt/Embedix/tools/arm-linux/bin/gcc。编译完程序之后,利用 file 命令检查输出文件的类型。 清单 2. 使用 file 命令检查输出的类型 $ /opt/Embedix/tools/arm-linux/bin/gcc -o hello hello.c $ file hello hello: ELF 32-bit LSB executable, ARM, version 1 (arm), dynamically linked (uses shared libs), not stripped 您可能对这一简短的偏离主题感兴趣。还记得我什么时候提到过 strings 程序吗?我们来试一试该程序。 首先, 在您的二进制系统上运行本地 strings 程序: 清单 3. 运行本地 strings 程序 $ /usr/bin/strings hello 接下来,在相同的二进制系统上运行 arm 版本: 清单 4. arm 版本 $ /opt/Embedix/tools/arm-linux/bin/strings hello 在我的测试系统上,这些产生了稍微不同的结果。特定于 arm 的 strings 程序发现一个特定于 i386 的版本未发现的新字符串。 现在,我们在目标系统上测试该程序。 在目标系统上安装应用程序 将文件移动到目标系统有几种方式: 使用标准的 Zaurus sync 软件进行转移。 复制到介质上。 通过网络移动。 使用无线卡或以太网适配器可能是移动文件最容易的方式。如果这样不行,将文件复制到 CompactFlash 或 SecureDigital 介质上也是相当方便的。不幸的是,在发布本文时,Sharp 还未正式在 Linux 下支持 sync,但是复制到介质随处可用。 根据您的 Zaurus 上的 ROM 版本的不同,系统可能不识别或安装 ext2fs 卡。因此,通过 FAT16 格式化的卡复制文件可能更实用一些。CF 和 SD 卡一般在出厂前已经这样格式化了,所以它们可以开箱即用。 (简要的术语提示:ext2fs 卡是为 Linux 文件系统格式化过的存储卡。FAT16格式化的卡是为老式的 MS-DOS 文件系统格式化过的存储卡。CF 卡是 CompactFlash,这是一些数码相机使用的一种介质标准。多数 CF 设备是存储设备,但是 CF Ethernet、无线和串行适配器也存在。SD(或者叫做 Secure Digital)卡是 MultiMediaCard 技术与我们的目的之间的一个联系,SD 卡就像一个永久保存10%空间的 MMC 卡。) 就将您的可执行文件复制到一个已安装的卡。当将该卡移动到 Zaurus 时,它就会自动地安装为 /usr/mnt.rom/cf。现在您就可以从卡运行应用程序了。 清单 5. 从卡运行应用程序 $ /usr/mnt.rom/cf/hello Hello, world! 现在您已经尝试了该程序,不过您可能更喜欢 Zaurus 的 ipkg 二进制软件包格式。ipkg 文件只是一个包含三个其他文件的 tar 文件: 第一个文件,即 data.tar.gz,是一个压缩的 tar 文件,其中包含将被安装到正确目录结构中的多个文件。 第二个文件,即 control.tar.gz,是一个压缩的 tar 文件,其中包含安装脚本和信息。 第三个文件,即 debian-binary,是一个纯文本文件,其中包含字符串“2.0”。该文件目前不真正做任何事情,但是一些工具期望该文件可用。 尽管有一个方便的脚本可为您做这项工作,但是您也可以手动创建 ipkg 文件。为防万一您确实想要手动创建一个 ipkg 文件,所以我将简要讨论这种软件包的格式。利用您将使用的标准软件安装器,该软件包将正确地安装 "hello" 程序。 创建一个名叫 h 的新目录用于保存文件。名称并不一定要叫 h,但是因为后面老要键入它,所以使用一个简短的名称。 创建一个名叫 h/opt/QtPalmtop/bin 的子目录,并将您的 "hello" 可执行文件复制到该目录。这对于显示所安装的程序是一个好目录。 创建一个名叫 h/CONTROL 的目录。该目录形成 control.tar.gz 文件的内容;h 中的其他东西都放入 data.tar.gz 文件中。在该目录中,您只需要一个文件,叫做 control。将以下数据放入该文件中: 清单 6. 将要放入 control 文件中的信息 Package: hello Priority: optional Section: Misc Version: 1.0 Architecture: arm Maintainer: Your name (your.address@example.com) Depends: libc6 Description: Just as stores have greeters, so to do PDAs have greeters. This is a longer description, separate from the first one, which can be multiple lines long, with each line indented by a single space. 还有其他可以放入到 CONTROL 目录中的文件,但是您并不需要这些文件。请参考 参考资料,在 Zaurus 开发者文档中了解该主题的附加信息。 运行 ipkg_build.sh h。如果前面所做的每一件事情都正确,您应该得到一个名叫 hello_1.0_arm.ipk 的文件。将该文件复制到您的 Zaurus ——不管如何复制都无所谓——并在 Zaurus 上运行 Add/Remove Software 程序。 安装 hello,即您应该在软件包列表中看到的版本 1.0 文件。现在就可以从命令行运行它了;它已经被复制到 /opt/QtPalmtop/bin 目录中了。如果您将它安装到一个介质插槽中而不是内部闪存中,它将在该卡上的 QtPalmtop/bin 目录中。例如,如果安装到 SD,它将被安装为 /usr/mnt.rom/card/QtPa
推荐阅读
本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ...
[详细]
蜡笔小新 2023-12-13 12:34:44
本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ...
[详细]
蜡笔小新 2023-12-14 14:01:06
本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ...
[详细]
蜡笔小新 2023-12-13 14:24:45
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2023-12-13 13:30:30
systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ...
[详细]
蜡笔小新 2023-10-17 14:49:15
CentOS Stream是一个持续交付的Linux发行版,它在RHEL之前处于领先地位。它将具有滚动发布,即不断进行更改。CentOS将成为一个上游版本,它将具有测试补丁和更新。 ...
[详细]
蜡笔小新 2023-10-17 14:13:56
一般来说获取系统root权限是很困难的,尤其是加密系统中,但西班牙安全研究员hectormarco、ismaelripoll发现,linux系统下只需按住回车键70秒钟,就能轻 ...
[详细]
蜡笔小新 2023-10-17 11:41:36
记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ...
[详细]
蜡笔小新 2023-10-17 10:28:22
---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ...
[详细]
蜡笔小新 2023-10-17 10:09:04
系统安装Debian系统的安装方式和Ubuntu系统的安装方式几乎是一样的,毕竟Ubuntu系统是基于Debian的,就如同CentOS基于Redhat ...
[详细]
蜡笔小新 2023-10-16 17:32:55
阿里云服务器iis设置方法与上千种Linux桌面版本相比,Linux服务器只有可怜的十几种。但想要选对适合你的企业需要的仍然不是件容易的事情,选Linux服务器首先要 ...
[详细]
蜡笔小新 2023-10-16 16:25:05
腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ...
[详细]
蜡笔小新 2023-10-16 13:44:39
Linux服务器我们天天打交道,特别是Linux工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展。本文介绍的几个命令,不仅仅适用于 ...
[详细]
蜡笔小新 2023-10-15 13:46:12
主流操作系统简介子墨居士操作系统理论定义为管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分 ...
[详细]
蜡笔小新 2023-10-14 13:01:23
下载地址http:www.kbengine.org这货不错安装在Linux上安装(CentosDebianUbuntuetc.)服务端,请在终端输入:pythonkbenginek ...
[详细]
蜡笔小新 2023-10-14 08:28:43
不想与你见面_637
这个家伙很懒,什么也没留下!