搭建arm交叉编译环境
beagleboard-xM构建交叉编译环境

玩转BeagleBoard xM——建立虚拟机开发环境和嵌入式Linux系统分类:beagleboard xM linux kernel rootfs 2012-07-28 10:36 343人阅读评论(0) 收藏举报在Beagleboard xM(简称bb)上建立能运行Linux系统,包括了创建启动用的TF卡,编译生成bootloader(MLO和u-boot.bin),编译生成内核镜像文件(uImage或zImage 文件),创建rootfs(Linux根文件系统)等工作。
这些工作需要在一台配置ARM交叉编译环境的Linux系统上完成。
下面分步完成整个系统的建立过程,直至Linux系统在bb上boot起来,进入shell命令行。
STEP 1:建立ARM嵌入式开发环境利用ARM交叉编译环境,可以x86系统上,编译ARM处理器上可执行的目标代码。
主要用于编译bb上的bootloader、内核镜像,以及其它ARM可执行程序。
具体步骤:(1)在VMware上创建一个虚拟机,安装发行版的ubuntu系统,用于建立ARM嵌入式开发环境。
(2)安装arm-linux-gcc,建立ARM交叉编译环境(需要root权限)1、下载arm-linux-gcc-4.3.2.tgz压缩包2、tar -xzvf arm-linux-gcc-4.3.2.tgz,自动解压至/user/local/arm/目录下。
ARM交叉编译器的所有可执行程序在/usr/local/arm/4.3.2/bin/目录下。
3、配置root用户环境变量,修改/etc/bash.bashrc文件#vi /etc/bash.bashrc在最后加上export PATH=$PATH:/usr/local/arm/4.3.2/bin4、测试arm-linux-gcc -v,会执行编译器,正常显示版本信息表示已安装配置成功STEP 2:创建bootloader和boot.scrTI OMAP系列处理器上的bootloader专指x-loader(MLO)和u-boot(u-boot.bin),两者用于完成Linux内核启动前的配置部分硬件系统配置,解压加载内核Image文件并引导内核启动。
交叉编译环境以及开发板上-binsh:.hello:notfound(使用arm-linu。。。

交叉编译环境以及开发板上-binsh:.hello:notfound(使⽤arm-linu。
⽬标板是S3C2440.⾄于交叉编译环境的搭建就不多说了,⽹上很多教程.搭建好了交叉编译环境后,第⼀件事就是传说中的”Hello,World!”.⼀. 主机编译环节我使⽤的系统是ubuntu10.04,搭建好交叉编译环境后,终端输⼊arm-linux-gcc -v能够正常显⽰版本信息,但是输⼊sudo arm-linux-gcc -v后却显⽰命令⽆法找到.我试过很多种⽅法,⽐如sudo -s切换到root后,编辑$PATH,将编译器路径加⼊.然后exit到普通⽤户.仍然不能执⾏sudo arm-linux-gcc -v. 这⾥如果哪位⼤⽜知道是什么原因的可以留⾔告诉我,谢谢:)由于编译.c的⽂件后,要产⽣新的⽂件,因此要super的权限.⼜不能使⽤sudo arm-linux-gcc,于是可以先sudo -s到root⽤户,再使⽤arm-liunux-gcc来进⾏编译.⼆. ⽬标板执⾏环节我是使⽤FTP在主机和⽬标板之间传送⽂件.传送过去后要注意改变权限.这⾥要注意⼏点:1. 要确定ftp过来后的⽂件的默认的存放路径.这个只要在⽬标机的终端机上确认下即可.(这个地⽅没有确认可能就会显⽰找不到命令)2. 传送过来的⽂件要更改权限才能运⾏.可以⽤:chmod 777 hellochmod +x hello3. 执⾏./hello这时,报错:-/bin/sh: ./hello: not found三. 问题排除⽤过绝对路径也试过之后就确定并不是⽂件是否存在的问题,⽽是这个⽂件并不能被执⾏.GOOGLE之后可以发现,排除上⾯提到问题后,就将问题定位到动态链接库上.于是在主机上⽤arm-linux-gcc -static -o 来进⾏静态编译.然后将新产⽣的⽂件传到⽬标板上.可以发现通过静态编译的⽂件明显⽐动态编译的要⼤.然后再次执⾏./hello 可以看到屏幕上出现了久违的Hello,World!问题到这⾥还没有完,我们可以再思考下怎么彻底解决,⽽不是每次都使⽤静态编译.既然是动态库引起的问题,那么应该和编译器的版本有关.在安装编译环境的时候同时安装了3.4.1和4.3.3两个版本.⽤户⼿册上说其中3.4.1是⽤来编译u-boot的,4.3.3版本是⽤来编译Linux内核和Qtipia的,两个版本均可以⽤来编译应⽤程序.既然我们的内核使⽤4.3.3编译的,⽽我们刚才编译hello是使⽤3.4.1编译的,那么会不会是这个原因呢?于是我们试⼀下,将$PATH中的原来包含3.4.1/bin 的路径改为 4.4.3/bin . 修改的⽅法⽹上有很多.(直接export PATH=”想要的路径”)再次编译,下载.⽬标板上执⾏,成功显⽰”Hello,World!”.可以看到系统中动态库的⽀持和编译器还是有关的./lzjsky/p/3730183.html。
基于ARM-linux的交叉编译环境的创建

能 强 、 耗 低 、 靠 性 高 以及 面 向 行 业 具 体 应 用 等 突 出特 点 , 功 可 目前
已 广 泛 地 应 用 于 国 防 、 费 电子 、 息 家 电 、 络 通 信 、 业 控 消 信 网 T l
保持一致。 以到相关网站去获得 , 可 网上 这 方 面 资 源 比较 丰 富 。 你 把 这 三 个 文 件 解 压 到 你 自己 创 建 的 目录 中 就 可 以 了 。交 叉 编 译 使 用 的 软 件 包 如 下 表 所 示
1引 言
以 嵌 入 式计 算 机 为 核 心 的嵌 入式 系 统 是 继 网络 技 术 之 后 , 又
一
的 是 ,l c和 内 核 源 代 码 的 版 本 必 须 与 目标 机 上 实 际 使 用 的 版 本 gb i
个I T领 域 新 的 技 术 发 展方 向 。 由 于 嵌 入式 系统 具 有体 积小 、 性
 ̄ t s21 ui + 6 ]
制 等 各 个领 域 。 例 如 , 乎 所 有 的 手 机 、 动 设 备 、D 几 乎 都 是 几 移 PA
用 具 有 AR 核 的 系 统 芯 片 开 发 的 。 M
Oc 编 译 器 c Gh c b库
ht:fo  ̄ m』 c3 1 /t. uo p /lg c -
( a i stt o c n lg g nzt nDe a me t Hui 2 0 1 C ia Hu i nI t ue f h o yOr i i p  ̄ n , a n 2 3 0 , hn ) y n i Te o a ao a
hiredis-master arm交叉编译

hiredis-master arm交叉编译全文共四篇示例,供读者参考第一篇示例:hiredis是一个高性能的C语言实现的Redis客户端库,它提供了简单易用的API,方便开发者与Redis数据库进行交互。
在很多嵌入式系统中,我们可能需要将hiredis库交叉编译到ARM架构的平台上,以便在嵌入式设备上运行Redis客户端程序。
本文将介绍如何在ARM 平台上进行hiredis库的交叉编译。
一、环境准备在进行交叉编译之前,我们需要准备好相应的开发工具和环境。
首先需要安装ARM交叉编译工具链,以便编译器能够生成适用于ARM架构的可执行文件。
通常可以通过在Linux系统上运行以下命令来安装ARM交叉编译工具链:```sudo apt-get install gcc-arm-linux-gnueabihf```接着,我们需要获取hiredis库的源代码。
可以通过在终端中运行以下命令来从GitHub上克隆hiredis库的源代码:二、交叉编译hiredis库在获取了hiredis库的源代码并安装了ARM交叉编译工具链之后,我们就可以开始进行交叉编译了。
首先进入hiredis库的根目录,并创建一个新的目录用于存放编译生成的文件:```cd hiredismkdir buildcd build```接着,我们可以使用cmake工具来生成交叉编译所需的Makefile 文件。
运行以下命令来生成Makefile文件:然后使用生成的Makefile文件来进行编译:```make```编译完成后,我们就可以在build目录下找到编译生成的hiredis 库文件了。
如果需要将生成的库文件复制到其他地方,可以运行以下命令:三、在ARM平台上使用hiredis库在完成hiredis库的交叉编译后,我们可以将生成的库文件复制到ARM平台上的开发项目中,并在代码中引用该库来实现与Redis数据库的交互。
以下是一个简单的示例代码,演示了如何在ARM平台上使用hiredis库连接到Redis数据库,并执行一些简单的操作:c = redisConnect("127.0.0.1", 6379);if (c == NULL || c->err) {if (c) {printf("Error: %s\n", c->errstr);redisFree(c);} else {printf("Cannot connect to Redis\n");}return 1;}reply = redisCommand(c, "SET foo bar");printf("SET: %s\n", reply->str);freeReplyObject(reply);redisFree(c);return 0;}```在上面的示例中,我们首先连接到本地运行的Redis数据库,然后向数据库设置一个键值对,并从数据库中获取该键的值。
llvm在ARM上的交叉编译程序

llvm在ARM上的交叉编译程序LLVM在ARM上的交叉编译程序一、引言LLVM(低级虚拟机,Low Level Virtual Machine)是一个开源的编译器基础设施项目,被广泛应用于各种编程语言的编译器开发中。
在ARM架构上实现LLVM的交叉编译程序,可以将代码从一种架构(如x86)转换为ARM架构上的可执行文件。
本文将深入探讨LLVM在ARM上的交叉编译程序的实现原理和应用场景。
二、LLVM的基本原理1. LLVM的三层抽象LLVM结构中的三个主要层次为:前端(Frontend)、中间层(Intermediate Representation)和后端(Backend)。
前端负责将源代码转换为中间表示形式,中间层是一个编译器中间表示的通用格式(LLVM IR),后端则负责将中间表示形式转换为目标架构的代码。
2. LLVM的静态单赋值形式(SSA)SSA是一种中间表示形式,LLVM在中间层使用SSA来表示程序的数据流信息。
SSA的优点是简化了数据流分析和优化的过程,并且可以生成更高效的代码。
3. LLVM的编译优化LLVM在编译过程中提供了多种优化技术,如常量折叠、循环展开、函数内联等。
这些优化技术可以显著提高代码的性能和执行效率。
三、ARM架构上的LLVM交叉编译程序1. ARM架构简介ARM是一种广泛应用于移动设备和嵌入式系统的处理器架构。
与x86架构相比,ARM架构具有低功耗和高性能的特点,因此在物联网和移动领域得到了广泛应用。
2. ARM上的LLVM交叉编译在ARM上实现LLVM的交叉编译程序有以下几个步骤:2.1 安装LLVM和Clang要在ARM上进行交叉编译,首先需要在目标设备上安装LLVM和Clang工具链。
这些工具将用于将中间表示形式转换为ARM架构上的可执行文件。
2.2 配置交叉编译环境在进行ARM交叉编译之前,需要配置交叉编译环境。
这涉及到设置目标架构、路径、库文件等参数,以确保编译器能够正确地将代码转换为ARM可执行文件。
QT5静态编译工程(arm交叉编译)

QT5静态编译⼯程(arm交叉编译)1、⾸先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境2、下载QT源码(5.13版本):http://download.qt.io/development_releases/qt/5.13/5.13.0-rc/single/qt-everywhere-src-5.13.0-rc.tar.xz3、编译QT前需先配置交叉编译器: 解压源码后,进⼊源码的qtbase/mkspecs/linux-arm-gnueabi-g++⽬录,编辑⾥⾯的qmake.conf⽂件: 将⽂件⾥的arm-linux-gnueabi-都改为你⽤的交叉编译器(带路径,如果不带路径则需设置好PATH变量)⽐如改为:arm-linux-gnueabihf-4、⽤静态⽅式编译并安装QT 在源码⽬录下执⾏如下命令: ./configure -v -prefix /home/wch/Qt-5-arm -static -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -no-accessibility -no-dbus -no-openssl -no-opengl -no-glib -no-iconv -no-xcb -no-pch -no-compile-examples -no-pkg-config -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc -skip qtwayland make make install 其中/home/wch/QT-5-arm是安装⽬录,根据你的情况指定;-static是指定为静态编译;-xplatform linux-arm-gnueabi-g++是说明⽬标平台是arm,其它参数根据⾃⼰的情况⾃⾏修改,各参数的含义可以⽤./configure --help命令查看 经过上⾯三步,就在指定的/home/wch/QT-5-arm⽬录下⽣成的QT的编译环境,该环境的bin⽬录下有qmake程序。
linux安装配置交叉编译器arm-linux-gnueabi-gcc

linux安装配置交叉编译器arm-linux-gnueabi-gcc要使我们在x86架构下运⾏的程序迁移⾄ARM架构的开发板中运⾏时,需要通过交叉编译器将x86下编写的程序进⾏编译后,开发版才能运⾏。
在安装之前我们需要了解,什么是。
⼀、下载交叉编译器1.新版本的下载⼊⼝如下图所⽰:下载流程如下所⽰:“GNU Toolchain Integration Builds → 11.0-2021.03-1 → arm-linux-gnueabihf → gcc-linaro-11.0.1-2021.03-x86_64_arm-linux-gnueabihf.tar.xz。
”注意:随着时间的不同可能版本号有所变化,不过下载流程应给是⼀样的,除⾮⽹站的变化很⼤。
2.历史版本下载⼊⼝如下图所⽰:下载流程如下所⽰:“View Releases → components → toolchain → binaries → 6.2-2016.11 → arm-linux-gnueabihf → gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz”⼆、安装交叉编译器进⼊linux系统,在/usr/local下创建arm⽂件,将下载的交叉编译⼯具链拷贝到linux系统的/usr/local/arm路径下,并进项解压,如下图所⽰:三、设置环境变量打开/etc/profile⽂件sudo vim /etc/profile在⽂件的最后⼀⾏添加交叉编译链的路径,完成后保存退出export PATH=$PATH:/usr/local/arm/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin如下图所⽰:重新加载环境变量的配置⽂件source /etc/profile检验是否安装成功arm-linux-gnueabihf-gcc -v如果出现以下信息说明安装成功。
Ubuntu18.04安装arm-linux-gcc交叉编译器的两种方法(附下载地址)

Ubuntu18.04安装arm-linux-gcc交叉编译器的两种⽅法(附下载地址)⽅法⼀: 我们都知道Ubuntu有⼀个专门⽤来安装软件的⼯具apt,我们可以⽤它来全⾃动安装arm-linux-gcc。
此⽅法安装的是最新版的,但是此⽅法需要FQ,否则99%会失败,这就是为什么⽹上⼤多都⽤压缩包安装的原因: ⾸先Ctrl+Alt+T弹出终端,使⽤如下命令进⾏arm-linux-gcc的安装:sudo apt-get install gcc-arm-linux-gnueabihf 使⽤如下命令进⾏arm-linux-g++的安装:sudo apt-get install g++-arm-linux-gnueabihf 如果要卸载时使⽤如下命令进⾏移除,arm-linux-gcc的卸载:sudo apt-get remove gcc-arm-linux-gnueabihf arm-linux-g++的卸载:sudo apt-get remove g++-arm-linux-gnueabihfsudo tar -xjvf /tmp/arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 3.解压完成后,再在(/usr/local)中创建⼀个新⽬录arm,即在Terminal中输⼊以下命令:sudo mkdir /usr/local/arm 4.创建arm⽬录成功后,还需要给它解放全部权限,即在Terminal中输⼊以下命令:sudo chmod 777 /usr/local/arm 5.在解压出来的⽬录中找到并把整个arm-linux-gcc-3.4.5-glibc-2.3.6⽬录复制到刚刚建好的arm⽬录中,命令如下:sudo cp -r gcc-3.4.5-glibc-2.3.6 /usr/local/arm 6.打开(/etc/profile)配置环境变量和库变量,⽬的是以后可以在任何位置使⽤该交叉编译器,命令如下:sudo vi /etc/profile 7.⽤vi或者vim打开后,在⽂件最后添加两⾏,并输⼊以下代码:第⼀⾏是添加执⾏程序的环境变量,第⼆⾏是库⽂件的路径export PATH=$PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/lib 8.使⽤source命令重新加载⽣效该配置⽂件source /etc/profile 9.检验是否安装成功,在 Terminal 输⼊以下命令输出版本信息:arm-linux-gcc -v 10.若有以下报错参考解决办法: 报错:bash: /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc-4.2.2: No such file or directory 解决sudo apt-get install libc6-i386 该库中包括ia32-libs, lib32z1, lib32ncurses5等等依赖。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
搭建arm交叉编译环境
V0.1
ALL Rights Reserved, Copyright © FUJITSU LIMITED 2013
改版履历
修改日期修改原因版本修改者2013/2/27 初版制成V0.1 WengFan
目录
一交叉编译器环境创建 (4)
二使用交叉编译工具编译内核 (7)
三使用交叉编译工具制作根文件系统 (9)
四使用qemu运行 (11)
一交叉编译器环境创建
编译器名字:codesourcery
下载地址:ftp:XXXX: arm-2011.03-41-arm-none-linux-gnueabi.bin 运行可执行文件arm-2011.03-41-arm-none-linux-gnueabi.bin。
命令:./ arm-2011.03-41-arm-none-linux-gnueabi.bin
输入Y。
接受许可协议。
输入回车键,选择默认的配置。
输入回车键,会默认安装到用户目录下的CodeSourcery/Sourcery_G++_Lite位置。
这里建议选择输入回车选择默认配置。
输入回车键,会默认在用户目录CodeSourcery/Sourcery_G++_Lite_for_ARM_GNU_Linux创建链接。
这里建议选择输入回车选择默认配置。
输出回车键确认安装信息。
输入回车键开始安装。
安装过程中的提示信息:
输入回车键安装完成。
二使用交叉编译工具编译内核
测试内核版本:linux-2.6.32.27
下载地址:/pub/linux/kernel/v2.6/linux-2.6.32.27.tar.bz2
按照以下步骤完成编译内核工作:
1. 解压下载的kernel源码文件linux-
2.6.32.27.tar.bz2。
命令:tar xvf linux-2.6.32.27.tar.bz2
2. 进入到源码的根目录下。
命令:cd linux-2.6.32.27
3. 配置编译内核的configue文件。
命令:make ARCH=arm CROSS_COMPILE=arm-linux- versatile_defconfig
4. 通过kernel界面配置内核选项。
命令:make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
输入命令会会弹出kernel配置界面,进入到kernel Features选项配置界面,如下图所示:
选择Use the ARM EABI to compile the kernel ,如下图所示:
配置完成之后连续输入两次ESC键退出保存即可。
5. 导入编译好的交叉编译工具目录。
export PATH=/home/wengf/CodeSourcery/Sourcery_G++_Lite/bin:$PATH
6. 编译内核
命令:make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
7. 生成内核
编译完成之后在linux-2.6.32.17/arch/arm/boot/目录下的zImage为编译的内核文件。
三使用交叉编译工具制作根文件系统
1. 准备busybox源码
busybox版本:busybox-1.18.4.tar.bz2
下载地址:/downloads/busybox-1.18.4.tar.bz2
2. 解压busybox源码
命令:tar xvf busybox-1.18.4.tar.bz2
3. 配置busybox编译选项
进入到busybox根目录。
cd busybox-1.18.4
配置选项命令:make menuconfig
输入命令后,进入到图形化配置界面:
按如下进行配置
Busybox Settings --->
| Build Options --->
| () Cross Compiler prefix (NEW)
| 填写arm-none-linux-gnueabi-
如下图所示:
配置完成之后连续输入两次ESC键退出即可。
5. 导入编译好的交叉编译工具目录。
export PATH=/home/wengf/CodeSourcery/Sourcery_G++_Lite/bin:$PATH
6. 编译
命令:make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
7. 安装
命令:make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install
输入命令后,会将编译好的busybox安装到busybox-1.18.4/_install目录下。
8. 创建根文件系统目录和文件
进入到编译好的busybox的_install目录。
命令:cd _install
创建生成根文件系统的shell脚本。
命令: touch mkroot.sh
chmod 755 mkroot.sh
在mkroot.sh脚本中输入以下内容:
1 #!/bin/sh
2 mkdir etc
3 cd etc
4 touch fstab
5 echo "proc /proc proc defaults 0 0" > fstab
6 touch inittab
7 echo ::sysinit:/etc/init.d/rcS > inittab
8 echo console::askfirst:-/bin/sh >> inittab
9 echo ::ctrlaltdel:/bin/umount -a -r >> inittab
10 touch profile
11 echo "echo -n \"Processing /etc/profile... \"" > profile
12 echo "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/u-updater" >> profile
13 echo "LD_LIBRARY_PATH=/lib:/usr/lib" >> profile
14 echo "export \$PATH \$LD_LIBRARY_PATH" >> profile
15 echo "echo \"Done\"" >> profile
16 mkdir init.d
17 touch init.d/rcS
18 echo "#! /bin/sh" >> init.d/rcS
19 echo "/bin/mount -a" >> init.d/rcS
20 chmod +x init.d/rcS
21 cd ..
22 cp $HOME/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/libc/lib . -rf
23 mkdir proc
24 find . | cpio -c -o > ../initrd.cpio
注意:上述脚本中第22行是拷贝交叉编译的lib库。
如果交叉编译器没有安装在默认位置,请手动更改lib库的位置。
运行mkroot.sh脚本后,会在busybox的根目录下生成根文件系统文件initrd.cpio。
四使用qemu运行
编译好内核文件zImage与根文件系统initrd.cpio之后,就可以使用qemu-system-arm来启动一个简单的系统了。
命令如下:
qemu-system-arm -M versatilepb -kernel zImage -initrd initrd.cpio -m 128M -append "console=ttyAMA0 root=/dev/ram rdinit=/linuxrc" -nographic
11。