内容简介
《ARM Linux 入门与实践:基于TI AM335x 处理器》可以算是《ARM Linux入门与实践——一个嵌入式爱好者的自学体验》的姊妹篇,但因将三星ARM9处理器S3C2410改成了TI的Cortex—A8处理器AM335x,所以除保留了前一《ARM Linux 入门与实践:基于TI AM335x 处理器》的思路及少部分章节外,大部分的内容都做了修改。
《ARM Linux 入门与实践:基于TI AM335x 处理器》分为三篇:ARM硬件、ARM前后台系统、基于Linux系统的应用。第一篇ARM硬件,包括TI官方评估板ARM335x Starter Kit的硬件分析和评估板入门指南;第二篇ARM前后台系统,包括TI官方无操作系统平台下的应用库——Starterware开发环境搭建及应用分析、启动代码分析、Boot源代码分析、LCD和触摸屏源代码分析、前后台系统应用等;第三篇Linux系统的应用,包括基于PC的操作、应用编程和驱动、嵌入式Linux开发环境创建、嵌入式Linux驱动开发和网络编程等。
作者简介
程昌南,网名阿南,2000年开始自学单片机,2003年获得全国大学生电子竞赛全国一等奖,2004年大学毕业即开始从事基于ARMLinux等嵌入式软件、硬件技术的产品开发,熟悉51系列、STM32等单片机,三星、NXP和海思系列的ARM处理器,从事过音视频传输控制、车载GPS、无人机和机器人等多个行业,著有《ARMLinux入门与实践——一个嵌入式爱好者的自学体验》、《ARMCortex—A8硬件设计DIY》。
内页插图
目录
第一篇 ARM硬件
第1章 概述
1.1 嵌入式系统、单片机、ARM及Linux
1.2 ARM处理器的选择
1.3 AM335x简介和公版资源
1.4 AM335x官方开发资源
1.4.1 硬件开发板
1.4.2 软件开发包
1.5 ARM开发工具及调试方法
1.5.1 集成开发环境
1.5.2 硬件仿真器
1.5.3 前后台系统的调试方法
1.5.4 嵌入式Linux的开发调试方法
1.6 “实践再实践”在ARM学习中的意义
第2章 AM335x Starter Kit实验平台硬件分析
2.1 AM335x Starter Kit实验平台概述及功能组成
2.2 地址空间分配
2.2.1 AM335x处理器内存映射
2.2.2 AM335x Starter Kit平台地址空间分配
2.3 常用元件概述
2.3.1 电阻标称值
2.3.2 肖特基二极管
2.3.3 功率电感
2.3.4 铁氧体磁珠
2.3.5 自恢复保险丝PPTC
2.3.6 有源和无源蜂鸣器
2.4 AM335x Starter Kit(TMDSSK3358)原理图分析
2.4.1 MPU AM3358
2.4.2 时钟电路
2.4.3 上电引导模式配置
2.4.4 JTAG接口电路
2.4.5 霺D卡接口
2.4.6 DDR3 SDRAM存储器
2.4.7 调试串口
2.4.8 以太网接口
2.4.9 按键GPIO
2.4.1 0LED显示
2.4.1 1IIC总线的EEROM存储器
2.4.1 2复位电路
2.4.1 3按键中断输入
2.4.1 4电源输入及PMIC电源管理芯片
2.4.1 5Wi-Fi和蓝牙模块
2.4.1 6USB Host/Device
2.4.1 7IIS音频电路
2.4.1 8LCD显示
第3章 AM335x Starter Kit入门
3.1 A.M335x Starter Kit快速入门指南
3.2 硬件调试概述
3.3 XDS100v2仿真器和ccs软件的使用
3.3.1 集成开发环境CCS的下载与安装
3.3.2 仿真器与目标板的硬件安装
3.3.3 XDS100v2 USB仿真器在CCSv6集成开发环境中的配置
……
第二篇 ARM前后台系统
第三篇 基于Linux系统的应用
前言/序言
1.ARM和Linux的学习体会
如何才能学好并尽快上手ARM和Linux?这是很多初学者想问的,也是曾经在网上热烈讨论过的。其实学习没有捷径,不管您是否特别聪明,主要还是取决于您的态度和一定的方法,嵌入式ARM和Linux的学习也一样。在此笔者想根据自己在自学ARM与I.inux过程中的体会并结合网上的讨论做一下总结。
对于ARM的学习,如果您已经有了单片机或计算机结构的基本知识,并且也有了C语言的基础,那么上手还是比较容易的。首先,应该了解一下ARM的体系结构,它有哪些版本,哪些模式,哪些寄存器、异常等,这方面的内容可以参考《ARM体系结构与编程》一书。这本书介绍的内容还是比较全面的,可以先快速地浏览,特别是汇编指令不需要记住,以后应用时再查。其实很多内容笔者也早已经忘记,但并不妨碍正常理解和应用ARM。其次,选定一种具体厂家型号的ARM处理器,学习该处理器相关开发工具的使用,如开发环境、仿真器及评估板等。然后,可以分析该处理器的外围扩展方法,如SDRAM、NANDFlash、NORFlash、SD卡等,一般官方或第三方都会提供原理图,可以尝试分析原理图。接着,要理解该处理器的启动过程,尝试从一块裸板逐步运行自己的应用程序,也可以参考官方的启动代码及例程。最后,就可以调试、测试该处理器的各种外围部件,如定时器PWM、串口、LCD等,特别是中断及执行过程。
对于Linux的学习,尽管我们最终应用的是嵌入式Linux,但还是要先在PC下学习,原因是,无论基于PC还是嵌入式处理器,其Linux开发、编程、调试等都是相近的,而PC的性能、资源等都更加丰富,嵌入式Linux的开发环境通常也都建立在PC的Linux环境下,同时有大量Linux的相关专著、编程书籍等都是针对PC编写的。至于学习的顺序,笔者觉得应该先在PC上安装一种常用的Linux发行版系统(以前是RedHat.现在常用Ubuntu),再买一两本相应的入门书籍,熟悉一下Linux环境,学习常用的命令和操作(不一定多,基本、常用的就可以,以后在使用过程中再慢慢积累),理解Linux下的目录结构与作用等。其次,学习在Linux环境下编程,《GNU/Linux编程指南》或《UNIX环境高级编程》都可以,它们都是非常经典的专著,对文件描述符的概念,打开、读、写等操作的系列基础知识都有介绍,如果没有这些基础而直接看《Linux设备驱动程序》会觉得困难。再次,拿本内核的书翻翻,了解一下Linux内核源代码树的目录结构、编译等。最后,学习《Linux设备驱动程序》,理解驱动程序的结构框架等。根据实际需要,读者也可学习网络编程和图形用户界面GUI编程,比较权威的书是《UNIX网络编程》和《C++GUIQT4编程》;另外由于QTGUI是基于C++的,所以需要学习C++的知识,可参考《C++程序设计教程》一书。如果不想学C++,也可以选择其他如MicroWindows、MiniGUI等。有了PC的Linux基础及编程知识后,就可以直接应用于嵌入式系统了!此时需要一个硬件平台(如开发板或直接的产品等目标系统)和该平台的开发环境。开发环境,一般的处理器原厂或第三方都会提供,所以不需要移植。它包括建立在PC宿主机上的编译等工具和嵌入式Linux内核(包括硬件BSP等驱动)源码。此时只需学习开发环境的建立和使用,并将PC所学的知识应用于具体的嵌入式平台。如果涉及硬件及驱动,那么应该具备一定的硬件调试和解决问题的能力,此时单片机、ARM基础知识及外围设备接口的调试能力将起到很重要的作用。很多朋友(包括非电子、自动化专业的朋友)都希望自己将来能从事Linux驱动方面的工作,认为学习了Linux驱动方面的知识就行了,而往往忽略硬件本身的调试和解决问题的能力,我觉得这是不正确的。因为Linux驱动与前后台控制硬件外设的区别只在于它与应用程序的接口,它要按照一定的结构和规则去驱动,这种规则涉及的也就是通常讲的Linux的驱动知识和技术。它是固定的,容易掌握的,只要去遵循就不会出问题。而硬件及外设是千变万化的,所涉及的技术是多方面的,除处理器本身外,还有各种接口及协议,数字、模拟技术等,在设计、调试时是很容易出现问题的。此时就要求我们有一定的调试、测试手段和方法。所以笔者认为要想成为一名优秀的ARMLinux驱动工程师,首先必须是一名优秀的、具有丰富调试经验的单片机或ARM处理器应用工程师,所以希望那些想从事ARMLinux底层驱动相关工作的朋友在还没有机会接触ARM和Linux时,不要对目前的单片机工作产生抵触情绪,因为如果没有一个扎实的单片机基础和调试能力,即使有一个ARM和Linux的工作机会,您也很难成为这方面最优秀的工程师。
深入探索嵌入式世界的钥匙:ARM Linux 开发的奇妙旅程 在这个日新月异的技术时代,嵌入式系统已渗透到我们生活的方方面面,从智能家居到工业自动化,从医疗设备到物联网应用,其身影无处不在。而ARM架构作为嵌入式处理器的主流选择,更是为无数创新产品提供了强大的算力支撑。在ARM处理器飞速发展的浪潮中,Linux操作系统的开放性、灵活性和强大的生态系统,使其成为嵌入式开发的首选平台。本书正是为那些渴望踏入ARM Linux嵌入式开发领域,或是希望在现有基础上深入实践的开发者量身打造的一本深度指南。 本书并非简单堆砌枯燥的理论知识,而是致力于为您构建一套系统、全面且极具实践性的学习路径。我们将从最基础的概念入手,循序渐进地引导您理解ARM架构的精髓,掌握Linux操作系统的核心机制,并最终将两者完美结合,在实际的嵌入式开发项目中挥洒自如。我们深知,理论的理解是基础,而实践的经验则是通往精通的桥梁。因此,本书将花费大量篇幅,通过精心设计的实验、详实的代码示例以及贴近实际的项目开发流程,让您在动手中学习,在实践中成长。 一、 奠定坚实基础:ARM架构与Linux操作系统的深度解析 在正式开启ARM Linux开发之旅前,我们有必要为您的知识体系打下坚实的基础。本书将首先带您深入理解ARM处理器的核心架构。您将学习到ARM指令集的特点,不同ARM内核(如Cortex-A系列)的优势与应用场景,以及CPU的工作模式、中断机制、内存管理单元(MMU)的工作原理等关键概念。我们不会回避复杂的细节,而是力求用清晰易懂的语言和生动的比喻,将这些看似抽象的概念具象化,让您真正理解ARM处理器为何成为嵌入式领域不可或缺的力量。 紧接着,我们将聚焦于Linux操作系统。您将了解Linux内核的整体架构,包括进程管理、内存管理、文件系统、设备驱动模型以及系统调用等核心组件。我们将剖析Linux的引导过程,从BIOS/UEFI到Bootloader,再到内核的加载与初始化,让您对操作系统的生命周期有一个完整的认识。同时,我们还将探讨Linux的文件系统层次结构,理解用户空间与内核空间的概念,以及如何利用Linux提供的丰富工具链进行开发和调试。 二、 开启嵌入式开发之旅:从交叉编译到嵌入式Linux的构建 掌握了ARM架构和Linux操作系统的基础知识后,我们将正式进入嵌入式Linux开发的实操阶段。首先,交叉编译环境的搭建是嵌入式开发的第一步,也是至关重要的一步。本书将详细指导您如何配置和使用交叉编译工具链,包括GCC、Binutils等,并讲解交叉编译的工作原理,让您能够针对目标ARM硬件生成可执行程序。 随后,我们将引导您构建属于您自己的嵌入式Linux系统。这并非简单的安装现成系统,而是从源码开始,一步步定制和裁剪,以适应您的特定嵌入式设备的需求。您将学习使用Buildroot或Yocto Project等强大的构建系统,理解其工作流程,掌握如何选择和配置软件包,以及如何生成根文件系统、内核镜像和Bootloader。通过这一过程,您将深刻理解嵌入式Linux系统的组成与构建原理,为日后的系统移植和优化打下坚实基础。 三、 深入核心:设备驱动开发与系统调优 在嵌入式系统中,设备驱动的开发是连接硬件与软件的关键环节。本书将重点讲解Linux设备驱动模型,包括字符设备、块设备和网络设备的驱动开发流程。您将学习如何编写Linux内核模块,理解设备树(Device Tree)的作用与编写方法,掌握常用的Linux设备驱动API,并学习如何使用`ioctl`、`read`、`write`等系统调用与驱动程序交互。通过大量的代码示例,您将亲手实现对GPIO、UART、SPI、I2C等常用外设的控制,从而真正掌握驱动开发的艺术。 除了驱动开发,系统调优也是提升嵌入式系统性能和稳定性的重要手段。本书将介绍Linux系统性能分析的常用工具,如`top`、`vmstat`、`iostat`等,并讲解如何识别系统瓶颈。您将学习如何针对CPU、内存、I/O等方面进行优化,包括内核参数的调整、文件系统的选择与优化、进程调度的策略等。此外,我们还将探讨功耗管理,教您如何在资源受限的嵌入式环境中实现低功耗设计。 四、 进阶实践:网络通信、文件系统与多媒体应用 嵌入式系统往往需要与其他设备或网络进行通信。本书将详细讲解嵌入式Linux的网络编程。您将学习Socket编程的基本原理,掌握TCP/IP协议栈的使用,并通过实例学习如何实现客户端/服务器通信、HTTP通信等。您还将了解嵌入式设备上常用的网络协议,如MQTT、CoAP等,并学习如何在Linux环境下实现这些协议。 文件系统在嵌入式系统中扮演着至关重要的角色。本书将深入探讨嵌入式Linux常用的文件系统,如JFFS2、UBIFS、ext4等,分析它们的特点、优缺点以及适用场景。您将学习如何对文件系统进行格式化、挂载和管理,并了解文件系统的日志机制和磨损均衡技术,以确保数据的可靠性和闪存的使用寿命。 随着嵌入式设备功能的日益丰富,多媒体应用的开发也变得越来越重要。本书将为您揭示嵌入式Linux下的多媒体框架,如GStreamer。您将学习如何使用GStreamer来处理音频和视频数据,实现播放、录制、转码等功能。通过实际项目,您将了解如何在嵌入式设备上构建摄像头应用、音频播放器等,为您的项目增添更多交互性和用户体验。 五、 实际项目开发:从构思到实现的全过程指导 理论学习固然重要,但将知识转化为实际能力,离不开真实的开发项目。本书的最终目标是引导您完成一系列具有代表性的嵌入式Linux开发项目。这些项目将覆盖本书讲解的各项知识点,从基础的LED闪烁、按键控制,到稍复杂的网络通信、传感器数据采集,再到最终的多媒体应用开发,每一个项目都将为您提供清晰的需求分析、详细的设计方案、完整的代码实现以及严谨的测试验证。 我们鼓励您在学习过程中,将书中的示例进行修改和扩展,尝试解决实际遇到的问题,并通过论坛、社区等渠道与开发者交流。我们相信,通过这一系列的实践项目,您将积累宝贵的实战经验,能够独立完成复杂的嵌入式Linux开发任务,并为未来的职业发展打下坚实的基础。 本书的价值所在: 系统性与全面性: 从基础理论到高级实践,覆盖ARM Linux开发的全流程。 实践导向: 大量代码示例、实验和项目,强调“在实践中学习”。 深度解析: 深入剖析ARM架构和Linux内核原理,知其然更知其所以然。 前沿技术: 关注Buildroot、Yocto Project、Device Tree等当前主流的嵌入式开发技术。 实战项目: 提供一系列具有代表性的项目,帮助读者巩固和提升技能。 易于理解: 采用清晰的语言和生动的比喻,化繁为简,让复杂的技术变得易于掌握。 本书的目标是成为您在ARM Linux嵌入式开发道路上最忠实、最得力的伙伴。无论您是初学者,还是有一定基础的开发者,都能从本书中获益。让我们一起踏上这场精彩纷呈的嵌入式开发之旅,用ARM Linux创造更多可能!