您现在的位置是: 首页 > 计算机系统 计算机系统

arm嵌入式linux驱动程序开发

佚名 2024-04-27 人已围观

简介arm嵌入式linux驱动程序开发大家好,很高兴有机会和大家一起探讨arm嵌入式linux驱动程序开发的问题。我将用专业的态度回答每个问题,同时分享一些具体案例和实践经验,希望这能对大家有所启发。1.嵌入式方向和软件开发方向2.ARM9开发板的嵌入式linux与ARM开发板的入门建议3.基于linux的嵌入式底层驱动开发应该怎样系统的学习?注意哪些方面?4.ARM开

arm嵌入式linux驱动程序开发

       大家好,很高兴有机会和大家一起探讨arm嵌入式linux驱动程序开发的问题。我将用专业的态度回答每个问题,同时分享一些具体案例和实践经验,希望这能对大家有所启发。

1.嵌入式方向和软件开发方向

2.ARM9开发板的嵌入式linux与ARM开发板的入门建议

3.基于linux的嵌入式底层驱动开发应该怎样系统的学习?注意哪些方面?

4.ARM开发具体是干什么的

5.linux运行arm程序armlinux程序

arm嵌入式linux驱动程序开发

嵌入式方向和软件开发方向

       1. 说在前面

       “嵌入式软件开发”包括“嵌入式应用开发”和“嵌入式驱动开发”,本站主要关注的嵌入式开发内容为“嵌入式驱动开发” ,继续细化的方向为“嵌入式Linux驱动开发”,知识点我们首先可以从方向的名字关键字上有所理解:嵌入式,Linux,驱动。

       “嵌入式” 代表的是产品的类型,它是相对于PC来说的,具体的概念,本站已经说的非常清楚了,这里就不累述了。具体请看关注新人系列的职业规划帖子。

       “Linux”代表的是嵌入式产品中使用的软件操作系统,也就是说我们选择Linux操作系统作为主要学习对象。你可以理解为它相对于PC机上的windows操作系统。

       “驱动”代表的是Linux操作系统开发中的一个方向“驱动开发”,说明我们当前关注的是linux驱动开发,而不是linux应用开发。你可以理解为相对于PC中的windows操作系统的驱动,我们用PC电脑的时候,有些时候你不是需要自己安装某些驱动吗,就是这个意思。

       总结一下,所以我们现在关注的开发内容归根到底就是“驱动“开发,不过这个驱动是”Linux“操作系统的驱动,而这个”linux“操作系统主要是跑

       在”嵌入式“产品上的。所以我们开发的主要知识点就是集中在”Linux驱动“ 和

       ”嵌入式“两个概念上来。我们知道了知识点概念的前因后果之后,开始对这两个知识点的开发细节做进一步细化。

       所谓”嵌入式“开发:

       我们知道概念上它是相对于PC开发,前面的叙述得知我们采用的操作系统为linux,那么我的问题来了:如果PC机上也跑的是Linux操作系统,基于PC的linux开发其实和基于嵌入式系统的linux开发基本开发思路是一样的,只不过开发过程中的编译,

       烧录方式有差别。下面我们就说说这两种开发方式的异同点,因为PC对于我们来说不陌生,那么在PC机上安装个ubuntu系统也应该是大家都这么玩过。既

       然这两种开发方式只是编译和烧录有区别的话,那么我们就很容易通过PC机上安装个ubuntu来快速认识嵌入式linux系统的开发了。

       PC机linux开发:

       如果你有个PC,并且安装了ubuntu,假设我们PC上有SD卡控制器,但是ubuntu中的linux并没有这个型号的SD卡驱动,那么如果我们想开发个PC机上SD卡驱动,我们就可以分以下几步开发:

       (1)下载相应的ubuntu版本的linux内核源码到本PC机。

       (2)如果该linux代码里没有该SD卡型号的驱动,那么就需要我们针对该SD卡型号写基于linux的SD卡驱动,这一步也就是我们主要的”驱动“开发任务。

       (3)针对linux内核,直接在本机上make menuconfig,配置选择该型号的SD驱动支持,前提是你已经开发好了SD卡驱动了。

       (4)使用本机ubuntu上GCC编译器直接编译内核:make。

       (5)烧录内核:直接在本机上make modules_install, make install.这个动作将把相应的驱动程序拷贝到ubuntu的boot目录,重启的时候SD卡驱动就会生效了。

       嵌入式系统linux开发:

       如果你有个s3c6410,2410的开发板,或者任何一个嵌入式arm的开发板,并且安装了Linux,假设我们板子上有SD卡控制器,但是用的linux并没有这个型号的SD卡驱动支持,那么如果我们想开发个基于开发板机上SD卡驱动,我们就可以分以下几步开发:

       (1)拿到相应的版本的linux内核源码并放置到开发用的PC机。

       (2)如果该linux代码里没有该SD卡型号的驱动,那么就需要我们针对该SD卡型号写基于linux的SD卡驱动,这一步也就是我们主要的”驱动“开发任务。

       (3)针对linux内核,直接在开发机上make menuconfig ARCH=arm,配置选择该型号的SD驱动支持,前提是你已经开发好了SD卡驱动了。

       (4)使用开发PC机ubuntu上已经安装好了的arm-linux-GCC编译器直接编译针对开发板的内核:make ARCH=arm。

       (5)烧录内核:将编译后生成的内核文件通过串口现在,usb下载,tftp等下载到目标开发板子上面,重启开发板,看到SD卡驱动生效。

       大家可以看到我们关心的两个知识点中的“驱动”开发,主要是第(2)项在PC上和嵌入式上基本是相同的。另一“嵌入式”知识点是和PC上有区别的,主要区别在于:编译和烧录方式。

       所以我们对于“嵌入式linux驱动”开发的知识点总结,主要是linux“驱动”的开发和“嵌入式”系统的烧录编译方法。

       2. 知识点总结

       嵌入式系统的烧录和编译知识点:

       (1)PC服务器的准备,安装ubuntu系统

       (2)交叉编译器的安装,编译方法。

       (3)下载到目标板,串口烧录,usb下载烧录,tftp网络烧录。

       请大家仔细阅读本站的跟我学系列贴子,通读之后我相信“嵌入式”的这个知识点就已经完整的掌握啦。

       /thread-8166-1-1.html

       Linux驱动开发知识点:

       (1)C语言基础 - 基础知识点

       (2)操作系统基础理论 - 基础知识点

       (3)简单的linux命令操作 -基础知识点, 有没有玩过ubuntu或者其他发行版?有没有使用过命令行做一些事情?

       (4)设备的文件节点 - 必备知识点,/dev/下面节点的意义,mknod创建dev文件节点。

       (5)简单驱动的modules的编写和加载 - 必备知识点, insmod, modprobe, rmmod命令的意义,为模块传递参数。

       (6)字符型驱动编写 - 必备知识点

       (7)驱动基本调试方法 - 必备知识点,printk打印驱动信息,dmesg打印kernel信息,proc,sys目录的意义。

       (8)共享资源的同步机制 - 必备知识点,资源临界区概念,自旋锁,信号量,等待队列的使用。

       (9)硬件IO的访问 - 必备知识点,ioremap,memory map,writel,readl读写接口。

       (10)中断的request和中断号的分配 - 必备知识点。

       (11)PCI,AMBA总线知识 - 必备知识点。

       (12)时间管理 - 必备知识点,udelay,mdelay长延时和短延时,jiffies,os timer原理。

       (13)块设备驱动程序的编写 - 必备知识点。

       (14)Kconfig和Makefile,添加驱动到内核 - 必备知识点。

       (15)一个比较大型的驱动程序学习 - 选学知识点,选取任何一个eMMC,SD,USB等比较大型的驱动学习。

       3. 知识点速成

       osboy正在针对知识点进行梳理,目前速成教程已经编纂完毕,速成班招生进行中。。。详情请参考:/thread-9692-1-1.html,也可以QQ 82475491联系osboy进行咨询交流。

ARM9开发板的嵌入式linux与ARM开发板的入门建议

       第1章 嵌入式系统与驱动程序 1

       本章目标 1

       1.1 嵌入式系统概述 1

       1.1.1 嵌入式系统的概念 1

       1.1.2 嵌入式系统的特点 2

       1.1.3 嵌入式系统的体系结构 2

       1.2 嵌入式处理器介绍 4

       1.2.1 嵌入式处理器分类 4

       1.2.2 ARM概述 5

       1.2.3 ARM系列芯片简介 5

       1.3 嵌入式操作系统介绍 7

       1.3.1 主流嵌入式操作系统 7

       1.3.2 嵌入式系统的发展状况 8

       1.3.3 嵌入式Linux介绍 8

       1.3.4 嵌入式系统开发环境的建立 9

       1.3.5 嵌入式软件开发 10

       1.4 嵌入式Linux驱动程序 12

       1.4.1 嵌入式Linux的内核空间和用户空间 12

       1.4.2 嵌入式Linux的文件系统 12

       1.4.3 嵌入式Linux的设备管理 14

       1.4.4 嵌入式Linux的驱动程序 16

       1.5 知识索引 20

       1.6 思考与练习 21

       第2章 简单的字符设备驱动程序 23

       本章目标 23

       2.1 嵌入式Linux字符设备的驱动程序结构 23

       2.1.1 嵌入式Linux驱动程序常用的头文件 24

       2.1.2 File_operations结构体 24

       2.1.3 字符设备驱动程序的入口 25

       2.1.4 驱动程序的设备注册 26

       2.2 设备驱动程序中的具体问题 27

       2.2.1 I/O端口 28

       2.2.2 内存操作 29

       2.2.3 中断处理 29

       2.3 LED的驱动程序实例及测试 30

       2.3.1 LED I/O端口设置 30

       2.3.2 LED硬件电路设计 32

       2.3.3 LED驱动程序设计 33

       2.3.4 LED测试程序设计 36

       2.4 嵌入式Linux中断处理驱动程序及测试 37

       2.4.1 中断处理过程 37

       2.4.2 中断向量表 39

       2.4.3 中断的处理模式 39

       2.4.4 中断的优先级 40

       2.4.5 中断的嵌套 40

       2.4.6 中断源的扩展 40

       2.4.7 中断控制寄存器的设置 41

       2.5 按键中断的驱动程序实例 45

       2.5.1 按键中断的电路设计 45

       2.5.2 按键中断的驱动程序设计 45

       2.6 知识索引 48

       2.7 思考与练习 49

       第3章 数字显示驱动程序 50

       本章目标 50

       3.1 数字显示器 50

       3.1.1 数码管简介 50

       3.1.2 数码管的分类 51

       3.1.3 数码管显示原理 51

       3.2 数码管显示电路的硬件设计 52

       3.2.1 译码器的使用 52

       3.2.2 数码管的驱动方式 53

       3.2.3 串/并变换的译码设计 55

       3.3 数码管驱动程序实例 56

       3.3.1 驱动程序的初始化和卸载模块 56

       3.3.2 文件操作结构模块 57

       3.3.3 数码管的打开模块 57

       3.3.4 数码管的读写模块 58

       3.3.5 数码管的I/O控制模块 58

       3.3.6 数码管的退出模块 58

       3.3.7 驱动程序的模块加载和卸载 59

       3.4 数码管显示电路测试程序设计 60

       3.4.1 数码管测试设计 60

       3.4.2 数码管测试程序 60

       3.4.3 数码管测试效果 61

       3.5 知识索引 61

       3.6 思考与练习 62

       第4章 键盘驱动程序 63

       本章目标 63

       4.1 键盘接口概述 63

       4.1.1 键盘的分类 63

       4.1.2 键盘的防抖 65

       4.1.3 键盘的扫描 65

       4.1.4 键盘的缓冲算法 67

       4.2 键盘的驱动设计实例 67

       4.2.1 锁存器和缓冲器扩展键盘 67

       4.2.2 锁存器和缓冲器的接口 68

       4.2.3 锁存器和缓冲器扩展键盘驱动程序设计 69

       4.2.4 锁存器和缓冲器扩展键盘测试程序设计 71

       4.3 智能控制芯片HD7279扩展键盘 72

       4.3.1 HD7279的电路设计 72

       4.3.2 HD7279的指令介绍 73

       4.3.3 HD7279的串行接口 74

       4.3.4 HD7279的驱动程序设计 75

       4.3.5 HD7279的测试程序设计 84

       4.4 知识索引 85

       4.5 思考与练习 85

       第5章 A/D驱动程序 86

       本章目标 86

       5.1 A/D转换的过程 86

       5.1.1 采样和保持 86

       5.1.2 量化和编码 88

       5.1.3 ADC的分类 89

       5.2 A/D转换器的基本原理 89

       5.2.1 逐次逼近型A/D转换器 89

       5.2.2 双积分型A/D转换器 90

       5.2.3 V/F和F/V型转换器 93

       5.2.4 其他A/D转换器 95

       5.3 A/D转换器接口技术 97

       5.3.1 ADC的主要参数及意义 97

       5.3.2 ADC的电路选择方法 98

       5.3.3 ADC实际应用中的问题 99

       5.4 S3C2410 A/D转换驱动设计实例 99

       5.4.1 S3C2410的A/D转换电路 99

       5.4.2 S3C2410X的A/D转换控制寄存器 100

       5.4.3 S3C2410X的A/D转换数据寄存器 101

       5.4.4 S3C2410X中A/D转换驱动程序的设计 102

       5.4.5 S3C2410X中A/D转换测试程序的设计 105

       5.5 知识索引 106

       5.6 思考与练习 107

       第6章 D/A驱动程序 108

       本章目标 108

       6.1 D/A的原理介绍 108

       6.1.1 D/A转换的概念及基本原理 108

       6.1.2 电子模拟开关 109

       6.1.3 D/A转换器的基本结构 110

       6.1.4 D/A转换的静态参数 114

       6.1.5 D/A转换的动态参数 115

       6.2 D/A转换的硬件电路设计 116

       6.2.1 D/A转换的接口技术 116

       6.2.2 D/A转换芯片介绍 117

       6.2.3 D/A转换的电路设计 118

       6.3 D/A转换器的驱动程序实例 118

       6.3.1 D/A驱动程序中的宏定义 118

       6.3.2 D/A的模块加载 118

       6.3.3 D/A转换器的文件操作模块 119

       6.3.4 D/A转换器的读写控制模块 120

       6.3.5 D/A转换器的打开、退出模块 120

       6.4 测试程序的设计 120

       6.4.1 D/A测试程序中的宏定义 121

       6.4.2 D/A测试程序的主函数 121

       6.4.3 D/A测试程序中的功能函数 122

       6.4.4 D/A测试程序中的功能打印函数 123

       6.4.5 D/A测试程序中的波形生成函数 123

       6.4.6 D/A测试程序的效果 124

       6.5 知识索引 125

       6.6 思考与练习 125

       第7章 LCD驱动程序 126

       本章目标 126

       7.1 LCD显示器概述 126

       7.1.1 液晶 126

       7.1.2 LCD显示屏的背光 127

       7.1.3 LCD显示器的分类 127

       7.1.4 LCD的显示原理 127

       7.1.5 LCD的驱动方式 130

       7.1.6 LCD的常用指标 131

       7.2 LCD的显示接口 131

       7.2.1 灰度STN的时序 132

       7.2.2 彩色STN的时序 133

       7.2.3 TFT的时序 134

       7.3 嵌入式处理器的LCD控制器 136

       7.3.1 LCD控制器 136

       7.3.2 LCD控制器的设置 137

       7.3.3 LCD的字符显示缓存 139

       7.4 LCD的驱动程序设计 140

       7.4.1 LCD驱动程序相关的宏定义 140

       7.4.2 LCD驱动程序的底层操作函数 142

       7.4.3 LCD驱动程序提供的API 145

       7.4.4 LCD驱动程序的模块化加载 151

       7.4.5 LCD的测试程序 152

       7.5 基于Framebuffer的LCD驱动程序实例 155

       7.5.1 Framebuffer概述 155

       7.5.2 LCD的电路连接 155

       7.5.3 Framebuffer设备驱动程序的结构 156

       7.5.4 Framebuffer设备驱动程序的设计 159

       7.5.5 Framebuffer设备测试程序的设计 164

       7.5.6 嵌入式Linux常用的GUI 166

       7.6 知识索引 166

       7.7 思考与练习 167

       第8章 触摸屏驱动程序 168

       本章目标 168

       8.1 触摸屏概述 168

       8.2 触摸屏的分类 168

       8.2.1 电阻技术触摸屏 168

       8.2.2 表面声波技术触摸屏 169

       8.2.3 电容电感技术触摸屏 170

       8.2.4 红外线技术触摸屏 170

       8.3 触摸屏的特性 171

       8.3.1 透明度和色彩失真 171

       8.3.2 反光性 171

       8.3.3 清晰度 171

       8.3.4 漂移 172

       8.3.5 检测和定位 172

       8.4 触摸屏的硬件电路设计 172

       8.4.1 电阻式触摸屏的电路原理 172

       8.4.2 电阻式触摸屏原点的定位 173

       8.4.3 电阻式触摸屏的电路连接 174

       8.5 触摸屏的驱动程序实例 176

       8.5.1 触摸屏接口的模式 176

       8.5.2 A/D转换和触摸屏寄存器的设置 177

       8.5.3 触摸屏的坐标 179

       8.5.4 触摸屏的电路连接 180

       8.5.5 触摸屏的驱动程序接口 181

       8.6 测试程序的设计 182

       8.6.1 触摸屏的数据定义 183

       8.6.2 触摸屏的数据处理 183

       8.6.3 触摸屏的运行测试 185

       8.7 知识索引 186

       8.8 思考与练习 187

       第9章 CAN总线驱动程序 188

       本章目标 188

       9.1 CAN总线接口设计 188

       9.1.1 CAN总线概述 188

       9.1.2 CAN的工作特点及主要优点 189

       9.1.3 CAN总线的电气特征和MAC帧结构 189

       9.2 嵌入式处理器上CAN总线接口的扩展 190

       9.2.1 SJA1000简介 190

       9.2.2 SJA1000扩展 191

       9.3 SJA1000扩展CAN总线接口的设计 192

       9.3.1 CAN 控制器SJA1000的操作模式 192

       9.3.2 CAN控制器SJA1000的特征功能 193

       9.3.3 CAN 控制器SJA1000的Basic CAN模式设置 194

       9.4 SJA1000扩展CAN总线接口的通信 196

       9.4.1 通过CAN总线建立通信的步骤 196

       9.4.2 SJA1000的初始化 196

       9.4.3 驱动程序的结构设计 198

       9.4.4 驱动程序init、exit、open、close函数的实现 200

       9.4.5 驱动程序read、write函数的实现 201

       9.4.6 驱动程序interrupt、ioctl函数实现 202

       9.4.7 测试程序的编写 202

       9.5 驱动程序的加载 204

       9.6 知识索引 204

       9.7 思考与练习 205

       第10章 IIC总线驱动程序 206

       本章目标 206

       10.1 IIC总线概述 206

       10.1.1 IIC总线介绍 206

       10.1.2 IIC总线引入的原因 206

       10.1.3 IIC总线的特点 206

       10.1.4 IIC总线的基本结构 207

       10.1.5 IIC总线的术语 207

       10.1.6 IIC总线的工作 208

       10.1.7 IIC总线的竞争仲裁 209

       10.1.8 IIC总线的工作流程 210

       10.2 嵌入式处理器的IIC接口 211

       10.2.1 IIC总线控制寄存器 212

       10.2.2 IIC总线控制/状态寄存器 213

       10.2.3 IIC总线地址寄存器 214

       10.2.4 IIC总线移位数据寄存器 214

       10.2.5 S3C2410中与IIC对应的I/O端口 215

       10.3 基于IIC的键盘芯片应用 216

       10.3.1 ZLG7290的功能 217

       10.3.2 ZLG7290的控制方式 218

       10.3.3 ZLG7290的寄存器 218

       10.3.4 ZLG7290的通信接口 219

       10.3.5 ZLG7290的指令介绍 219

       10.4 IIC总线驱动程序实例 221

       10.4.1 ZLG7290的电路连接 221

       10.4.2 ZLG7290的通信流程 223

       10.4.3 ZLG7290驱动中变量的定义 225

       10.4.4 ZLG7290驱动中实时时钟的改变 226

       10.4.5 ZLG7290和IIC寄存器的初始化 227

       10.4.6 ZLG7290驱动程序的模块化 228

       10.4.7 ZLG7290的文件操作结构 228

       10.5 IIC总线的测试程序 230

       10.6 知识索引 231

       10.7 思考与练习 231

       第11章 音频总线驱动程序 232

       本章目标 232

       11.1 音频总线接口概述 232

       11.1.1 音频的采样精度 233

       11.1.2 音频编码 233

       11.2 IIS音频总线接口 233

       11.2.1 IIS总线的物理连接 233

       11.2.2 IIS的总线协议 234

       11.2.3 IIS总线的硬件设计 235

       11.2.4 IIS总线的寄存器 236

       11.3 AC97音频总线接口 239

       11.4 IIS总线的驱动程序设计 240

       11.4.1 音频设备基础知识 240

       11.4.2 音频设备文件 241

       11.4.3 WAV声音文件 243

       11.4.4 音频设备和驱动程序的通信 243

       11.4.5 设备的初始化和加载 244

       11.4.6 DMA的操作和宏定义 246

       11.4.7 audio设备文件的操作 248

       11.4.8 mixer设备文件的操作 260

       11.5 音频驱动程序的测试 262

       11.6 知识索引 262

       11.7 思考与练习 263

       第12章 IDE接口驱动程序 264

       本章目标 264

       12.1 IDE接口概述 264

       12.1.1 硬盘知识介绍 264

       12.1.2 IDE接口标准 267

       12.1.3 IDE接口的传输模式 269

       12.1.4 IDE接口寄存器 269

       12.2 IDE接口驱动程序的移植 271

       12.2.1 嵌入式Linux下IDE驱动程序接口 271

       12.2.2 嵌入式Linux下IDE驱动程序 272

       12.2.3 IDE硬盘的读/写操作 274

       12.3 IDE驱动程序测试 282

       12.3.1 磁盘文件系统简介 283

       12.3.2 IDE分区测试 283

       12.4 知识索引 285

       12.5 思考与练习 285

       第13章 闪存芯片的驱动程序 286

       本章目标 286

       13.1 闪存芯片概述 286

       13.1.1 闪存芯片的物理特性 286

       13.1.2 嵌入式文件系统概述 289

       13.1.3 MTD体系介绍 289

       13.1.4 Flash专有名词 291

       13.2 NAND Flash 291

       13.2.1 NAND Flash的结构 291

       13.2.2 NAND Flash的操作 292

       13.2.3 NAND Flash控制器 294

       13.2.4 NAND Flash的时序 296

       13.2.5 NAND Flash的驱动程序实例 297

       13.3 NOR Flash 301

       13.3.1 NOR Flash的结构 301

       13.3.2 NOR Flash的操作 302

       13.3.3 NOR Flash的驱动程序实例 303

       13.4 基于闪存的文件系统 307

       13.5 知识索引 309

       13.6 思考与练习 310

       第14章 USB 设备驱动程序 311

       本章目标 311

       14.1 USB接口概述 311

       14.1.1 USB系统 311

       14.1.2 USB的电气特性 312

       14.1.3 USB总线的拓扑结构 313

       14.1.4 USB的通信协议 313

       14.2 嵌入式系统中USB的使用 315

       14.2.1 OHCI概述 315

       14.2.2 Host接口硬件设计 316

       14.3 嵌入式系统中USB设备的驱动程序设计 316

       14.3.1

基于linux的嵌入式底层驱动开发应该怎样系统的学习?注意哪些方面?

       第一,学习基本的单片机编程。

       对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主要是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS 去编程,第一个实验就是控制 led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了 学习单片机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与 norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。

       第二,使用linux系统进行一些基本的实验。

       在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。 在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。

       第三,研究完整的linux系统的的运行过程。

       所谓完整的linux系统包括哪些部分呢? 三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。 那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。

       第四,开始做系统移植。

       上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。 当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。 在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。 至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。 这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。 盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。

       第五,研究linux驱动程序的编写。

       移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。Linux的驱动程序可以说是五花八门,linux2.4和 linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。 这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。 第六,研究应用程序的编写。 做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。 MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。记住,问题是学习的最好机会

ARM开发具体是干什么的

       1、国内的书内容都差不多,相互抄来抄去。

        国外的书质量虽然高,但是一般人阅读速度吃不消。

        不过,还是建议读国外的书(如果有时间的话),长痛不如短痛。

       2、不一定非要有开发板,可以用skyeye等软件模拟。

        但是,软件模拟和实体机肯定是有区别的。还是建议选一块开发板。

       3、ARM板是个硬件,可以用来学习WinCE、Vxworks、Linux、uCos等等系统开发。

        可以用来学习以上系统的驱动和应用开发。

        Linux驱动分两块内容:学习硬件工作流程(单片机程序),

        Linux驱动上层结构

       (platform、mtd、字符设备、块设备、网络设备、各种总线 等上层结构)

       4.前景大大滴好,但是道路十分之曲折。

        要有心里准备,得有文火久煨的毅力。

linux运行arm程序armlinux程序

       ARM开发具体是:工程师使用ARM嵌入式Linux操作系统进行内核编译及文件系统制作,使用相关开发工具进行ARM软、硬件开发设计的专业技术人员。

       英国ARM公司是全球领先的半导体知识产权 (IP) 提供商。全世界超过95%的智能手机和平板电脑都采用ARM架构 。ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件。2014年基于ARM技术的全年全球出货量是120亿颗,从诞生到现在为止基于ARM技术的芯片有600亿颗。

       技术具有性能高、成本低和能耗省的特点。在智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。

扩展资料

       1、ARM开发的职业要求

       教育培训:自动化、通信、电子专业大专以上学历。

       工作经验:熟悉通信原理,掌握RS485以太网协议;熟悉VHDL的设计,熟悉arm9软硬件设计;熟悉数字及模拟电路设计;有C/C++开发经验;熟悉C语言,熟悉ARM嵌入式系统开发,能熟练使用Protel、PADS和Cadence工具;

       有良好的电子线路设计、分析能力,良好的硬件系统调试能力,流程快速理解英文技术文档。

       2、ARM的特点

       ARM 的商业模式主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。ARM向合作伙伴网络(包括世界领先的半导体公司和系统公司)授予 IP 许可证。

       这些合作伙伴可利用 ARM 的 IP 设计创造和生产片上系统设计,但需要向 ARM 支付原始 IP 的许可费用并为每块生产的芯片或晶片交纳版税。除了处理器 IP 外,ARM还提供了一系列工具、物理和系统 IP 来优化片上系统设计。

       

参考资料:

百度百科-ARM开发工程师

       

参考资料:

百度百科-ARM

       如何编译armlinux的go?

       Golang也就是Go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后Google强大靠山什么的就不多说了。Golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包。ARM平台没办法直接从官网下载二进制安装包来安装,好在Golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤。

       注:本文选用树莓派做测试,因为树莓派是基于ARM平台的。

       1、编译工具配置

       据说下个版本的golang编译工具要使用golang自己来写,但目前还是使用C编译工具的。因此,首先要配置好C编译工具:

       1.1在Ubuntu或Debian平台上可以使用sudoapt-getinstallgcclibc6-dev命令安装,树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装。

       1.2在RedHat或CentOS6平台上可以使用sudoyuminstallgcclibc-devel命令安装。

       安装完成后可以输入gcc--version命令验证是否成功安装。

       2、获取golang源代码

       2.1直接从官网下载源代码压缩包。

       golang官网提供golang的源代码压缩包,可以直接下载,最新的1.4.1版本源代码链接:/golang/go1.4.1.src.tar.gz

       2.2使用git工具获取。

       golang使用git版本管理工具,也可以使用git获取golang源代码。推荐使用这个方法,因为以后可以随时获取最新的golang源代码。

       2.2.1首先确认ARM平台上已经安装了git工具,可以使用git--version命令确认。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:/download/linux

       2.2.2克隆远程golang的git仓库到本地

       在终端cd到你想要安装golang的目录,确保该目录下没有名为go的目录。然后以下命令获取代码仓库:

       gitclone/go

       大陆地区可能会获取失败,在不**的情况下我试了几次都没成功,原因大家都懂的。好在google已经将golang也托管到github上面,所以也可以通过下面命令获取:

       gitclone/golang/go.git

       视网络情况,下载可能需要不少时间。我2M的带宽花了将近两个小时才下载完,虽然整个项目不过几十兆==

       下载完成后,可以看到目录下多了一个go目录,里面即为golang的源代码,在终端上执行cdgo命令进入该目录。

       执行下面命令检出go1.4.1版本的源代码,因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:

       gitcheckoutgo1.4.1

       至此,最新1.4.1发行版的源代码获取完毕

       3、设置golang的编译环境变量

       主要有GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置,先解释四个环境变量的意义。

       3.1GOROOT

       主要代表golang树结构目录的路径,也就是上面git检出的go目录。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值。为了保险起见,可以直接设置为go目录的路径。

       3.2GOOS和GOARCH

       分别代表编译的目标系统和平台,可选值如下:

       GOOSGOARCH

       darwin386

       darwinamd64

       dragonfly386

       dragonflyamd64

       freebsd386

       freebsdamd64

       freebsdarm

       linux386

       linuxamd64

       linuxarm

       netbsd386

       netbsdamd64

       netbsdarm

       openbsd386

       openbsdamd64

       plan9386

       plan9amd64

       solarisamd64

       windows386

       windowsamd64

       需要注意的是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm。

       3.3GOARM

       表示使用的浮点运算协处理器版本号,只对arm平台有用,可选值有5,6,7。如果是在目标平台上编译源代码,这个值可以不设置,它会自动判断需要使用哪一个版本。

       总结下来,在树莓派上设置golang的编译环境变量,可编辑$HOME/.bashrc文件,在末尾添加下面内容:

       exportGOROOT=你的go目录路径

       exportGOOS=linux

       exportGOARCH=arm

       编辑完后保存,执行source~/.bashrc命令让修改生效。

       4、编译源代码

       环境变量配置完成自后就可以开始编译源代码。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台)。编译实际上就是执行其中一个脚本,两者的区别在于all.bash在编译完成后还会执行一些测试套件。如果希望只编译不测试,可以运行make.bash脚本。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译。由于硬件情况不同,编译耗费的时间不同。在我的B型树莓派编译过程花费了将近半个小时,编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右。

       5、配置golang运行环境变量

       编译完成后,go目录下会生成bin目录,里面就是go的运行脚本。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中。同样编辑~/.bashrc文件,因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上

       exportPATH=$PATH:$GOROOT/bin

       保存后同样执行source~/.bashrc命令让环境变量生效。

       至此,golang源代码编译安装成功。执行goversion应该就能看到当前golang的版本信息,表示编译安装成功。

       linux下ARM平台编译编写的完成程序如何在windows环境下运行?

       直接在window下运行不了。只能在window下安装虚拟机,再安装linux系统,在虚拟机下的linux里gcc编译你的程序.

       arm技术需要学什么专业?

       刚开始:1)学习Linux系统安装、常用命令、应用程序安装。2)学习Linux下的C编程、这本书必学《UNIX环境高级编程》、《UNIX网络编程》,RechardStevens写的,C高手大都学习过《C和指针》、《C缺陷与陷阱》、《高质量C/C++编程指南》、《C专家编程》、《TheCprogrammingLanguage》3)程序员大都要学:数据结构,嵌入式程序员数据结构必学!4)底层开发人员大都要学:微机原理、计算机体系结构,嵌入式开发人员必学!5)单片机可以让一个从事软件开发的人了解和如何操作硬件,有必要学,因为一开始就从ARM入手,不太现实!6)ARM体系结构,其中有汇编。7)数字电路有必要学习,不然你在做底层开发时真的会不知道怎么看原理图,起码也得懂与入门吧。8)ARM+Linux应用程序开发(前提是要有开发板)到此,勉强算是在嵌入式Linux这个行业有了初步入门了,但遗憾的是这还远远不够,还得继续,因为这上嵌入式,得变成高手。9)要做底层开发,就必须知道软硬件之间是如何衔接和配合工作的,那么电子技术应该要好好学习了,很多时候会用到模拟电路知识,这是区别好手与菜鸟的不同之处之一。10)Linux下的汇编要学,这样你才能真正了解你写的程序是如何在一个特定的硬件上跑的。这是区别好手与菜鸟的不同之处之二。11)TCP/IP协议栈要学,所有的嵌入式高手都得掌握的东西,这是区别好手与菜鸟的不同之处之三。12)有了这些东西,拿下Linux驱动已经不再话下,需要你去学习Linux内核源代码和Linux驱动程序设计,这是一个技术升华。到此,你已经算是嵌入式Linux的中级人物了,继续往下:13)音频、视频的解码译码技术你得学。14)各种IC,各种bootloader你能够参与其开发设计。15)自行设计开发新产品,新技术。

       arm版的ubuntu可以安装什么软件?可以和x86ubuntu的软件通用吗?

       架构不一样一个x86一个arm,软件不能通用,不过linux一般都提供源代码的,用arm-linux-gcc编译一下就能用了.

       今天关于“arm嵌入式linux驱动程序开发”的探讨就到这里了。希望大家能够更深入地了解“arm嵌入式linux驱动程序开发”,并从我的答案中找到一些灵感。