arm

Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解

删除回忆录丶 提交于 2020-02-25 02:44:59
安装环境 Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器我已经上传到了资源上,可以随便下载, 点此下载 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。 那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机

Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解

旧时模样 提交于 2020-02-25 02:43:09
转载: 王文松的博客Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解 安装环境 Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器我已经上传到了资源上,可以随便下载, 点此下载 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。 那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器

Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

删除回忆录丶 提交于 2020-02-25 02:42:27
本文转载自: Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。 那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。 安装步骤 1、将压缩包arm-linux-gcc-4

Ubuntu16.04上安装arm-linux-gcc4.4.3

喜欢而已 提交于 2020-02-25 02:35:35
一、首先下载arm-linux-gcc-4.4.3.tar.gz安装包,安装包地址: http://www.cr173.com/soft/42654.html 二、解压安装包: sudo tar -zxvf arm-linux-gcc-4.4.3.tar.gz -C / 注意C后面有一个空格,这样解压完成后的文件在:/opt/FriendlyARM/toolschain/4.4.3路径下 三、在/usr/local目录下新建arm目录,并拷贝/opt/FriendlyARM/toolschain/路径下的4.4.3到arm目录: cd /usr/local sudo mkdir arm sudo chmod 777 arm sudo cp -r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm 四、修改环境变量,把arm-linux-gcc添加到PATH中: 方法一:修改/etc/bash.bashrc文件,此文件只对当前用户适用 sudo gedit /etc/bash.bashrc 在最后加上export PATH=$PATH:/usr/local/arm/4.4.3/bin 保存,退出,然后刷新环境变量使其生效: source /root/.bashrc 方法二:修改/etc/profile文件,此文件对所有用户适用 sudo

移植openLDAP、berkeleyDB到ARM环境

泪湿孤枕 提交于 2020-02-25 02:33:46
环境:ubuntu、arm-linux-gnueabihf-gcc 目标环境:cortex-A7 准备:db-4.7.25.tar.gz、openldap-2.4.47.tgz官网下载 以下步骤均用普通用户,不需切换到root(个人习惯) 【交叉编译berkeleyDB、移植】 1.首先创建mkdir db-4.7.25-arm目录 2.解压tar zxvf db-4.7.25.tar.gz 3.在解压后的db-4.7.25目录中创建mkdir build_linux-arm目录 4.配置环境及编译 cd build_linux-arm/ ../dist/configure --host=arm-linux CC=arm-linux-gnueabihf-gcc --prefix=/home/admin/tools/openldap/db-arm make make install(这一步也可以不用做,移植需要的文件已经在上一步生成,在build_linux_arm下面有db.h和.libs/libdb-4.7.a(静态库),这就是我们所要的文件,可以把db.h拷贝到目标系统中的/usr/include下面,或者自己添加环境变量,同理,libdb-4.5.a也可以放到/usr/lib下面) 【交叉编译openLDAP、移植】 1.解压tar -xvf openldap-2.4.47

GCC 8 Cross Compiler outputs ARMv7 executable instead of ARMv6

狂风中的少年 提交于 2020-02-24 06:52:52
问题 I'm trying to compile a C++ application for a Raspberry Pi Zero using GCC 8.2.1. I'm using this for a relatively large C++17 project that is being built using CMake, and I'm trying to cross-compile it on my x86-64 laptop. Even with the simplest code possible, I'm not able to compile it for ARMv6: int main() {} $ arm-linux-gnueabihf-g++ test.cpp -static -march=armv6 -mfpu=vfp -mfloat-abi=hard When running the file on the Pi, I get an Illegal instruction error, and readelf returns the following

GCC 8 Cross Compiler outputs ARMv7 executable instead of ARMv6

本小妞迷上赌 提交于 2020-02-24 06:51:03
问题 I'm trying to compile a C++ application for a Raspberry Pi Zero using GCC 8.2.1. I'm using this for a relatively large C++17 project that is being built using CMake, and I'm trying to cross-compile it on my x86-64 laptop. Even with the simplest code possible, I'm not able to compile it for ARMv6: int main() {} $ arm-linux-gnueabihf-g++ test.cpp -static -march=armv6 -mfpu=vfp -mfloat-abi=hard When running the file on the Pi, I get an Illegal instruction error, and readelf returns the following

DSP与STM32大PK

徘徊边缘 提交于 2020-02-22 22:57:07
1.FPGA:是可编程逻辑阵列,常用于处理高速数字信号,不过随着科技的发展,现在很多FPGA CPLD可以集成mcu内核,甚至具备了ARM DSP的功能 2.ARM,是一类内核的称谓,就像51一样,具体到芯片的话,会有很多不同的厂家不同等级,诸如三星、易法、飞利浦、摩托罗拉等等,其中STM32是易法半导体的一款面向工控低功耗内核为Cortex M3内核的ARM芯片 3.DSP顾名思义就是数字信号处理,厂家主要是德州仪器(TI)主要用于数字型号处理等对运算速度有特殊要求的场合,诸如音频视频算法,军工等领域,但同时dsp有2000 5000 6000等系列也可满足不场合需要 1.FPGA一般不会用来做复杂的系统,只用来做些简单的系统如状态机实现的自动售货机...展开>等,多少还是用来做信号的高速变换和处理,毕竟它只是可编程逻辑阵列。 2.ARM和DSP就各有千秋了; ARM的系列从V3 V5 V7 V9 XSCALE,从thumb指令到arm指令(thumb arm也可同时实现),可以说遍布机会所有的领域,只要你接的价格可以接受(其实许多arm并不是很贵的),单片机所有的功能基本他都能实现,我就不用举例子,特别是现在与各种RTOS结合更是开发方便功能强大。 DSP相对arm价格要贵些,这也是可能个体厂家使用较少的一个原因吧,2000系列主要用于工控特别是2812这个用的人比较多

Linux中断管理 (3)workqueue工作队列

ぐ巨炮叔叔 提交于 2020-02-22 18:30:53
目录: 《 Linux中断管理 》 《 Linux中断管理 (1)Linux中断管理机制 》 《 Linux中断管理 (2)软中断和tasklet 》 《 Linux中断管理 (3)workqueue工作队列 》 关键词: GIC、IAR、EOI、SGI/PPI/SPI、中断映射、中断异常向量、中断上下文、内核中断线程、中断注册 。 由于篇幅较大,简单梳理一下内容。 本章主要可以分为三大部分: 讲解硬件背景的 1. ARM中断控制器 。 系统初始化的静态过程:GIC初始化和各中断的中断号映射 2. 硬件中断号和Linux中断号的映射 ;每个中断的注册 5. 注册中断 。 一个中断从产生到执行完毕的动态过程:ARM底层通用部分如何处理 3. ARM底层中断处理 ;GIC部分的处理流程以及上层通用处理部分 4. 高层中断处理 。 这里的高层处理,没有包括下半部。下半部在 Linux中断管理 (2)软中断和tasklet 和 Linux中断管理 (3)workqueue工作队列 中进行介绍。 1. ARM中断控制器 1.1 ARM支持中断类型 ARM GIC-v2支持三种类型的中断: SGI: 软件触发中断(Software Generated Interrupt) ,通常用于多核间通讯,最多支持16个SGI中断,硬件中断号从ID0~ID15。

解决“arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000”问题

▼魔方 西西 提交于 2020-02-22 15:24:22
在Linux中使用arm-2009q3编译工具链编译时,其中 arm-none-linux-gnueabi-ld 链接 器出现警告: arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000 原因:这句警告的意思就是说链接器在做程序链接的时候没有找到 _start 这个符号。这是因为 _start 是 arm 汇编程序的入口,而 _start 它的作用域只在 .S 这个文件内部,所以其它文件找不到它。因此要想其它文件也找到它,就要将 _start 声明到外部。 解决方法:在 _start 前面加上声明 . global _start 再次编译时,警告消除! 来源: CSDN 作者: 葫芦僧的秘密 链接: https://blog.csdn.net/weixin_44739916/article/details/104441726