- The old Firewire subsystem (drivers/ieee1394/) has been removed from the mainline. The new stack (drivers/firewire/) will constitute the sole Firewire subsystem from now on (Related Book Area: Chapter 20, More Devices and Drivers).
- The 2.6.37 tree provides open source drivers for the users of wireless cards built around Broadcom chipsets (Related Book Area: Chapter 16, Linux Without Wires).
- One major base-kernel change is the removal of the legacy Big Kernel Lock (BKL). Rather, there is a configuration option (CONFIG_BKL) that you can use to build a BKL-free kernel (Related Book Area: Chapter 2, A Peek Inside the Kernel, Section: Concurrency in the Kernel).
- On the filesystems front, this release boasts major scalability improvements in Ext4 and XFS (Related Book Area: Chapter 2 and Chapter 14).
Here are the highlights of the 2.6.36 kernel release as seen through a driver developer’s lens:
- The Linux Infrared Remote Control (LIRC) subsystem is finally part of the staging tree that resides under drivers/staging/ (Related Book Area: Chapter 16, Linux Without Wires).
- Concurrency Managed Workqueues (cmwq) that optimize kernel thread handling is part of the mainline (Related Book Area: Chapter 3, Kernel Facilities).
- A new OOM (Out-Of-Memory) killer that can choose one or more processes to be killed to free up memory as a last resort (mm/oom_kill.c).
- The AppArmor project (https://apparmor.wiki.kernel.org/index.php/Main_Page) is now part of the mainline kernel. AppArmor is a security system implementation that can be used to enforce “good behavior” from applications.
The following are the main items of interest in the 2.6.35 kernel to device driver developers:
- 2.6.35 supports USB bulk endpoint streams. This was added as part of the USB 3.0 specifications (Related Book Area: Chapter 11, Universal Serial Bus).
- A new in-kernel Remote Control Subsystem has been added in 2.6.35. For background on this, read http://wilsonet.com/?page_id=95. Some LIRC drivers have been ported to work with this subsystem (Related Book Area: Chapter 16, Linux Without Wires).
- An EDAC driver has been added for the Intel Nehalem processor hardware (Related Book Area: Chapter 20, More Devices and Drivers).
- The ALSA subsystem has been updated to the level of ALSA 1.0.23. The Linux ALSA homepage resides at http://www.alsa-project.org/main/index.php/Main_Page (Related Book Area: Chapter 13, Audio Drivers).
LogFS, a flash filesystem has been merged with 2.6.34. LogFS aims to be the successor of JFFS2 – it has faster [O(1)] mount times and consumes less memory. For a tutorial on LogFS, read http://www.linux-magazine.com/w3/issue/86/040-041_logfs.pdf (Related Book Area: Chapter 17, Memory Technology Devices).
2.6.34 improves the PCI subsystem’s power management code (Related Book Area: Chapter 10, Peripheral Component Interconnect).
The Input subsystem now supports more touch screen interfaces from various vendors (Related Book Area: Chapter 7, Input Drivers).
For USB 3.0 controller driver (xhci) changes, see drivers/usb/host/xhci*c (Related Book Area: Chapter 11, Universal Serial Bus).
This version of the kernel adds a clutch of new drivers and makes improvements to several driver subsytems. The notable ones are (1) Introduction of USB 3.0 support (2) Graphics subsystem reworks (3) ALSA improvements and (4) WLAN stack enhancements.
An important addition in 2.6.33 is support for Distributed Replicated Block Device (DRBD). The homepage of the DRBD project is at http://www.drbd.org/. The software changes affect the Linux IO stack; the hardware in question pertains to clustering and High Availability (HA).
Another change in 2.6.23 is that the Anticipatory IO scheduler (block/as-iosched.c, discussed in Chapter 12, Block Drivers) is gone from the mainline. The CFQ scheduler needs to be used instead.
One of the interesting features in 2.6.32 is the adoption of the NAPI approach (now used in the kernel network layer & discussed in Chapter 15, Network Interface Cards) in the Block IO layer (discussed in Chapter 14, Block Drivers). This addition adds a design logic called blk-iopoll and is based on the idea that polling can be a good thing when an interface is busy. See http://lwn.net/Articles/346219/ for more on blk-iopoll.
There are improvements in the graphics stack that will reflect in improvements to graphic drivers. This will interest you if you’re exploring Chapter 12, Video Drivers.
Perfcounters has been added to 2.6.31. It’s an Oprofile-type tool (discussed in Chapter 21 of ELDD), that provides metrices on various work-loads. In addition to hardware events (such as cache misses & cycle instrumentation), it also supports software events (such as context switches and page faults). In this context, a tools/ directory has been introduced at the top-level. Look at http://lwn.net/Articles/339361/ for more meat.
There is also more in the tracing/profiling space – e.g., the appearance of CONFIG_DEBUG_KMEMLEAK under “Kernel Hacking”.
Plus there is more support in the virtualization arena, support for more architectures, and driver support for more devices..
Looking at the 2.6.30 source tree through the lens of a device driver developer, one sees scores of new device drivers supporting more hardware, but no major subsystem changes. One of the non-driver changes that caught my interest was one related to fast boot (http://lwn.net/Articles/314808/).
Here’s a sampling of the new drivers in 2.6.30:
- A new EDAC driver for the ECC controller in the AMCC PowerPC 405EX (see drivers/edac/ppc4xx_edac.c).(Related Book Area: Chapter 20, “More Devices and Drivers“, Section: “ECC Reporting“, Page 578).
- New graphics drivers and fixes/features to existing ones (such as intelfb). (Related Book Area: Chapter 12, “Video Drivers“, Section: “Frame Buffer Drivers“, Page 365).
- New input drivers for the AD7877 and AD7879 touch controllers in drivers/input/touchscreen/ad7877.c and drivers/input/touchscreen/ad7879.c, respectively. (Related Book Area: Chapter 7, “Input Drivers“, Section: “Touch Controllers“, Page 227).
- Driver for the MAX3100 UART in drivers/serial/max3100.c. (Related Book Area: Chapter 6, “Serial Drivers“, Section: “UART Drivers“, Page 176).
- ALSA driver support for the Atmel AC97 controller in sound/atmel/*. (Related Book Area: Chapter 13, “Audio Drivers“, Section: “Linux-Sound Subsystem“, Page 394).
- New Qualcom Serial USB driver: drivers/usb/serial/qcserial.c. (Related Book Area: Chapter 11, “Universal Serial Bus“, Section: “USB-Serial“, Page 345).
- More FCoE support in drivers/scsi/fcoe/.
- And as expected, large additions in the staging area, drivers/staging/.
For a more exhaustive list, please see http://kernelnewbies.org/Linux_2_6_30#head-1817f70c5ac9a0e57bbcd44ec522effe9adeadd3.
The main changes in 2.6.29 from a driver developer’s perspective are:
- WiMax support in drivers/net/wimax.
- Enhancements to the WiFi stack. (Related Book Area: Chapter 16, “Linux Without Wires“, Section: “WiFi“, Page 489).
The boot logo (Related Book Area: Chapter 12, “Video Drivers“, Section: “Console Drivers“, Page 387) was temporarily changed to Tuz to support that endangered species. As always, several new drivers got added. A few other changes that might be of interest:
- The open-FCoE project that implements protocol code for Fibre Channel over Ethernet (FCoE) was mainlined. See http://www.open-fcoe.org/ for more details.
- Inclusion of squashfs, a highly compressible read-only file system (See http://squashfs.sourceforge.net/).
- EXT4 enhancements.
- A more scalable RCU implementation.
Summary of interesting changes from a device driver perspective:
- Support for Ultra Wide Band under drivers/uwb/. This is a new transport technology for protocols such as Wireless USB, and in future, Bluetooth and 1394.
- New network drivers.
- New frame buffer driver for VIA unichrome devices. (Related Book Area: Chapter 12, “Video Drivers“, Section: “Frame Buffer Drivers“, Page 365).
- Enhancements to cfg80211. (Related Book Area: Chapter 16, “Linux Without Wires“, Section: “WiFi“, Page 494).
- Oprofile enhancements (support for new AMD processors). (Related Book Area: Chapter 21, “Debugging Device Drivers“, Section: “Profiling“, Page 629).
- New ARM SoC/board support.
- Kprobes support for SH CPU family. (Related Book Area: Chapter 21, “Debugging Device Drivers“, Section: “Kernel Probes“, Page 609).
2.6.28 also somes with a “staging” subdirectory drivers/staging/ that contains code (mostly drivers) in a pre-experimental stage. Having the staging platform for driver development included in the mainline tree makes those drivers more accessible for testing, and subsequent movement into the mainline. Have a look at http://www.kroah.com/log/linux/linux-staging-update.html to better understand the philosophy behind this decision.
Support for UBIFS, a new file system designed to work with raw flash storage has been included. (Related Book Area: Chapter 17, “Memory Technology Devices“, Section: ”User Modules“, Page 516). Look at http://www.linux-mtd.infradead.org/doc/ubifs.html for a tutorial.
A new power management infrastructure to manage idle cpus in a clean and efficient manner has also been added. Policy governers decide the idle state to use at run time.
The Kernel GNU Debugger (kgdb) is now part of the mainline kernel. (Related Book Area: Chapter 21, “Debugging Device Drivers“, Section: ”Kernel Debuggers“, Page 600).
Other relevant changes:
- Wireless Mesh networking (802.11s) has been support added. Look at net/mac80211/mesh*.c.
- The original semaphore interface (which has given way to mutexes) has been replaced with a more generic implementation that focuses on maintainability and results in the removal of several thousand lines of code. (Related Book area: Chapter 2, “A Peek Inside the Kernel“, Section: ”Concurrency in the Kernel“, Page 41).
- A memtest boot parameter added.
- Improved webcam support.
Support for CAN protocol has been merged with the mainline kernel. The implementation provides a socket interface to user space. This obsoletes the earlier CAN driver methodology that consisted of a char driver and user space applications that are responsible for queuing and exchanging raw frames with the controller. Look at Documentation/networking/can.txt for details.
A top-level virt/ sub-directory has been added to hold kvm code.
( Related Book Area: Chapter 1, “Introduction“, Section: “Looking at the Sources“, Page 9).
A new Bluetooth USB driver (drivers/bluetooth/btusb.c) is part of the mainline kernel. This driver project intends to replace the original hci_usb driver. (Related Book Area: Chapter 16, “Linux Without Wires“, Section: Device Example:USB Adapter, Page 471). This driver has no SCO support yet.
drivers/bluetooth/btsdio.c supports Bluetooth devices with an SDIO interface.
Essential Linux Device Drivers is current as of the 2.6.23/2.6.24
kernel versions. Most code listings in this book have been tested on a
2.6.23 kernel. In this blog, I’ll attempt to point out changes/updates
to the book as a result of newer kernel releases.
Look at Linux websites such as www.lwn.net to learn about the full
kernel change details associated with each release.