zoukankan      html  css  js  c++  java
  • 《Linux设备驱动开发具体解释(第3版)》进展同步更新

    本博实时更新《Linux设备驱动开发具体解释(第3版)》的最新进展。 2015.2.26 差点儿完毕初稿。

    本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTEX-A9平台


    [F]是修正或升级;[N]是新增知识点;[D]是删除的内容


    第1章 《Linux设备驱动概述及开发环境构建》
    [D]删除关于LDD6410开发板的介绍
    [F]更新新的Ubuntu虚拟机
    [N]加入关于QEMU模拟vexpress板的描写叙述


    第2章 《驱动设计的硬件基础》

    [N]添加关于SoC的介绍;
    [N]添加关于eFuse的内容;
    [D]删除ISA总线的内容了;
    [N]添加关于SPI总线的介绍;
    [N]添加USB 3.0的介绍;
    [F]修正USB同步传输方式英文名;
    [D]删除关于cPCI介绍;
    [N]添加关于PCI Express介绍;
    [N]添加关于Xilinx ZYNQ的介绍;
    [N]添加SD/SDIO/eMMC的章节;
    [D]删除“原理图分析的内容”一节;
    [N]添加通过逻辑分析仪看I2C总线的样例;


    第3章 《Linux内核及内核编程》

    [N]新增关于3.X内核版本号和2015年2月23日 Linux 4.0-rc1
    [N]新增关于内核版本号升级流程以及Linux社区开发模式解说
    [N]新增关于Linux内核调度时间的图式解说
    [N]新增关于Linux 3.0后ARM架构的变更的解说
    [N]新增关于TASK_KILLABLE状态的简单介绍
    [N]新增Linux内存管理图式解说

    [F]修正Kconfig和Makefile中的一些表述
    [D]删除关于x86启动过程解说
    [N]新增ARM Linux启动过程解说
    [N]新增关于likely()和unlikely()解说
    [N]新增toolchain的解说,以及toolchain的几种浮点模式


    第4章 《Linux内核模块》
    [F]改正关于模块使用非GPL license的问题;
    [F]修正关于__exit修饰函数的内存管理

    第5章 《Linux文件系统与设备文件》
    [F]修正关于文件系统与块设备驱动关系图;
    [N]添加应用到驱动的file操作调用图;
    [N]添加通过netlink接受内核uevent的范例;
    [N]添加遍历sysfs的范例;

    [N]添加为kingston U盘编写udev规则的范例;
    [F]更新udev规则,以符合新版本号;
    [N]添加udevadm的解说;
    [N]高亮Android vold
     
    第6章 《字符设备驱动》
    [F]更新file_operations的定义,升级ioctl()原型;
    [N]添加关于Linux access_ok()的解说以及Linux内核安全漏洞的说明;
    [F]修正globalmem的编码风格;
    [F]在globalmem支持2个以上实例的时候,从直接2个实例,升级为支持N个实例;

    第7章 《Linux设备驱动中的并发控制》
    [N]画图深入解说单核和多核下的各种竞态;
    [N]添加关于编译乱序,执行乱序,编译屏障和内存屏障的解说;
    [N]添加关于ARM LDREX/STREX指令的解说;
    [N]对spin_lock单核和多核的使用场景进行深入分析;

    [F]又一次整理RCU的解说方法和实例;
    [F]明白指明信号量已过时;
    [F]将globalmem中使用的信号量换为mutex。


    第8章 《Linux设备驱动中的堵塞与非堵塞I/O》
    [N]新增堵塞和非组塞的时序图
    [F]修正关于等待队列头部、等待队列元素的一些中文说法
    [N]加入等待队列的图形描写叙述
    [F]修正globalfifo的编码风格
    [F]修正globalfifo可读可写的if推断为while推断
    [N]新增select的时序图
    [N]新增EPOLL的章节


    第9章 《Linux设备驱动中的异步通知与异步I/O》
    [F]修正关于glibc AIO支持
    [F]修正关于内核AIO支持
    [F]修正驱动AIO接口
    [D]删除关于驱动AIO支持的错误实例
    [N]高亮C10问题

    第10章 《中断与时钟》
    [N]添加关于ARM GIC的解说
    [N]添加关于irq_set_affinity() API的解说
    [N]添加关于devm_request_irq() API的解说
    [N]添加关于request_any_context_irq() API的解说

    [F]修正interrupt handler原型
    [F]修正work queue原型
    [N]新增关于Concurrency-managed workqueues解说
    [N]添加关于ksoftirqd解说
    [N]添加关于request_threaded_irq()解说
    [D]删除s3c6410 rtc驱动中断实例
    [N]新增GPIO按键驱动中断实例
    [N]新增hrtimer解说和实例
    [F]修正second设备编码风格

    第11章 《内存与I/O訪问》
    [F]修正关于页表级数的描写叙述,加入PUD
    [F]修正page table walk的案例,使用ARM Linux pin_page_for_write
    [N]新增关于ARM Linux内核空间虚拟地址分布
    [F]修正关于内核空间与用户空间界限
    [N]新增关于DMA、NORMAL和HIGHMEM ZONE的几种可能分布
    [N]新增关于buddy的介绍
    [F]修正关于用户空间malloc的解说
    [N]添加mallopt()的案例
    [N]添加关于devm_ioremap、devm_request_region()和devm_request_mem_region()的解说
    [N]添加关于readl()与readl_relaxed()的差别,writel()与writel_relaxed()的差别

    [F]更新vm_area_struct的定义
    [F]修正nopage() callback为fault() callback
    [N]添加io_remap_pfn_range()、vm_iomap_memory()解说
    [F]强调iotable_init()静态映射眼下已不太推荐
    [N]添加关于coherent_dma_mask的解说
    [N]解说dma_alloc_coherent()与DMA ZONE关系
    [N]提及了一致性DMA缓冲区与CMA的关系
    [N]添加关于dmaengine驱动和API的解说


    第12章 《project中的Linux设备驱动》
    [F]更名为《Linux设备驱动的软件架构思想》;
    [N]本章新增多幅图片解说Linux设备驱动模型;
    [N]新增内容具体剖析为什么要进行设备与驱动的分离,platform的意义;
    [N]新增内容具体剖析为什么Linux设备驱动要分层,枚举多个分层实例;
    [N]新增内容具体剖析Linux驱动框架怎样解耦,为什么主机側驱动要和外设側驱动分离;
    [N]DM9000实例新增关于在dts中填充平台信息的内容;
    [N]新增内容解说驱动核心层的3大功能;
    [N]新增内容以面向对象类泛化对照Linux驱动;
    [N]SPI案例部分新增通过dts填充外设信息;

    [F]从tty, LCD章节移出架构部分到本章


    第13章 《Linux块设备驱动》
    [N]介绍关于block_device_operations的check_events成员函数
    [N]加入关于磁盘文件系统,I/O调度关系的图形
    [F]更新关于request_queue、request、bio、segment关系的图形
    [F]淘汰elv_next_request
    [F]淘汰blkdev_dequeue_request
    [N]加入关于blk_start_request描写叙述
    [F]淘汰Anticipatory I/O scheduler
    [N]加入关于ZRAM块设备驱动实例
    [F]更新针对内核4.0-rc1的vmem_disk
    [N]加入关于vmem_disk处理I/O过程的图形
    [N]添加关于Linux MMC子系统的描写叙述


    第14章 《Linux终端设备驱动》
    [D]整章所有删除,部分架构内容前移到第12章作为驱动分层实例


    第15章 《Linux I2C核心、总线与设备驱动》

    [F]修正i2c_adpater驱动的案例
    [N]添加关于在device tree中添加i2c设备的方法的描写叙述


    第16章 《Linux网络设备驱动》

    [F]本章顺序从第16章前移到第14章
    [N]澄清sk_buff head、data、tail、end指针关系
    [F]更新sk_buff定义
    [F]澄清skb_put、skb_push、skb_reserve
    [N]添加netdev_priv的解说,加入实例
    [N]添加关于get_stats()能够从硬件读统计信息的描写叙述

    [F]修正关于net_device_stats结构体的定义位置
    [F]修正关于统计信息的更新方法


    第18章 《LCD设备驱动》

    [D] 本章直接删除,部分架构内容前移到第12章


    第19章 《Flash设备驱动》

    [D] 本章直接删除


    第20章 《USB主机与设备驱动》
    [F]前移到第16章;
    [F]更名为《USB主机、设备与Gadget驱动》;
    [N]添加关于xHCI的介绍;
    [F]修正usb gadget驱动为function驱动;
    [D]删除OHCI实例;
    [N]加入EHCI解说和Chipidea EHCI实例;
    [F]修正iso传输实例;
    [F]修正usb devices信息到/sys/kernel/debug/usb/devices
    [N]介绍module_usb_driver;
    [N]介绍usb_function;
    [N]介绍usb_ep_autoconfig;
    [N]介绍usb_otg;

    [D]删除otg_transceiver;


    第21章 《PCI设备驱动》
    [D]整章删除


    第22章 《Linux设备驱动的调试》

    [F]变为第21章;

    [D]把实验室环境建设相关的节移到第3章;

    [F]修正关于gdb的set step-mode的含义解说;

    [F]添加关于gdb的set命令的解说;

    [F]添加gdb call命令的案例

    [D/N]删除手动编译工具链的代码,使用crosstool-ng;
    [N]更新toolchain的下载地址(codesourcery -> memtor),加入linaro下载地址;
    [N]添加pr_fmt的解说;
    [N]添加关于ignore_loglevel bootargs的解说;
    [N]添加EARLY_PRINTK和DEBUG_LL的解说;

    [F]调整proc的范例,创建/proc/test_dir/test_rw;
    [N]修正关于3.10后内核proc实现框架和API的变更;
    [N]添加关于BUG_ON和WARN_ON的解说
    [F]不再以BDI-2000为例,改为ARM DS-5;
    [N]添加关于ARM streamline性能分析器的介绍;
    [N]添加使用qemu调试linux内核的案例;
    [F]调整Oops的样例,使用globalmem,平台改为ARM;
    [F]更新LTT为LTTng。


    第23章 《Linux设备驱动的移植》
    [D]整章删除


    全新的章节

    第18章  《Linux设备树(Device Tree)》

    本章导读

    本章将介绍Linux设备树(Device Tree)的起源、结构和由于设备树而引起的驱动和BSP变更。

    18.1节阐明了ARM Linux为什么要採用设备树。

    18.2节具体剖析了设备树的结构、结点和属性,设备树的编译方法以及怎样用设备树来描写叙述板上的设备、设备的地址、设备的中断号、时钟等信息。

    18.3节解说了採用设备树后,驱动和BSP的代码须要怎么改,哪些地方变了。

    18.4节补充了一些设备树相关的API定义以及使用方法。

    本章是相对《Linux设备驱动开发具体解释(第2版)》全新的一章内容,也是步入内核3.x时代后,嵌入式Linuxproject师必备的知识体系。


    第19章  《Linux的电源管理》

    本章导读

    Linux在消费电子领域的应用已经铺天盖地,而对于消费电子产品而言,省电是一个重要的议题。

    本章将介绍Linux设备树(Device Tree)的起源、结构和由于设备树而引起的驱动和BSP变更。

    19.1节阐述了Linux电源管理的整体架构。

    19.2~19.8节分别论述了CPUFreq、CPUIdle、CPU热插拔以及底层的基础设施Regulator、OPP以及电源管理的调试工具PowerTop。

    19.9节解说了系统Suspend to RAM的过程以及设备驱动怎样提供对Suspend to RAM的支持。

    19.10节解说了设备驱动的Runtimesuspend。

    本章是相对《Linux设备驱动开发具体解释(第2版)》全新的一章内容,也是Linux设备驱动project师必备的知识体系。



    第20章 《Linux芯片级移植与底层驱动》

    本章导读

    本章主要解说,在一个新的ARM SoC上,怎样移植Linux。当然,本章的内容也适合MIPS、PowerPC等其它的体系架构。

    第20.1节先整体上介绍了Linux 3.x之后的内核在底层BSP上进行了哪些优化。

    第20.2节解说了怎样提供操作系统的执行节拍。

    第20.3节解说了中断控制器驱动,以及它是怎样为驱动提供标准接口的。

    第20.4节解说多核SMP芯片的启动。

    第20.6~20.9节分别解说了作为Linux执行底层基础设施的GPIO、pinctrl、clock和dmaengine驱动。

    本章相对《Linux设备驱动开发具体解释(第2版)》差点儿是全新的一章内容,有助于project师理解驱动调用的底层API的来源,以及直接有助于进行Linux的平台移植。


  • 相关阅读:
    Windows服务在Win7中不能安装的解决方法
    SharePoint2007安装图文详解二:安装AD(活动目录)及DNS
    在SqlServer 2008中将数据导成脚本
    Asp.Net站点整合Discuz论坛实现同步注册和单点登录
    SharePoint2007安装图文详解三:安装SqlServer2005
    给Javascript代码“预留退路”
    微软最新的 Web 开发工具WebMatrix的简单介绍及安装
    未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序 错误解决
    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)多条件模糊查询和回收站还原的实现
    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)用户信息的修改和浏览
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4341040.html
Copyright © 2011-2022 走看看