1.交叉编译器

\qquadARM裸机、Uboot移植、linux移植这些都需要在linux系统上进行编译,编译就需要编译器。在linux系统中,可以使用gcc命令对c语言程序进行编译,但gcc编译器是针对X86架构的,现在需要对ARM架构的代码进行编译。所以我们现在需要一个可以对ARM架构的代码进行编译的gcc编译器,这个编译器被称为交叉编译器。
\qquad交叉编译器具有如下的特点:
\qquad(1)是一个gcc编译器
\qquad(2)运行在X86架构上
\qquad(3)可以编译ARM架构的代码,也就是说编译出来的可执行文件是在ARM芯片上运行的

2.ARM-linux交叉编译器的下载安装

\qquad我下载的是gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,下载地址:arm-linux交叉编译器4.9.4
\qquad下载完成后,在/usr/local目录下,创建一个arm目录,然后再把gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz拷贝到/usr/loacl/arm目录下,再解压。

sudo mkdir arm  #创建arm目录
sudo cp /home/xiaoming/downloads/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz  /usr/local/arm   #复制
sudo tar xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

\qquad解压完成之后,还需要把/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin的路径添加到/etc/profile

sudo vim /etc/profile  #打开profile

\qquad在文件最后,添加export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
\qquad查看是否安装成功,若安装成功会显示版本号gcc version 4.9.4 (Linaro GCC 4.9-2017.01)

arm-linux-gnueabihf-gcc -v

3.交叉编译器的编译过程

\qquad首先使用arm-linux-gnueabihf-gcc,将.c .s文件编译为.o文件,.s文件是汇编文件,.c文件是c语言文件。
\qquad-g:产生调试信息;-c:编译源文件,但是不链接;-o:制定编译产生的.o文件的名字。

arm-linux-gnueabihf-gcc -g -c .c文件(或者.o文件)  -o  .o文件

\qquad然后把上一步的所有的.o文件链接到一起,并要指定一个链接起始地址,也就是代码运行的起始地址。链接起始地址一般指向RAM地址,RAM 分为内部RAM和外部RAM,外部RAM即DDR。比如:

arm-linux-gnueabihf-ld -Ttext  0X87800000 xxx.o -o xxx.elf

\qquad最后xxx.elf不是最终烧写到单片机sd卡上的可执行文件,我们要烧写的文件是.bin文件,这需要使用arm-linux-gnueabihf-objcopy -O binary -S -g xxx.elf xxx.bin
\qquad其中-O:选择以什么格式输出;binary:以二进制输出;-S:不要复制源文件中的重定位和符号信息;-g:不要复制源文件中的调试信息;

arm-linux-gnueabihf-objcopy -O binary -S -g xxx.elf xxx.bin

linux的驱动开发——交叉编译器相关推荐

  1. NXP LS1046A及飞腾新四核 FT2004 PCIE EP端LINUX设备驱动开发

    文章目录 前言 一.PCIE 硬件简介 二.PCIE EP地址映射原理介绍 1. PCI总线的各种域(存储器域.PCI总线域) 2. 开发EP设备驱动要做的事 三.NXP LS1046A PCIE E ...

  2. 嵌入式 Linux 内核驱动开发【The first day: 36093万字】

    嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...

  3. linux设备驱动开发之环境搭建(基于exynos4412)

    第一章 linux设备驱动开发之环境搭建(基于exynos4412) 目录 第一章 linux设备驱动开发之环境搭建(基于exynos4412) 1.搭建开发板运行环境 1.1.交叉开发模式 安装交叉 ...

  4. Linux字符驱动开发学习总结

    linux驱动编写(虚拟字符设备编写) 昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面设备是如何编写的. ...

  5. Linux下驱动开发

    Linux下驱动开发 1.简介   驱动,是指驱动计算机里软件的程序.驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息.驱动程序是操作系统与硬件连接的桥梁.   设备 ...

  6. Linux设备驱动开发基础

    1.驱动概述和开发环境搭建 1.1驱动设备的作用 对设备驱动最通俗的解释就是"驱动硬件设备行动".驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的 ...

  7. linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt

    PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...

  8. 《Linux设备驱动开发详解 A》一一2.3 接口与总线

    本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...

  9. Linux设备驱动开发概述

    作者:宋宝华 email:author@linuxdriver.cn 在过去这些年,Linux已经成功应用于服务器和桌面系统,而近年来,随着嵌入式系统应用的持续升温,Linux也开始广泛应用于嵌入式领 ...

最新文章

  1. 人机融合智能:人工智能3.0
  2. node.js项目应用
  3. MongoDB学习笔记【2】-- 试用
  4. [Android Pro] 通过IMSI判断手机是移动、联通、电信
  5. 深到骨子里的自律,是每周坚持刷几篇最新论文 | PaperDaily #10
  6. 云原生数据湖分析DLA 2020年年度总结
  7. pybot --help
  8. Nodejs从小工到专家系列(一)
  9. c语言布尔类型赋值给整型,C语言的布尔类型(_Bool)【转】
  10. android get width单位是什么意思,浅析Android中getWidth()和getMeasuredWidth()的区别
  11. 更改oracle字符集为utf_oracle字符集AL16UTF16改为ZHS16GBK
  12. HDU 2899 :(二分求最小值)
  13. 085 对象的绑定方法
  14. NanobeamM5无线网桥配置
  15. latex中文小标题_latex定制标题样式
  16. 短时傅里叶变换STFT(matlab)
  17. Postman 接口神器
  18. 人脸识别活体检测sdk 百度 python_Python百度人脸识别SDK的使用
  19. WiFi底层通信接口@Netlink
  20. arch linux yaourt arm,在ARM设备(树莓派、香蕉派)上为Arch Linux配置yaourt

热门文章

  1. LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
  2. LeetCode 1452. 收藏清单(std::includes判断子集)
  3. 程序员面试金典 - 面试题 04.04. 检查平衡性(二叉树高度)
  4. LeetCode 257. 二叉树的所有路径(DFS)
  5. c 语言输出后不关闭_穿书+娱乐圈 |再不跑路就要被迫C位出道了花瓶女配和影帝组CP后豪门娇美人是爽文剧本...
  6. 掌握神经网络,我应该学习哪些至关重要的知识点?
  7. NLP史上最全预训练模型汇总
  8. Mac 终端提示:The default interactive shell is now zsh.
  9. 【JavaWeb】前端框架之Bootstrap
  10. 一种基于伪标签半监督学习的小样本调制识别算法