ARM嵌入式Linux+系统构建与驱动开发范例

所需积分/C币:10 2018-12-06 11:32:37 48.66MB PDF

《ARM嵌入式Linux系统构建与驱动开发范例》介绍μClinux内核编程的一个方面,使用内核模块编写设备驱动程序。主要内容包括:介绍如何建立基于ARM7的交叉开发环境以及如何向ARM7芯片上移植μClinux;分析μClinux上一个已在ARM7上成功运行的最简单的内核模块;介绍μClinux的字符设备驱动程序、块设备驱动程序和网络设备驱动程序的编写、编译及使用,这些范例均在ARM7平台编译和使用,但可以方便地移植到其他平台。  《ARM嵌入式Linux系统构建与驱动开发范例》通俗易懂,是一本面向初学者的μClinux内核编程图书,对资深μClinux内核编程人员也有参考价值。可作为高等院校
前言 简洁就是关。 研究开源软件的热潮已经遍及神州大地,作为开源软件的重头戏 Linux白然成为大家的 研究重点,而其嵌入式分支 uClinux也备受关注。对于大多数开源软件米说,由于开发者不能 从中获利,因此造成大多数廾源项目缺少文档。同样,多人协作开发的 Linux也具有这个特 点,即缺少“官方”文档。对于其他非官方写作的文档、资料等,山于其作者本身已经是高于 他们编写的资料对已入门者具有重耍的参考价值,所以只可作为“手册”来使用。不过,这些 资料人多是分析内核的,对于应用涉及不多。作为 Linux的分支μ Clinux也继承了这些特点。 对于μ Clinux的应用来说,主要有3方面:编写应用软件、编写设备驱动程序和移植 因为 Linuxⅹ和μ(lix的应用程序编程接口与Unⅸx兼容,所以这方面的资料较多,也比较 容易入门。而移植μ Clinux山专业人员完成,一般的应用工程师接触不到。对于改备驱动程 序来说,尽管它在 Linux和μ Clinux的源代码中比例最大,但仍不能包括所有设备驱动程序。 在一个应用中,这些(还不存在的)设备驱动程序与应用密切相关,只能由应用工程帅完成,至 少是部分完成。即使有现成的设备驱动程序,也未必适合这个应用,也需要重写。 编写驱动程序是如此重要,但针对初学者的资料却很少,大多数读者对于编写驱动程序始 终没有清晰的脉络。可以想象,这样编写的科序存在多少隐患。笔者针对这种情况,通过阅 读大量的资料和源码,斧去大量的细枝繁叶,使其脉绺清晰,并设计多个实际的设备驱动程序 作为例子,便成此书。 希望读者在阅读本书后,由衷地说:“编写μ Clinux设各驱动程序原米是如此简单!” 木书的各章安排如下: 第1章是μ Clinux内核简介。木章主要训述了 uclinux和 Linux的渊源及差别,且对 μinux的开发坏境、如何编泽μ Clinux内核及其建立文件系统进行了详细的描述。 第2章是使用 c Nu Tools建立μ Clinux开发环境。本章主衷介绍了在嵌入式 Linux开发 过程中所用到的GNU工具。 第3章是移植μ Clinux到LPC220实例。本章以LPC2200为例,简单地介绍了如何把 uClinux移植到一个新系统中。 第4章是μ Clinux设备驱动程序概述。本章首先介绍了 Linux(μ uClinux)设备驱动程序相 关知识,包括简单的仗用:然后主要介绍了一个最简羊的设备驱动程序,包括源码分析和 Makefile文件的编写和分析 9、ARM嵌入式Imx系统构建与驱动开发范例 第5章是字符设备驱动程序初步。本章首先介绍了 Linux( uClinux)字符设备驱动程序的 柑关概念;然后主要介绍了个最简单的字符设爷驱动程序,主要包括源码分析和编译使用; 最后介绍程序员如何使用字符设备 第6~10章是5个字符设备驱动实例。这5章分别以GPIO、PWM、A①D、SPI和C等硬 件为例,通过分析这些改备驱动程序溟码,详细介绍了编写字符改备需要了解的一些基本知识 及设计思想。 第11是块设备驷动程序初步。木章首先介绍了 Linux(μ Clinux)块设备驱动程序的相 关概念:然后主要介绍了一个最简单的块改备驱动稈序,主要包括源码分析和编译使用:最后 介绍如何使用块设各。 第12章是简单的块设备编写范例。章以 NAND FLASH K92808为例介绍了实际的Iin Inux uclinux)块设备驱动程序的相关知识。首先简单介绍这个驱动,然后对源码进行分析。 第13章是基亍冮LG/FS驱动程序的通用块设各驱动程序。本章以个通用块设备驱动 程序为例介绍了实际的 LinuxμCinx)块设备驱动程序的相关知识。首先介绍这个驭动的使 用方法,然后对源码进行分析。 第14章是转换ZLG/FSV1.10驱动为 Clinux驱动。本章是第13章的延续,主要介绍如 何把ZLG/FSV1.10的驱动转换成 uClinux的驱动程序。 第15章是刚终设备驱动程斥初步。木章主要介绍了 Linux(μ Clinux)冽络驱动程序的 般编写方法和相关知识,包括源码分析和编译使用。 第16和17章是2个网络设各驱动实例。这2章分别以RIL8019和DM9000等硬件为 例,通过分析这些改备驱动程序源码,详细介绍了编写网络设备需要了解的一些基本知识及设 计思想。 木书是面向初学者的入门书籍,不可能也没有必要介绍编写设备驱动程斥的各个方面。 如果读者需要深入学习,可参考木书参考文中列出的资料及其他相关书籍和源码 本书第Ⅰ~3章由清华大学计算机系陈渝博士及其学生康烁、杨坚编写,其他各章主要由 陈明计编写。另外,陈锡炳、黄斌、甘达、局立山、郑明远等参与了部分具体工作。全书由周 立功负黃规划、统稿与市核。 木书介绍的设各驱动程序均由广州周立功单片机发展有限公司设计,是基于 Clinux v2 1.x版本的,均在其出品的开发套件上测试通过。软件作者众尽力保证软件的正确性,但限于 作者的理论水平和经验,本书及软件中难免有坑忽的地方。因为软件的发展时问不长,所以不 可能十分完善。不过,软件作者会不断地升级软件,力求软件越来越完善。 感谢北京航空航天大学出版社的大力支持,他们为规划公书付出了很大的心血。与此同 吋,也感谢清华大学邵贝贝教授的帮助。如果没有他们的努力,我想这项工作很难及吋完成。 周立功 2005年10月26日 日录 第1章 uclinux内核简介 1.1 Clinux简介 .······.······.·······.····:··········:····.·..··:···..····.·: 1.2μ Clinux内核与传统 Linux内核的比较…………………… 1.3 uClinux运行条件 香··量晋鲁鲁香·看●鲁·章··看···量··看香····看,章·鲁鲁●香·,·带·鲁看。章章看 1.4 uClinux的目录结构…… .···.·········· 1.5μ Clinux的开发流程… 1.5.1编译μ Clinux内核…… 鲁垂·番·D看着··鲁看■ ·.:a·::······6 1.5.2创建文件系统 。垂,D曹垂。看要鲁。·看D。垂香曹·D番要 鲁看垂香。看。鲁D 看·。看香垂D鲁垂。看 木章小结…… 10 第2章使用 GNU Tools建立μ Clinux开发环境 2.1 GnU Tools简介…… 2.2GCC编译器… 13 2.2.1GCC使用示例…… 14 2.2.2编译内核时使用的编译选项 20 2.3 binutils二进制工具集 2.3.1ar软件 22 2.3.2mm软件 ……………………………24 2.3.3ok 软件 2.3.4 objdump软件 t。l。 b看垂。b鲁。b。非D非。,。垂 ∴∴…29 2.3.5 readelf软件 ·················.·4··········;;··4··“······4· ···:.······4········ 32 2.4ld链接器… 2.4.1d选项…… 34 2.4.2链接描述文件介绍 着·看D。。垂b鲁鲁垂D。看垂番dD。看·D鲁鲁垂D 看。看鲁 …35 2.4.3链接描述文件的语法………………………………………………………………36 2.4.4链接描述文件例子 39 make 介绍 42 2.5.1 GNU make简介 ………42 2.5.2 Makefile及其语法 …43 ARM嵌入式L皿x系统构建与驱动开发范例 2.5.3 Clinux-dist2.4中的 Makefile分析………… 2.6GDB调试器 2.6.1GDB俗介… 。看垂4看D。垂 2.6.2GDB调试程序示例………… 香·D鲁·,·看4。看t ∴……59 2.6.3 gdbserver介绍… 62 2.7 GNU Tools的制作和安装…………………………………………………………63 2.7.1从源码制作交义编译环境 63 2.7.2安装一进制的父叉工具链arm-ef工具 ···着·.·中香·申·非·,·中即 63 2.8使用 GNU Tools编译μ Clinux内核和应用程序… 64 2.8.1使用 GNU Tools编译μ Clinux内核… 2.8.2使用 GnU Tools在μ Clinux中编译应用稈序 本章小结 香垂。看垂看垂香。看。D。看看D看。看b番。番鲁p番看看看D香。·D番看p番看4番鲁。。垂4D看·。。鲁垂。。垂4b4 70 第3章移植μ Clinux到LPC2200实例 3.1选择厂发环境…… 3.2移植内核 ●·看·。着鲁鲁鲁·D鲁着。看垂。鲁■D。。·B香看鲁P番看看日。。垂鲁鲁着D。看·鲁。鲁。带垂·看垂d·。香鲁鲁。D。看垂D看鲁。 3.2.1增加体系架构和机型相关的代码 3.2.2添加屮断系统… 74 3.2.3增加其他代码…… 3.2.4修改 Makefile和配置菜单………………… 3.3移植驱动程序 98 3.3.1时钟驱动程序的移植 98 3.3.2串口驱动程序的移植… 木章小结 101 第4章μ Clinux设备驱动程序概述 4.1设备驱动程序基础知识……… …………………102 4.1.1驱动程序分类… 4.1.2加载和删除驱动程序 1.2最简单的内核模块 ………101 4.2.1内核模块的概念 104 4.2.2编写内核模块 ……………104 4.2.3关于内核模块初始化(加载)函数 ………………106 4.2.4关于内核模块清除(卸载)两数…… 106 4.2.5关于 printk(函数… 106 41.3编写Ⅵ makefile文件 日汞 4.3.1 Makefile文件整体介绍… 4.3.2Ⅵ makefile文件中的变量 ………………………108 4.3.3 Makefile文件中的规则………………… 109 木章小结… 1ll 第5章字符设备驱动程序初步 5.1几个概念………………………………………………………………………112 5.1.1关于主设备号和从设备号 ……………………112 5.1.2关于设备节点、节点文件和没备文件 l12 5.2最简单的字符设备驱动程序……………………… ·;。·鲁番。。番·。,垂 113 5.2.1驱动程序代码 ………………………………113 5.2.2驱动程序的初始化函数………… ……………116 5.2.3驱动程序的清除网数 5.2.4保存设备信息的结构体 ···.············:······· 117 5.2.5关于file结构 ……122 5.2.6内核空间与用户空间交换数据…………………………………………………125 5.2.7内核究间与I0空间交换数据…………………… 126 5.2.8 ioctl(方法的编写……………… l27 5.2.9一些宏定义 130 5.2.10关于头文作… ·普p·鲁鲁 130 5.2.11其他说明 …131 5.3使用字符设备驱动程序 画 5.3.1建立设备文件 番·d …131 5.3.2加载驱动程厅 …131 5.3.3接口函数…… 5.3.4示例代码………………………………………………………………………137 5.3.5编写 Makefile文件… 本章小结………… 139 第6章GPIO(宇符设各)驱动稈序编写范例 6.1在应用程厅中使用GPO驱动程序 l40 6.1.1建立设备文件 140 6.1.2可使用的函数………… ……140 6.1.3提供给应用程序的头文件 141 6.1.4设置GPIO凵数据传输方向 142 6.1.5让GPIO口输出指定电平……………………………… 、ARM嵌入式 Linux系统构建与驱动开发范例 6.1.6读GPO∏输出电平 146 6.1.7读GPIO口引脚上的电平 147 6.2编译……………………………………………………………………………148 6.3源码分析 ●·D鲁鲁。看·鲁。·D 149 6.3.1初始化逖数 6.3.2清除凶数 ……………………………………………150 6.3.3 open o)方法 …………………150 6.3.4 release c方法…………… …∴…151 6.3.5 ioctl(方法… …………………………151 6.3.6其他说明 …………158 本章小结… ……∴……159 第7章PWM(宇符设各)驱动程序编写范例 7.1在应用程序中使用PWM驱动程序 香。香 …………160 7.1.1建立设备文件 7.1.2可使用的函数………………………… ●鲁·D。●鲁 161 7.1.3提供给应用程序的头文件 161 7.1.4PWM总体控制…………… l63 7.1.5允许某路PWM输出… ……164 7.1.6禁止某路PWM输出 7.1.7设置某路PWM高电平宽度 165 7.2编译 ……166 7.3源码分析………… 7.3.1为驱动程序增加屮断服务程序 …167 7.3.2关于喻界区… 169 7.3.3初始化函数 70 3.4清除凶数 170 7.3.5penO方法及中断处理 7.3.6 release方法………… 7.3.7 ()方法 3.8其他说明 本章小结… 春晋香看·鲁非,章p音·即鲁着章 179 第8章A/D(宇符设备)驱动程序编与范例 8.在应用程序中使用A/D驱动程序 180 8.1.1建立设备文件 180 一日录 8.1.2可使用的函数… ……………181 8.1.3提供给应用程序头文件 …………181 8.1.4设置A/D工作频率……………… 8.1.5设置A/D转换精庋…………………… 18 8.1.6读取A/D转换结果 8.2编译……………………… 18 8.3漂码分析 184 8.3.1初始化函数 18 8.3.2清除函数……… 185 8.3.3open(方法…… ·.····:.··...·.·.·.·.···;·t 186 8.3.4 release()方法 ……187 8.3.5iocu(方法……………………………………………………………………188 8.3.6read(方法…………………… …∴189 8.3.7其他说明… ……191 本章小结……………………………………………………………………………………191 第9章SPI(字符设备)驱动程序编写范例 9.1在应用程序中使用SPI驱动程序……………………… ………192 9.1.1建立设备文件… 192 9.1.2使用SPI的特殊注意点………………………………… 9.1.3可使用的函数 l93 9.1.4提供给应用程序的头文件……… 194 9.1.5设置SPⅠ分频值 ………195 9.1.6SPI时钟相位控制 195 9.1.7SPI时钟极性控制 196 9.1.8SP数据传输顺序控制 9.1.9开始和结束SP操作 198 9.1.10发送同时接收一字节数据 198 9.1.11写数据到SPI从器件 199 9.1.12从SP从器件读数据 199 9.2编译… 200 9.3源码分析………… 201 9.3.1初始化函数………………… 201 9.3.2清除函数 20l 9.3.3open(方法… 202 ARM嵌入式L皿x系统构建与驱动开发范例 9.3.4 release(方法… 204 9.3.5 ioctl()方法 205 9.3.6 write(方法… 209 9.3.7read(方法…… ………………………………211 9.3.8其他说明 212 不章小结………………… …………………………:212 第10章IC(宇符设备)驱动程序编写范例 10.1在应用程序中使用卩C总线驱动程序 ……213 10.1.1建立设备文仆…………………… 213 10.1.2可使用的函数…… 章香·D看香,。看 …………………………………214 10.1.3提供给应用程序的头文件… 10.1.4设置IC总线频率…………………………………………………………215 10.1.5与数据到PC从器件 ……………………215 10.1.6从IC从器件读数据… 10.2编译…………………………………………………………………………216 10.3源码分析… .······:.····:···.··;.:.······· 217 10.3.1初始化函数 21 17 10.3.2清除函数…… 10.3.3open(方法… ·普p·鲁鲁 10.3.4 release(方法 20 10.3.5IC中断处理 ……220 10.3.6 ioctl(方法… …223 10.3.7 wrlte(方法 10.3.8rad(方法 226 10.3.9其他说明… …227 木章小结 227 第11章块设备驱动程序初步 11.1几个概念…………… 228 11.1.1关于主设备号和从设备号… 11.1.2关于设备节点、节点文件和设备文件 228 1.2最简单的块设备驱动程序… ………………229 11.2.1驱动程序代码 …229 11.2.2注册初始化函数和清除函数… 23 11.2.3驱动和序的初始化函数……………………

...展开详情
img
zsmcdut
  • 签到新秀

    累计签到获取,不积跬步,无以至千里,继续坚持!

关注 私信 TA的资源

上传资源赚积分,得勋章
最新资源