嵌入式linux设备驱动开发详解.pdf 站在驱动开发工程师的角度,以实际开发板硬件为基础,循序渐进地讲述了嵌入式Linux驱动程序开发的方法   不但讲解了怎么做,更重要的是分析了为什么要这么做,在分析Linux内核驱动源码的基础上,提炼出Linux驱动架构模型的核心思想及实现思路   在理解整个Linux设备驱动流程和实现思路的基础上,阐述了编写设备驱动和移植设备驱动的基本思路和方法 本书详细阐述了嵌入式Linux设备驱动程序基本理论及开发方法。详细讲解了嵌入式系统的硬件体系架构,Linux系统的引导原理、启动过程,Linux设备驱动模型及基本理论,具体的硬件设备驱动程序的源码分析。在分析具体设备驱动程序源码的基础上,详细讲解了具体设备驱动程序的设计和移植方法。 目录: 第1章 嵌入式arm系统开发基础 1.1 嵌入式arm系统开发概述 1.1.1 arm系统可执行映像文件格式 1.1.2 arm开发调试工具 1.1.3 加载地址和运行地址 1.2 嵌入式arm系统的启动代码分析 1.2.1 arm上电启动概述 1.2.2 arm上电初始化启动代码分析 1.3 嵌入式arm系统的中断系统 1.3.1 arm中断机制代码分析 1.3.2 arm中断服务处理程序的响应过程 1.4 按键中断实验 第2章 嵌入式linux设备驱动程序开发环境的构建 2.1 安装虚拟机软件vmware 6.0.2 2.2 新建虚拟机 2.3 安装linux操作系统ubuntu 2.4 安装vmware tools工具软件 2.5 网络配置 2.6 设置软件源服务器 .2.7 安装libncurses5-dev软件包 2.8 安装交叉编译器arm-linux-gcc 第3章 嵌入式linux内核的裁剪与编译 3.1 嵌入式linux内核的本质 3.2 嵌入式linux内核源码的组织 3.3 嵌入式linux内核的移植与裁剪 3.4 嵌入式linux内核配置、编译的基本原理 3.5 构建嵌入式linux根文件系统 第4章 嵌入式系统bootloader代码分析与移植 4.1 嵌入式系统bootloader功能概述 4.1.1 嵌入式linux系统的软件组成及分布 4.1.2 嵌入式linux中为什么要有bootloader 4.1.3 bootloader的功能和选择 4.2 u-boot源码分析 4.2.1 u-boot源码文件的组成及配置编译 4.2.2 u-boot的执行过程及linux内核加载流程 4.2.3 start.s源码文件分析 4.2.4 board.c源码文件分析 4.3 u-boot中的环境变量 4.4 linux系统的加载过程 4.4.1 u-boot命令执行过程 4.4.2 bootm的执行流程 4.5 u-boot向linux传递参数的过程 4.6 u-boot的移植 第5章 嵌入式linux内核模块与字符设备驱动 5.1 嵌入式linux内核模块 5.1.1 嵌入式linux内核模块的概念 5.1.2 嵌入式linux内核模块编程 5.1.3 嵌入式linux内核模块的编译 5.1.4 嵌入式linux内核模块的安装与卸载 5.1.5 直接编译嵌入式linux内核模块到内核 5.2 嵌入式linux字符设备驱动 5.2.1 嵌入式linux设备驱动程序的概念 5.2.2 嵌入式linux设备管理机制 5.2.3 嵌入式linux字符设备驱动程序的主要数据结构分析 5.2.4 嵌入式linux字符设备驱动的工作原理 5.2.5 嵌入式linux字符设备驱动程序设计实例 第6章 嵌入式linux系统的内存管理 6.1 虚拟地址和物理地址概述 6.2 虚拟地址到物理地址转换的基本原理 6.3 基于arm s3c2440的gpio端口地址映射实验 6.3.1 问题描述 6.3.2 分析与思路 6.4 linux内核中内存分配和释放函数的用法 第7章 嵌入式linux设备驱动开发的核心技术 7.1 嵌入式linux中断处理和定时器 7.1.1 嵌入式linux系统中断服务程序的编写 7.1.2 嵌入式linux系统硬件定时器的使用 7.1.3 中断的下半部分 7.1.4 嵌入式linux软件定时器的使用 7.2 嵌入式linux设备驱动程序中的并发及并发控制 7.2.1 并发的概念 7.2.2 嵌入式linux设备驱动程序中的并发控制方式 7.2.3 信号量与自旋锁的使用场景 7.3 嵌入式linux设备驱动中的阻塞与非阻塞 7.3.1 概述 7.3.2 linux设备驱动程序中阻塞的工作原理 7.3.3 进程阻塞访问设备的基本原理 7.3.4 linux设备驱动程序中的阻塞编程 7.4 嵌入式linux设备驱动中的异步通知编程
2021-04-28 11:37:47 22.16MB inux
1
第一章Linux内核概述 Linux 内核是一个庞大而复杂的操作系统的核心,不过尽管庞大,但是却采用子系统和分层的概念很好地进行了组织。在本文中,您将探索 Linux 内核的总体结构,并学习一些主要的子系统和核心接口。您还可以通过其他 IBM 文章的链接更深入地进行学习。 由于本章的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先回顾一下 Linux 的简短历史,然后从较高的层次审视 Linux 内核的体系结构,最后介绍它的主要子系统。Linux 内核具有超过 600 万行的代码,因此本文不可能进行完整的介绍。请使用指向其他内容的链接进一步学习。 1.1 linux简短历史 尽管 Linux 绝对是最流行的开源操作系统,但是相对于其他操作系统的漫长历史来说,Linux 的历史非常短暂。在计算机出现早期,程序员是使用硬件语言在裸硬件上进行开发的。缺少操作系统就意味着在某个时间只有一个应用程序(和一个用户)可以使用这些庞大而又昂贵的设备。早期的操作系统是在 20 世纪 50 年代开发的,用来提供简单的开发体验。 二十年后,Andrew Tanenbaum 创建了一个微内核版本的 UNIX®,名为 MINIX(代表 minimal UNIX),它可以在小型的个人计算机上运行。这个开源操作系统在 20 世纪 90 年代激发了 Linus Torvalds 开发 Linux 的灵感(请参看图 1 所示)。 Linux 快速从一个个人项目进化成为一个全球数千人参与的开发项目。对于 Linux 来说,最为重要的决策之一是采用 GPL(GNU General Public License)。在 GPL 保护之下,Linux 内核可以防止商业使用,并且它还从 GNU 项目(Richard Stallman 开发,其源代码要比 Linux 内核大得多)的用户空间开发受益。这允许使用一些非常有用的应用程序,例如 GCC(GNU Compiler Collection)和各种 shell 支持。 1.2linux内核组成 1.2.1linux内核简介 现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。 最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。 GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。 Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。 1.2.2Linux内核属性 在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码,这正是本文的目的。 Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。每种内核都有自己的优点,不过这里并不对此进行讨论。 随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。Linux 内核的 uClinux 移植提供了对非 MMU 的支持。 1.2.3Linux内核子系统 现在使用图 3 中的分类说明 Linux 内核的主要组件。 系统调用接口 SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用
2021-03-19 11:23:22 22.16MB linux
1
嵌入式linux设备驱动开发详解 嵌入式开发资料
2021-03-18 17:07:14 19.79MB 嵌入式 linux 驱动 ARM
1
linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数范例 | | `-- book.c | |-- 内核模块导出符号 | | `-- export_symb.c | `-- 最简单的内核模块 | `-- hello.c |-- 05 | `-- udev源代码 | `-- udev-114.tar.gz |-- 06 | |-- globalmem驱动 | | `-- globalmem.c | `-- 包含2个globalmem设备的驱动 | `-- globalmem_two.c |-- 07 | `-- 含并发控制的globalmem驱动 | `-- globalmem_lock.c |-- 08 | |-- globalfifo驱动 | | `-- globalfifo.c | `-- poll应用程序范例 | `-- pollmonitor.c |-- 09 | |-- 异步通知应用程序范例 | | `-- asyncmonitor.c | `-- 支持异步通知的globalfifo | `-- globalfifo_async.c |-- 10 | |-- S3C2410实时钟驱动 | | `-- s3c2410-rtc.c | `-- 秒设备驱动与应用程序 | |-- second.c | `-- second_test.c |-- 11 | |-- DMA范例 | | |-- 3c505.c | | |-- 3c505.h | | `-- dma.h | `-- 静态映射范例 | `-- mach-smdk2440.c |-- 12 | |-- NVRAM驱动 | | `-- generic_nvram.c | |-- 触摸屏驱动 | | |-- 作为input设备 | | | |-- s3c2410_ts.c | | | `-- s3c2410_ts.h | | `-- 作为普通字符设备 | | `-- s3c2410-ts.c | |-- 看门狗驱动 | | `-- s3c2410_wdt.c | `-- 平台设备 | `-- devs.c |-- 13 | |-- IDE驱动 | | |-- ide-disk.c | | `-- ide-h8300.c | `-- RAMDISK驱动 | `-- rd.c |-- 14 | |-- S3C2410串口驱动 | | |-- regs-gpio.h | | |-- regs-serial.h | | `-- s3c2410.c | `-- 串口核心层 | |-- serial_core.c | `-- serial_core.h |-- 15 | |-- S3C2410 I2C主机驱动 | | |-- i2c-s3c2410.c | | |-- iic.h | | |-- regs-gpio.h | | `-- regs-iic.h | `-- SAA711x I2C设备驱动 | `-- saa711x.c |-- 16 | `-- CS8900以太网设备驱动 | |-- cs89x0.c | `-- cs89x0.h |-- 17 | |-- ALSA工具及库 | | |-- alsa-driver-1.0.15.tar.bz2 | | |-- alsa-firmware-1.0.15.tar.bz2 | | |-- alsa-lib-1.0.15.tar.bz2 | | |-- alsa-oss-1.0.15.tar.bz2 | | |
2019-12-21 20:27:27 25.38MB 驱动
1
随着linux内核版本不断更新,linux的驱动模型也发生很大的变化,宋老师这本书的电子档清楚详细讲解了Linux-4.0内核的驱动开发过程,希望对有需求的朋友有帮助。
2019-12-21 19:38:06 14.91MB Linux 驱动
1
畅销书vxworks设备驱动开发详解的电子版,绝对的高清pdf,带标签。若有虚言,请留言骂我,若真实,请点个赞。
2019-12-21 19:31:58 3.37MB vxworks 驱动开发
1
宋宝华_精通LINUX设备驱动开发.pdf
2013-04-22 00:00:00 10.75MB 宋宝华
1