linux的驱动开发——交叉编译器
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的驱动开发——交叉编译器相关推荐
- NXP LS1046A及飞腾新四核 FT2004 PCIE EP端LINUX设备驱动开发
文章目录 前言 一.PCIE 硬件简介 二.PCIE EP地址映射原理介绍 1. PCI总线的各种域(存储器域.PCI总线域) 2. 开发EP设备驱动要做的事 三.NXP LS1046A PCIE E ...
- 嵌入式 Linux 内核驱动开发【The first day: 36093万字】
嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...
- linux设备驱动开发之环境搭建(基于exynos4412)
第一章 linux设备驱动开发之环境搭建(基于exynos4412) 目录 第一章 linux设备驱动开发之环境搭建(基于exynos4412) 1.搭建开发板运行环境 1.1.交叉开发模式 安装交叉 ...
- Linux字符驱动开发学习总结
linux驱动编写(虚拟字符设备编写) 昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面设备是如何编写的. ...
- Linux下驱动开发
Linux下驱动开发 1.简介 驱动,是指驱动计算机里软件的程序.驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息.驱动程序是操作系统与硬件连接的桥梁. 设备 ...
- Linux设备驱动开发基础
1.驱动概述和开发环境搭建 1.1驱动设备的作用 对设备驱动最通俗的解释就是"驱动硬件设备行动".驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的 ...
- linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt
PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...
- 《Linux设备驱动开发详解 A》一一2.3 接口与总线
本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...
- Linux设备驱动开发概述
作者:宋宝华 email:author@linuxdriver.cn 在过去这些年,Linux已经成功应用于服务器和桌面系统,而近年来,随着嵌入式系统应用的持续升温,Linux也开始广泛应用于嵌入式领 ...
最新文章
- 人机融合智能:人工智能3.0
- node.js项目应用
- MongoDB学习笔记【2】-- 试用
- [Android Pro] 通过IMSI判断手机是移动、联通、电信
- 深到骨子里的自律,是每周坚持刷几篇最新论文 | PaperDaily #10
- 云原生数据湖分析DLA 2020年年度总结
- pybot --help
- Nodejs从小工到专家系列(一)
- c语言布尔类型赋值给整型,C语言的布尔类型(_Bool)【转】
- android get width单位是什么意思,浅析Android中getWidth()和getMeasuredWidth()的区别
- 更改oracle字符集为utf_oracle字符集AL16UTF16改为ZHS16GBK
- HDU 2899 :(二分求最小值)
- 085 对象的绑定方法
- NanobeamM5无线网桥配置
- latex中文小标题_latex定制标题样式
- 短时傅里叶变换STFT(matlab)
- Postman 接口神器
- 人脸识别活体检测sdk 百度 python_Python百度人脸识别SDK的使用
- WiFi底层通信接口@Netlink
- arch linux yaourt arm,在ARM设备(树莓派、香蕉派)上为Arch Linux配置yaourt
热门文章
- LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
- LeetCode 1452. 收藏清单(std::includes判断子集)
- 程序员面试金典 - 面试题 04.04. 检查平衡性(二叉树高度)
- LeetCode 257. 二叉树的所有路径(DFS)
- c 语言输出后不关闭_穿书+娱乐圈 |再不跑路就要被迫C位出道了花瓶女配和影帝组CP后豪门娇美人是爽文剧本...
- 掌握神经网络,我应该学习哪些至关重要的知识点?
- NLP史上最全预训练模型汇总
- Mac 终端提示:The default interactive shell is now zsh.
- 【JavaWeb】前端框架之Bootstrap
- 一种基于伪标签半监督学习的小样本调制识别算法