Linux deivce drivers development :: develop customized drivers for embedded Linux /
Linux kernel is a complex, portable, modular and widely used piece of software, running on around 80% of servers and embedded systems in more than half of devices throughout the World. Device drivers play a critical role in how well a Linux system performs. As Linux has turned out to be one of the m...
Gespeichert in:
1. Verfasser: | |
---|---|
Format: | Elektronisch E-Book |
Sprache: | English |
Veröffentlicht: |
Birmingham, UK :
Packt Publishing,
2017.
|
Schlagworte: | |
Online-Zugang: | Volltext |
Zusammenfassung: | Linux kernel is a complex, portable, modular and widely used piece of software, running on around 80% of servers and embedded systems in more than half of devices throughout the World. Device drivers play a critical role in how well a Linux system performs. As Linux has turned out to be one of the most popular operating systems used, the interest in developing proprietary device drivers is also increasing steadily. This book will initially help you understand the basics of drivers as well as prepare for the long journey through the Linux Kernel. This book then covers drivers development based on various Linux subsystems such as memory management, PWM, RTC, IIO, IRQ management, and so on. The book also offers a practical approach on direct memory access and network device drivers. By the end of this book, you will be comfortable with the concept of device driver development and will be in a position to write any device driver from scratch using the latest kernel version (v4.13 at the time of writing this book). |
Beschreibung: | 1 online resource : illustrations |
ISBN: | 9781782174752 1782174753 1785280007 9781785280009 |
Internformat
MARC
LEADER | 00000cam a2200000 i 4500 | ||
---|---|---|---|
001 | ZDB-4-EBA-on1015687238 | ||
003 | OCoLC | ||
005 | 20241004212047.0 | ||
006 | m o d | ||
007 | cr unu|||||||| | ||
008 | 171218s2017 enka o 000 0 eng d | ||
040 | |a UMI |b eng |e rda |e pn |c UMI |d OCLCF |d TOH |d YDX |d IDEBK |d CEF |d KSU |d DEBBG |d G3B |d S9I |d UAB |d N$T |d SXP |d NLE |d UKMGB |d AU@ |d OCLCQ |d OCLCO |d OCLCQ |d OCLCO |d UKAHL |d OCLCQ |d OCLCO |d DXU | ||
015 | |a GBB7O3356 |2 bnb | ||
016 | 7 | |a 018610853 |2 Uk | |
019 | |a 1007928426 |a 1014359640 |a 1021076714 |a 1021077269 |a 1064239860 | ||
020 | |a 9781782174752 |q (electronic bk.) | ||
020 | |a 1782174753 |q (electronic bk.) | ||
020 | |a 1785280007 | ||
020 | |a 9781785280009 | ||
020 | |z 9781785280009 | ||
035 | |a (OCoLC)1015687238 |z (OCoLC)1007928426 |z (OCoLC)1014359640 |z (OCoLC)1021076714 |z (OCoLC)1021077269 |z (OCoLC)1064239860 | ||
037 | |a CL0500000920 |b Safari Books Online | ||
050 | 4 | |a QA76.774.L46 | |
072 | 7 | |a COM |x 046070 |2 bisacsh | |
082 | 7 | |a 005.432 |2 23 | |
049 | |a MAIN | ||
100 | 1 | |a Madieu, John, |e author. | |
245 | 1 | 0 | |a Linux deivce drivers development : |b develop customized drivers for embedded Linux / |c John Madieu. |
246 | 3 | 0 | |a Develop customized drivers for embedded Linux |
264 | 1 | |a Birmingham, UK : |b Packt Publishing, |c 2017. | |
300 | |a 1 online resource : |b illustrations | ||
336 | |a text |b txt |2 rdacontent | ||
337 | |a computer |b c |2 rdamedia | ||
338 | |a online resource |b cr |2 rdacarrier | ||
347 | |a data file | ||
588 | 0 | |a Online resource; title from title page (Safari, viewed December 11, 2017). | |
520 | |a Linux kernel is a complex, portable, modular and widely used piece of software, running on around 80% of servers and embedded systems in more than half of devices throughout the World. Device drivers play a critical role in how well a Linux system performs. As Linux has turned out to be one of the most popular operating systems used, the interest in developing proprietary device drivers is also increasing steadily. This book will initially help you understand the basics of drivers as well as prepare for the long journey through the Linux Kernel. This book then covers drivers development based on various Linux subsystems such as memory management, PWM, RTC, IIO, IRQ management, and so on. The book also offers a practical approach on direct memory access and network device drivers. By the end of this book, you will be comfortable with the concept of device driver development and will be in a position to write any device driver from scratch using the latest kernel version (v4.13 at the time of writing this book). | ||
505 | 0 | |a Title Page -- Copyright -- Credits -- About the Author -- About the Reviewer -- www.PacktPub.com -- Customer Feedback -- Dedication -- Table of Contents -- Preface -- Introduction to Kernel Development -- Environment setup -- Getting the sources -- Source organization -- Kernel configuration -- Building your kernel -- Kernel habits -- Coding style -- Kernel structure allocation/initialization -- Classes, objects, and OOP -- Summary -- Device Driver Basis -- User space and kernel space -- The concept of modules -- Module dependencies -- depmod utility -- Module loading and unloading -- Manual loading -- modprobe and insmod -- /etc/modules-load.d/< -- filename> -- .conf -- Auto-loading -- Module unload -- Driver skeletons -- Module entry and exit point -- __init and __exit attributes -- Module information -- Licensing -- Module author(s) -- Module description -- Errors and message printing -- Error handling -- Handling null pointer errors -- Message printing -- printk() -- Module parameters -- Building your first module -- The module's makefile -- In the kernel tree -- Out of the tree -- Building the module -- Summary -- Kernel Facilities and Helper Functions -- Understanding the container_of macro -- Linked lists -- Creating and initializing a list -- Dynamic method -- Static method -- Creating a list node -- Adding a list node -- Deleting a node from the list -- Linked list traversal -- The kernel sleeping mechanism -- Wait queue -- Delay and timer management -- Standard timers -- Jiffies and HZ -- The timer API -- Timer setup initialization -- Standard timer example -- High-resolution timers (HRTs) -- HRT API -- HRT setup initialization -- Dynamic tick/tickless kernel -- Delays and sleep in the kernel -- Atomic context -- Nonatomic context -- Kernel locking mechanism -- Mutex -- Mutex API -- Declare -- Acquire and release -- Spinlock. | |
505 | 8 | |a Spinlock versus mutexes -- Work deferring mechanism -- Softirqs and ksoftirqd -- ksoftirqd -- Tasklets -- Declaring a tasklet -- Enabling and disabling a tasklet -- Tasklet scheduling -- Work queues -- Kernel-global work queue -- the shared queue -- Dedicated work queue -- Programming syntax -- Predefined (shared) workqueue and standard workqueue functions -- Kernel threads -- Kernel interruption mechanism -- Registering an interrupt handler -- Interrupt handler and lock -- Concept of bottom halves -- The problem -- interrupt handler design limitations -- The solution -- bottom halves -- Tasklets as bottom halves -- Workqueue as bottom halves -- Softirqs as bottom half -- Threaded IRQs -- Threaded bottom half -- Invoking user space applications from the kernel -- Summary -- Character Device Drivers -- The concept behind major and minor -- Device number allocation and freeing -- Introduction to device file operations -- File representation in the kernel -- Allocating and registering a character device -- Writing file operations -- Exchanging data between kernel space and user space -- A single value copy -- The open method -- Per-device data -- The release method -- The write method -- Steps to write -- The read method -- Steps to read -- The llseek method -- Steps to llseek -- The poll method -- Steps to poll -- The ioctl method -- Generating ioctl numbers (command) -- Steps for ioctl -- Filling the file_operations structure -- Summary -- Platform Device Drivers -- Platform drivers -- Platform devices -- Resources and platform data -- Device provisioning -- the old and deprecated way -- Resources -- Platform data -- Where to declare platform devices? -- Device provisioning -- the new and recommended way -- Devices, drivers, and bus matching -- How can platform devices and platform drivers match? -- Kernel devices and drivers-matching function. | |
505 | 8 | |a OF style and ACPI match -- ID table matching -- Per device-specific data on ID table matching -- Name matching -- platform device name matching -- Summary -- The Concept of a Device Tree -- Device tree mechanisms -- Naming convention -- Aliases, labels, and phandle -- DT compiler -- Representing and addressing devices -- SPI and I2C addressing -- Platform device addressing -- Handling resources -- Concept of named resources -- Accessing registers -- Handling interrupts -- The interrupt handler -- Interrupt controller code -- Extract application-specific data -- Text string -- Cells and unsigned 32-bit integers -- Boolean -- Extracting and parsing sub-nodes -- Platform drivers and DTs -- OF match style -- Dealing with non-device tree platforms -- Support multiple hardware devices with per device-specific data -- Match style mixing -- Platform resources and DTs -- Platform data versus DTs -- Summary -- I2C Client Drivers -- The driver architecture -- The i2c_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Accessing the client -- Plain I2C communication -- System Management Bus (SMBus) compatible functions -- Instantiating I2C devices in the board configuration file (old and deprecated way) -- I2C and device trees -- Defining and registering the I2C driver -- Remark -- Instantiating I2C devices in a DT -- the new way -- Putting it all together -- Summary -- SPI Device Drivers -- The driver architecture -- The device structure -- spi_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Instantiating SPI devices in board configuration file -- old and deprecated way -- SPI and device tree. | |
505 | 8 | |a Instantiate SPI devices in device tree -- the new way -- Define and register SPI driver -- Accessing and talking to the client -- Putting it all together -- SPI user mode driver -- With IOCTL -- Summary -- Regmap API -- A Register Map Abstraction -- Programming with the regmap API -- regmap_config structure -- regmap initialization -- SPI initialization -- I2C initialization -- Device access functions -- regmap_update_bits function -- Special regmap_multi_reg_write function -- Other device access functions -- regmap and cache -- Putting it all together -- A regmap example -- Summary -- IIO Framework -- IIO data structures -- iio_dev structure -- iio_info structure -- IIO channels -- Channel attribute naming conventions -- Distinguishing channels -- Putting it all together -- Triggered buffer support -- IIO trigger and sysfs (user space) -- Sysfs trigger interface -- add_trigger file -- remove_trigger file -- Tying a device with a trigger -- The interrupt trigger interface -- The hrtimer trigger interface -- IIO buffers -- IIO buffer sysfs interface -- IIO buffer setup -- Putting it all together -- IIO data access -- One-shot capture -- Buffer data access -- Capturing using the sysfs trigger -- Capturing using the hrtimer trigger -- IIO tools -- Summary -- Kernel Memory Management -- System memory layout -- kernel space and user space -- Kernel addresses -- concept of low and high memory -- Low memory -- High memory -- User space addresses -- Virtual memory area (VMA) -- Address translation and MMU -- Page lookup and TLB -- How does the TLB work? -- Memory allocation mechanism -- Page allocator -- Page allocation API -- Conversion functions -- Slab allocator -- The buddy algorithm -- A journey into the slab allocator -- kmalloc family allocation -- vmalloc allocator -- Process memory allocation under the hood -- The copy-on-write (CoW) case. | |
505 | 8 | |a Working with I/O memory to talk with hardware -- PIO devices access -- MMIO device access -- __iomem cookie -- Memory (re)mapping -- kmap -- Mapping kernel memory to user space -- Using remap_pfn_range -- Using io_remap_pfn_range -- The mmap file operation -- Implementing mmap in the kernel -- Linux caching system -- What is a cache? -- CPU cache -- memory caching -- The Linux page cache -- disk caching -- Specialized caches (user space caching) -- Why delay writing data to disk? -- Write caching strategies -- The flusher threads -- Device-managed resources -- Devres -- Summary -- DMA -- Direct Memory Access -- Setting up DMA mappings -- Cache coherency and DMA -- DMA mappings -- Coherent mapping -- Streaming DMA mapping -- Single-buffer mapping -- Scatter/gather mapping -- The concept of completion -- The DMA engine API -- Allocating a DMA slave channel -- Setting slave- and controller-specific parameters -- Getting a descriptor for transaction -- Submitting the transaction -- Issuing pending DMA requests and waiting for callback notification -- Putting it all together -- NXP SDMA (i.MX6) -- DMA DT binding -- Consumer binding -- Summary -- The Linux Device Model -- LDM data structures -- The bus -- Bus registration -- The device driver -- Device driver registration -- The device -- Device registration -- Deep inside LDM -- kobject structure -- kobj_type -- ksets -- Attributes -- The attributes group -- The device model and sysfs -- Sysfs files and attributes -- Current interfaces -- Device attributes -- Bus attributes -- Device driver attributes -- Class attributes -- Allowing sysfs attribute files to be pollable -- Summary -- Pin Control and GPIO Subsystem -- The pin control subsystem -- Pinctrl and the device tree -- The GPIO subsystem -- The integer-based GPIO interface -- legacy -- Claiming and configuring the GPIO. | |
505 | 8 | |a Accessing the GPIO -- getting/setting the value. | |
630 | 0 | 0 | |a Linux. |0 http://id.loc.gov/authorities/names/n94087892 |
630 | 0 | 7 | |a Linux |2 fast |
650 | 0 | |a Embedded computer systems |x Programming. |0 http://id.loc.gov/authorities/subjects/sh87006633 | |
650 | 0 | |a Operating systems (Computers) |0 http://id.loc.gov/authorities/subjects/sh85094982 | |
650 | 6 | |a Systèmes d'exploitation (Ordinateurs) | |
650 | 7 | |a operating systems. |2 aat | |
650 | 7 | |a COMPUTERS |x Operating Systems |x Linux. |2 bisacsh | |
650 | 7 | |a Embedded computer systems |x Programming |2 fast | |
650 | 7 | |a Operating systems (Computers) |2 fast | |
856 | 4 | 0 | |l FWS01 |p ZDB-4-EBA |q FWS_PDA_EBA |u https://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&AN=1637905 |3 Volltext |
938 | |a Askews and Holts Library Services |b ASKH |n AH33638061 | ||
938 | |a EBSCOhost |b EBSC |n 1637905 | ||
938 | |a ProQuest MyiLibrary Digital eBook Collection |b IDEB |n cis39159452 | ||
938 | |a YBP Library Services |b YANK |n 14934112 | ||
994 | |a 92 |b GEBAY | ||
912 | |a ZDB-4-EBA | ||
049 | |a DE-863 |
Datensatz im Suchindex
DE-BY-FWS_katkey | ZDB-4-EBA-on1015687238 |
---|---|
_version_ | 1816882408791736320 |
adam_text | |
any_adam_object | |
author | Madieu, John |
author_facet | Madieu, John |
author_role | aut |
author_sort | Madieu, John |
author_variant | j m jm |
building | Verbundindex |
bvnumber | localFWS |
callnumber-first | Q - Science |
callnumber-label | QA76 |
callnumber-raw | QA76.774.L46 |
callnumber-search | QA76.774.L46 |
callnumber-sort | QA 276.774 L46 |
callnumber-subject | QA - Mathematics |
collection | ZDB-4-EBA |
contents | Title Page -- Copyright -- Credits -- About the Author -- About the Reviewer -- www.PacktPub.com -- Customer Feedback -- Dedication -- Table of Contents -- Preface -- Introduction to Kernel Development -- Environment setup -- Getting the sources -- Source organization -- Kernel configuration -- Building your kernel -- Kernel habits -- Coding style -- Kernel structure allocation/initialization -- Classes, objects, and OOP -- Summary -- Device Driver Basis -- User space and kernel space -- The concept of modules -- Module dependencies -- depmod utility -- Module loading and unloading -- Manual loading -- modprobe and insmod -- /etc/modules-load.d/< -- filename> -- .conf -- Auto-loading -- Module unload -- Driver skeletons -- Module entry and exit point -- __init and __exit attributes -- Module information -- Licensing -- Module author(s) -- Module description -- Errors and message printing -- Error handling -- Handling null pointer errors -- Message printing -- printk() -- Module parameters -- Building your first module -- The module's makefile -- In the kernel tree -- Out of the tree -- Building the module -- Summary -- Kernel Facilities and Helper Functions -- Understanding the container_of macro -- Linked lists -- Creating and initializing a list -- Dynamic method -- Static method -- Creating a list node -- Adding a list node -- Deleting a node from the list -- Linked list traversal -- The kernel sleeping mechanism -- Wait queue -- Delay and timer management -- Standard timers -- Jiffies and HZ -- The timer API -- Timer setup initialization -- Standard timer example -- High-resolution timers (HRTs) -- HRT API -- HRT setup initialization -- Dynamic tick/tickless kernel -- Delays and sleep in the kernel -- Atomic context -- Nonatomic context -- Kernel locking mechanism -- Mutex -- Mutex API -- Declare -- Acquire and release -- Spinlock. Spinlock versus mutexes -- Work deferring mechanism -- Softirqs and ksoftirqd -- ksoftirqd -- Tasklets -- Declaring a tasklet -- Enabling and disabling a tasklet -- Tasklet scheduling -- Work queues -- Kernel-global work queue -- the shared queue -- Dedicated work queue -- Programming syntax -- Predefined (shared) workqueue and standard workqueue functions -- Kernel threads -- Kernel interruption mechanism -- Registering an interrupt handler -- Interrupt handler and lock -- Concept of bottom halves -- The problem -- interrupt handler design limitations -- The solution -- bottom halves -- Tasklets as bottom halves -- Workqueue as bottom halves -- Softirqs as bottom half -- Threaded IRQs -- Threaded bottom half -- Invoking user space applications from the kernel -- Summary -- Character Device Drivers -- The concept behind major and minor -- Device number allocation and freeing -- Introduction to device file operations -- File representation in the kernel -- Allocating and registering a character device -- Writing file operations -- Exchanging data between kernel space and user space -- A single value copy -- The open method -- Per-device data -- The release method -- The write method -- Steps to write -- The read method -- Steps to read -- The llseek method -- Steps to llseek -- The poll method -- Steps to poll -- The ioctl method -- Generating ioctl numbers (command) -- Steps for ioctl -- Filling the file_operations structure -- Summary -- Platform Device Drivers -- Platform drivers -- Platform devices -- Resources and platform data -- Device provisioning -- the old and deprecated way -- Resources -- Platform data -- Where to declare platform devices? -- Device provisioning -- the new and recommended way -- Devices, drivers, and bus matching -- How can platform devices and platform drivers match? -- Kernel devices and drivers-matching function. OF style and ACPI match -- ID table matching -- Per device-specific data on ID table matching -- Name matching -- platform device name matching -- Summary -- The Concept of a Device Tree -- Device tree mechanisms -- Naming convention -- Aliases, labels, and phandle -- DT compiler -- Representing and addressing devices -- SPI and I2C addressing -- Platform device addressing -- Handling resources -- Concept of named resources -- Accessing registers -- Handling interrupts -- The interrupt handler -- Interrupt controller code -- Extract application-specific data -- Text string -- Cells and unsigned 32-bit integers -- Boolean -- Extracting and parsing sub-nodes -- Platform drivers and DTs -- OF match style -- Dealing with non-device tree platforms -- Support multiple hardware devices with per device-specific data -- Match style mixing -- Platform resources and DTs -- Platform data versus DTs -- Summary -- I2C Client Drivers -- The driver architecture -- The i2c_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Accessing the client -- Plain I2C communication -- System Management Bus (SMBus) compatible functions -- Instantiating I2C devices in the board configuration file (old and deprecated way) -- I2C and device trees -- Defining and registering the I2C driver -- Remark -- Instantiating I2C devices in a DT -- the new way -- Putting it all together -- Summary -- SPI Device Drivers -- The driver architecture -- The device structure -- spi_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Instantiating SPI devices in board configuration file -- old and deprecated way -- SPI and device tree. Instantiate SPI devices in device tree -- the new way -- Define and register SPI driver -- Accessing and talking to the client -- Putting it all together -- SPI user mode driver -- With IOCTL -- Summary -- Regmap API -- A Register Map Abstraction -- Programming with the regmap API -- regmap_config structure -- regmap initialization -- SPI initialization -- I2C initialization -- Device access functions -- regmap_update_bits function -- Special regmap_multi_reg_write function -- Other device access functions -- regmap and cache -- Putting it all together -- A regmap example -- Summary -- IIO Framework -- IIO data structures -- iio_dev structure -- iio_info structure -- IIO channels -- Channel attribute naming conventions -- Distinguishing channels -- Putting it all together -- Triggered buffer support -- IIO trigger and sysfs (user space) -- Sysfs trigger interface -- add_trigger file -- remove_trigger file -- Tying a device with a trigger -- The interrupt trigger interface -- The hrtimer trigger interface -- IIO buffers -- IIO buffer sysfs interface -- IIO buffer setup -- Putting it all together -- IIO data access -- One-shot capture -- Buffer data access -- Capturing using the sysfs trigger -- Capturing using the hrtimer trigger -- IIO tools -- Summary -- Kernel Memory Management -- System memory layout -- kernel space and user space -- Kernel addresses -- concept of low and high memory -- Low memory -- High memory -- User space addresses -- Virtual memory area (VMA) -- Address translation and MMU -- Page lookup and TLB -- How does the TLB work? -- Memory allocation mechanism -- Page allocator -- Page allocation API -- Conversion functions -- Slab allocator -- The buddy algorithm -- A journey into the slab allocator -- kmalloc family allocation -- vmalloc allocator -- Process memory allocation under the hood -- The copy-on-write (CoW) case. Working with I/O memory to talk with hardware -- PIO devices access -- MMIO device access -- __iomem cookie -- Memory (re)mapping -- kmap -- Mapping kernel memory to user space -- Using remap_pfn_range -- Using io_remap_pfn_range -- The mmap file operation -- Implementing mmap in the kernel -- Linux caching system -- What is a cache? -- CPU cache -- memory caching -- The Linux page cache -- disk caching -- Specialized caches (user space caching) -- Why delay writing data to disk? -- Write caching strategies -- The flusher threads -- Device-managed resources -- Devres -- Summary -- DMA -- Direct Memory Access -- Setting up DMA mappings -- Cache coherency and DMA -- DMA mappings -- Coherent mapping -- Streaming DMA mapping -- Single-buffer mapping -- Scatter/gather mapping -- The concept of completion -- The DMA engine API -- Allocating a DMA slave channel -- Setting slave- and controller-specific parameters -- Getting a descriptor for transaction -- Submitting the transaction -- Issuing pending DMA requests and waiting for callback notification -- Putting it all together -- NXP SDMA (i.MX6) -- DMA DT binding -- Consumer binding -- Summary -- The Linux Device Model -- LDM data structures -- The bus -- Bus registration -- The device driver -- Device driver registration -- The device -- Device registration -- Deep inside LDM -- kobject structure -- kobj_type -- ksets -- Attributes -- The attributes group -- The device model and sysfs -- Sysfs files and attributes -- Current interfaces -- Device attributes -- Bus attributes -- Device driver attributes -- Class attributes -- Allowing sysfs attribute files to be pollable -- Summary -- Pin Control and GPIO Subsystem -- The pin control subsystem -- Pinctrl and the device tree -- The GPIO subsystem -- The integer-based GPIO interface -- legacy -- Claiming and configuring the GPIO. Accessing the GPIO -- getting/setting the value. |
ctrlnum | (OCoLC)1015687238 |
dewey-full | 005.432 |
dewey-hundreds | 000 - Computer science, information, general works |
dewey-ones | 005 - Computer programming, programs, data, security |
dewey-raw | 005.432 |
dewey-search | 005.432 |
dewey-sort | 15.432 |
dewey-tens | 000 - Computer science, information, general works |
discipline | Informatik |
format | Electronic eBook |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>13000cam a2200661 i 4500</leader><controlfield tag="001">ZDB-4-EBA-on1015687238</controlfield><controlfield tag="003">OCoLC</controlfield><controlfield tag="005">20241004212047.0</controlfield><controlfield tag="006">m o d </controlfield><controlfield tag="007">cr unu||||||||</controlfield><controlfield tag="008">171218s2017 enka o 000 0 eng d</controlfield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">UMI</subfield><subfield code="b">eng</subfield><subfield code="e">rda</subfield><subfield code="e">pn</subfield><subfield code="c">UMI</subfield><subfield code="d">OCLCF</subfield><subfield code="d">TOH</subfield><subfield code="d">YDX</subfield><subfield code="d">IDEBK</subfield><subfield code="d">CEF</subfield><subfield code="d">KSU</subfield><subfield code="d">DEBBG</subfield><subfield code="d">G3B</subfield><subfield code="d">S9I</subfield><subfield code="d">UAB</subfield><subfield code="d">N$T</subfield><subfield code="d">SXP</subfield><subfield code="d">NLE</subfield><subfield code="d">UKMGB</subfield><subfield code="d">AU@</subfield><subfield code="d">OCLCQ</subfield><subfield code="d">OCLCO</subfield><subfield code="d">OCLCQ</subfield><subfield code="d">OCLCO</subfield><subfield code="d">UKAHL</subfield><subfield code="d">OCLCQ</subfield><subfield code="d">OCLCO</subfield><subfield code="d">DXU</subfield></datafield><datafield tag="015" ind1=" " ind2=" "><subfield code="a">GBB7O3356</subfield><subfield code="2">bnb</subfield></datafield><datafield tag="016" ind1="7" ind2=" "><subfield code="a">018610853</subfield><subfield code="2">Uk</subfield></datafield><datafield tag="019" ind1=" " ind2=" "><subfield code="a">1007928426</subfield><subfield code="a">1014359640</subfield><subfield code="a">1021076714</subfield><subfield code="a">1021077269</subfield><subfield code="a">1064239860</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781782174752</subfield><subfield code="q">(electronic bk.)</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">1782174753</subfield><subfield code="q">(electronic bk.)</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">1785280007</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781785280009</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="z">9781785280009</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1015687238</subfield><subfield code="z">(OCoLC)1007928426</subfield><subfield code="z">(OCoLC)1014359640</subfield><subfield code="z">(OCoLC)1021076714</subfield><subfield code="z">(OCoLC)1021077269</subfield><subfield code="z">(OCoLC)1064239860</subfield></datafield><datafield tag="037" ind1=" " ind2=" "><subfield code="a">CL0500000920</subfield><subfield code="b">Safari Books Online</subfield></datafield><datafield tag="050" ind1=" " ind2="4"><subfield code="a">QA76.774.L46</subfield></datafield><datafield tag="072" ind1=" " ind2="7"><subfield code="a">COM</subfield><subfield code="x">046070</subfield><subfield code="2">bisacsh</subfield></datafield><datafield tag="082" ind1="7" ind2=" "><subfield code="a">005.432</subfield><subfield code="2">23</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">MAIN</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Madieu, John,</subfield><subfield code="e">author.</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Linux deivce drivers development :</subfield><subfield code="b">develop customized drivers for embedded Linux /</subfield><subfield code="c">John Madieu.</subfield></datafield><datafield tag="246" ind1="3" ind2="0"><subfield code="a">Develop customized drivers for embedded Linux</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Birmingham, UK :</subfield><subfield code="b">Packt Publishing,</subfield><subfield code="c">2017.</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">1 online resource :</subfield><subfield code="b">illustrations</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="a">text</subfield><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="a">computer</subfield><subfield code="b">c</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="a">online resource</subfield><subfield code="b">cr</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="347" ind1=" " ind2=" "><subfield code="a">data file</subfield></datafield><datafield tag="588" ind1="0" ind2=" "><subfield code="a">Online resource; title from title page (Safari, viewed December 11, 2017).</subfield></datafield><datafield tag="520" ind1=" " ind2=" "><subfield code="a">Linux kernel is a complex, portable, modular and widely used piece of software, running on around 80% of servers and embedded systems in more than half of devices throughout the World. Device drivers play a critical role in how well a Linux system performs. As Linux has turned out to be one of the most popular operating systems used, the interest in developing proprietary device drivers is also increasing steadily. This book will initially help you understand the basics of drivers as well as prepare for the long journey through the Linux Kernel. This book then covers drivers development based on various Linux subsystems such as memory management, PWM, RTC, IIO, IRQ management, and so on. The book also offers a practical approach on direct memory access and network device drivers. By the end of this book, you will be comfortable with the concept of device driver development and will be in a position to write any device driver from scratch using the latest kernel version (v4.13 at the time of writing this book).</subfield></datafield><datafield tag="505" ind1="0" ind2=" "><subfield code="a">Title Page -- Copyright -- Credits -- About the Author -- About the Reviewer -- www.PacktPub.com -- Customer Feedback -- Dedication -- Table of Contents -- Preface -- Introduction to Kernel Development -- Environment setup -- Getting the sources -- Source organization -- Kernel configuration -- Building your kernel -- Kernel habits -- Coding style -- Kernel structure allocation/initialization -- Classes, objects, and OOP -- Summary -- Device Driver Basis -- User space and kernel space -- The concept of modules -- Module dependencies -- depmod utility -- Module loading and unloading -- Manual loading -- modprobe and insmod -- /etc/modules-load.d/&lt -- filename&gt -- .conf -- Auto-loading -- Module unload -- Driver skeletons -- Module entry and exit point -- __init and __exit attributes -- Module information -- Licensing -- Module author(s) -- Module description -- Errors and message printing -- Error handling -- Handling null pointer errors -- Message printing -- printk() -- Module parameters -- Building your first module -- The module's makefile -- In the kernel tree -- Out of the tree -- Building the module -- Summary -- Kernel Facilities and Helper Functions -- Understanding the container_of macro -- Linked lists -- Creating and initializing a list -- Dynamic method -- Static method -- Creating a list node -- Adding a list node -- Deleting a node from the list -- Linked list traversal -- The kernel sleeping mechanism -- Wait queue -- Delay and timer management -- Standard timers -- Jiffies and HZ -- The timer API -- Timer setup initialization -- Standard timer example -- High-resolution timers (HRTs) -- HRT API -- HRT setup initialization -- Dynamic tick/tickless kernel -- Delays and sleep in the kernel -- Atomic context -- Nonatomic context -- Kernel locking mechanism -- Mutex -- Mutex API -- Declare -- Acquire and release -- Spinlock.</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Spinlock versus mutexes -- Work deferring mechanism -- Softirqs and ksoftirqd -- ksoftirqd -- Tasklets -- Declaring a tasklet -- Enabling and disabling a tasklet -- Tasklet scheduling -- Work queues -- Kernel-global work queue -- the shared queue -- Dedicated work queue -- Programming syntax -- Predefined (shared) workqueue and standard workqueue functions -- Kernel threads -- Kernel interruption mechanism -- Registering an interrupt handler -- Interrupt handler and lock -- Concept of bottom halves -- The problem -- interrupt handler design limitations -- The solution -- bottom halves -- Tasklets as bottom halves -- Workqueue as bottom halves -- Softirqs as bottom half -- Threaded IRQs -- Threaded bottom half -- Invoking user space applications from the kernel -- Summary -- Character Device Drivers -- The concept behind major and minor -- Device number allocation and freeing -- Introduction to device file operations -- File representation in the kernel -- Allocating and registering a character device -- Writing file operations -- Exchanging data between kernel space and user space -- A single value copy -- The open method -- Per-device data -- The release method -- The write method -- Steps to write -- The read method -- Steps to read -- The llseek method -- Steps to llseek -- The poll method -- Steps to poll -- The ioctl method -- Generating ioctl numbers (command) -- Steps for ioctl -- Filling the file_operations structure -- Summary -- Platform Device Drivers -- Platform drivers -- Platform devices -- Resources and platform data -- Device provisioning -- the old and deprecated way -- Resources -- Platform data -- Where to declare platform devices? -- Device provisioning -- the new and recommended way -- Devices, drivers, and bus matching -- How can platform devices and platform drivers match? -- Kernel devices and drivers-matching function.</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">OF style and ACPI match -- ID table matching -- Per device-specific data on ID table matching -- Name matching -- platform device name matching -- Summary -- The Concept of a Device Tree -- Device tree mechanisms -- Naming convention -- Aliases, labels, and phandle -- DT compiler -- Representing and addressing devices -- SPI and I2C addressing -- Platform device addressing -- Handling resources -- Concept of named resources -- Accessing registers -- Handling interrupts -- The interrupt handler -- Interrupt controller code -- Extract application-specific data -- Text string -- Cells and unsigned 32-bit integers -- Boolean -- Extracting and parsing sub-nodes -- Platform drivers and DTs -- OF match style -- Dealing with non-device tree platforms -- Support multiple hardware devices with per device-specific data -- Match style mixing -- Platform resources and DTs -- Platform data versus DTs -- Summary -- I2C Client Drivers -- The driver architecture -- The i2c_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Accessing the client -- Plain I2C communication -- System Management Bus (SMBus) compatible functions -- Instantiating I2C devices in the board configuration file (old and deprecated way) -- I2C and device trees -- Defining and registering the I2C driver -- Remark -- Instantiating I2C devices in a DT -- the new way -- Putting it all together -- Summary -- SPI Device Drivers -- The driver architecture -- The device structure -- spi_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Instantiating SPI devices in board configuration file -- old and deprecated way -- SPI and device tree.</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Instantiate SPI devices in device tree -- the new way -- Define and register SPI driver -- Accessing and talking to the client -- Putting it all together -- SPI user mode driver -- With IOCTL -- Summary -- Regmap API -- A Register Map Abstraction -- Programming with the regmap API -- regmap_config structure -- regmap initialization -- SPI initialization -- I2C initialization -- Device access functions -- regmap_update_bits function -- Special regmap_multi_reg_write function -- Other device access functions -- regmap and cache -- Putting it all together -- A regmap example -- Summary -- IIO Framework -- IIO data structures -- iio_dev structure -- iio_info structure -- IIO channels -- Channel attribute naming conventions -- Distinguishing channels -- Putting it all together -- Triggered buffer support -- IIO trigger and sysfs (user space) -- Sysfs trigger interface -- add_trigger file -- remove_trigger file -- Tying a device with a trigger -- The interrupt trigger interface -- The hrtimer trigger interface -- IIO buffers -- IIO buffer sysfs interface -- IIO buffer setup -- Putting it all together -- IIO data access -- One-shot capture -- Buffer data access -- Capturing using the sysfs trigger -- Capturing using the hrtimer trigger -- IIO tools -- Summary -- Kernel Memory Management -- System memory layout -- kernel space and user space -- Kernel addresses -- concept of low and high memory -- Low memory -- High memory -- User space addresses -- Virtual memory area (VMA) -- Address translation and MMU -- Page lookup and TLB -- How does the TLB work? -- Memory allocation mechanism -- Page allocator -- Page allocation API -- Conversion functions -- Slab allocator -- The buddy algorithm -- A journey into the slab allocator -- kmalloc family allocation -- vmalloc allocator -- Process memory allocation under the hood -- The copy-on-write (CoW) case.</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Working with I/O memory to talk with hardware -- PIO devices access -- MMIO device access -- __iomem cookie -- Memory (re)mapping -- kmap -- Mapping kernel memory to user space -- Using remap_pfn_range -- Using io_remap_pfn_range -- The mmap file operation -- Implementing mmap in the kernel -- Linux caching system -- What is a cache? -- CPU cache -- memory caching -- The Linux page cache -- disk caching -- Specialized caches (user space caching) -- Why delay writing data to disk? -- Write caching strategies -- The flusher threads -- Device-managed resources -- Devres -- Summary -- DMA -- Direct Memory Access -- Setting up DMA mappings -- Cache coherency and DMA -- DMA mappings -- Coherent mapping -- Streaming DMA mapping -- Single-buffer mapping -- Scatter/gather mapping -- The concept of completion -- The DMA engine API -- Allocating a DMA slave channel -- Setting slave- and controller-specific parameters -- Getting a descriptor for transaction -- Submitting the transaction -- Issuing pending DMA requests and waiting for callback notification -- Putting it all together -- NXP SDMA (i.MX6) -- DMA DT binding -- Consumer binding -- Summary -- The Linux Device Model -- LDM data structures -- The bus -- Bus registration -- The device driver -- Device driver registration -- The device -- Device registration -- Deep inside LDM -- kobject structure -- kobj_type -- ksets -- Attributes -- The attributes group -- The device model and sysfs -- Sysfs files and attributes -- Current interfaces -- Device attributes -- Bus attributes -- Device driver attributes -- Class attributes -- Allowing sysfs attribute files to be pollable -- Summary -- Pin Control and GPIO Subsystem -- The pin control subsystem -- Pinctrl and the device tree -- The GPIO subsystem -- The integer-based GPIO interface -- legacy -- Claiming and configuring the GPIO.</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Accessing the GPIO -- getting/setting the value.</subfield></datafield><datafield tag="630" ind1="0" ind2="0"><subfield code="a">Linux.</subfield><subfield code="0">http://id.loc.gov/authorities/names/n94087892</subfield></datafield><datafield tag="630" ind1="0" ind2="7"><subfield code="a">Linux</subfield><subfield code="2">fast</subfield></datafield><datafield tag="650" ind1=" " ind2="0"><subfield code="a">Embedded computer systems</subfield><subfield code="x">Programming.</subfield><subfield code="0">http://id.loc.gov/authorities/subjects/sh87006633</subfield></datafield><datafield tag="650" ind1=" " ind2="0"><subfield code="a">Operating systems (Computers)</subfield><subfield code="0">http://id.loc.gov/authorities/subjects/sh85094982</subfield></datafield><datafield tag="650" ind1=" " ind2="6"><subfield code="a">Systèmes d'exploitation (Ordinateurs)</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">operating systems.</subfield><subfield code="2">aat</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">COMPUTERS</subfield><subfield code="x">Operating Systems</subfield><subfield code="x">Linux.</subfield><subfield code="2">bisacsh</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">Embedded computer systems</subfield><subfield code="x">Programming</subfield><subfield code="2">fast</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">Operating systems (Computers)</subfield><subfield code="2">fast</subfield></datafield><datafield tag="856" ind1="4" ind2="0"><subfield code="l">FWS01</subfield><subfield code="p">ZDB-4-EBA</subfield><subfield code="q">FWS_PDA_EBA</subfield><subfield code="u">https://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&AN=1637905</subfield><subfield code="3">Volltext</subfield></datafield><datafield tag="938" ind1=" " ind2=" "><subfield code="a">Askews and Holts Library Services</subfield><subfield code="b">ASKH</subfield><subfield code="n">AH33638061</subfield></datafield><datafield tag="938" ind1=" " ind2=" "><subfield code="a">EBSCOhost</subfield><subfield code="b">EBSC</subfield><subfield code="n">1637905</subfield></datafield><datafield tag="938" ind1=" " ind2=" "><subfield code="a">ProQuest MyiLibrary Digital eBook Collection</subfield><subfield code="b">IDEB</subfield><subfield code="n">cis39159452</subfield></datafield><datafield tag="938" ind1=" " ind2=" "><subfield code="a">YBP Library Services</subfield><subfield code="b">YANK</subfield><subfield code="n">14934112</subfield></datafield><datafield tag="994" ind1=" " ind2=" "><subfield code="a">92</subfield><subfield code="b">GEBAY</subfield></datafield><datafield tag="912" ind1=" " ind2=" "><subfield code="a">ZDB-4-EBA</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-863</subfield></datafield></record></collection> |
id | ZDB-4-EBA-on1015687238 |
illustrated | Illustrated |
indexdate | 2024-11-27T13:28:09Z |
institution | BVB |
isbn | 9781782174752 1782174753 1785280007 9781785280009 |
language | English |
oclc_num | 1015687238 |
open_access_boolean | |
owner | MAIN DE-863 DE-BY-FWS |
owner_facet | MAIN DE-863 DE-BY-FWS |
physical | 1 online resource : illustrations |
psigel | ZDB-4-EBA |
publishDate | 2017 |
publishDateSearch | 2017 |
publishDateSort | 2017 |
publisher | Packt Publishing, |
record_format | marc |
spelling | Madieu, John, author. Linux deivce drivers development : develop customized drivers for embedded Linux / John Madieu. Develop customized drivers for embedded Linux Birmingham, UK : Packt Publishing, 2017. 1 online resource : illustrations text txt rdacontent computer c rdamedia online resource cr rdacarrier data file Online resource; title from title page (Safari, viewed December 11, 2017). Linux kernel is a complex, portable, modular and widely used piece of software, running on around 80% of servers and embedded systems in more than half of devices throughout the World. Device drivers play a critical role in how well a Linux system performs. As Linux has turned out to be one of the most popular operating systems used, the interest in developing proprietary device drivers is also increasing steadily. This book will initially help you understand the basics of drivers as well as prepare for the long journey through the Linux Kernel. This book then covers drivers development based on various Linux subsystems such as memory management, PWM, RTC, IIO, IRQ management, and so on. The book also offers a practical approach on direct memory access and network device drivers. By the end of this book, you will be comfortable with the concept of device driver development and will be in a position to write any device driver from scratch using the latest kernel version (v4.13 at the time of writing this book). Title Page -- Copyright -- Credits -- About the Author -- About the Reviewer -- www.PacktPub.com -- Customer Feedback -- Dedication -- Table of Contents -- Preface -- Introduction to Kernel Development -- Environment setup -- Getting the sources -- Source organization -- Kernel configuration -- Building your kernel -- Kernel habits -- Coding style -- Kernel structure allocation/initialization -- Classes, objects, and OOP -- Summary -- Device Driver Basis -- User space and kernel space -- The concept of modules -- Module dependencies -- depmod utility -- Module loading and unloading -- Manual loading -- modprobe and insmod -- /etc/modules-load.d/< -- filename> -- .conf -- Auto-loading -- Module unload -- Driver skeletons -- Module entry and exit point -- __init and __exit attributes -- Module information -- Licensing -- Module author(s) -- Module description -- Errors and message printing -- Error handling -- Handling null pointer errors -- Message printing -- printk() -- Module parameters -- Building your first module -- The module's makefile -- In the kernel tree -- Out of the tree -- Building the module -- Summary -- Kernel Facilities and Helper Functions -- Understanding the container_of macro -- Linked lists -- Creating and initializing a list -- Dynamic method -- Static method -- Creating a list node -- Adding a list node -- Deleting a node from the list -- Linked list traversal -- The kernel sleeping mechanism -- Wait queue -- Delay and timer management -- Standard timers -- Jiffies and HZ -- The timer API -- Timer setup initialization -- Standard timer example -- High-resolution timers (HRTs) -- HRT API -- HRT setup initialization -- Dynamic tick/tickless kernel -- Delays and sleep in the kernel -- Atomic context -- Nonatomic context -- Kernel locking mechanism -- Mutex -- Mutex API -- Declare -- Acquire and release -- Spinlock. Spinlock versus mutexes -- Work deferring mechanism -- Softirqs and ksoftirqd -- ksoftirqd -- Tasklets -- Declaring a tasklet -- Enabling and disabling a tasklet -- Tasklet scheduling -- Work queues -- Kernel-global work queue -- the shared queue -- Dedicated work queue -- Programming syntax -- Predefined (shared) workqueue and standard workqueue functions -- Kernel threads -- Kernel interruption mechanism -- Registering an interrupt handler -- Interrupt handler and lock -- Concept of bottom halves -- The problem -- interrupt handler design limitations -- The solution -- bottom halves -- Tasklets as bottom halves -- Workqueue as bottom halves -- Softirqs as bottom half -- Threaded IRQs -- Threaded bottom half -- Invoking user space applications from the kernel -- Summary -- Character Device Drivers -- The concept behind major and minor -- Device number allocation and freeing -- Introduction to device file operations -- File representation in the kernel -- Allocating and registering a character device -- Writing file operations -- Exchanging data between kernel space and user space -- A single value copy -- The open method -- Per-device data -- The release method -- The write method -- Steps to write -- The read method -- Steps to read -- The llseek method -- Steps to llseek -- The poll method -- Steps to poll -- The ioctl method -- Generating ioctl numbers (command) -- Steps for ioctl -- Filling the file_operations structure -- Summary -- Platform Device Drivers -- Platform drivers -- Platform devices -- Resources and platform data -- Device provisioning -- the old and deprecated way -- Resources -- Platform data -- Where to declare platform devices? -- Device provisioning -- the new and recommended way -- Devices, drivers, and bus matching -- How can platform devices and platform drivers match? -- Kernel devices and drivers-matching function. OF style and ACPI match -- ID table matching -- Per device-specific data on ID table matching -- Name matching -- platform device name matching -- Summary -- The Concept of a Device Tree -- Device tree mechanisms -- Naming convention -- Aliases, labels, and phandle -- DT compiler -- Representing and addressing devices -- SPI and I2C addressing -- Platform device addressing -- Handling resources -- Concept of named resources -- Accessing registers -- Handling interrupts -- The interrupt handler -- Interrupt controller code -- Extract application-specific data -- Text string -- Cells and unsigned 32-bit integers -- Boolean -- Extracting and parsing sub-nodes -- Platform drivers and DTs -- OF match style -- Dealing with non-device tree platforms -- Support multiple hardware devices with per device-specific data -- Match style mixing -- Platform resources and DTs -- Platform data versus DTs -- Summary -- I2C Client Drivers -- The driver architecture -- The i2c_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Accessing the client -- Plain I2C communication -- System Management Bus (SMBus) compatible functions -- Instantiating I2C devices in the board configuration file (old and deprecated way) -- I2C and device trees -- Defining and registering the I2C driver -- Remark -- Instantiating I2C devices in a DT -- the new way -- Putting it all together -- Summary -- SPI Device Drivers -- The driver architecture -- The device structure -- spi_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Instantiating SPI devices in board configuration file -- old and deprecated way -- SPI and device tree. Instantiate SPI devices in device tree -- the new way -- Define and register SPI driver -- Accessing and talking to the client -- Putting it all together -- SPI user mode driver -- With IOCTL -- Summary -- Regmap API -- A Register Map Abstraction -- Programming with the regmap API -- regmap_config structure -- regmap initialization -- SPI initialization -- I2C initialization -- Device access functions -- regmap_update_bits function -- Special regmap_multi_reg_write function -- Other device access functions -- regmap and cache -- Putting it all together -- A regmap example -- Summary -- IIO Framework -- IIO data structures -- iio_dev structure -- iio_info structure -- IIO channels -- Channel attribute naming conventions -- Distinguishing channels -- Putting it all together -- Triggered buffer support -- IIO trigger and sysfs (user space) -- Sysfs trigger interface -- add_trigger file -- remove_trigger file -- Tying a device with a trigger -- The interrupt trigger interface -- The hrtimer trigger interface -- IIO buffers -- IIO buffer sysfs interface -- IIO buffer setup -- Putting it all together -- IIO data access -- One-shot capture -- Buffer data access -- Capturing using the sysfs trigger -- Capturing using the hrtimer trigger -- IIO tools -- Summary -- Kernel Memory Management -- System memory layout -- kernel space and user space -- Kernel addresses -- concept of low and high memory -- Low memory -- High memory -- User space addresses -- Virtual memory area (VMA) -- Address translation and MMU -- Page lookup and TLB -- How does the TLB work? -- Memory allocation mechanism -- Page allocator -- Page allocation API -- Conversion functions -- Slab allocator -- The buddy algorithm -- A journey into the slab allocator -- kmalloc family allocation -- vmalloc allocator -- Process memory allocation under the hood -- The copy-on-write (CoW) case. Working with I/O memory to talk with hardware -- PIO devices access -- MMIO device access -- __iomem cookie -- Memory (re)mapping -- kmap -- Mapping kernel memory to user space -- Using remap_pfn_range -- Using io_remap_pfn_range -- The mmap file operation -- Implementing mmap in the kernel -- Linux caching system -- What is a cache? -- CPU cache -- memory caching -- The Linux page cache -- disk caching -- Specialized caches (user space caching) -- Why delay writing data to disk? -- Write caching strategies -- The flusher threads -- Device-managed resources -- Devres -- Summary -- DMA -- Direct Memory Access -- Setting up DMA mappings -- Cache coherency and DMA -- DMA mappings -- Coherent mapping -- Streaming DMA mapping -- Single-buffer mapping -- Scatter/gather mapping -- The concept of completion -- The DMA engine API -- Allocating a DMA slave channel -- Setting slave- and controller-specific parameters -- Getting a descriptor for transaction -- Submitting the transaction -- Issuing pending DMA requests and waiting for callback notification -- Putting it all together -- NXP SDMA (i.MX6) -- DMA DT binding -- Consumer binding -- Summary -- The Linux Device Model -- LDM data structures -- The bus -- Bus registration -- The device driver -- Device driver registration -- The device -- Device registration -- Deep inside LDM -- kobject structure -- kobj_type -- ksets -- Attributes -- The attributes group -- The device model and sysfs -- Sysfs files and attributes -- Current interfaces -- Device attributes -- Bus attributes -- Device driver attributes -- Class attributes -- Allowing sysfs attribute files to be pollable -- Summary -- Pin Control and GPIO Subsystem -- The pin control subsystem -- Pinctrl and the device tree -- The GPIO subsystem -- The integer-based GPIO interface -- legacy -- Claiming and configuring the GPIO. Accessing the GPIO -- getting/setting the value. Linux. http://id.loc.gov/authorities/names/n94087892 Linux fast Embedded computer systems Programming. http://id.loc.gov/authorities/subjects/sh87006633 Operating systems (Computers) http://id.loc.gov/authorities/subjects/sh85094982 Systèmes d'exploitation (Ordinateurs) operating systems. aat COMPUTERS Operating Systems Linux. bisacsh Embedded computer systems Programming fast Operating systems (Computers) fast FWS01 ZDB-4-EBA FWS_PDA_EBA https://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&AN=1637905 Volltext |
spellingShingle | Madieu, John Linux deivce drivers development : develop customized drivers for embedded Linux / Title Page -- Copyright -- Credits -- About the Author -- About the Reviewer -- www.PacktPub.com -- Customer Feedback -- Dedication -- Table of Contents -- Preface -- Introduction to Kernel Development -- Environment setup -- Getting the sources -- Source organization -- Kernel configuration -- Building your kernel -- Kernel habits -- Coding style -- Kernel structure allocation/initialization -- Classes, objects, and OOP -- Summary -- Device Driver Basis -- User space and kernel space -- The concept of modules -- Module dependencies -- depmod utility -- Module loading and unloading -- Manual loading -- modprobe and insmod -- /etc/modules-load.d/< -- filename> -- .conf -- Auto-loading -- Module unload -- Driver skeletons -- Module entry and exit point -- __init and __exit attributes -- Module information -- Licensing -- Module author(s) -- Module description -- Errors and message printing -- Error handling -- Handling null pointer errors -- Message printing -- printk() -- Module parameters -- Building your first module -- The module's makefile -- In the kernel tree -- Out of the tree -- Building the module -- Summary -- Kernel Facilities and Helper Functions -- Understanding the container_of macro -- Linked lists -- Creating and initializing a list -- Dynamic method -- Static method -- Creating a list node -- Adding a list node -- Deleting a node from the list -- Linked list traversal -- The kernel sleeping mechanism -- Wait queue -- Delay and timer management -- Standard timers -- Jiffies and HZ -- The timer API -- Timer setup initialization -- Standard timer example -- High-resolution timers (HRTs) -- HRT API -- HRT setup initialization -- Dynamic tick/tickless kernel -- Delays and sleep in the kernel -- Atomic context -- Nonatomic context -- Kernel locking mechanism -- Mutex -- Mutex API -- Declare -- Acquire and release -- Spinlock. Spinlock versus mutexes -- Work deferring mechanism -- Softirqs and ksoftirqd -- ksoftirqd -- Tasklets -- Declaring a tasklet -- Enabling and disabling a tasklet -- Tasklet scheduling -- Work queues -- Kernel-global work queue -- the shared queue -- Dedicated work queue -- Programming syntax -- Predefined (shared) workqueue and standard workqueue functions -- Kernel threads -- Kernel interruption mechanism -- Registering an interrupt handler -- Interrupt handler and lock -- Concept of bottom halves -- The problem -- interrupt handler design limitations -- The solution -- bottom halves -- Tasklets as bottom halves -- Workqueue as bottom halves -- Softirqs as bottom half -- Threaded IRQs -- Threaded bottom half -- Invoking user space applications from the kernel -- Summary -- Character Device Drivers -- The concept behind major and minor -- Device number allocation and freeing -- Introduction to device file operations -- File representation in the kernel -- Allocating and registering a character device -- Writing file operations -- Exchanging data between kernel space and user space -- A single value copy -- The open method -- Per-device data -- The release method -- The write method -- Steps to write -- The read method -- Steps to read -- The llseek method -- Steps to llseek -- The poll method -- Steps to poll -- The ioctl method -- Generating ioctl numbers (command) -- Steps for ioctl -- Filling the file_operations structure -- Summary -- Platform Device Drivers -- Platform drivers -- Platform devices -- Resources and platform data -- Device provisioning -- the old and deprecated way -- Resources -- Platform data -- Where to declare platform devices? -- Device provisioning -- the new and recommended way -- Devices, drivers, and bus matching -- How can platform devices and platform drivers match? -- Kernel devices and drivers-matching function. OF style and ACPI match -- ID table matching -- Per device-specific data on ID table matching -- Name matching -- platform device name matching -- Summary -- The Concept of a Device Tree -- Device tree mechanisms -- Naming convention -- Aliases, labels, and phandle -- DT compiler -- Representing and addressing devices -- SPI and I2C addressing -- Platform device addressing -- Handling resources -- Concept of named resources -- Accessing registers -- Handling interrupts -- The interrupt handler -- Interrupt controller code -- Extract application-specific data -- Text string -- Cells and unsigned 32-bit integers -- Boolean -- Extracting and parsing sub-nodes -- Platform drivers and DTs -- OF match style -- Dealing with non-device tree platforms -- Support multiple hardware devices with per device-specific data -- Match style mixing -- Platform resources and DTs -- Platform data versus DTs -- Summary -- I2C Client Drivers -- The driver architecture -- The i2c_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Accessing the client -- Plain I2C communication -- System Management Bus (SMBus) compatible functions -- Instantiating I2C devices in the board configuration file (old and deprecated way) -- I2C and device trees -- Defining and registering the I2C driver -- Remark -- Instantiating I2C devices in a DT -- the new way -- Putting it all together -- Summary -- SPI Device Drivers -- The driver architecture -- The device structure -- spi_driver structure -- The probe() function -- Per-device data -- The remove() function -- Driver initialization and registration -- Driver and device provisioning -- Instantiating SPI devices in board configuration file -- old and deprecated way -- SPI and device tree. Instantiate SPI devices in device tree -- the new way -- Define and register SPI driver -- Accessing and talking to the client -- Putting it all together -- SPI user mode driver -- With IOCTL -- Summary -- Regmap API -- A Register Map Abstraction -- Programming with the regmap API -- regmap_config structure -- regmap initialization -- SPI initialization -- I2C initialization -- Device access functions -- regmap_update_bits function -- Special regmap_multi_reg_write function -- Other device access functions -- regmap and cache -- Putting it all together -- A regmap example -- Summary -- IIO Framework -- IIO data structures -- iio_dev structure -- iio_info structure -- IIO channels -- Channel attribute naming conventions -- Distinguishing channels -- Putting it all together -- Triggered buffer support -- IIO trigger and sysfs (user space) -- Sysfs trigger interface -- add_trigger file -- remove_trigger file -- Tying a device with a trigger -- The interrupt trigger interface -- The hrtimer trigger interface -- IIO buffers -- IIO buffer sysfs interface -- IIO buffer setup -- Putting it all together -- IIO data access -- One-shot capture -- Buffer data access -- Capturing using the sysfs trigger -- Capturing using the hrtimer trigger -- IIO tools -- Summary -- Kernel Memory Management -- System memory layout -- kernel space and user space -- Kernel addresses -- concept of low and high memory -- Low memory -- High memory -- User space addresses -- Virtual memory area (VMA) -- Address translation and MMU -- Page lookup and TLB -- How does the TLB work? -- Memory allocation mechanism -- Page allocator -- Page allocation API -- Conversion functions -- Slab allocator -- The buddy algorithm -- A journey into the slab allocator -- kmalloc family allocation -- vmalloc allocator -- Process memory allocation under the hood -- The copy-on-write (CoW) case. Working with I/O memory to talk with hardware -- PIO devices access -- MMIO device access -- __iomem cookie -- Memory (re)mapping -- kmap -- Mapping kernel memory to user space -- Using remap_pfn_range -- Using io_remap_pfn_range -- The mmap file operation -- Implementing mmap in the kernel -- Linux caching system -- What is a cache? -- CPU cache -- memory caching -- The Linux page cache -- disk caching -- Specialized caches (user space caching) -- Why delay writing data to disk? -- Write caching strategies -- The flusher threads -- Device-managed resources -- Devres -- Summary -- DMA -- Direct Memory Access -- Setting up DMA mappings -- Cache coherency and DMA -- DMA mappings -- Coherent mapping -- Streaming DMA mapping -- Single-buffer mapping -- Scatter/gather mapping -- The concept of completion -- The DMA engine API -- Allocating a DMA slave channel -- Setting slave- and controller-specific parameters -- Getting a descriptor for transaction -- Submitting the transaction -- Issuing pending DMA requests and waiting for callback notification -- Putting it all together -- NXP SDMA (i.MX6) -- DMA DT binding -- Consumer binding -- Summary -- The Linux Device Model -- LDM data structures -- The bus -- Bus registration -- The device driver -- Device driver registration -- The device -- Device registration -- Deep inside LDM -- kobject structure -- kobj_type -- ksets -- Attributes -- The attributes group -- The device model and sysfs -- Sysfs files and attributes -- Current interfaces -- Device attributes -- Bus attributes -- Device driver attributes -- Class attributes -- Allowing sysfs attribute files to be pollable -- Summary -- Pin Control and GPIO Subsystem -- The pin control subsystem -- Pinctrl and the device tree -- The GPIO subsystem -- The integer-based GPIO interface -- legacy -- Claiming and configuring the GPIO. Accessing the GPIO -- getting/setting the value. Linux. http://id.loc.gov/authorities/names/n94087892 Linux fast Embedded computer systems Programming. http://id.loc.gov/authorities/subjects/sh87006633 Operating systems (Computers) http://id.loc.gov/authorities/subjects/sh85094982 Systèmes d'exploitation (Ordinateurs) operating systems. aat COMPUTERS Operating Systems Linux. bisacsh Embedded computer systems Programming fast Operating systems (Computers) fast |
subject_GND | http://id.loc.gov/authorities/names/n94087892 http://id.loc.gov/authorities/subjects/sh87006633 http://id.loc.gov/authorities/subjects/sh85094982 |
title | Linux deivce drivers development : develop customized drivers for embedded Linux / |
title_alt | Develop customized drivers for embedded Linux |
title_auth | Linux deivce drivers development : develop customized drivers for embedded Linux / |
title_exact_search | Linux deivce drivers development : develop customized drivers for embedded Linux / |
title_full | Linux deivce drivers development : develop customized drivers for embedded Linux / John Madieu. |
title_fullStr | Linux deivce drivers development : develop customized drivers for embedded Linux / John Madieu. |
title_full_unstemmed | Linux deivce drivers development : develop customized drivers for embedded Linux / John Madieu. |
title_short | Linux deivce drivers development : |
title_sort | linux deivce drivers development develop customized drivers for embedded linux |
title_sub | develop customized drivers for embedded Linux / |
topic | Linux. http://id.loc.gov/authorities/names/n94087892 Linux fast Embedded computer systems Programming. http://id.loc.gov/authorities/subjects/sh87006633 Operating systems (Computers) http://id.loc.gov/authorities/subjects/sh85094982 Systèmes d'exploitation (Ordinateurs) operating systems. aat COMPUTERS Operating Systems Linux. bisacsh Embedded computer systems Programming fast Operating systems (Computers) fast |
topic_facet | Linux. Linux Embedded computer systems Programming. Operating systems (Computers) Systèmes d'exploitation (Ordinateurs) operating systems. COMPUTERS Operating Systems Linux. Embedded computer systems Programming |
url | https://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&AN=1637905 |
work_keys_str_mv | AT madieujohn linuxdeivcedriversdevelopmentdevelopcustomizeddriversforembeddedlinux AT madieujohn developcustomizeddriversforembeddedlinux |