1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.3 KiB

Linux Kernel Foundation (February 2022 batch)

This repository contains materials what I learnt, and am learning in context to Linux Kernel Programming. This includes programming in userspace and kernelspace.

More content will be added as the class progresses.

Course overview

Systems Programming

Pre-requisites

- Being able to program in C
- Ability to use the Linux CLI

What is covered | What you are expected to learn

- Learning about Assembly language programming
	- ARM Assembly
	- x86 Assembly

- Advanced concepts of Linux (userspace)
	- How a process gets created
	- Creating threads
	- Handling thread priority
	- Multithreading
	- Thread sync

- Debugging (userspace)
	- `valgrind`
	- `gdb`
	- AddressSanitizer

- Build System
	- Makefiles

- DPDP and SPDK

Linux Programming

What is covered | What you are expected to learn

- Introduction to the Linux Kernel

- Basic entities in the Linux Kernel
	- Process Management
	- Sync various elements
	- Memory management
	- Device driver management
	- Spinlock

- Device drivers
	- Basic drivers
	- Char drivers
	- Misc drivers
	- Platform drivers (dtb, dto)
	- PWM drivers
	- DRM + GPU drivers
	- Block drivers

- Advance drivers
	- USB
	- PCIe

- Linux debugging techniques
	- kgdb
	- printk (not sure if this is supposed to be printk, not audible in recorded lectures)
	- BPF
	- JTAG
	- Other infrastructure offered by the Linux Kernel

- Networking
	- Stack overview
	- Proogramming from user[space(?)] POV
	- How it works inside the Linux Kernel
	- Inner working of a driver

Required packages

sudo apt-get install autoconf bc bison bridge-utils build-essential crossbuild-essential-{arm{64,hf,el},amd64,riscv64} flex gdb-multiarch git htop libc6-dev libncurses-dev libssl-dev libvirt-clients libvirt-daemon-system linux-tools-$(uname -r) linux-tools-common linux-tools-generic make mlocate openocd openssh-client qemu qemu-efi-aarch64 qemu-efi-arm qemu-kvm qemu-system-arm qemu-system-common qemu-system-x86 qemu-utils tree valgrind neovim virt-manager u-boot-qemu

On System76's Pop!_OS, fuse interferes with pop-desktop (Desktop GUI metapackage), so install that separately.

About UML, please read this excellent guide by Xe Iaso.