SlideShare a Scribd company logo
Introduction to
Linux Kernel
Development
Your first patch
Levente Kurusa
Linux kernel hacker & enthusiast
Fedora Project Hungary
<levex@linux.com>
Developer Conference 2014, Brno, CZ.
Topics
# 1 General introduction
# 2 Building
# 3 Kernel API
# 4 Patching
# 5 Sending it of
General Introduction
What is a kernel?
The operating system's core
Responsibilities:
# 1 Initialise the system for the user
# 2 Protect the data
# 3 Introduce abstractions to help the
development of new software
Kernel types
# 1 Microkernel
# 2 Monolithic kernel
# 3 Hybrid kernel
Some exotics:
# 1 Exokernel
# 2 Cache kernel
Linux specifics
# 1 Monolithic kernel
# 2 Modular
# 3 Error-happens-so-panic type
The source of panic()
“ I remarked to Dennis that easily half the code I
was writing in Multics was error recovery code. He
said, "We left all that stuf out. If there's an error,
we have this routine called panic, and when it is
called, the machine crashes, and you holler down
the hall, 'Hey, reboot it.'” “
-- Tom van Vleck to Dennis Ritchie
Building
Kconfig
Allows for specific code to be excluded via optional
preprocessor macros.
Why do we need this?
# 1 To allow diferent configurations!
# 2 Headers are lengthy!
(and incomprehensible anyways)
Kconfig symbols
Specific symbols that will be converted to
CONFIG_* preprocessor defines.
Types:
# 1 bool (true or false) [y, n]
# 2 tristate (built-in, module, false) [y, m ,n]
They have default values
Kconfig example
config ATA_ACPI
bool "ATA ACPI Support"
depends on ACPI && PCI
default y
help
This option adds support for ATA-related ACPI objects.
These ACPI objects add the ability to retrieve taskfiles
from the ACPI BIOS and write them to the disk
controller.
These objects may be related to performance, security,
power management, or other areas.
Makefiles are still in use!
We still use makefiles to define the relations between the
source files.
GNU Make gives us a pretty cool interface!
We don't reinvent the wheel!
How to configure?
Configuration is easy thanks to GNU make!
# 1 'make defconfig' -> Create a default configuration for
$ARCH
# 2 'make menuconfig' -> Shows a cool ncurses menu, which
allows pretty configuration
# 3 'make randconfig' -> Randomly configure the kernel
# 4 'make xconfig' -> For all the GUI fans out there!
Building
Configuration completed, let's build.
'make -j`nproc`'
(Looks way cooler than 'make -j4')
Post-build
To actually boot, you will need an initrd or initramfs.
The kernel file that needs to be booted will be at:
./$ARCH/boot/bzImage
Or if you need the vmlinux file it will be in the root.
Introduction to Kernel API
No C library, no developer
Most developers flee when they see they can't use printf()
But wait, there is a replacement for that! printk()
Actually, the relevant parts from the C library are there!
This means: sscanf(), [vscn]printf(), kstrtoX() etc...
Thread-safety concerns
Since the kernel supports Symmetric MultiProcessing, we need
ways to achieve mutual exclusion.
This is what we have in store:
# 1 mutex (with global/local IRQ disable, full flags save)
# 2 semaphores!
# 3 spinlock_t
A cool module system
Your device will most likely not used by all users, so modules
are a great way.
Modules are built-up like this:
# 1 module_init(init function ptr);
Shows which function will be called when the module is
passed to insmod
# 2 module_exit(exit function ptr);
This function will be called when your module is
rmmod'd.
PCI drivers
PCI drivers are built up in the exact same way, but they also
have a table consisting of pci_device_id's.
To register your PCI driver, you would call:
pci_register_driver(ptr-to-pci_operations-struct);
This together with a probe() function will suffice.
kobjects
Kobjects are primitives that are parts of a garbage collection
system.
Kobjects are usually 'inlined' in a container struct which handles
them.
They have a few helper functions i.e.
kobj_{put,get}(struct kobject *kobj);
They have types! (struct kobj_type)
Patching
Contibuting to the Kernel
# 1 Reviewing patches for common errors
# 2 Building randconfigs
# 3 Adding support for new device
# 4 Fixing a bug
# 5 Doing staging work
This is what we will do!
checkpatch.pl
Excellent utility to find code-style errors!
Sometimes it also finds bugs!
All patches have to be checkpatch-safe before being applied!
Code style?
# 1 Code style contributes to the consistency of the kernel
# 2 Helps to spot bugs
# 3 Don't be afraid, this isn't that terribly bad code style!
Developer Certificate
of Origin
# 1 I created this change and I have the right to post it; or
# 2 The change is based on a previous change under the
same license.
# 3 The change was sent to me by someone who has
certified any of these options.
Sending it of
Thanks for your attention!
Levente Kurusa
<levex@linux.com>
Developer Conference 2014, Brno, CZ. http://devconf.cz/f/105

More Related Content

PPTX
Build Your Own Android Tablet
PDF
Beagleboard xm-setup
PDF
SwiftyGPIO
PDF
A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)
ODP
Inter-process communication of Android
PDF
Kernel Recipes 2013 - Conditional boot
ODP
CLI Wizardry - A Friendly Intro To sed/awk/grep
PPTX
Distributed Compiler Icecc
Build Your Own Android Tablet
Beagleboard xm-setup
SwiftyGPIO
A War Story: Porting Android 4.0 to a Custom Board (ELCE 2012)
Inter-process communication of Android
Kernel Recipes 2013 - Conditional boot
CLI Wizardry - A Friendly Intro To sed/awk/grep
Distributed Compiler Icecc

What's hot (20)

PDF
Kernel Recipes 2013 - Crosstool-NG, a cross-toolchain generator
ODP
Android porting for dummies @droidconin 2011
PDF
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
PDF
Kernel Recipes 2013 - ARM support in the Linux kernel
PPTX
Defeating x64: Modern Trends of Kernel-Mode Rootkits
PPTX
Linux kernel system call
PPT
Driver_linux
PDF
Init of Android
PDF
Linux kernel booting
PDF
Android for Embedded Linux Developers
PDF
Workshop su Android Kernel Hacking
PDF
Automotive Grade Linux and systemd
ODP
Embedded Android : System Development - Part III
PPTX
Building Embedded Linux UDOONEO
PDF
WIndows Kernel-Land exploitation
PDF
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
PDF
Reconstructing Gapz: Position-Independent Code Analysis Problem
PDF
Build your own embedded linux distributions by yocto project
PDF
Android is NOT just 'Java on Linux'
PPTX
Make own you kernel os
Kernel Recipes 2013 - Crosstool-NG, a cross-toolchain generator
Android porting for dummies @droidconin 2011
Claudio Scordino - Handling mixed criticality on embedded multi-core systems
Kernel Recipes 2013 - ARM support in the Linux kernel
Defeating x64: Modern Trends of Kernel-Mode Rootkits
Linux kernel system call
Driver_linux
Init of Android
Linux kernel booting
Android for Embedded Linux Developers
Workshop su Android Kernel Hacking
Automotive Grade Linux and systemd
Embedded Android : System Development - Part III
Building Embedded Linux UDOONEO
WIndows Kernel-Land exploitation
Qi -- Lightweight Boot Loader Applied in Mobile and Embedded Devices
Reconstructing Gapz: Position-Independent Code Analysis Problem
Build your own embedded linux distributions by yocto project
Android is NOT just 'Java on Linux'
Make own you kernel os
Ad

Similar to Introduction to Linux Kernel Development (20)

PDF
Introduction To Linux Kernel Modules
PDF
Linux kernel driver tutorial vorlesung
PDF
Studienarb linux kernel-dev
PDF
Building
PDF
BKK16-211 Internet of Tiny Linux (io tl)- Status and Progress
PDF
Mobile Hacking using Linux Drivers
PDF
Walking around linux kernel
PDF
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
PDF
淺談探索 Linux 系統設計之道
PDF
Linux Kernel - Let's Contribute!
PPTX
Linux Device Driver’s
PPT
Linux Kernel Development
PDF
Kernel compilation
PDF
Auditing the Opensource Kernels
PDF
Ubuntu初體驗:脫離邪惡微軟帝國吧!_150606
PDF
Kernel init
PPT
Linux Device Driver for Writing a real world driver for embedded Linux
PDF
Embedded Linux Kernel - Build your custom kernel
PDF
Compiling kernel.pdf Compiling kernel Compiling kernel
PDF
Embedded Linux from Scratch to Yocto
Introduction To Linux Kernel Modules
Linux kernel driver tutorial vorlesung
Studienarb linux kernel-dev
Building
BKK16-211 Internet of Tiny Linux (io tl)- Status and Progress
Mobile Hacking using Linux Drivers
Walking around linux kernel
Unit 6 Operating System TEIT Savitribai Phule Pune University by Tushar B Kute
淺談探索 Linux 系統設計之道
Linux Kernel - Let's Contribute!
Linux Device Driver’s
Linux Kernel Development
Kernel compilation
Auditing the Opensource Kernels
Ubuntu初體驗:脫離邪惡微軟帝國吧!_150606
Kernel init
Linux Device Driver for Writing a real world driver for embedded Linux
Embedded Linux Kernel - Build your custom kernel
Compiling kernel.pdf Compiling kernel Compiling kernel
Embedded Linux from Scratch to Yocto
Ad

Recently uploaded (20)

PPTX
bas. eng. economics group 4 presentation 1.pptx
PPTX
CYBER-CRIMES AND SECURITY A guide to understanding
PDF
Model Code of Practice - Construction Work - 21102022 .pdf
PDF
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PDF
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
PDF
Well-logging-methods_new................
PPTX
Construction Project Organization Group 2.pptx
PDF
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
PDF
PPT on Performance Review to get promotions
PPTX
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
PPTX
Lesson 3_Tessellation.pptx finite Mathematics
PPTX
UNIT-1 - COAL BASED THERMAL POWER PLANTS
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PPT
Project quality management in manufacturing
DOCX
573137875-Attendance-Management-System-original
PDF
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
PDF
composite construction of structures.pdf
PPTX
KTU 2019 -S7-MCN 401 MODULE 2-VINAY.pptx
PPTX
Welding lecture in detail for understanding
bas. eng. economics group 4 presentation 1.pptx
CYBER-CRIMES AND SECURITY A guide to understanding
Model Code of Practice - Construction Work - 21102022 .pdf
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
Well-logging-methods_new................
Construction Project Organization Group 2.pptx
Evaluating the Democratization of the Turkish Armed Forces from a Normative P...
PPT on Performance Review to get promotions
CARTOGRAPHY AND GEOINFORMATION VISUALIZATION chapter1 NPTE (2).pptx
Lesson 3_Tessellation.pptx finite Mathematics
UNIT-1 - COAL BASED THERMAL POWER PLANTS
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
Project quality management in manufacturing
573137875-Attendance-Management-System-original
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
composite construction of structures.pdf
KTU 2019 -S7-MCN 401 MODULE 2-VINAY.pptx
Welding lecture in detail for understanding

Introduction to Linux Kernel Development

  • 1. Introduction to Linux Kernel Development Your first patch Levente Kurusa Linux kernel hacker & enthusiast Fedora Project Hungary <levex@linux.com> Developer Conference 2014, Brno, CZ.
  • 2. Topics # 1 General introduction # 2 Building # 3 Kernel API # 4 Patching # 5 Sending it of
  • 4. What is a kernel? The operating system's core Responsibilities: # 1 Initialise the system for the user # 2 Protect the data # 3 Introduce abstractions to help the development of new software
  • 5. Kernel types # 1 Microkernel # 2 Monolithic kernel # 3 Hybrid kernel Some exotics: # 1 Exokernel # 2 Cache kernel
  • 6. Linux specifics # 1 Monolithic kernel # 2 Modular # 3 Error-happens-so-panic type
  • 7. The source of panic() “ I remarked to Dennis that easily half the code I was writing in Multics was error recovery code. He said, "We left all that stuf out. If there's an error, we have this routine called panic, and when it is called, the machine crashes, and you holler down the hall, 'Hey, reboot it.'” “ -- Tom van Vleck to Dennis Ritchie
  • 9. Kconfig Allows for specific code to be excluded via optional preprocessor macros. Why do we need this? # 1 To allow diferent configurations! # 2 Headers are lengthy! (and incomprehensible anyways)
  • 10. Kconfig symbols Specific symbols that will be converted to CONFIG_* preprocessor defines. Types: # 1 bool (true or false) [y, n] # 2 tristate (built-in, module, false) [y, m ,n] They have default values
  • 11. Kconfig example config ATA_ACPI bool "ATA ACPI Support" depends on ACPI && PCI default y help This option adds support for ATA-related ACPI objects. These ACPI objects add the ability to retrieve taskfiles from the ACPI BIOS and write them to the disk controller. These objects may be related to performance, security, power management, or other areas.
  • 12. Makefiles are still in use! We still use makefiles to define the relations between the source files. GNU Make gives us a pretty cool interface! We don't reinvent the wheel!
  • 13. How to configure? Configuration is easy thanks to GNU make! # 1 'make defconfig' -> Create a default configuration for $ARCH # 2 'make menuconfig' -> Shows a cool ncurses menu, which allows pretty configuration # 3 'make randconfig' -> Randomly configure the kernel # 4 'make xconfig' -> For all the GUI fans out there!
  • 14. Building Configuration completed, let's build. 'make -j`nproc`' (Looks way cooler than 'make -j4')
  • 15. Post-build To actually boot, you will need an initrd or initramfs. The kernel file that needs to be booted will be at: ./$ARCH/boot/bzImage Or if you need the vmlinux file it will be in the root.
  • 17. No C library, no developer Most developers flee when they see they can't use printf() But wait, there is a replacement for that! printk() Actually, the relevant parts from the C library are there! This means: sscanf(), [vscn]printf(), kstrtoX() etc...
  • 18. Thread-safety concerns Since the kernel supports Symmetric MultiProcessing, we need ways to achieve mutual exclusion. This is what we have in store: # 1 mutex (with global/local IRQ disable, full flags save) # 2 semaphores! # 3 spinlock_t
  • 19. A cool module system Your device will most likely not used by all users, so modules are a great way. Modules are built-up like this: # 1 module_init(init function ptr); Shows which function will be called when the module is passed to insmod # 2 module_exit(exit function ptr); This function will be called when your module is rmmod'd.
  • 20. PCI drivers PCI drivers are built up in the exact same way, but they also have a table consisting of pci_device_id's. To register your PCI driver, you would call: pci_register_driver(ptr-to-pci_operations-struct); This together with a probe() function will suffice.
  • 21. kobjects Kobjects are primitives that are parts of a garbage collection system. Kobjects are usually 'inlined' in a container struct which handles them. They have a few helper functions i.e. kobj_{put,get}(struct kobject *kobj); They have types! (struct kobj_type)
  • 23. Contibuting to the Kernel # 1 Reviewing patches for common errors # 2 Building randconfigs # 3 Adding support for new device # 4 Fixing a bug # 5 Doing staging work This is what we will do!
  • 24. checkpatch.pl Excellent utility to find code-style errors! Sometimes it also finds bugs! All patches have to be checkpatch-safe before being applied!
  • 25. Code style? # 1 Code style contributes to the consistency of the kernel # 2 Helps to spot bugs # 3 Don't be afraid, this isn't that terribly bad code style!
  • 26. Developer Certificate of Origin # 1 I created this change and I have the right to post it; or # 2 The change is based on a previous change under the same license. # 3 The change was sent to me by someone who has certified any of these options.
  • 28. Thanks for your attention! Levente Kurusa <levex@linux.com> Developer Conference 2014, Brno, CZ. http://devconf.cz/f/105