深入浅出:嵌入式底层软体开发


深入浅出:嵌入式底层软体开发

文章插图
深入浅出:嵌入式底层软体开发【深入浅出:嵌入式底层软体开发】《深入浅出:嵌入式底层软体开发》是2011年6月1日北京航空航天大学出版社出版的图书,作者是杨铸 。
基本介绍书名:深入浅出:嵌入式底层软体开发
作者:杨铸
ISBN:9787512403826
类别:图书
页数:654
定价:79.00元
出版社: 北京航空航天大学出版社
出版时间:2011年6月1日
开本:16开
内容简介第1篇(第1~3章)以ARMCPU及其彙编语言为背景,深入浅出地讲解软体是如何控制硬体的 。第2篇(第4~7章)以S3C2440开发板为硬体,讲解製作嵌入式Linux系统的完整过程,具有很强的实用性和可操作性 。第3篇(第8~11章)以儘可能通俗的方式讲解Linux设备驱动中涉及的複杂理论,在此基础上,以驱动程式的2个接口(向下与硬体接口、向上与核心子系统接口)为突破口,由浅入深地编写和剖析了嵌入式真实典型硬体(LED灯、按键、网卡、LCD、触控萤幕)的驱动程式 。所有的驱动程式均能在实际硬体上正常运行,帮助读者揭开Linux驱动的神秘面纱 。第12章以实战的方式,深入浅出地剖析了嵌入式Linux系统中最重要的2类驱动(LCD和触控萤幕)的代码实现 。并简介了块设备驱动和usb设备驱动 。本书适合硬体工程师、软体工程师、嵌入式软体的从业人员、教授嵌入式软体开发课程的老师、意欲从事嵌入式软体开发工作的大学生阅读 。作者简介杨铸教育背景:电子科技大学通信与信息工程工学硕士;北京邮电大学工学学士 学位,专业为计算机软体 。重大经历:作为主要组织人员,组织完成了中国移动四川分公司最早的简讯系统平台的建设;早期专注于Microsoft的OS和Database的技术研究与职业培训,是微软在中国的早期MCT之一,MCP号1694198;参与完成国家863计画项目——信息安全产品演示和验证平台的子课题并与合作公司完成产品化开发—内部网路监管系统;中后期专注于嵌入式软体开发的研究与职业培训,精于ARM体系结构与嵌入式Linux 。图书目录1 第1章 ARM彙编编程基础 91.1 ARM CPU暂存器 91.1.1 普通暂存器R0 – R15 101.1.2 状态暂存器CPSR与SPSR 111.1.3 流水线对PC值的影响 131.2 基本定址方式与基本指令 151.2.1 最常见定址方式精解 151.2.2 最常见指令精解 161.3 ARM彙编伪操作 181.3.1 彙编伪操作在彙编程式中的使用範例 181.3.2 最常见彙编伪操作精解 191.3.3 彙编伪操作列表 211.4 ADS开发环境的使用 231.4.1 在ADS中进行裸机程式的编辑、编译、运行 241.4.2 在AXD中进行裸机程式调试的方法与步骤 321.5 RealView MDK开发环境的使用 401.5.1 在MDK开发环境下编写裸机程式 401.5.2 MDK调试裸机程式的方法与步骤 551.6 其他常见定址模式与常见指令 581.6.1 其他常见定址模式(基址定址、多暂存器定址、堆叠定址、暂存器移位定址、相对定址) 581.6.2 其他常见指令(访存指令、数据处理指令、乘法指令) 622 第2章 ARM编程进阶 652.1 ARM彙编伪指令 652.1.1 精解ldr伪指令 652.1.2 精解adr 672.1.3 精解adrl伪指令 682.1.4 nop伪指令 692.2 ATPCS与混合编程 702.2.1 ATPCS规则精解 702.2.2 精解C和ARM彙编程式间的相互调用 742.3 裸机硬体的控制方法与例程 762.3.1 建立真实硬体的开发和调试环境 772.3.2 软体控制(驱动)硬体的编程原理 902.3.3 裸机硬体控制程式实例 912.3.4 启动例程 962.4 看门狗定时器(Watchdog) 1022.4.1 看门狗定时器的用途 1032.4.2 看门狗工作原理 1042.4.3 看门狗实验 1062.5 系统时钟 1072.5.1 系统工作时钟频率 1072.5.2 时钟驱动实验 1122.6 SDRAM记忆体 1162.6.1 S3C2440存储器地址段(Bank) 1172.6.2 SDRAM记忆体工作原理 1192.6.3 SDRAM的读操作 1232.6.4 SDRAM预充电操作 1242.6.5 SDRAM突发操作 1242.6.6 SDRAM写操作 1252.6.7 SDRAM的刷新 1262.6.8 记忆体驱动实验 1302.7 UART串口 1342.7.1 异步通信和同步通信 1352.7.2 数据的串列和并行通信方式 1352.7.3 数据通信传输模式 1362.7.4 S3C2440 UART控制器 1372.7.5 S3C2440 UART串口工作原理 1382.7.6 UART串口驱动实验 1473 第3章 ARM体系结构 1513.1 ARM处理器工作模式 1513.1.1 ARM处理器不同模式下暂存器 1523.1.2 ARM处理器模式切换(含MRS,MSR指令) 1533.2 ARM处理器异常处理 1553.2.1 异常分类 1553.2.2 异常发生的硬体操作 1563.2.3 异常返回地址 1573.2.4 异常向量表 1583.2.5 异常处理的返回 1603.3 S3C2440系统中断 1613.3.1 中断的产生-中断源 1623.3.2 中断优先权 1643.3.3 中断控制相关暂存器 1663.3.4 系统中断流程 1693.3.5 按键控制LED灯实验 1713.4 semihosting与硬体重定向 1793.4.1 semihosting半主机调试 179 3.4.2 硬体重定向 1843.5 系统调用与软体中断SWI的实现 1903.5.1 系统调用 1903.5.2 软体中断 1913.5.3 软中断处理 1923.5.4 led系统调用实验 1933.6 进程切换的实现 1993.6.1 进程 1993.6.2 进程控制块PCB 2003.6.3 进程创建 2013.6.4 进程伫列 2013.6.5 进程调度(schedule) 2023.6.6 上下文切换 2053.7 MMU与记忆体保护的实现 2083.7.1 存储管理单元MMU 2093.7.2 Cache 2213.7.3 CP15协处理器 2233.8 实战:小型多任务作业系统miniOS的实现 2273.8.1 miniOS代码分析 2273.8.2 miniOS应用程式接口 2613.8.3 miniOS应用程式系统调用接口 2624 第4章 嵌入式Linux软体开发环境搭建 2654.1 体验嵌入式linux系统 2654.2 Linux作业系统安装 2664.2.1 在Window上安装虚拟机 2664.2.2 在虚拟机上安装Linux作业系统ubuntu9.10 2774.3 在ubuntu9.10中安装基本的开发环境 2804.4 ubuntu9.10上网路服务的安装与配置 2814.4.1 设定vmware网路 2824.4.2 安装、配置和使用ftp服务 2864.4.3 安装、配置nfs服务 2865 第5章 建构bootloader 2875.1 準备工作 2875.1.1 嵌入式Linux系统概述 2875.1.2 构建交叉编译工具链 2885.1.3 bootloader概述 2895.2 深入剖析U-boot代码 2935.2.1 安装和使用原始码阅读工具Source Insight 2935.2.2 u-boot的编译初步 2955.2.3 分析u-boot的第1阶段代码(cpu/arm920t/start.S) 2975.2.4 分析u-boot的第2阶段代码 3015.2.5 继续移植、编译u-boot 3035.2.6 u-boot常用命令使用简介 3075.2.7 u-boot命令实现框架的分析 3105.2.8 u-boot引导Linux作业系统的过程分析 3155.2.9 让u-boot支持从usb slave接口获得数据 320 6 第6章 建构嵌入式Linux核心 3226.1 Linux核心简介 3226.1.1 Linux核心版本历史 3226.1.2 核心源码目录结构 3226.1.3 Linux核心构造系统简介 3236.2 移植、裁减及配置Linux核心到s3c2440开发板 3246.2.1 体验Linux核心配置、编译与使用 3246.2.2 为S3C2440移植核心 3276.2.3 配置并裁减核心 3286.2.4 运行核心并验证核心被配置的功能 3316.3 核心Kconfig与Makefile档案分析 3336.3.1 核心构造系统简介 3336.3.2 Kconfig档案精解 3336.3.3 .config档案说明 3356.3.4 Makefile档案精解 3356.3.5 实战:修改Kconfig和Makefile,完成向核心中添加新的功能组件——网卡、音效卡、LCD、触控萤幕驱动 3367 第7章 建构嵌入式Linux档案系统 3457.1 嵌入式Linux档案系统简介 3457.1.1 嵌入式档案系统概述 3457.1.2 MTD设备与Flash档案系统简介 3467.1.3 嵌入式Linux系统中的tmpfs档案系统 3477.2 详解製作根档案系统 3497.2.1 FHS标準介绍 3497.2.2 编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 3507.2.3 利用交叉编译工具链,构建/lib目录 3517.2.4 手工构建/etc目录 3537.2.5 手工构建最简化的/dev目录 3547.2.6 使用启动脚本完成/proc、/sys、/dev、/tmp、/var等目录的完整构建 3557.2.7 製作根档案系统的jffs2映像档案 3597.3 建构嵌入式Linux应用程式系统 3607.3.1 辅助处理工具的移植 3607.3.2 mp3播放器 madplay的移植 3637.3.3 主要网路伺服器的移植与使用 3667.3.4 资料库程式的移植与使用 3717.4 建构GUI系统 3747.4.1 移植tslib库 3747.4.2 移植qtopia 3758 第8章 Linux驱动程式开发基础 3788.1 Linux设备驱动程式简介 3788.1.1 设备驱动分类和核心模组 3798.1.2 设备档案和设备驱动 3808.1.3 核心模组的编译和使用 381 8.2 字元设备驱动基本编程 3888.2.1 字元设备驱动体验 3888.2.2 实现字元设备驱动的工作 3888.3 驱动程式中的并发控制方法 4018.3.1 并发控制原理简介 4018.3.2 信号量的编程实战 4028.3.3 自旋锁的编程实战 4048.3.4 Linux核心提供的其他并发控制方法 4088.4 驱动程式中的阻塞与非阻塞编程 4098.4.1 体验阻塞I/O 4098.4.2 如何在驱动程式中实现阻塞I/O 4118.4.3 体验非阻塞I/O 4138.4.4 如何在驱动程式中实现非阻塞I/O 4158.5 字元设备驱动程式对一些高级特性的实现 4168.5.1 non-seekable的实现 4168.5.2 select的实现 4179 第9章 Linux字元设备驱动开发实战 4229.1 IO记忆体与硬体通信 4229.1.1 驱动中的记忆体分配 4229.1.2 使用 I/O 连线埠地址空间与硬体进行通信的核心API介绍 4239.1.3 使用 I/O 记忆体地址空间与硬体进行通信的核心API介绍 4249.1.4 通过I/O记忆体驱动硬体的实战——LED灯驱动 4259.1.5 驱动程式对ioctl的规範实现 4339.2 核心misc设备架构分析 4359.2.1 定义全局变数 4359.2.2 注册主设备号为10的misc设备 4369.2.3 导出核心API —— misc_register函式 4379.2.4 实施乾坤大挪移的misc设备open函式 4389.2.5 导出核心API —— misc_deregister函式 4409.3 watchdog驱动 4419.3.1 相关概念 4419.3.2 Watchdog硬体结构分析 4439.3.3 Watchdog驱动的初始化和卸载 4439.3.4 探测函式watchdog_probe的实现 4449.3.5 实现misc设备中对设备档案的操作 4479.3.6 Watchdog平台驱动的设备移除、挂起和恢复接口函式的实现 4509.3.7 测试watchdog驱动 4519.4 核心编码规範与风格 4529.4.1 缩进、长行、{}与空格的放 4539.4.2 变数和函式 4539.4.3 注释.macros和enums 4549.4.4 快乐使用核心提供的实现常用功能的宏 45510 第10章 Linux驱动中的中断编程 45610.1 驱动程式调测方法与技巧 45610.1.1 利用printk 456 10.1.2 详解OOP讯息 45710.1.3 利用strace 46110.1.4 利用核心内置的hacking选项 46210.1.5 其他调测方法简介 46510.2 驱动程式中的中断处理 46610.2.1 中断简述 46610.2.2 驱动程式中进行中断处理涉及到的最基本的核心API 46610.2.3 驱动程式进行中断处理的实例代码分析 46710.2.4 其他关于中断的核心API 46910.3 核心时间与核心定时器 47010.3.1 核心中如何记录时间 47010.3.2 核心定时器API 47110.3.3 核心定时器与核心时间的套用案例——按键消抖 47110.3.4 如何在核心中实现延时 47410.4 中断顶半部与底半部 47410.4.1 区分和使用中断顶半部与底半部的原因 47410.4.2 tasklet机制与编程实例 47510.4.3 workqueue机制与编程实例 47810.4.4 tasklet与workqueue的区别和不同套用环境总结 48510.5 Linux中断处理系统的架构与共享中断 48610.5.1 裸机程式中的中断编程与有作业系统下的中断编程的区别 48610.5.2 Linux中断处理系统的架构 48710.5.3 关于共享中断的说明 48710.5.4 共享中断实例 48711 第11章 Linux网路设备驱动开发实战 48911.1 网路设备驱动基础 48911.1.1 体验网卡驱动 48911.1.2 网卡驱动的基本知识——2个结构体和5个函式 48911.1.3 虚拟网卡snull驱动代码分析 49411.1.4 网卡驱动的编写主要内容总结 49911.2 网路设备驱动实例——cs8900 49911.2.1 虚拟网卡驱动与真实网卡驱动的主要区别 49911.2.2 真实网卡驱动的整体框架分析 50011.2.3 驱动中关于cs8900硬体操作的探讨 50712 第12章 其他重要设备驱动开发实战 51912.1 块设备驱动初步(以ramdisk为例) 51912.1.1 体验块设备驱动 51912.1.2 块设备驱动框架介绍 51912.1.3 块设备的简单读写实现代码分析 52212.1.4 块设备的高效读写实现代码分析 52312.1.5 块设备的其他操作接口fops 52612.2 LCD驱动 52812.2.1 LCD裸机驱动 52812.2.2 帧缓冲(FrameBuffer)设备驱动框架结构 536 12.2.3 LCD驱动实例代码 54212.2.4 LCD驱动代码的主干结构的总结 55512.2.5 测试LCD驱动程式 55612.3 触控萤幕驱动 55612.3.1 触控萤幕裸机驱动 55612.3.2 Linux输入子系统 56112.3.3 Linux下触控萤幕驱动的实现步骤 56412.3.4 测试触控萤幕驱动程式 57212.4 USB驱动初步 57212.4.1 Linux下4种USB驱动简介与功能体验 57212.4.2 USB接口与规範 57412.4.3 USB设备驱动基本知识 57512.4.4 USB设备驱动实例 578