• 1.摘要
  • 2.基本信息
  • 3.基本介绍
  • 3.1.内容简介
  • 3.2.作者简介
  • 4.图书目录

从ARM9到Linux系统设计与开发直通

赵健雄著书籍

本书由浅入深、全面、系统地介绍了ARM技术与嵌入式Linux的系统设计与开发。全书共18章,讲解了ARM微处理器的片上资源、ARM的指令集、Windows的最常用的嵌入式集成开发环境ADS、上位机嵌入式系统的构建、Boot-Loader的介绍和使用、对Linux内核的移植、嵌入式文件系统移植、Linux的多任务程序开发、设备的驱动开发等内容。书中的每章都提供了大量有针对性的实例,对每个知识点也给出了较详细的解释。

基本信息

  • 书名

    从ARM9到Linux系统设计与开发直通

  • 作者

    赵健雄

  • 出版社

    电子工业出版社

  • 出版日期

    2014年8月1日

  • 页数

    572页

基本介绍

内容简介

1.结构合理,内容全面、系统 本书详细介绍了嵌入式ARM处理器及嵌入式Linux操作系统的相关理论知识,为广大读者提供了一个良好的参考平台。在内容安排上,本书根据读者的学习习惯和内容的梯度进行了合理安排,更加适合读者学习。 2.叙述翔实,例程经典 本书的例程虽然不是很多,但是每个例子都经过精挑细选,有很强的针对性,对于相应的理论有着全面的实践反映。书中的代码非常简洁和高效,便于读者学习和调试。读者也可以直接重用这些代码来解决自己的问题。 3.语言通俗,图文并茂 本书使用了通俗易懂的语言为大家进行详细的描述,即使是初学者也不会有什么困难。同时,书中采用了图文并茂的方式,使内容更加生动。读者还可以亲身实践操作。

作者简介

赵健雄,擅长上位机编程(Linux系统下网络编程)、嵌入式项目开发、MOSFET IC设计,具有丰富的设计经验,参与过电信基站参数采集仪,光纤传感通信(桥梁监测),Cortex-A8系统定制、LDO芯片设计等重大项目。

图书目录

第1篇ARM微处理器讲解篇 第1章走进嵌入式系统世界1 1.1让我们一起来认识嵌入式系统1 1.1.1嵌入式硬件系统的发展进程2 1.1.2嵌入式系统的发展趋势3 1.1.3嵌入式系统的主要特征4 1.2嵌入式处理器的简单概述6 1.2.1嵌入式微处理器简介6 1.2.2嵌入式微控制器简介7 1.2.3数字信号处理器(DSP)简介7 1.2.4嵌入式片上系统(SoC)简介8 1.3嵌入式软件系统的简单概述9 1.3.1嵌入式软件系统简介9 1.3.2嵌入式软件开发简介10 1.4嵌入式目标平台的介绍11 1.4.1嵌入式硬件平台简介11 1.4.2如何构建嵌入式系统开发平台12 1.4.3如何向嵌入式硬件平台上烧写映像14 1.5本章小结17 第2章ARM体系微处理器的基础介绍18 2.1ARM体系微处理器简介18 2.2ARM体系微处理器的类型18 2.3实际项目中对ARM微处理器的选择21 2.3.1ARM微处理器应用方案的成熟度考虑21 2.3.2ARM内核的选择21 2.3.3ARM微处理器的性能考虑22 2.3.4ARM微处理器的片内资源考虑22 2.4ARM微处理器的工作体系22 2.4.1工作模式介绍23 2.4.2寄存器体系23 2.4.3指令体系24 2.5ARM微处理器的基础架构介绍24 2.5.1计算机体系结构的介绍25 2.5.2ARM微处理器的技术特征26 2.6本章小结29 第3章S3C2410的内部结构及外围电路30 3.1S3C2410整体资源简介30 3.1.1性能介绍30 3.1.2资源模块介绍31 3.1.3内部结构31 3.1.4五大体系结构34 3.1.5存储系统34 3.2S3C2410内部资源功能介绍38 3.2.1时钟与电源管理38 3.2.2中断控制器41 3.2.3LCD控制器42 3.2.4NandFlash控制器43 3.2.5UART控制器44 3.2.6DMA控制器44 3.2.7TIMER控制器44 3.2.8I/O接口45 3.2.9RTC控制器46 3.2.10触摸控制器46 3.2.11IIC控制器47 3.2.12IIS控制器47 3.2.13看门狗定时器47 3.2.14USB控制器47 3.2.15SPI接口48 3.2.16SD接口48 3.2.17ADC控制器49 3.3S3C2410微处理器的外围电路设计49 3.3.1时钟电路50 3.3.2复位电路50 3.3.3启动电路51 3.3.4电源电路51 3.3.5Flash电路52 3.3.6SDRAM电路54 3.3.7UART电路57 3.3.8IrDA电路58 3.3.9USB电路58 3.3.10以太网电路59 3.3.11音频电路61 3.3.12SD/MMC电路62 3.3.13LCD电路62 3.4本章小结63 第4章ARM微处理器的寻址方式及指令集介绍64 4.1ARM指令集概述及寻址方式64 4.1.1指令结构简介64 4.1.2指令分类65 4.1.3指令格式与条件域66 4.1.4寻址方式67 4.2ARM微处理器的指令集介绍73 4.2.1跳转指令73 4.2.2数据处理指令74 4.2.3乘法指令与乘加指令79 4.2.4程序状态寄存器访问指令81 4.2.5加载/存储指令82 4.2.6批量数据加载/存储指令84 4.2.7数据交换指令85 4.2.8移位指令86 4.2.9协处理器指令87 4.2.10异常产生指令89 4.3本章小结90 第5章ADS集成开发环境的应用基础91 5.1ADS1.2集成开发环境简介91 5.1.1ADS软件中的ARM运行时库92 5.1.2CodeWarrior集成开发环境介绍93 5.1.3ADS集成开发软件的调试器介绍94 5.1.4ADS集成开发环境中的实用工具94 5.2ADS软件的命令行下的开发方式95 5.2.1ADS软件中的命令行工具介绍95 5.2.2编译器与链接器的使用97 5.3ADS软件的图形界面下的开发方式100 5.3.1如何创建ADS工程100 5.3.2工程源代码的编写实现104 5.3.3对工程进行编译和链接操作106 5.4使用AXD调试工具进行代码调试110 5.4.1AXD软件加载可执行文件110 5.4.2AXD软件中运行映像文件110 5.4.3代码调试时添加断点110 5.4.4代码调试时的存储器操作111 5.4.5代码调试时的寄存器操作111 5.4.6代码调试时的变量操作112 5.5本章小结112 第6章基于ADS平台的实验开发113 6.1汇编之LED灯实验113 6.2HelloWorld之串口实验115 6.2.1S3C2410的UART介绍115 6.2.2UART的数据发送操作115 6.2.3UART的数据接收操作115 6.2.4UART的波特率发生器116 6.2.5UART与PC通信编程实现116 6.3外部中断编程操作118 6.3.1中断响应过程和返回过程118 6.3.2外部中断编程实现118 6.4看门狗测试代码的编写120 6.4.1看门狗的工作原理120 6.4.2S3C2410微处理器的看门狗121 6.4.3S3C2410微处理器的看门狗编程实现121 6.5利用定时器产生PWM编程实验123 6.6S3C2410微处理器的启动代码实验124 6.7S3C2410微处理器的RTC编程实验134 6.7.1RTC的简单介绍134 6.7.2RTC的相关功能134 6.7.3RTC编程实现135 6.8S3C2410微处理器的IIC总线实验136 6.8.1IIC总线实现原理137 6.8.2IIC总线编程实现137 6.9NorFlash驱动编程实现140 6.9.1SST39VF160的操作原理141 6.9.2SST39VF160编程实现143 6.10NandFlash驱动编程实现145 6.10.1K9F1208U0M的指令145 6.10.2K9F1208U0M的工作原理145 6.10.3NandFlash编程实现146 6.11本章小结149 第2篇嵌入式Linux系统讲解篇 第7章嵌入式操作系统的整体介绍150 7.1嵌入式操作系统简介150 7.1.1嵌入式操作系统的发展阶段150 7.1.2嵌入式操作系统的优势151 7.1.3嵌入式操作系统的分类151 7.2常见的嵌入式操作系统152 7.2.1VxWorks嵌入式操作系统152 7.2.2pSOS嵌入式操作系统153 7.2.3PalmOS嵌入式操作系统153 7.2.4QNX嵌入式操作系统154 7.2.5WindowsCE嵌入式操作系统154 7.2.6uC/OS—II嵌入式操作系统155 7.2.7Linux嵌入式操作系统155 7.3嵌入式操作系统的结构157 7.4嵌入式操作系统的功能158 7.4.1进程管理功能158 7.4.2内存管理功能160 7.4.3文件管理功能162 7.4.4设备管理功能163 7.5本章小结164 第8章走进Linux操作系统165 8.1Ubuntu操作系统的安装165 8.1.1Ubuntu系统的简介165 8.1.2虚拟机向导的配置165 8.1.3Ubuntu系统的安装169 8.2Ubuntu操作系统的相关操作命令172 8.2.1Ubuntu系统的root用户172 8.2.2Ubuntu系统的常用命令173 8.3本章小结203 第9章Linux系统中构建交叉开发环境204 9.1交叉开发环境简介204 9.1.1交叉开发环境模型204 9.1.2上位机与下位机的连接方式205 9.2交叉开发环境的搭建207 9.2.1Linux系统的网络配置207 9.2.2关于apt—get工具软件的介绍209 9.2.3Minicom的安装与配置209 9.2.4FTP服务的安装、配置与启动213 9.2.5SSH服务的安装、配置与启动213 9.2.6NFS服务的安装、配置与启动214 9.2.7交叉工具链的安装与配置215 9.3Windows系统的实用软件介绍220 9.3.1远程登录Linux系统工具SecureCRT220 9.3.2Windows与Linux之间的文件传输软件CuteFTP222 9.3.3Windows系统的代码阅读/编辑工具SI223 9.3.4Windows系统的TFTP服务器软件TFTP32226 9.3.5Windows系统的DNW软件226 9.4Linux系统的实用软件介绍228 9.4.1VI编辑器228 9.4.2gedit编辑器230 9.4.3Eclipse软件的安装230 9.4.4EclipseCDT开发C程序232 9.5本章小结234 第10章Linux系统的裸机程序开发235 10.1Linux系统的裸机程序开发简介235 10.1.1代码的编译方式235 10.1.2make工程管理器简介235 10.2Linux系统的编译器236 10.2.1gcc与arm—linux—gcc简介236 10.2.2gcc工具的实例操作237 10.2.3gcc工具的编译细节分析240 10.2.4arm—linux—gcc及相关工具的应用241 10.3Makefile工程文件的应用246 10.3.1Makefile文件的简单介绍246 10.3.2如何编写Makefile文件247 10.3.3如何执行Makefile文件250 10.4Linux系统的裸机程序开发示例251 10.5本章小结257 第11章Bootloader的移植258 11.1Bootloader的简单介绍258 11.1.1Bootloader的认识258 11.1.2Bootloader的通信方式259 11.1.3Bootloader的结构介绍259 11.1.4常见的Bootloader267 11.2Vivi进行Linux引导267 11.2.1Vivi的结构介绍268 11.2.2Vivi的工作流程269 11.2.3Vivi的移植操作280 11.2.4Vivi的常用操作命令284 11.3U—Boot源代码分析与移植操作286 11.3.1U—Boot的特性介绍286 11.3.2U—Boot的源代码结构分析287 11.3.3U—Boot的启动过程288 11.3.4U—Boot的移植295 11.3.5U—Boot的编译操作308 11.3.6U—Boot的命令操作312 11.4本章小结315 第12章Linux内核的裁剪与移植316 12.1Linux内核的版本号与内核结构316 12.1.1Linux内核的版本号316 12.1.2Linux内核结构317 12.2Linux2.6内核的特点318 12.3Linux2.6内核的源代码结构318 12.3.1Linux源代码的准备工作319 12.3.2Linux源代码结构的分析319 12.3.3Linux源代码中的Makefile文件320 12.4Linux2.6内核的移植328 12.4.1Linux内核的启动过程329 12.4.2Linux内核启动代码的分析330 12.4.3Linux内核源代码的修改342 12.4.4Linux内核的配置346 12.4.5Linux内核的编译、烧写与启动357 12.5YAFFS文件系统的移植358 12.6本章小结361 第13章Linux内核调试技术的实现362 13.1内核态下的打印函数printk()362 13.1.1printk()函数的简介及使用方法362 13.1.2printk()函数的源代码分析364 13.1.3控制台的相关源代码分析367 13.1.4命令行参数368 13.2利用printk()打印信息调试内核369 13.3利用Linux的/proc文件系统调试内核371 13.4利用Oops消息调试内核375 13.4.1Oops消息的内容375 13.4.2栈回溯信息的直观显示376 13.4.3对Linux内核进行调试377 13.4.4Oops消息中的栈信息分析380 13.5利用KGDB远程调试内核382 13.5.1KGDB的介绍382 13.5.2向内核中增加KGDB调试器384 13.5.3在开发机上利用DDD与GDB调试内核388 13.6本章小结391 第14章Linux系统的文件系统392 14.1Nand/NorFlash存储设备392 14.1.1NandFlash存储设备392 14.1.2NorFlash存储设备394 14.1.3NandFlash和NorFlash的区别394 14.1.4MTD技术简介395 14.2Linux系统的文件系统概述及分类395 14.2.1文件系统概述396 14.2.2文件系统分类396 14.3Linux系统的根文件系统406 14.3.1根文件系统的目录结构概述406 14.3.2文件属性分析411 14.4Busybox的移植操作413 14.4.1Busybox的简单概述413 14.4.2内核和Busybox的init进程413 14.4.3Busybox的配置417 14.4.4Busybox的编译与安装422 14.5构建Linux系统的根文件系统422 14.5.1glibc库文件的安装423 14.5.2完善根文件系统的构建423 14.5.3根文件系统其他目录的构建426 14.5.4YAFFS文件系统的制作426 14.5.5JFFS2文件系统的制作430 14.6本章小结431 第15章Linux系统的系统管理432 15.1存储系统管理432 15.1.1进程的虚拟内存空间432 15.1.2虚拟内存空间的映射与地址转换实现434 15.1.3虚拟内存空间的管理方式与Zone区域435 15.1.4分配/回收内存页面与slab分配器438 15.1.5申请/释放虚拟内存438 15.2中断与系统调用439 15.2.1中断与系统调用概述440 15.2.2tasklet机制的介绍441 15.2.3系统调用机制的实现447 15.2.4fork()系统调用介绍449 15.3文件系统管理451 15.3.1文件与目录简单概述452 15.3.2虚拟文件系统453 15.3.3VFS的4个主要数据结构454 15.4设备管理463 15.4.1设备与设备的管理功能463 15.4.2I/O设备管理464 15.5本章小结470 第16章Linux系统的Shell编程实现471 16.1Linux系统的Shell编程规则简介471 16.2Linux系统的Shell编程实现472 16.2.1Shell程序中的变量赋值和引用472 16.2.2Shell程序中的键盘输入实现474 16.2.3使用VI编辑器编写Shell脚本476 16.2.4如何修改脚本文件的访问权限477 16.2.5Shell脚本程序的执行方式477 16.3Shell脚本程序中的参数及函数478 16.3.1位置参数478 16.3.2内部参数479 16.3.3特殊符号480 16.3.4帮助命令481 16.4Shell脚本程序中的表达式482 16.4.1字符串操作符483 16.4.2数字的比较484 16.4.3逻辑操作符484 16.4.4文件操作符485 16.5Shell脚本程序中的循环结构486 16.5.1for循环语句的使用486 16.5.2while循环语句的使用487 16.5.3until循环语句的使用488 16.6Shell脚本程序中的条件结构488 16.6.1if条件语句的使用488 16.6.2case条件语句的使用489 16.7Shell程序中函数与脚本的调用490 16.7.1函数的编写与调用490 16.7.2脚本的调用491 16.8本章小结491 第3篇Linux系统的实验篇 第17章Linux系统的设备驱动开发基础492 17.1Linux系统的驱动程序概述492 17.1.1驱动程序的调用关系492 17.1.2驱动程序的分类及作用493 17.1.3硬件设备的识别与驱动代码的开发流程494 17.1.4硬件设备的控制方式495 17.2Linux系统的硬件设备驱动开发流程及示例495 17.2.1构建一个简单的驱动代码模块495 17.2.2虚拟字符设备驱动的测试498 17.2.3LED驱动开发504 17.3Linux系统的硬件设备驱动开发相关技术510 17.3.1并发控制原理510 17.3.2并发控制的相关函数510 17.3.3并发控制示例513 17.3.4设备驱动程序中的阻塞与非阻塞516 17.3.5设备驱动程序中的poll函数应用520 17.3.6设备驱动程序中的中断处理应用522 17.3.7设备驱动代码中关于内存与I/O操作的应用524 17.4Linux系统的块设备的驱动程序编写529 17.4.1块设备的I/O操作529 17.4.2与块设备相关的结构体及函数530 17.4.3块设备驱动代码编写的相关技术535 17.5本章小结541 第18章Linux系统的硬件设备驱动编写实验542 18.1按键设备的驱动开发542 18.2虚拟块设备的驱动开发550 18.3网口设备的驱动开发560 18.4LCD设备的驱动开发565 18.5SD卡设备的驱动开发568 18.6USB设备的驱动开发570 18.7本章小结572