SlideShare a Scribd company logo
Note: The Copyrights of the referenced materials and photos go to their original authors. As a result, this slide is for personal reference only.
For the contents created in this document, the Copyright belongs to William W.-Y. Liang. © 2005-2016 All Rights Reserved.
NTU CSIE Open Source System Software
2016.03.22
An Introduction to the Linux Kernel
with Device Drivers
William W.-Y. Liang (梁文耀), Ph. D.
http://www.ntut.edu.tw/~wyliang
for 台大資工系開源系統軟體課程
hosted by Prof. Shih-Hao Hung
© 2016 William W.-Y. Liang, All Rights Reserved.
General-purpose Operating Systems
Characteristics
Development of applications can be logically separated from hardware
Complete software stacks and middleware can be created to support easy
development of complex and versatile applications.
Example:
Linux (with many Distributions), Android, Chrome OS, Firefox OS,
Brillo, uClinux, MacOS, iOS, Windows, etc.
Application development
System independent application development: General applications,
GUI/Window programming, Web programming
System dependent software development: System programming, Device
drivers, Protocol software
2 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
The Linux Operating System
Open source and free
Maintained by numerous volunteer experts and hackers
Robust, efficient, and reliable
Modular, configurable, and scalable
Tons of applications available
Suitable for application types from low-end embedded systems, mid-range consumer
products, personal computer, and up to the high performance supercomputers
3 NTU OSSSP 2016: Linux Kernel
https://en.wikipedia.org/wiki/Linux_kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Some References
Linux Kernel Wiki
https://en.wikipedia.org/wiki/Linux_kernel
Linux Kernel Source
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
Reference books for Beginners
Linux Device Driver, 3rd Edition, by Jonathan Corbet, Alessandro
Rubini and Greg Kroah-Hartman, O'Reilly (Also available online
https://lwn.net/Kernel/LDD3/)
Linux Kernel in a NutShell, by Greg Kroah-Hartman, O'Reilly (Also
available online http://www.kroah.com/lkn/)
Understanding the Linux Kernel, 3rd Edition, by Daniel P. Bovet, Marco
Cesati, O'Reilly
4 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Chitchat about Linux and the Kernel
5 NTU OSSSP 2016: Linux Kernel
* Taiwanese slang :^)
© 2016 William W.-Y. Liang, All Rights Reserved.
A Systems View -- from Hardware to Software
Hardware
Software development environment
Tool chain and Library
Boot loader
OS Kernel / RTOS
Middleware*
Applications
6 NTU OSSSP 2016: Linux Kernel
* Example: In Android, the
middleware is called the
Application Framework.
Source: Qing Li and Caroline Yao, “real-time concepts for embedded systems”
Embedded System Development Environment Example
© 2016 William W.-Y. Liang, All Rights Reserved.
The Episode: System Booting
Source: Qing Li and Caroline Yao, “real-time concepts for embedded systems”
7 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Boot Sequence Example
8 NTU OSSSP 2016: Linux Kernel
http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted
© 2016 William W.-Y. Liang, All Rights Reserved.
Booting the Kernel – Before the C code
9 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Booting the Kernel – Entering the C World
10 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Prepare for Tracing the Kernel
Tools, always the most important thing
git, repo, vim, ctags, grep, find, etc.
Basics for understanding the Kernel
Data structures
11 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Introduction to the Linux Kernel
12 NTU OSSSP 2016: Linux Kernel
Let’s try to understand the Linux
kernel by introducing the basics
for the device drivers and the
kernel features, and discussing
on some related issues.
© 2016 William W.-Y. Liang, All Rights Reserved.
Software View from User Program to Hardware
For a general purpose OS
such as Linux
User level (user space)
Coding
Compilation
Linking
Execution
Kernel (kernel space)
Program loading
System calls (API)
Device drivers
Hardware manipulation
Bare metal hardware
13 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Device Drivers in Linux
Device drivers are usually treated as black boxes for
the application developers.
They resemble as a software layer
lying between the applications and
the actual devices.
14 NTU OSSSP 2016: Linux Kernel
http: //www.ni.com/tutorial/3789/en/
© 2016 William W.-Y. Liang, All Rights Reserved.
Device Drivers in Linux Kernel
15 NTU OSSSP 2016: Linux Kernel
ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition
© 2016 William W.-Y. Liang, All Rights Reserved.
Major Classes of Devices for Linux
Character devices
A character (char) device is one that can be accessed as a stream
of bytes (just like a normal file).
Block devices
A block device is accessed in a unit of fixed-size block.
The device can be accessed randomly.
Network interfaces
Others: File Systems, Protocol Stack, USB, PCI, etc.
Refers to <kernel-source>/Documentation/devices.txt”
16 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Device Files
File Operations vs. Device Accesses
Device Initialization vs. File Open
Device Accesses vs. File Read/Write
Device Control vs. File Control
Device Termination vs. File Close
UNIX/Linux systems implement device files to enable
users to employ familiar commands and functions such
as open, read, write, and close when working with
some peripherals.
17 NTU OSSSP 2016: Linux Kernel
int open( char *pathname, int flags, … );
int read( int fd, void *buf, size_t count );
int write( int fd, void *buf, size_t count );
int ioctl(struct inode *, struct file *, unsigned int, unsigned long );
int close( int fd );
© 2016 William W.-Y. Liang, All Rights Reserved.
How Device File and Driver Modules Work?
18 NTU OSSSP 2016: Linux Kernel
☼ Discussion: taking “Hello, World” as an example
© 2016 William W.-Y. Liang, All Rights Reserved.
Example: Applications using a Device
19 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Device Number
Example
crw-rw-rw- 1 root root 1, 3 Mar 2 2015 null
crw-rw-rw- 1 root root 1, 5 Mar 2 2015 zero
crw------- 1 root root 4, 1 Mar 2 2015 tty1
crw-rw-rw- 1 root tty 4, 64 Mar 2 2015 ttys0
crw-rw---- 1 root uucp 4, 65 Mar 2 2015 ttyS1
crw------- 1 root root 10, 1 Mar 2 2015 psaux
crw-rw-rw- 1 root root 123, 0 Mar 2 2015 androint
A System Administrator may create device files with
the “mknod” command. For example,
mknod /dev/androint c 123 0
‘/dev/androint’ is the file’s pathname, ‘c’ indicates that it’s a
character-mode device, 123 is its (unique) ‘major number’,
and 0 is its ‘minor number’.
20 NTU OSSSP 2016: Linux Kernel
☼ Discussion: relationship between device files and drivers
© 2016 William W.-Y. Liang, All Rights Reserved.
Loadable Kernel Modules
A great mechanism for OS ‘extensibility’
No need to recompile and then reboot
A kernel module differs from a normal C program
A kernel module cannot call any of the familiar
functions from the standard C runtime libraries
A module will be run as part of the kernel
Any ‘bug’ can cause a system malfunction or a
complete crash!
21 NTU OSSSP 2016: Linux Kernel
☼ Discussion: GPL issues with the Linux kernel modules
© 2016 William W.-Y. Liang, All Rights Reserved.
Example
22 NTU OSSSP 2016: Linux Kernel
☼ Discussion: how multiple program entries work?
© 2016 William W.-Y. Liang, All Rights Reserved.
How to get a module to work in Kernel
23 NTU OSSSP 2016: Linux Kernel
ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition
Driver Functions
© 2016 William W.-Y. Liang, All Rights Reserved.
Example: Device Registration
24 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Driver Methods -- File Operations
The kernel uses the file_operations structure to access the
driver’s methods.
int (*open) (struct inode *, struct file *);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned
long);
int (*release) (struct inode *, struct file *);
…
25 NTU OSSSP 2016: Linux Kernel
☼ Discussion: drivers vs. the object-orient concept
© 2016 William W.-Y. Liang, All Rights Reserved.
Kernel and User Space
26 NTU OSSSP 2016: Linux Kernel
☼ Discussion: address space for kernel and processes
© 2016 William W.-Y. Liang, All Rights Reserved.
Virtual to Physical Space
27 NTU OSSSP 2016: Linux Kernel
https://en.wikipedia.org/wiki/Operating_system
☼ Discussion: how the memory space is utilized?
ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition
© 2016 William W.-Y. Liang, All Rights Reserved.
Data Transfer between User and Kernel Space
28 NTU OSSSP 2016: Linux Kernel
Read: kernel->user
Write: user->kernel
☼ Discussion: issues for cross space data accesses
ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition ,
© 2016 William W.-Y. Liang, All Rights Reserved.
Example: User & Kernel Space Data Transfer
29 NTU OSSSP 2016: Linux Kernel
© 2016 William W.-Y. Liang, All Rights Reserved.
Kernel Memory Allocation
Small size allocation
kmalloc and kfree
dptr->data = kmalloc(qset * sizeof(char *), GFP_KERNEL);
memset(dptr->data, 0, qset * sizeof(char *));
Limitations
Large size allocation
vmalloc and vfree
Restrictions
Page allocation
Slab and memory pool
30 NTU OSSSP 2016: Linux Kernel
☼ Discussion: performance issues in memory management
© 2016 William W.-Y. Liang, All Rights Reserved.
Multi-tasking: the Central Part of the OS
Process states in OSes
Running: own CPU
Ready: To be scheduled,
in ready queue (run-queue)
Waiting:
Pending on I/O or Event
Delay itself for some duration
Request a resource but is not yet available
Linux Task States
Tasks: user-process, user-thread, kernel thread
States: TASK_RUNNING, TASK_INTERRUPTIBLE, etc.
Scheduling Policy
SCHED_OTHER, SCHED_FIFO, SCHED_RR, etc
31 NTU OSSSP 2016: Linux Kernel
☼ Discussion: scheduling and preemption issues
© 2016 William W.-Y. Liang, All Rights Reserved.
Concurrency Problems
Problems: Data inconsistency, Deadlock
Race Condition: Occurs when multiple tasks want to
access the shared resources, such as shared data or
hardware devices.
32 NTU OSSSP 2016: Linux Kernel
☼ Discussion: what’s the exact cause?
© 2016 William W.-Y. Liang, All Rights Reserved.
Thread Safe
Potential Causes of Thread-Unsafe Problems
Global variables
Static variables
Indirect accesses
Solutions
Reentrancy
Atomic operations
Thread-local storage
Mutual exclusion
33 NTU OSSSP 2016: Linux Kernel
Concurrency in Kernel and Device Drivers
 Driver code vs. Tasks
 Single Core vs. Multicore
 IRQ impact
 Soft-IRQ
☼ Discussion: performance issues for synchronizations
© 2016 William W.-Y. Liang, All Rights Reserved.
Synchronization Operations
Semaphore
down(), up(), etc.
Mutex
mutex_lock(), mutex_unlock(), etc.
Spin locks
spin_lock(), spin_unlock(), etc.
Atomic operations
atomic_set(), atomic_add(), etc
Bit operations
set_bit(), clear_bit(), etc.
34 NTU OSSSP 2016: Linux Kernel
☼ Discussion: semaphore vs. spinlock, usage & performance
© 2016 William W.-Y. Liang, All Rights Reserved.
Interrupt Handling
35 NTU OSSSP 2016: Linux Kernel
☼ Discussion: cost and performance issues
of IRQ handling and solutions
© 2016 William W.-Y. Liang, All Rights Reserved.
Task Blocking and Waiting Queue
Processes are usually blocked due to I/O waiting.
No data available for read, or no space
available for write or device busy
Waiting queues
Blocked task is put into a waiting queue
before it is woke up.
36 NTU OSSSP 2016: Linux Kernel Linux Device Drivers, Second Edition
☼ Discussion: how it works?
Linux Device Drivers, Second Edition
© 2016 William W.-Y. Liang, All Rights Reserved.
The Endless Journey on Discovering Linux
To be Continued…
This brief introductory lecture is just a beginning.
Still many interesting things out there
Take it as interesting adventure, by learning from the
wonderful open source world!
37 NTU OSSSP 2016: Linux Kernel
https://en.wikipedia.org/wiki/Linux_kernel#/media/File:Linux_kernel_map.png
Let’s keep the discussion next week
on the next topic – Android Framework.
Note: The Copyrights of the referenced materials and photos go to their original authors. As a result, this slide is for personal reference only.
For the contents created in this document, the Copyright belongs to William W.-Y. Liang. © 2005-2016 All Rights Reserved.
Q & A
william.wyliang@gmail.com
http://www.ntut.edu.tw/~wyliang
http://www.facebook.com/william.wyliang

More Related Content

PDF
U-Boot - An universal bootloader
PDF
LCU14 500 ARM Trusted Firmware
PDF
Linux Systems: Getting started with setting up an Embedded platform
PDF
Device Tree for Dummies (ELC 2014)
PDF
USB Drivers
PPT
U boot porting guide for SoC
PDF
Jagan Teki - U-boot from scratch
PPT
Linux basics
U-Boot - An universal bootloader
LCU14 500 ARM Trusted Firmware
Linux Systems: Getting started with setting up an Embedded platform
Device Tree for Dummies (ELC 2014)
USB Drivers
U boot porting guide for SoC
Jagan Teki - U-boot from scratch
Linux basics

What's hot (20)

PDF
LCU13: An Introduction to ARM Trusted Firmware
PDF
Uboot startup sequence
PPTX
Linux Device Tree
PDF
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
PPTX
Linux Network Stack
PPTX
Linux 802.11 subsystem and brcmsmac WLAN driver
PDF
File System Hierarchy
PDF
Embedded Linux - Building toolchain
PPTX
Static partitioning virtualization on RISC-V
PPTX
U-Boot Porting on New Hardware
PDF
Bootloaders
PDF
The ideal and reality of NVDIMM RAS
PDF
New Ways to Find Latency in Linux Using Tracing
PPTX
Linux device drivers
PPTX
Linux file system
PPT
Linux command ppt
PPT
Basic Linux Internals
PPTX
Linux User Management
PDF
Lcu14 107- op-tee on ar mv8
PDF
Qemu Introduction
LCU13: An Introduction to ARM Trusted Firmware
Uboot startup sequence
Linux Device Tree
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
Linux Network Stack
Linux 802.11 subsystem and brcmsmac WLAN driver
File System Hierarchy
Embedded Linux - Building toolchain
Static partitioning virtualization on RISC-V
U-Boot Porting on New Hardware
Bootloaders
The ideal and reality of NVDIMM RAS
New Ways to Find Latency in Linux Using Tracing
Linux device drivers
Linux file system
Linux command ppt
Basic Linux Internals
Linux User Management
Lcu14 107- op-tee on ar mv8
Qemu Introduction
Ad

Similar to An introduction to the linux kernel and device drivers (NTU CSIE 2016.03) (20)

PDF
Android device driver structure introduction
PDF
Comparison of Windows and Linux Operating Systems in Advanced Features
PPTX
Linux
DOCX
Linux Introduction
PPTX
Group project linux helix
PPT
linux system and network administrations
PPTX
Unix-Linux Operating Systems and its concepts
PDF
unix-linuxospart1-241207172845-11e147aa.pdf
PDF
Before begining linux
PDF
Linux introduction (eng)
PDF
TDC2016SP - Trilha Linux Embarcado
DOCX
Linux technology
PPT
Group 3
PPTX
3. LINUXyhfgfgfgfdgfdfdgfdfggdgrdrr.pptx
PPTX
3. LINUXyhfgfgfgfdgfdfdgfdfggdgrdrr.pptx
PPTX
linux _________________________v1.2.pptx
PDF
Presentation on linux
DOCX
UNIT I LINUX.docx
PDF
An Introduction to the Android Framework -- a core architecture view from app...
PPTX
I Am Linux-Introductory Module on Linux
Android device driver structure introduction
Comparison of Windows and Linux Operating Systems in Advanced Features
Linux
Linux Introduction
Group project linux helix
linux system and network administrations
Unix-Linux Operating Systems and its concepts
unix-linuxospart1-241207172845-11e147aa.pdf
Before begining linux
Linux introduction (eng)
TDC2016SP - Trilha Linux Embarcado
Linux technology
Group 3
3. LINUXyhfgfgfgfdgfdfdgfdfggdgrdrr.pptx
3. LINUXyhfgfgfgfdgfdfdgfdfggdgrdrr.pptx
linux _________________________v1.2.pptx
Presentation on linux
UNIT I LINUX.docx
An Introduction to the Android Framework -- a core architecture view from app...
I Am Linux-Introductory Module on Linux
Ad

More from William Liang (11)

PDF
Internet of energy
PDF
Edge Computing for the Industry
PDF
From Embedded to IoT and From Cloud to Edge & AIoT -- A computer technology t...
PDF
The development trends of smart applications and open source system software ...
PDF
The key issues for teaching or learning Android and Linux Kernel
PDF
Data-centric IoT (NTU CSIE 2016.12)
PDF
行動終端、物聯網與雲端平台在高速移動網路下的整合趨勢 (for MOPCON 2016)
PDF
高速移動網路新時代 - 雲端與物聯網發展新趨勢 (An Integration Trend of Terminal Devices, IoT and C...
PDF
作業系統與硬體元件的驅動軟體開發法則 (Operating Systems and Software Design Principles for Har...
PDF
智慧應用與物聯網發展趨勢 (A Development Trend of Smart Applications and IoT)
PDF
嵌入式智慧應用開源軟硬整合新趨勢 (Open Source Software and Hardware Integration Trend for Emb...
Internet of energy
Edge Computing for the Industry
From Embedded to IoT and From Cloud to Edge & AIoT -- A computer technology t...
The development trends of smart applications and open source system software ...
The key issues for teaching or learning Android and Linux Kernel
Data-centric IoT (NTU CSIE 2016.12)
行動終端、物聯網與雲端平台在高速移動網路下的整合趨勢 (for MOPCON 2016)
高速移動網路新時代 - 雲端與物聯網發展新趨勢 (An Integration Trend of Terminal Devices, IoT and C...
作業系統與硬體元件的驅動軟體開發法則 (Operating Systems and Software Design Principles for Har...
智慧應用與物聯網發展趨勢 (A Development Trend of Smart Applications and IoT)
嵌入式智慧應用開源軟硬整合新趨勢 (Open Source Software and Hardware Integration Trend for Emb...

Recently uploaded (20)

PDF
System and Network Administration Chapter 2
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Transform Your Business with a Software ERP System
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Digital Strategies for Manufacturing Companies
PDF
System and Network Administraation Chapter 3
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPTX
history of c programming in notes for students .pptx
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
System and Network Administration Chapter 2
CHAPTER 2 - PM Management and IT Context
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Operating system designcfffgfgggggggvggggggggg
Design an Analysis of Algorithms I-SECS-1021-03
Transform Your Business with a Software ERP System
Which alternative to Crystal Reports is best for small or large businesses.pdf
Digital Strategies for Manufacturing Companies
System and Network Administraation Chapter 3
How to Choose the Right IT Partner for Your Business in Malaysia
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
How to Migrate SBCGlobal Email to Yahoo Easily
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
history of c programming in notes for students .pptx
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
How Creative Agencies Leverage Project Management Software.pdf
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
wealthsignaloriginal-com-DS-text-... (1).pdf
Lecture 3: Operating Systems Introduction to Computer Hardware Systems

An introduction to the linux kernel and device drivers (NTU CSIE 2016.03)

  • 1. Note: The Copyrights of the referenced materials and photos go to their original authors. As a result, this slide is for personal reference only. For the contents created in this document, the Copyright belongs to William W.-Y. Liang. © 2005-2016 All Rights Reserved. NTU CSIE Open Source System Software 2016.03.22 An Introduction to the Linux Kernel with Device Drivers William W.-Y. Liang (梁文耀), Ph. D. http://www.ntut.edu.tw/~wyliang for 台大資工系開源系統軟體課程 hosted by Prof. Shih-Hao Hung
  • 2. © 2016 William W.-Y. Liang, All Rights Reserved. General-purpose Operating Systems Characteristics Development of applications can be logically separated from hardware Complete software stacks and middleware can be created to support easy development of complex and versatile applications. Example: Linux (with many Distributions), Android, Chrome OS, Firefox OS, Brillo, uClinux, MacOS, iOS, Windows, etc. Application development System independent application development: General applications, GUI/Window programming, Web programming System dependent software development: System programming, Device drivers, Protocol software 2 NTU OSSSP 2016: Linux Kernel
  • 3. © 2016 William W.-Y. Liang, All Rights Reserved. The Linux Operating System Open source and free Maintained by numerous volunteer experts and hackers Robust, efficient, and reliable Modular, configurable, and scalable Tons of applications available Suitable for application types from low-end embedded systems, mid-range consumer products, personal computer, and up to the high performance supercomputers 3 NTU OSSSP 2016: Linux Kernel https://en.wikipedia.org/wiki/Linux_kernel
  • 4. © 2016 William W.-Y. Liang, All Rights Reserved. Some References Linux Kernel Wiki https://en.wikipedia.org/wiki/Linux_kernel Linux Kernel Source git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git Reference books for Beginners Linux Device Driver, 3rd Edition, by Jonathan Corbet, Alessandro Rubini and Greg Kroah-Hartman, O'Reilly (Also available online https://lwn.net/Kernel/LDD3/) Linux Kernel in a NutShell, by Greg Kroah-Hartman, O'Reilly (Also available online http://www.kroah.com/lkn/) Understanding the Linux Kernel, 3rd Edition, by Daniel P. Bovet, Marco Cesati, O'Reilly 4 NTU OSSSP 2016: Linux Kernel
  • 5. © 2016 William W.-Y. Liang, All Rights Reserved. Chitchat about Linux and the Kernel 5 NTU OSSSP 2016: Linux Kernel * Taiwanese slang :^)
  • 6. © 2016 William W.-Y. Liang, All Rights Reserved. A Systems View -- from Hardware to Software Hardware Software development environment Tool chain and Library Boot loader OS Kernel / RTOS Middleware* Applications 6 NTU OSSSP 2016: Linux Kernel * Example: In Android, the middleware is called the Application Framework. Source: Qing Li and Caroline Yao, “real-time concepts for embedded systems” Embedded System Development Environment Example
  • 7. © 2016 William W.-Y. Liang, All Rights Reserved. The Episode: System Booting Source: Qing Li and Caroline Yao, “real-time concepts for embedded systems” 7 NTU OSSSP 2016: Linux Kernel
  • 8. © 2016 William W.-Y. Liang, All Rights Reserved. Boot Sequence Example 8 NTU OSSSP 2016: Linux Kernel http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted
  • 9. © 2016 William W.-Y. Liang, All Rights Reserved. Booting the Kernel – Before the C code 9 NTU OSSSP 2016: Linux Kernel
  • 10. © 2016 William W.-Y. Liang, All Rights Reserved. Booting the Kernel – Entering the C World 10 NTU OSSSP 2016: Linux Kernel
  • 11. © 2016 William W.-Y. Liang, All Rights Reserved. Prepare for Tracing the Kernel Tools, always the most important thing git, repo, vim, ctags, grep, find, etc. Basics for understanding the Kernel Data structures 11 NTU OSSSP 2016: Linux Kernel
  • 12. © 2016 William W.-Y. Liang, All Rights Reserved. Introduction to the Linux Kernel 12 NTU OSSSP 2016: Linux Kernel Let’s try to understand the Linux kernel by introducing the basics for the device drivers and the kernel features, and discussing on some related issues.
  • 13. © 2016 William W.-Y. Liang, All Rights Reserved. Software View from User Program to Hardware For a general purpose OS such as Linux User level (user space) Coding Compilation Linking Execution Kernel (kernel space) Program loading System calls (API) Device drivers Hardware manipulation Bare metal hardware 13 NTU OSSSP 2016: Linux Kernel
  • 14. © 2016 William W.-Y. Liang, All Rights Reserved. Device Drivers in Linux Device drivers are usually treated as black boxes for the application developers. They resemble as a software layer lying between the applications and the actual devices. 14 NTU OSSSP 2016: Linux Kernel http: //www.ni.com/tutorial/3789/en/
  • 15. © 2016 William W.-Y. Liang, All Rights Reserved. Device Drivers in Linux Kernel 15 NTU OSSSP 2016: Linux Kernel ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition
  • 16. © 2016 William W.-Y. Liang, All Rights Reserved. Major Classes of Devices for Linux Character devices A character (char) device is one that can be accessed as a stream of bytes (just like a normal file). Block devices A block device is accessed in a unit of fixed-size block. The device can be accessed randomly. Network interfaces Others: File Systems, Protocol Stack, USB, PCI, etc. Refers to <kernel-source>/Documentation/devices.txt” 16 NTU OSSSP 2016: Linux Kernel
  • 17. © 2016 William W.-Y. Liang, All Rights Reserved. Device Files File Operations vs. Device Accesses Device Initialization vs. File Open Device Accesses vs. File Read/Write Device Control vs. File Control Device Termination vs. File Close UNIX/Linux systems implement device files to enable users to employ familiar commands and functions such as open, read, write, and close when working with some peripherals. 17 NTU OSSSP 2016: Linux Kernel int open( char *pathname, int flags, … ); int read( int fd, void *buf, size_t count ); int write( int fd, void *buf, size_t count ); int ioctl(struct inode *, struct file *, unsigned int, unsigned long ); int close( int fd );
  • 18. © 2016 William W.-Y. Liang, All Rights Reserved. How Device File and Driver Modules Work? 18 NTU OSSSP 2016: Linux Kernel ☼ Discussion: taking “Hello, World” as an example
  • 19. © 2016 William W.-Y. Liang, All Rights Reserved. Example: Applications using a Device 19 NTU OSSSP 2016: Linux Kernel
  • 20. © 2016 William W.-Y. Liang, All Rights Reserved. Device Number Example crw-rw-rw- 1 root root 1, 3 Mar 2 2015 null crw-rw-rw- 1 root root 1, 5 Mar 2 2015 zero crw------- 1 root root 4, 1 Mar 2 2015 tty1 crw-rw-rw- 1 root tty 4, 64 Mar 2 2015 ttys0 crw-rw---- 1 root uucp 4, 65 Mar 2 2015 ttyS1 crw------- 1 root root 10, 1 Mar 2 2015 psaux crw-rw-rw- 1 root root 123, 0 Mar 2 2015 androint A System Administrator may create device files with the “mknod” command. For example, mknod /dev/androint c 123 0 ‘/dev/androint’ is the file’s pathname, ‘c’ indicates that it’s a character-mode device, 123 is its (unique) ‘major number’, and 0 is its ‘minor number’. 20 NTU OSSSP 2016: Linux Kernel ☼ Discussion: relationship between device files and drivers
  • 21. © 2016 William W.-Y. Liang, All Rights Reserved. Loadable Kernel Modules A great mechanism for OS ‘extensibility’ No need to recompile and then reboot A kernel module differs from a normal C program A kernel module cannot call any of the familiar functions from the standard C runtime libraries A module will be run as part of the kernel Any ‘bug’ can cause a system malfunction or a complete crash! 21 NTU OSSSP 2016: Linux Kernel ☼ Discussion: GPL issues with the Linux kernel modules
  • 22. © 2016 William W.-Y. Liang, All Rights Reserved. Example 22 NTU OSSSP 2016: Linux Kernel ☼ Discussion: how multiple program entries work?
  • 23. © 2016 William W.-Y. Liang, All Rights Reserved. How to get a module to work in Kernel 23 NTU OSSSP 2016: Linux Kernel ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition Driver Functions
  • 24. © 2016 William W.-Y. Liang, All Rights Reserved. Example: Device Registration 24 NTU OSSSP 2016: Linux Kernel
  • 25. © 2016 William W.-Y. Liang, All Rights Reserved. Driver Methods -- File Operations The kernel uses the file_operations structure to access the driver’s methods. int (*open) (struct inode *, struct file *); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*release) (struct inode *, struct file *); … 25 NTU OSSSP 2016: Linux Kernel ☼ Discussion: drivers vs. the object-orient concept
  • 26. © 2016 William W.-Y. Liang, All Rights Reserved. Kernel and User Space 26 NTU OSSSP 2016: Linux Kernel ☼ Discussion: address space for kernel and processes
  • 27. © 2016 William W.-Y. Liang, All Rights Reserved. Virtual to Physical Space 27 NTU OSSSP 2016: Linux Kernel https://en.wikipedia.org/wiki/Operating_system ☼ Discussion: how the memory space is utilized? ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition
  • 28. © 2016 William W.-Y. Liang, All Rights Reserved. Data Transfer between User and Kernel Space 28 NTU OSSSP 2016: Linux Kernel Read: kernel->user Write: user->kernel ☼ Discussion: issues for cross space data accesses ALESSANDRO RUBINI and JONATHAN CORBET, Linux Device Drivers, Second Edition ,
  • 29. © 2016 William W.-Y. Liang, All Rights Reserved. Example: User & Kernel Space Data Transfer 29 NTU OSSSP 2016: Linux Kernel
  • 30. © 2016 William W.-Y. Liang, All Rights Reserved. Kernel Memory Allocation Small size allocation kmalloc and kfree dptr->data = kmalloc(qset * sizeof(char *), GFP_KERNEL); memset(dptr->data, 0, qset * sizeof(char *)); Limitations Large size allocation vmalloc and vfree Restrictions Page allocation Slab and memory pool 30 NTU OSSSP 2016: Linux Kernel ☼ Discussion: performance issues in memory management
  • 31. © 2016 William W.-Y. Liang, All Rights Reserved. Multi-tasking: the Central Part of the OS Process states in OSes Running: own CPU Ready: To be scheduled, in ready queue (run-queue) Waiting: Pending on I/O or Event Delay itself for some duration Request a resource but is not yet available Linux Task States Tasks: user-process, user-thread, kernel thread States: TASK_RUNNING, TASK_INTERRUPTIBLE, etc. Scheduling Policy SCHED_OTHER, SCHED_FIFO, SCHED_RR, etc 31 NTU OSSSP 2016: Linux Kernel ☼ Discussion: scheduling and preemption issues
  • 32. © 2016 William W.-Y. Liang, All Rights Reserved. Concurrency Problems Problems: Data inconsistency, Deadlock Race Condition: Occurs when multiple tasks want to access the shared resources, such as shared data or hardware devices. 32 NTU OSSSP 2016: Linux Kernel ☼ Discussion: what’s the exact cause?
  • 33. © 2016 William W.-Y. Liang, All Rights Reserved. Thread Safe Potential Causes of Thread-Unsafe Problems Global variables Static variables Indirect accesses Solutions Reentrancy Atomic operations Thread-local storage Mutual exclusion 33 NTU OSSSP 2016: Linux Kernel Concurrency in Kernel and Device Drivers  Driver code vs. Tasks  Single Core vs. Multicore  IRQ impact  Soft-IRQ ☼ Discussion: performance issues for synchronizations
  • 34. © 2016 William W.-Y. Liang, All Rights Reserved. Synchronization Operations Semaphore down(), up(), etc. Mutex mutex_lock(), mutex_unlock(), etc. Spin locks spin_lock(), spin_unlock(), etc. Atomic operations atomic_set(), atomic_add(), etc Bit operations set_bit(), clear_bit(), etc. 34 NTU OSSSP 2016: Linux Kernel ☼ Discussion: semaphore vs. spinlock, usage & performance
  • 35. © 2016 William W.-Y. Liang, All Rights Reserved. Interrupt Handling 35 NTU OSSSP 2016: Linux Kernel ☼ Discussion: cost and performance issues of IRQ handling and solutions
  • 36. © 2016 William W.-Y. Liang, All Rights Reserved. Task Blocking and Waiting Queue Processes are usually blocked due to I/O waiting. No data available for read, or no space available for write or device busy Waiting queues Blocked task is put into a waiting queue before it is woke up. 36 NTU OSSSP 2016: Linux Kernel Linux Device Drivers, Second Edition ☼ Discussion: how it works? Linux Device Drivers, Second Edition
  • 37. © 2016 William W.-Y. Liang, All Rights Reserved. The Endless Journey on Discovering Linux To be Continued… This brief introductory lecture is just a beginning. Still many interesting things out there Take it as interesting adventure, by learning from the wonderful open source world! 37 NTU OSSSP 2016: Linux Kernel https://en.wikipedia.org/wiki/Linux_kernel#/media/File:Linux_kernel_map.png Let’s keep the discussion next week on the next topic – Android Framework.
  • 38. Note: The Copyrights of the referenced materials and photos go to their original authors. As a result, this slide is for personal reference only. For the contents created in this document, the Copyright belongs to William W.-Y. Liang. © 2005-2016 All Rights Reserved. Q & A william.wyliang@gmail.com http://www.ntut.edu.tw/~wyliang http://www.facebook.com/william.wyliang