嵌入式armlinux操作系统中如何构建交叉开发环境?

author author     2023-03-09     547

关键词:

这个问题相当专业了,之前我去周立功那边了解过的。

按照以下步骤进行安装:

1) 安装32位的兼容库和libncurses5-dev库

在安装交叉编译工具之前需要先安装32位的兼容库和libncurses5-dev库,安装32兼容库需要从ubuntu的源库中下载,所以需要在Linux主机系统联网的条件下,通过终端使用如下命令安装:

vmuser@Linux-host ~$sudo apt-get install ia32-libs

若Linux主机系统没有安装32位兼容库,在使用交叉编译工具的时候可能会出现错误:

-bash: ./arm-fsl-linux-gnueabi-gcc: 没有那个文件或目录

在终端中使用如下命令则可以安装libncurses5-dev库。

vmuser@Linux-host ~$sudo apt-get install libncurses5-dev

如果没有安装此库,在使用make menucofig时出现如下所示的错误:

*** Unableto find the ncurses libraries or the

*** required headerfiles.

*** 'makemenuconfig' requires the ncurses libraries.

***

Installncurses (ncurses-devel) and try again.

***

make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1

make: *** [menuconfig] 错误 2

2) 安装交叉编译工具链

 

将交叉编译工具“gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2”文件通过U盘的方式拷贝到Linux主机的“/tmp”目录下,然后执行如下命令进行解压安装交叉编译工具链:

vmuser@Linux-host ~$ cd /tmp

vmuser@Linux-host ~$ sudo tar -jxvfgcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 -C /opt/

vmuser@Linux-host /tmp$ # 输入vmuser用户的密码“vmuser”

执行完解压命令后,交叉编译工具链将被安装到“/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0”目录下。交叉编译器的具体目录是“/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin”,为了方便使用,还需将该路径添加到PATH环境变量中,其方法为:修改“/etc/profile”文件,具体操作方法如下:

在终端中输入如下指令

vmuser@Linux-host ~$ sudo vi /etc/profile # 若提示输入密码,则输入“vmuser”

用vi编辑器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:

export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin

文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效。

vmuser@Linux-host ~$source /etc/profile

在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux-gnueabi-前缀的命令,则基本可以确定交叉编译器安装正确,如下图所示。

参考技术A   1 GECMlO开发板硬件构成
  ARM处理器是一种支持16/32位双指令集的高性能、低成本、低功耗的R ISC微处理器,目前已经占领了75%以I:的32位RISC嵌入式产品f仃场。本文所选用的ARM920T微处理器属于中端产品,应用也十分广泛。$3C2410是32位低功耗RISC宏单元,其工作频率为203 MHz,同时支持Thumbl6位精。简指令集,从而能以较小的存储空间需求,获得32位的系统性能。64M字节的SDRAM,由两片K4S561632组成,工作在32位模式下;64M字节NAND Flash,采用的是K9F1208,可以兼容16M,32M或128M字节;10M以太网接口,采用的是CS8900Q3,带传输和连接指示灯;2路UART串行口,波特率可高达115200bps,并具有RS232电乎转换电路Embedded·ICE(20脚标准JTAG)接口和并口式jTAG接口,支持ADS,SDT软件的卜.载和调试以及FLASH的烧写。
  2 嵌入式Linux开发环境的搭建及开发工具的使用
  2.1宿主机——目标机模式
  进行项目开发前,先要做的是搭建一套基于Linux操作系统的应用开发环境,一般由目标板(GEC2410开发板)和宿主机(LiUUX虚拟机)所构成。如图1所示。嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚拿是不可能的.目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台七可以运行的二进制代码格式,最后再下载到目标平台上的特定位置.卜运行.用来编译这种程序的编译器就叫交叉编译器。为了不跟本地编译器混淆,交叉编泽器的名字一般都有前缀。例如:arm.1inux—gcc。交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式。
  
  
  2.2 Linux服务器交叉编译环境的建立
  Linux服务器是嵌入式Linux内核编译、应用程序开发、编译等的公共平台,在一个嵌入式系统的开发过程中,有许多工作需要通过它来完成。交叉编译工具用于编译在目标系统上运行的嵌入式Linux内核及应用程序,包括编译器、连接器、调试器以及代码转换J二具等实用程序,一般以瓜缩软件包的方式提供给我们,称为开发工具链(Toolchain).目前基于ARM架构的交叉编泽工具链为:allll-liuux.gcc-2.95.3。
  1)GNU交叉工具链的下载
  从ARM官方网站F载删.arm.tinux.org.ak,可以从该站点下载2.95.3工具链:
  ftp://tip.arm.Iinux.org.uk/pub/armlinux/toolehain/cross-2.95.3.tar.bz2
  2)cross-2.95.3.tar.bz2包的安装步骤
  a.#mkdir/mr/local/arm;
  b.#cp CROSS一2.95.3.tar.bz2/usr/local/ann;
  C.#tar jxvf crog$一2.95.3.tar.bz2;
  d.添加环境变量:在文牛/ete/bashrc文件最后添加:
  export PATH=/usr/local/arm/2.95.3/bin:$PATH:
  e.工具链安装完成。
  2.3配置NFS服务的步骤

  NFS服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上。并且作为其他计算机的一个目录,其目的就是让不同的机器、不同的操作系统之间可以彼此共享文件。
  NFS的使用分服务器端和客户端,其中服务器端提供要共享的文件,客户端通过挂载“mount”这一动作实现对共享文件的访问操作。下面主要介绍GEC24 10开发板的Linux系统与虚拟机的LintLx通过NFS实现文件共享的方法与步骤:
  1)在虚拟机linux配置nfs服务,编辑nfs配置文件/etdexports,设置共享目录如:vi/etc/exports,添加:/root/nfs—share·(rw,sync,no—root—squash)。rW表示允许下位机读写该目录,no_root_squash允许下位机以主机root用户身份挂载根文件系统。
  2)在虚拟机linux启动NFS服务:(修改配置文件后就需要蕈新启动施服务)#/etc/init.d/nfs reSTart或者用命令:#service nfs restarto.
  3)防火墙的关闭。选择系统设置一》安全级别,将安全级别改为“无防火墙”。
  4)用交叉网线连接PC机(虚拟机)与开发板,目的让两个linux处在同一个网络内。
  开发板的ip地址是:192.168.2.223,因此配置虚拟机ip为192.168.2开头的ip地址,如可用下列命令配置:#ifcONfigethO 192.168.2.23。
  5)在开发板linux系统中挂载虚拟机linux的NFS共享目录,执行下列命令:#mkdir/tmp/nfs#mount—t nfs一0 nolock192.168.2.23:/root/nfs—share/trap/nfs。
  2.4交叉调试器的制作
  2.4.1交叉调试器的结构
  程序的调试足检杏程序正确性、可靠性、稳定性的重要手段,也是应用程序开发必不可少的组成部分。嵌入式软件开发过程中的交叉调试与本地软件开发过程中的调试方式有所差别。本地软件开发调试器与被调试的程序往往运行在同一台计算机:。而嵌入式软件开发过程中,调试时采用的是在宿主机和目标机之间进行的交叉调试。调试器运行在宿主机,但被调试的进程却是运行在目标板。调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。
  2.4.2制作交叉调试器的方法
  1)解压源码包:tar zxf gdb一6.0.tar.gz
  2)配置:cd gdb一6.0
  mkdir build..arm..1inux
  cd build..arm..1inux
  ../configure--target=arm·linux一一prefix=/usr/local/arm/2.95.3/
  3)编译:make
  4)安装:make install
  在/usr/locaL/arm/2.95.3/bin/目录下生成alTfl-linuxgdb工具
  5)编译生成针对f1.Eln处理器的gdbserver
  a.进入sdb源代码包中的gdb$erver目录
  cd sdb-6.0
  cd gdb/gdbserver
  b.配置生成gdbserver
  chmod U+X configure
  CC=arnl—linux—gcc./configure一一host=arm-linux
  c.Make,生成gdbserver、gdbreplay
  6)通过凼,将gdbserver/gdbreplay到目标板中
  7)启动目标板上的gdbserversabserver 192.168.1.88:2345 cross-teat其中192.168.1.88是目标板的IP地址。2345是任意指定的端口,也可以是其他端口。
  8)启动宿主机端arm.1inux-gdb调试器在宿主机的工作目录中有对应的程序和源文件
  #arm·hnux-柚CI‘OS8一teat
  (gdb)target remote 192.168.1.88:2345
  连接远程gdbserver
  (sab)b main
  设置断点
  (Sdb)C运行

成功移植sqlite3到armlinux开发板

...百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款 查看详情

嵌入式物联网32armlinux等学习资料共享给大家

嵌入式物联网方面免费学习资料大家可以看下啊直接点击下方学习链接即可观看-嵌入式系统移植(主要讲UBOOT移植)高效学习ARM汇编语言(stm32直流电机驱动)红外线人流感应器智能温控小风扇超声波雷达测距仪... 查看详情

armlinux如何自动检测并mountsd卡,以及如何得知已经mount

一、土八路做法:SD卡一旦插入系统,内核会自动在/dev/下创建设备文件:sdcard。但有时可能时用户在拨出卡前并没有umount的话,第二次插卡进去后系统创建的就不是sdcard设备文件了,而是mmcblk0,mmcblk1p1,mmcblk2p1,或mmcblk3p1.所以只需... 查看详情

嵌入式 C++ 系统中的持续集成/单元测试

】嵌入式C++系统中的持续集成/单元测试【英文标题】:ContinuousIntegration/UnittestinginembeddedC++systems【发布时间】:2011-08-1917:55:16【问题描述】:哪些工具通常用于单元测试,尤其是嵌入式系统的持续集成?我特别认为您通常必须交... 查看详情

记录一个解决armlinux端u盘挂载时文件名显示乱码qt显示乱码的问题(代码片段)

摘要:解决嵌入式Linux平台下挂载盘文件名乱码、QT显示乱码问题。   1、解决嵌入式平台下挂载文件名显示乱码    我的方案开发选择采用SD卡/U盘的方式来加载3D打印模型文件,因此在PC端U盘里的文件的... 查看详情

传入采购订单项目建交货单(代码片段)

 *"----------------------------------------------------------------------*"*"本地接口:*"EXPORTING*"REFERENCE(O_RETURN)TYPEZMMS0021*"TABLES*"IT_ITEMSTRUCTUREZMMS0106*"--------------------------------- 查看详情

非java异构服务如何集成到springcloud集群中(代码片段)

  一个项目可能由于各种原因会存在多个语言编写的系统同时存在,但主项目如果采用的SpringCloud框架的话就无法通过微服务方式访问其他的异构系统,因此SpringCloud生态圈给我们提供了很好的插件式服务,利用sidecar我们也可... 查看详情

如何创建通用 std::vector 析构函数?

】如何创建通用std::vector析构函数?【英文标题】:HowdoIcreateagenericstd::vectordestructor?【发布时间】:2010-09-1917:12:10【问题描述】:拥有一个包含指向对象指针的向量,然后使用clear函数不会调用向量中对象的析构函数。我创建了... 查看详情

C ++:未使用嵌入式模板调用析构函数

】C++:未使用嵌入式模板调用析构函数【英文标题】:C++:Destructornotcalledwithembeddedtemplate【发布时间】:2015-06-0415:48:45【问题描述】:简短:删除模板化指针不会调用析构函数。include解决了这个问题。为什么?我刚刚遇到了一个... 查看详情

如何在裸机下设计一个嵌入式系统架构?

如何在裸机下设计一个嵌入式系统架构?如何不使用操作系统的情况下设计一个嵌入式系统的架构呢?比如串口数据如何接受,串口数据协议在什么地方解析,SPI总线的数据如何有效的接收?等等问题。如何设计,才能尽量保证... 查看详情

如何在armlinux平台连接ios设备

....00.03(没有这个可以根据需要编译自己需要的库)设备:armlinux板(dm368)+ipone5s(ios8.3)+usb线Package:libusb-1.0.8.tar.bz2Package:libplist-1.3.tar.bz2这个需要用cmake编译,自己写一个toolchain.cmake修改交叉编译变量然后在源码目录下新建build... 查看详情

学习在嵌入式linux系统中如何生成交叉编译工具链

参考技术A学习Linux的Makefile和Kconfig,好好看看,三言两语不如你直接在百度百科搜索那两个关键词 参考技术B同楼上,或可以参考LFS的ARM版说明~ 查看详情

如何解决 ARM Coprtex 上的嵌入式系统编程中的堆栈损坏错误

】如何解决ARMCoprtex上的嵌入式系统编程中的堆栈损坏错误【英文标题】:HowtoresolvethestackcorrupterrorinEmbeddedSystemProgrammingonARMCoprtex【发布时间】:2018-02-1016:59:51【问题描述】:我正在尝试对ARMCortexM0+MCU进行编程。每隔一段时间,我... 查看详情

qtcreator配置交叉编译工具链

...用QtCreator开发QT5GUI程序,如果编译的程序要运行在armlinux嵌入式系统中,则必须配置交叉编译工具链。主要配置内容:调试器、编译器、QT版本。1、打开工具,点击选项。2、选择选项中的构建与运行,概要界面。3、构建套件(ki... 查看详情

推荐|中国巴拿马建交,事实证明“一个中国”大势所趋

...合公报》,宣布两国正式建立大使级外交关系。  两国建交联合公告称:巴拿马共和国政府承认世界上只有一 查看详情

python的多线程(代码片段)

...ff0c;比如一些动画介绍,还有CSAPP书中也详细讲到。在嵌入式系统中一般是没有进程和线程区分概念的,因为嵌入式系统就跑一个程序(一个main入口),通过RTOS管理其中的各 查看详情

如何使用 mongodb 中的聚合在嵌入文档的数组中执行操作?

】如何使用mongodb中的聚合在嵌入文档的数组中执行操作?【英文标题】:Howcoulduseaggregatesinmongotodooperationsinanarrayembeddedinsideadocument?【发布时间】:2018-10-1122:17:32【问题描述】:假设我有一组用户。每个用户都有资产。我想对资... 查看详情

如何删除析构函数中的空指针?

】如何删除析构函数中的空指针?【英文标题】:Howtodeletethevoidpointerindestructor?【发布时间】:2017-02-0911:14:43【问题描述】:我有这样的课:classIncomingNetworkEventprivate:IncomingNetworkEventForGameevent;void*item;public:IncomingNetworkEvent();~Incoming... 查看详情