This blog updates the latest developments in the specific interpretation of Linux device-Driven Development (3rd edition). 2015.2.26 nearly finished the first draft.
This book has been rebase to the Linux 4.0 kernel in development, with most cases based on multicore cortex-a9 platforms .
[F] is a revision or upgrade; [N] is a new point of knowledge; [D] is a deleted content
1th Chapter "Linux Device Driver Overview and development environment Construction"
[D] Removal of the introduction to the LDD6410 Development Board
[F] Update the new Ubuntu virtual machine
[N] Adding descriptive narratives about the QEMU simulation vexpress Board
2nd Chapter "Hardware Foundation of driving design"
[N] Add an introduction to the SOC;
[N] Add content about efuse;
[D] Delete the contents of the ISA bus;
[N] Add an introduction about the SPI bus;
[N] Add USB 3.0 introduction;
[F] fixed USB synchronous transmission mode English name;
[D] deletion about CPCI introduction;
[N] Add about PCI Express introduction;
[N] Add an introduction about Xilinx Zynq;
[N] adding SD/SDIO/EMMC chapters;
[D] Delete the "content of the schematic analysis" section;
[N] Add a sample of the I²c bus through a logic analyzer;
3rd chapter "Linux Kernel and kernel programming"
[n "added about 3. X kernel version number and February 23, 2015 Linux 4.0-RC1
[n] new update on kernel version number upgrade process and Linux Community Development mode commentary
[n] new schematic commentary on Linux kernel dispatch time
[n] New about Linux Explanation of changes to the 3.0 post-arm architecture
[n] Added a brief introduction to the task_killable status
[n] new Linux memory management schema explanation
[F] fix some of the representations in Kconfig and makefile
[D] Delete the explanation about the x86 boot process
[N] new arm linux boot process commentary
[n] added about likely () and unlikely () explanation
[n "added toolchain commentary, and several floating-point modes for toolchain
4th "Linux kernel module"
[f "correct questions about the use of non-GPL license modules;
[F] fix about __ The memory management of the exit modifier
5th chapter "Linux file system and device file"
[F] fixes the file system and block device driver diagram;
[N] Add the file operation call graph applied to the driver;
[n] Add an example of accepting kernel uevent through netlink;
[n] Adding an example of traversing sysfs;
[n] Adding an example of udev rules for a Kingston USB drive;
[F] updating udev rules, To conform to the new version number;
[n "add udevadm narration;
[N] highlight Android Vold
6th chapter" character Device Driver "
[F] update file_operations definition, upgrade IOCTL () prototype;
[n "Add about Linux ACCESS_OK () Explanation and description of the Linux kernel security vulnerability;
[F] corrects the encoding style of the globalmem;
[F] When Globalmem supports more than 2 instances, from direct 2 instances, upgrade to support n instances;
7th Chapter concurrency control in Linux device drivers
[n "draw in-depth commentary on the various races under single and multi-core;
[n] adds commentary on compilation chaos, Execution of Chaos, compilation barriers, and memory barriers;
[n ] Add an explanation of the arm Ldrex/strex instructions;
[N] deep analysis of spin_lock single-core and multi-core usage scenarios;
[F] Another collation of RCU's interpretation methods and examples;
[F] clearly indicates that the semaphore is outdated;
[f "converts the semaphore used in Globalmem to a mutex.
8th Chapter "Plug and non-clogging I/O in Linux device drivers"
[N] New timing diagram for clogging and non-plug
[F] Fix some Chinese sayings about waiting queue headers and waiting queue elements
[N] Adding a graphical description of the waiting queue
[F] Correcting the coding style of Globalfifo
[F] Fix globalfifo readable writable if inference as while inference
[N] New timing diagram for Select
[N] New Epoll Chapters
9th chapter "Asynchronous Notification and asynchronous I/O in Linux device drivers"
[F] Fix about GLIBC AIO support
[F] fix for kernel AIO support
[F] Fixed Drive AIO interface
[D] Delete the error instance about driver AIO support
[N] Highlighting C10 issues
10th chapter "Interruption and Clock"
[N] Add commentary on arm GIC
[N] Add a commentary about the irq_set_affinity () API
[N] Add a commentary about the DEVM_REQUEST_IRQ () API
[N] Add a commentary about the REQUEST_ANY_CONTEXT_IRQ () API
[F] Fix Interrupt handler prototype
[F] Correcting Work queue prototypes
[N] Added about concurrency-managed workqueues commentary
[N] Add about KSOFTIRQD commentary
[N] Add about Request_threaded_irq () commentary
[D] Delete s3c6410 RTC Drive Interrupt Instance
[N] New Gpio key driver interrupt Instance
[N] Added Hrtimer commentary and examples
[F] Fix second device coding style
11th chapter "Memory and I/O Interview"
[F] Modifying descriptive narratives on page table progression, adding pud
[F] Fix page table walk case, using arm Linux pin_page_for_write
[N] added about ARM Linux kernel space virtual address distribution
[F] fix on kernel space and user space boundaries
[N] added several possible distributions for DMA, normal, and Highmem zone
[N] New introduction to Buddy
[F] amending the commentary on user space malloc
[N] Case of adding mallopt ()
[N] Add commentary on Devm_ioremap, Devm_request_region () and Devm_request_mem_region ()
[N] Add differences between READL () and readl_relaxed (), Writel () and writel_relaxed ( )
[F] Updating the definition of vm_area_struct
[F] Fix nopage () callback to Fault () callback
[N] Add Io_remap_pfn_range (), Vm_iomap_memory () commentary
[F] Emphasizing that iotable_init () static mapping is not recommended at the moment
[N] Add commentary about Coherent_dma_mask
[N] Explanation dma_alloc_coherent () and DMA zone relationship
[N] mentions the relationship between a consistent DMA buffer and CMA
[N] Add commentary about the Dmaengine driver and API
12th "Linux device drivers in Project"
[F] renamed the "Linux device-driven software architecture idea";
[N] This chapter adds a number of pictures to explain the Linux device driver model;
[N] The new content specifically analyzes why the device and drive separation, the meaning of platform;
[N] What's new specifically analyzes why Linux device drivers are layered, enumerating multiple layered instances;
[N] New content specifically analyzes how the Linux driver framework decoupling, why the host side drive to and peripheral side drive separation;
N The DM9000 instance adds content about populating the platform information in DTS;
[N] New content to explain the driving core layer of the 3 major functions;
[N] Additions to the object-oriented class generalization against the Linux driver;
N The SPI case section has been added to populate peripheral information via DTS;
[F] from the TTY, the LCD chapter moves out of the architecture section to this chapter
13th chapter "Linux Block device Driver"
[N] Introducing the Check_events member function on Block_device_operations
[N] Adding graphs about Disk file systems, I/O scheduling relationships
[F] Update graphs on request_queue, request, bio, segment relationships
[F] Elimination of Elv_next_request
[F] Elimination of Blkdev_dequeue_request
[N] Join about blk_start_request descriptive narrative
[F] Obsolete anticipatory I/O Scheduler
[N] Added about Zram block device driver instance
[F] Update vmem_disk for kernel 4.0-RC1
[N] Adding graphs about vmem_disk processing I/O processes
[N] Adding descriptive narratives about the Linux MMC subsystem
14th chapter "Linux Terminal Equipment Driver"
[D] All deletions, partial schema content moved forward to chapter 12th as driving tiering instances
15th Chapter "Linux I²c core, bus and device driver"
[F] Fixed case of i2c_adpater driver
[N] Add description of the method for adding I²c devices to device tree
16th chapter "Linux Network device Driver"
[F] This chapter moves from chapter 16th to chapter 14th
[N] Clarifying Sk_buff head, data, tail, end pointer relationships
[F] Update Sk_buff definition
[F] Clarification of Skb_put, Skb_push, Skb_reserve
[N] Add netdev_priv explanation, join the example
[N] Add descriptive narration about Get_stats () capable of reading statistical information from hardware
[F] amending the definition of the NET_DEVICE_STATS structure
[F] Amending the Update method for statistical information
18th Chapter "LCD device Driver"
[D] This chapter is deleted directly, some of the schema content moved forward to the 12th chapter
The 19th chapter "Flash Device Driver"
[D] This chapter directly deletes
20th Chapter "USB Host and device driver"
[F] Move forward to chapter 16th;
[F] renamed "USB host, device and gadget driver";
[N] Add an introduction about XHCI;
[F] fix USB gadget driver for function drive;
[D] Delete OHCI instances;
[N] Add EHCI commentary and Chipidea EHCI instances;
[F] amending the ISO transmission example;
[F] Fix USB devices information to/sys/kernel/debug/usb/devices
[N] introduction of Module_usb_driver;
[N] introduction of usb_function;
[N] introduction of Usb_ep_autoconfig;
[N] introduction of USB_OTG;
[D] Delete otg_transceiver;
21st Chapter "PCI Device Driver"
[D] Whole Chapter Delete
22nd Chapter "Linux Device-driven debugging"
[F] into chapter 21st;
[D] Move the relevant section of the laboratory environment Construction to chapter 3rd;
[F] Fix the meaning of GDB's set step-mode;
[F] Add a commentary on GDB's set command;
[F] Case for adding GDB call command
[d/n] Delete the code for the manual compilation tool chain, using Crosstool-ng;
[N] Update toolchain (Codesourcery-Memtor), add Linaro;
[N] Add pr_fmt commentary;
[N] Add a commentary about the Ignore_loglevel Bootargs;
[N] Add early_printk and debug_ll commentary;
[F] Adjust the proc example to create the/PROC/TEST_DIR/TEST_RW;
[N] Fix changes to the framework and API for kernel proc after 3.10;
[N] Add commentary on bug_on and warn_on
[F] no longer take BDI-2000 as an example, change to arm DS-5;
[N] Add an introduction to the arm Streamline Performance analyzer;
[N] Add a case to debug the Linux kernel using QEMU;
[F] Adjust oops sample, use Globalmem, platform changed to arm;
[F] Update LTT to lttng.
23rd chapter "Linux Device-driven porting"
[D] Whole Chapter Delete
a new chapter
18th chapter "Linux Device Tree"
Guide to this Chapter
This chapter describes the origin, structure, and driver and BSP changes of the Linux device tree (device tree).
Section 18.1 illustrates why arm Linux uses a device tree.
In section 18.2, the structure, node and attribute of the device tree, the compiling method of the device tree and how to use the device tree to describe the device, the address of the device, the interruption number of the device, the clock and other information are analyzed in detail.
Section 18.3 explains how the drive and BSP code needs to be changed and where it has changed after the device tree is used.
Section 18.4 complements some of the device tree-related API definitions and how to use them.
This chapter is relative to the Linux device driver Development specific Explanation (2nd edition) of the new chapter content, is stepping into the kernel 3.x era, embedded linuxproject the necessary knowledge system.
19th Chapter "Linux Power Management"
Guide to this Chapter
The use of Linux in the field of consumer electronics has been overwhelming, and for consumer electronics, power saving is an important issue.
This chapter describes the origin, structure, and driver and BSP changes of the Linux device tree (device tree).
Section 19.1 describes the overall architecture of Linux power management.
19.2~19.8 section discusses the Cpufreq, Cpuidle, CPU hot-swapping and the underlying infrastructure regulator, OPP, and power Management debugging Tools PowerTOP.
Section 19.9 explains the process of system suspend to ram and how device drivers provide support for suspend to RAM.
Section 19.10 explains the device-driven runtimesuspend.
This chapter is a new chapter in the specific interpretation of Linux device-Driven Development (2nd edition) and is a necessary knowledge system for Linux device-driven project architects.
20th Chapter "Linux chip-level porting and the underlying driver"
Guide to this Chapter
This chapter explains how to migrate Linux on a new arm soc. Of course, the content of this chapter is also suitable for MIPS, PowerPC and other architectures.
Section 20.1 provides an overall overview of what optimizations were made to the kernel on the underlying BSP after Linux 3.x.
Section 20.2 explains how to provide the operating system's execution beats.
Section 20.3 explains the interrupt controller driver and how it provides a standard interface for the driver.
Section 20.4 explains the start-up of multicore SMP chips.
Section 20.6~20.9 explains the Gpio, Pinctrl, clock, and dmaengine drivers that perform the underlying infrastructure as Linux.
This chapter, relative to the specific explanation of Linux device Driver Development (2nd edition), is almost a new chapter that helps the project master understand the source of the underlying API that drives calls and the platform porting that directly facilitates Linux.
"Linux device driver Development specific Interpretation (3rd edition)" Progress synchronization update