搭建Linux交叉编译开发环境
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。
linux交叉编译环境搭建步骤
linux交叉编译环境搭建步骤在Linux系统下搭建交叉编译环境主要涉及以下几个步骤:2. 配置环境变量:将交叉编译工具链的路径添加到系统的环境变量中以便于使用。
可以在用户的`.bashrc`或`.bash_profile`文件中添加如下行:```bashexport PATH=<path_to_toolchain>/bin:$PATH```其中`<path_to_toolchain>`是指交叉编译工具链所在的路径。
3.设置目标平台的系统根目录:交叉编译时需要使用目标平台的系统库和头文件,因此需要设置目标平台的系统根目录。
可以通过以下方式设置:```bashexport SYSROOT=<path_to_sysroot>```其中`<path_to_sysroot>`是指目标平台的系统根目录。
4.编写一个简单的交叉编译项目:为了验证交叉编译环境是否搭建成功,可以编写一个简单的交叉编译项目进行测试。
例如,编写一个简单的C程序,将其交叉编译为ARM平台下的可执行文件。
```c#include <stdio.h>int maiprintf("Hello, world!\n");return 0;```将上述代码保存为`hello.c`文件。
然后,使用以下命令进行交叉编译:```basharm-linux-gnueabi-gcc -o hello hello.c```编译完成后,会生成一个名为`hello`的可执行文件。
在ARM平台上执行该可执行文件,将输出`Hello, world!`。
以上就是在Linux系统下搭建交叉编译环境的基本步骤。
根据具体的需求,可能还需要进行其他的配置和设置。
Linux交叉编译环境及工具介绍
一体化电源Makefile文件介绍:
一体化电源代码目录结构: main---主程序 bin------可执行文件和规约so库 debug---存放主程序各文件的目标文件中间目录
include----主程序用头文件目录
monitor src-----主程序和规约库用头文件目录
ptlmodule---存放规约库文件目录
什么是交叉编译:
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码, 我们就称这种编译器支持交叉编译器。这个编译过程就叫交叉编译。 简单地 说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所 谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Opera ting System)。同一个体系结构可以运行不同的操作系统;同样,同一个操 作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平 台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT 平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。
龙腾蓝天1808交叉编译环境:
1、解压缩到指定目录 tar zxvf tool.tar.gz
2、进入linux-devkit目录 3、./environment-setup 4、进入linux-devkit/bin目录,为arm-arago-linux-gnueabi-g++等工 具建立软链接。例如:ln –s arm-arago-linux-gnueabi-g++ arm-linu x-g++ 5、编辑/etc/profile ,添加环境变量。
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如果出现以下信息说明安装成功。
搭建虚拟机交叉编译环境
编译环境的搭建
虚拟机安装,操作系统
1.解压操作系统镜像 fedora9 2.安装虚拟机 的 3.点击打开已存在的虚拟机按钮,找到解压后 操作系统镜像 4.点击绿色按钮恢复操作统 5.copy 我已复制
6.yes 是
虚拟机中操作系统和pc机的共享
1.windos上新建一个文件夹 D:/tarena 2.虚拟机->设置->选项->共享文件夹->总是启用 3.添加 跟随向导选择windos上的文件夹tarena 确定 4.确定 5.cd /mnt/hgfs 6.ls 看到tarena表示成功(部分电脑看不到也算正常)
5.vim ~/.bashrc a 添加一行: export PATH=$PATH:第4步复制的内容 esc :wq 6.重启终端然后输入 arm-linux- 按两下tab键 如果显示一些命令,表示安装成功
交叉编译环境
1.把arm-linux-gcc-4.5.1.tgz文件复制到虚拟机中root的主文 件夹里 2.解压 打开终端 cd tar -zxvf arm-linux-gcc-4.5.1.tgz(输入ar后按tab键) 3.一路cd直到进入bin目录 4.pwd然后复制显示的内容 /root/opt/FriendlyARM/toolschain/4.5.1/bin
基于Linux的嵌入式交叉编译环境的建立及实现
不紊 的进 行 。 iu Ln x操 作 系统 的建立 可 以选 择在 P C机
上 安装 L n x操 作 系统 或 者 在 Wid w iu n o s下 安 装 虚 拟 Ln x环 境 软件 [ 。L n x开发 环境 方案 有 以下 几种 : iu 2 iu ]
进 行 项 目开发 的 时候必 须 搭建 一 套 开发 环 境 , 包括 操
Env r n e s d o Li ux i o m ntBa e n n 刘永 林 梁 莹 王诗 琴 师 惠萍 ( 中北大 学山西省 现代 无损检 测工程 技 术研 究 中心 太原 ( 中北大 学山西省 光 电信 息与仪 器 工程技 术研 究 中心 太原 。 00 5 ) 3 0 1 0 05 ) 3 0 1
CCROSS
—ห้องสมุดไป่ตู้
⑧ 系统 头 文件 gich a e : 编译过 程 中函数声 l —edr对 b
明 , 果 缺 少 了头 文 件 , 统 功 能 的很 多 C程 式 将 无 如 系 法 编译 。
C OM PI E — a m—i u L r l x # ma e n k
me c nu onfg i
现 代嵌 入 式行 业 的交 叉 编译 环 境 多种 多样 , 多 很
都 有 各 自的特点 和使 用 的便 利性 , 入 式开 发 人 员往 嵌
往 需要 搭建 一套适 合 自己的交 叉编译 环境 。本 文根 据
硬 件 结 构 和 软 件 需 求 搭 建 了 一 套 工 具 链 , 用 采
“ no s Wid w +Vmwae虚拟 机 ( iu ) 目标 系 统 ” r Ln x + 的 结 构 模 式 , 成交 叉 编译 环 境 的构 建 , 进行 开 发 测 完 并
交叉编译环境的建立
随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。
在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。
这是一个由编译器、连接器和解释器组成的综合开发环境。
交叉编译工具主要由binutils、gcc 和glibc 几个部分组成。
有时出于减小libc 库大小的考虑,你也可以用别的c 库来代替glibc,例如uClibc、dietlibc 和newlib。
建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载。
下面我们将以建立针对arm的交叉编译开发环境为例来解说整个过程,其他的体系结构与这个相类似,只要作一些对应的改动。
我的开发环境是,宿主机i386-redhat-7.2,目标机arm。
这个过程如下1. 下载源文件、补丁和建立编译的目录2. 建立内核头文件3. 建立二进制工具(binutils)4. 建立初始编译器(bootstrap gcc)5. 建立c库(glibc)6. 建立全套编译器(full gcc)下载源文件、补丁和建立编译的目录1. 选定软件版本号选择软件版本号时,先看看glibc源代码中的INSTALL文件。
那里列举了该版本的glibc编译时所需的binutils 和gcc的版本号。
例如在glibc-2.2.3/INSTALL 文件中推荐gcc 用2.95以上,binutils 用2.10.1 以上版本。
我选的各个软件的版本是:linux-2.4.21+rmk2binutils-2.10.1gcc-2.95.3glibc-2.2.3glibc-linuxthreads-2.2.3如果你选的glibc的版本号低于2.2,你还要下载一个叫glibc-crypt 的文件,例如glibc-crypt-2.1.tar.gz。
mingw gcc linux 交叉编译
mingw gcc linux 交叉编译交叉编译是指在一个操作系统上编译另一个不同操作系统的可执行文件或库。
在Linux系统上使用MinGW的GCC进行交叉编译,可以编译出在Windows系统上运行的可执行文件或库。
下面将详细介绍交叉编译的过程。
首先,我们需要安装MinGW的GCC工具链。
MinGW是Minimalist GNU for Windows的缩写,是一套在Windows上开发和运行GNU软件的工具集。
GCC是GNU编译器集合的一部分,它是一个广泛使用的编译器,可以编译多种语言的程序。
安装MinGW的GCC可以通过包管理器或者从MinGW官网下载安装包进行安装。
安装完成后,我们需要设置环境变量,将MinGW的bin目录添加到系统的PATH变量中,以便在命令行中可以直接使用GCC命令。
接下来,我们需要获取目标系统的交叉编译工具链。
交叉编译工具链是一套用于在Linux上编译Windows可执行文件或库的工具,其中包括Windows的头文件、库文件和链接器等。
可以从MinGW官网下载交叉编译工具链的压缩包,或者通过包管理器安装。
安装完成后,我们需要将交叉编译工具链的bin目录添加到系统的PATH变量中,以便在命令行中可以直接使用交叉编译工具链的命令。
接下来,我们可以使用GCC进行交叉编译。
在命令行中,使用以下命令编译一个简单的C程序:$ i686-w64-mingw32-gcc hello.c -o hello.exe其中,i686-w64-mingw32-gcc是交叉编译工具链的GCC命令,hello.c 是源代码文件,-o hello.exe是编译生成的可执行文件的输出路径。
编译完成后,我们可以将生成的hello.exe文件拷贝到Windows系统中运行,即可验证交叉编译是否成功。
需要注意的是,在进行交叉编译时,可能会遇到一些问题。
例如,由于Windows和Linux的文件路径格式不同,可能需要修改代码中的文件路径相关的部分。
实验四_嵌入式Linux交叉开发环境的搭建
实验四嵌入式Linux交叉开发环境的搭建一实验目的1.明白交叉编译环境的意义2.能够独立搭建嵌入式交叉编译环境3.嵌入式交叉编译环境的使用二实验内容1.搭建嵌入式交叉编译环境2.嵌入式交叉编译环境的使用三实验步骤1.主机交叉开发环境的配置A.配置控制台程序Windows操作系统中有超级终端(HyperTerminal)工具;Linux/Unix操作系统有minicom (使用“minicom”命令启动该软件)等工具B.配置TFTP服务tftp是一个传输文件的简单协议,它基于UDP协议而实现。
此协议设计的时候是进行小文件传输的。
Linux下TFTP服务配置:vim /etc/xinetd.d/tftpservice tftp{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4}启动TFTP服务$ /etc/init.d/xinetd start关闭TFTP服务$ /etc/init.d/xinetd stop重启TFTP服务$ /etc/init.d/xinetd restart查看TFTP状态$ netstat –au | grep tftpProto Recv-Q Send-Q Local Address Foreign Address Stateudp 0 0 *:tftp *:*Windows下TFTP服务配置:在Windows下配置tftp服务需要安装使用tftp服务器软件,常见的可使用tftpd32,网上有很多下载该软件的地方,读者可以自行下载。
要注意的是,该软件是tftp的服务器端,而目标板上则是tftp的客户端C.NFS文件系统NFS为Network FileSystem的简称,最早是由Sun公司提出发展起来的,其目的就是让不同的机器、不同的操作系统之间可以彼此共享文件。
Chap嵌入式Linux应用程序开发
(3)拷贝BootLoader阶段2的代码到RAM空间中。
(4)设置好堆栈。
(5)跳转到阶段2的C程序入口点。
第15页/共30页
• BootLoader的阶段2通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和 可移植性。通常包括以下步骤:
第3页/共30页
简单验证交叉编译工具
• 首先用文字输入软件建立一个helloworld.c文件: • #include <stdio.h> • int main(void) •{ • printf("hello world\n"); • return 0; •} • 然后在命令行执行: • $arm-linux-gcc helloworld.c -o helloworld • $file helloworld • 如果输出以下信息,说明成功建立了编译工具。 • helloworld: ELF 32-
系统移植实际上是一个最小系统的重建过 程。,在此使用目标平台上的二进制代码生成 这个最小系统。包括:init、libc库、驱动模块、 必需的应用程序和系统配置脚本。一旦这些工 作完成,移植工作就进入联调阶段了。
bit LSB executable, ARM, version 1, dynamically linke d (uses shared libs), not stripped
第4页/共30页
5.2 Linux及开发工具的使用
GNU工具的开发流程如下: 编写C、C++语言或汇编源程序,用gcc或g++生成目标文件, 编写链接脚本文件,用链接器生成最终目标文件(elf格式), 用二进制转换工具生成可下载的二进制代码。
交叉编译环境的配置与使用
交叉编译环境的配置与使用交叉编译是指在一个不同的开发环境中编译程序,以在目标平台上运行。
目标平台可以是不同的硬件架构、操作系统或操作系统版本。
交叉编译可以有效地减少在目标平台上进行开发和测试的时间,尤其是在限制了资源的嵌入式系统中。
配置交叉编译环境的步骤主要包括以下几个方面:1. 选择交叉编译工具链:交叉编译工具链是包含了交叉编译器、交叉链接器和相关工具的集合。
根据目标平台的特点,可以选择使用已有的工具链,或者自己构建定制的交叉编译工具链。
常见的交叉编译工具链有Cygwin、GCC等。
3.配置交叉编译环境:在配置交叉编译环境之前,首先需要确定目标平台和目标操作系统的相关信息,例如:处理器架构、操作系统版本、库文件位置等。
然后设置环境变量,包括设置交叉编译工具链的路径、目标平台和操作系统的相关信息。
4. 编写和编译代码:在配置好交叉编译环境后,可以使用常规的编程工具,如IDE或命令行工具,编写程序代码。
在编译时,需要使用交叉编译工具链中的编译器和相关工具来进行编译。
例如,使用交叉编译工具链中的gcc来代替本机的gcc进行编译。
5.链接和生成目标文件:编译成功后,会生成目标文件,即在目标平台上可以运行的可执行文件或库文件。
在链接时,需要使用交叉链接器来链接目标文件和相关库文件。
6.在目标平台上运行:将生成的目标文件复制到目标平台上,并通过目标平台的方式运行。
例如,在嵌入式系统中,可以通过串口或其他方式加载程序并运行。
1.确定目标平台和操作系统的要求:在进行交叉编译之前,需要确保了解目标平台和操作系统的相关要求,例如处理器架构、操作系统版本、库文件位置等。
这些信息将有助于选择合适的交叉编译工具链和配置交叉编译环境。
2.编写适用于目标平台的代码:在进行交叉编译时,需要注意编写适用于目标平台的代码。
例如,需要避免使用与目标平台不兼容的库函数和系统调用,以及考虑目标平台的资源限制等。
3.调试和测试:由于交叉编译环境和目标平台的不同,可能会遇到一些问题,如编译错误、链接错误或运行错误等。
交叉编译实验报告
一、实验目的本次实验旨在通过交叉编译,了解并掌握交叉编译的基本原理和操作方法,提高在嵌入式系统开发中对编译器配置和编译过程的掌握能力。
交叉编译是指在一个平台上编译生成可在另一个平台上运行的程序,这对于嵌入式系统开发尤为重要,因为嵌入式设备通常资源有限,而开发环境与运行环境可能不同。
二、实验环境1. 主机平台:Windows 102. 目标平台:Linux(假设为Raspberry Pi)3. 编译工具:GCC4. 软件包:交叉编译工具链(如交叉工具链crosstool-ng)三、实验步骤1. 安装交叉编译工具链(1)在主机上安装crosstool-ng。
```bashsudo apt-get install crosstool-ng```(2)使用crosstool-ng生成交叉编译工具链。
```bashcrosstool-NG-1.22.0/src/crosstool-NG-1.22.0/configure --toolchain-build=x86_64-build --toolchain-target=arm-linux-gnueabihf --sysroot=/path/to/raspberry-pi/rootfsmake```(3)安装交叉编译工具链。
```bashsudo make install```2. 编写测试程序(1)创建一个简单的C程序,如`hello_world.c`。
```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```3. 交叉编译程序(1)使用交叉编译器编译程序。
```basharm-linux-gnueabihf-gcc hello_world.c -o hello_world ```(2)检查编译生成的可执行文件。
```bashls -l hello_world```4. 将可执行文件传输到目标平台(1)使用SSH将可执行文件传输到目标平台。
交叉编译环境搭建
我帮他安装完之后写了一个hello world程序测一下安装成功了没有。
用gcc编译成功了,但用arm-linux-gcc来编译的时候却报stdio.h no such file or directory 这个错误。
我以前也装过几次,没发现此类的问题,然后又按照书上的方法试了几次,也都是这样的错误,在别人的电脑上试了还是一样出现这个错误。
在google里面也搜了一下这个问题,发现这个问题别人也遇到过,没什么解决方案。
最后在网上下了一个4.3.2的版本,配置了一下,运行hello world程序,居然没有错误了。
注:我使用的操作系统为:ubuntu11.10,开始使用的arm-linux-gcc 版本为3.3.2.如果有人也出现找不到头文件的情况,希望换个版本的arm-linux-gcc来用一下。
下面介绍一下交叉编译环境的安装全过程。
1.首先下载arm-linux-gcc-4.3.2.tgz,可以到arm Friendly官网上下/download.asp。
2.下载完后解压。
解压可以把文件拷到/usr/local/arm/然后解压tar zxvfarm-linux-gcc-4.3.2.tgz,这是比较笨的做法。
linux提供了简单的方法为什么不用呢。
在任意目录下tar zxvf arm-linux-gcc-4.3.2.tgz -C /注意是大写的“C”,并且大写的“C”和“/”之间有一个空格。
解压完后就是配置环境变量了。
3.在root目录下gedit .bashrc当然你也可以用vim .bashrc个人喜欢用gedit。
在弹出的页面的最后一行加上export PATH=$PATH:/usr/local/arm/4.3.2/bin保存退出4.注销5.检查一下是不是安装好了,打开终端。
输入arm-linux-gcc -v看有没有相应的版本信息输出,输出信息如下所示:[root@localhost ~]# arm-linux-gcc -vUsing built-in specs.Target: arm-none-linux-gnueabiConfigured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi--enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch--with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared--enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https:///GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc--with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnuea bi-i686-pc-linux-gnu/usr--with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnuea bi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories--with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin Thread model: posixgcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)。
交叉编译linuxdeployqt
交叉编译linuxdeployqtlinuxdeployqt是一个用于在Linux平台上打包和部署Qt应用程序的实用工具,它可以帮助将Qt应用程序及其相关依赖项打包成一个单独的AppDir(应用目录),便于在不同的Linux发行版上进行分发和运行。
通常情况下,在Linux上交叉编译Qt应用程序意味着在一个系统上编译运行不同架构的二进制文件,比如在x86架构下编译运行ARM架构的应用程序。
以下是大致的交叉编译Qt应用程序并使用linuxdeployqt工具的步骤:步骤概述:1.安装交叉编译工具链:获取用于目标架构的交叉编译工具链,并确保正确安装和配置。
2.准备Qt应用程序:将Qt应用程序源代码准备好,并根据交叉编译工具链的需求,配置CMake或QMake等构建工具的编译选项。
3.交叉编译Qt应用程序:使用交叉编译工具链,在开发机器上编译Qt应用程序。
这可能需要在编译过程中指定目标平台和架构信息。
4.使用linuxdeployqt打包应用程序:在交叉编译后,使用linuxdeployqt工具创建AppDir。
命令大致如下:linuxdeployqt<path-to-your-compiled-app>-appimage这会创建一个AppImage格式的可执行文件,其中包含了应用程序及其依赖项。
<path-to-your-compiled-app>是编译后的应用程序路径。
5.测试和分发:测试AppImage文件以确保应用程序在不同的Linux发行版上运行良好。
将AppImage文件分发给用户。
注意事项:●交叉编译可能需要正确的编译工具链和设置。
对于Qt应用程序,需要确保正确的Qt版本和库已安装到交叉编译环境中。
●在使用linuxdeployqt时,确保已正确配置和安装该工具。
它需要能够找到Qt应用程序及其依赖项来构建AppDir。
●进行交叉编译时,经常会出现与目标平台相关的问题。
vs与linux的交叉编译环境搭建
vs与linux的交叉编译环境搭建
很久之前就想写⼀个linux服务器,但是对linux的vim编译⼯具⼜不是很熟,只能在win环境下写好代码拷贝到linux环境下编译运⾏,现在VS 出了⼀个插件可以对linux代码远程在linux环境下编译,运⾏和调试,下⾯来说⼀下环境搭建流程。
需要准备的⼯作:
1. 虚拟机,本⼈使⽤vbox
2. linux操作系统.debian
3. vs2015
4. VC_Linux,下载路径点击直接download即可
下载好软件只有,依次安装VS2015,VBOX,DEBIAN和vc_linux。
注意,在安装vc_linux是将vs2015的所有进程关闭。
安装好debian后配置⽹络连接⽅式
然后进⼊系统记住虚拟机的IP地址。
然后配置VS2015:打开VS,菜单栏点击⼯具->选项,在弹出对话框中左侧选择Cross Platform, 右侧点击Add,在弹出框中配置对应的信息。
剩下的就是创建⼀个项⽬了:
其实安装好软件,在建⽴项⽬的时候,vs会有⼀个引导过程,教你怎么创建⼀个win下的linux项⽬
后⾯会发现编译不了,提⽰没有g++。
这时候就要在linux中安装g++,mysql,boost等软件了,注意:如果安装不上,很⼤可能是因为⽆意间吧挂载的光盘断开了,此时直接连接即可将管盘中的所有软件安装到环境中。
操作:在虚拟机上右键--->选择可移动磁盘----->CD/DVD---->连接。
linux交叉编译环境搭建步骤
linux交叉编译环境搭建步骤正文:在进行Linux交叉编译之前,我们需要先搭建好相应的交叉编译环境。
下面是搭建步骤的详细说明:步骤一:安装必要的软件包首先,我们需要安装一些必要的软件包,包括GCC、binutils、glibc 以及交叉编译工具链等。
可以通过包管理器来安装这些软件包,比如在Ubuntu上可以使用apt-get命令,CentOS上可以使用yum命令。
步骤二:下载交叉编译工具链接下来,我们需要下载相应的交叉编译工具链。
可以从官方网站上下载已经编译好的工具链,也可以通过源码自行编译得到。
下载好之后,将工具链解压到一个目录下。
步骤三:配置环境变量为了方便使用交叉编译工具链,我们需要将其添加到系统的环境变量中。
可以通过编辑.bashrc文件来实现,添加类似下面的内容:```shellexport CROSS_COMPILE=/path/to/cross-compiler/bin/arm-linux-export ARCH=arm```其中,/path/to/cross-compiler是你下载的交叉编译工具链的路径。
步骤四:测试交叉编译环境在配置好环境变量之后,我们可以通过简单的测试来验证交叉编译环境是否搭建成功。
比如,可以尝试编译一个简单的Hello World程序,并在目标平台上运行。
步骤五:编译其他软件当交叉编译环境搭建成功,并且测试通过之后,我们就可以使用这个环境来编译其他的软件了。
比如,可以使用交叉编译工具链来编译Linux内核、U-Boot引导程序、驱动程序等。
总结:搭建Linux交叉编译环境是进行嵌入式开发的基础工作之一。
在搭建好环境之后,我们可以使用交叉编译工具链来编译适配于目标平台的软件,从而实现在开发主机上进行开发和调试的目的。
linux内核交叉编译过程详解
linux内核交叉编译过程详解交叉编译是在一个平台上生成适用于另一个平台的可执行文件的过程。
下面将详细解释在Linux下的内核交叉编译过程:1.环境搭建:o安装交叉编译工具链。
这些工具通常以静态链接的方式提供,例如gcc-arm-linux-gnueabi、binutils-arm-linux-gnueabi。
o配置本地的Makefile文件,以指定交叉编译工具链的路径。
2.获取内核源码:o从官方网站或git仓库下载目标内核的源码。
3.配置内核:o运行makemenuconfig或其他配置工具,根据目标平台的硬件和需求选择合适的配置选项。
o保存配置,生成.config文件。
4.交叉编译内核:o运行make命令开始编译过程。
由于内核很大,此过程可能需要很长时间。
o在编译过程中,内核将被编译成可在目标平台上运行的二进制文件。
5.打包编译好的内核:o内核编译完成后,需要将其打包成适合在目标平台上安装的形式。
这通常涉及到创建引导加载程序(如U-Boot)所需的映像文件。
6.测试和调试:o将编译好的内核和相关文件复制到目标板上,进行启动和测试。
o如果遇到问题,需要进行调试和修复。
7.部署:o一旦内核能够正常工作,就可以将其部署到目标设备上。
这可能包括将其集成到设备固件中,或者作为独立的操作系统运行。
8.维护和更新:o根据需要更新内核版本或进行其他更改,重复上述步骤。
在整个过程中,确保你的交叉编译环境和目标硬件的文档齐全,并遵循相应的开发指导原则。
对于复杂的项目,可能还需要进行更深入的定制和优化。
交叉编译环境搭建
交叉编译环境搭建一、Emdebian介绍Emdebian visionIn the Emdebian vision someone wishing to build a GNU / Linux based device would:1. Port the linux kernel to their hardware (including writing any specificdevice drivers).2. Select the prebuilt emdebian packages needed to support theirapplication.3. Package their application as Debian package(s) using Debian andEmdebian tools.4. Build a root filesystem using Emdebian tools from the steps above. Emdebian is involved in steps 2,3,4 above (there are far too many embedded device hardware variations to make prebuilt kernels practical).Thus EmDebian is a binary distribution for embedded devices (whereas most of the other contenders in this space are source distributions [of course being Debian and open source the source code is still available if required].What emdebian doesIn short, what EmDebian does is wrap around the regular debian package building tools to provide a more fine grained control over package selection, size, dependencies and content to enable creation of very small and efficient debian packages for use on naturally resource limited embedded targets.二、搭建GCC编译开发环境安装G++/GCC编译环境sudo apt-get install gcc g++ make gdb可以使用man命令查看GCC和G++的帮助信息。
【整理】Ubuntu 16.04[64bit]交叉编译环境搭建过程图解
开发裸机环境之前需要先搭建其开发环境,毕竟工欲善其事必先利其器嘛。
安装步骤1、准备工具安装目录将压缩包arm-Linux-gcc-4.4.3.tar.gz存放在一个目录下,这个目录就是你等会解压缩的目录,以后这个目录就不能随便删掉了,我的存放路径是/home/aldrich/arm,如下图,记住这个路径,等会还会用到。
1. .tar.gz 和.tgz2. 解压:tar zxvf FileName.tar.gz3. 压缩:tar zcvf FileName.tar.gz DirName2、安装软件使用tar命令:tar zxvf arm-linux-gcc-4.3.2.tgz将software文件夹下的arm-linux-gcc-4.3.2.tgz解压缩安装到当前目录。
通过下图可以看到解压成功了,并且解压后的文件存放在了1. /home/aldrich/arm/arm-linux-gcc-4.3.2文件夹下,如下图所示,这个存放路径可得记住,如下图3、配置系统环境变量配置环境前先坐下普及:Ubuntu不同目录下profile与bashrc的区别/etc/profile此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bash.bashrc为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
~/.bash_profile每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次,默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
~/.bash_logout当每次退出系统(退出bash shell)时,执行该文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2 建立交叉编译开发工具链
ranlib——为一个存档文件产生一个索引,并 将这个索引存入存档文件中。 readelf——显示elf格式的目标文件的信息。 size——显示目标文件各个节的大小和目标 文件的大小。 strings——打印出目标文件中可以打印的字 符串,有个默认的长度,为4。 strip——剥掉目标文件的所有的符号信息。
2.2 建立交叉编译开发工具链
# CC=armv5-unknown-linuxgcc ./configure arm-linux --enableadd-ons --build=i686-pc-linux-gnu --disableiconv --with-headers=/tmp/linux-2.4.9-ac9rmk1-np1/include --prefix=/opt/host/armv4l # make
(4)编译ARM-GCC交叉编译器
# cd gcc-2.95.3 # ./configure --target=armv4l-unknown-linux -prefix=/opt/host/armv4l # make LANGUAGES=c # make LANGUAGES=c install
2.2 建立交叉编译开发工具链
2.3 配置主机服务
2.3.1 配置samba Samba服务使Linux和Windows之间实现文件 共享,方便对文件的编辑。 1) 修改samba配置文件/etc/samba/smb.conf 2) 为 Samba 创建一个单独的口令文件。要 根据你的现存 /etc/passwd 文件来创建 3) 改变Samba口令文件的权限许可,因此 只有根用户才有读写权限
2.2 建立交叉编译开发工具链
(2)输出工具的路径,使得以后的编译工作能看到这 些工具: # export PATH=/opt/host/armv5/bin:$PATH
2.2 建立交叉编译开发工具链
(3)建立编译需要使用的头文件 # cd /tmp # tar zxvf linux-2.4.9.tar.gz # mv linux linux-2.4.9-ac9-rmk1-np1 # mv patch-2.4.9-ac9.gz patch-2.4.9-ac9rmk1.bz2 diff-2.4.9-ac9-rmk1np1.gz ./linux-2.4.9ac9-rmk1-np1
2.2 建立交叉编译开发工具链
注意: g++——gnu的 c++ 编译器。 protoize——与unprotoize相反,将K&R C 的源码转化为ANSI C的形式,函数原型中 加入参数类型。 c++——gnu的c++编译器。
2.2 建立交叉编译开发工具链
2.2.2 下载工具链 这里主要介绍一下Denx公司发布的一整套开放 源 码 的 嵌 入 式 Linux 开 发 工 具 链 ——ELDK (Embedded Linux Development Kit) ELDK可以安装和运行在以下主机环境中: Fedora Core 1, 2 , 3 Red Hat Linux 7.3, 8.0, 9 SuSE Linux 8.x, 9.0, 9.1, 9.2
# cd linux-2.4.9-ac9-rmk1-np1 : kernel 2.4.9 # gzip -cd patch-2.4.9-ac9.gz | patch p1 : Alan Cox patch # bzip2 -cd patch-2.4.9-ac9-rmk1.bz2 | patch -p1 : Russell King patch # gzip -cd diff-2.4.9-ac9-rmk1-np1.gz | patch -p1 : Nicholas Pitre patch # make menuconfig : Do to create ARM header files. When you exit, select save
2.2 建立交叉编译开发工具链
2.2.1 编译工具链 以下是一个基于RedHat linux的交叉编译环境的建立过程。 整个编译过程包括: 1. 下载源文件、补丁和建立编译的目录; 2. 建立内核头文件; 3. 建立二进制工具(binutils); 4. 建立初始编译器(bootstrap gcc); 5. 建立c库(glibc); 6. 建立全套编译器(full gcc)。
2.2 建立交叉编译开发工具链
ELDK包括了一个安装工具和许多RPM包,他们可以 安装到用户的交叉编译的主机的硬盘中。ELDK的 RPM包可以分为2种: 嵌入式Linux开发工具; 为目标处理器编译好的工具和元件。 其中,第一部分包括执行在开发主机上的交叉编译 工具,有GNU交叉编译器GCC、Binutils和GDB等。 第二部分是一些已经编译好的、可以在目标开发板 上运行的工具和库。这些工具和库可以用来建立一 个Linux的Roofs文件系统。
第二章 搭建 Linux交叉编译开发环境
Cross compiling environment
2.1 什么是交叉编译
什么是交叉编译呢?简单地说,就是在一个平台上生 成另一个平台上的可执行代码。这里需要注意的是 所谓平台,实际上包含两个概念:体系结构 (Architecture)和操作系统(Operating System)。 同一个体系结构可以运行不同的操作系统;同一个 操作系统也可以在不同的体系结构上运行。
2.2 建立交叉编译开发工具链
注意:这样就在/opt/host/armv5/bin下产生了 binutils,它们的作用如下: addr2line——将要找的地址转成文件和行号,它 要使用 debug 信息。 ar——产生、修改和解开一个存档文件。 as——gnu 的汇编器。
2.2 建立交叉编译开发工具链
2.2 建立交叉编译开发工具链
建立整个tool chain 的步骤
2.2 建立交叉编译开发工具链
(1) Installing binutils # cd /tmp # tar zxvf binutils-2.11.2.tar.gz # cd binutils-2.11.2 # ./configure --target=armv5-unknown-linux --prefix=/opt/host/armv5 # make # make install
2.2 建立交叉编译开发工具链
2.2.3 验证工具链 注意: 通过上述两种方式建立的工具链,还需要经过验证 方可使用,我们主要通过实际编译一个例子程序来 验证。
2.3 配置主机服务
在嵌入式软件开发过程中,有些主机服务是必要的, 同时也会为我们的开发工作带来便利。 这里主要介绍四种主机服务:samba、DHCP、TFTP 和NFS。
2.3 配置主机服务
4) 要设置每个 Samba 用户的口令,使用以 下命令(把username 替换为每个用户的用户 名) 5) 加密口令必须在Samba配置文件中被启 用 6) 在shell提示下键入 service smb restart来 确定smb服务被启动 7) 为避免每次启动主机都要手工启动 samba服务,使用命令使得samba服务在每次 系统启动时都默认执行
注意: gcc——gnu 的 C 语言编译器。 unprotoize——将 ANSI C 的源码转化为 K&R C 的形 式,去掉函数原型中的参数类型。 cpp——gnu的 C 的预编译器。 gcov——gcc 的辅助测试工具,可以用它来分;+filt——C++ 和 java 中有一种重载函数,所用的重 载函数最后会被编译转化成汇编的标号,c++filt 就 是实现这种反向的转化,根据标号得到函数名。 gasp——gnu 汇编器预编译器。
2.2 建立交叉编译开发工具链
ld——gnu 的连接器。 nm——列出目标文件的符号和对应的地址。 objcopy——将某种格式的目标文件转化成另外格式 的目标文件。 objdump——显示目标文件的信息。
# ln -s /tmp/linux-2.4.9-ac9-rmk1np1/include/asm-arm asm # ln -s /tmp/linux-2.4.9-ac9-rmk1np1/include/linux linux 注意:要把linux的头文件拷做来作为编译的头 文件的原因是,我们要编译的是给ARM处理 器使用的编译器,那么就需要一个用于ARM 处理器的Linux内核系统的头文件
2.3 配置主机服务
2.3.2 配置DHCP DHCP是动态主机配置协议。这个协议用于向 计算机自动提供IP地址,子网掩码和路由信 息。在开发的过程中,目标系统并没有自己 的静态IP地址,它是在启动时向DHCP服务器 申请,因此需要在主机上配置DHCP服务,以 便在目标系统请求IP时,动态为它分配IP地 址。 DHCP服务的配置文件为/etc/dhcpd.conf,通 过修改该文件进行配置。etc/dhcpd.conf通常 包括三部分:parameters、declarations 、
2.2 建立交叉编译开发工具链
Debian 3.0 (Woody) and testing (Sarge) Ubuntu 4.10 FreeBSD 5.0 Suse Linux 7.2, 7.3 Mandrake 8.2 Slackware 8.1beta2 Gentoo Linux 1.4_rc2 ELDK同时支持ARM、PPC、MIPS等多种处理 器。
# make dep : Also do to create header files. # cd /opt/host/armv4l/armv4l-unknownlinux # cd include : If not existing, make include directory. # cp -a /usr/include/* . : Copy all header files under /usr/include dir to the current dir.