You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
8 months ago | |
---|---|---|
001-intro | 11 months ago | |
002-x86-assembly | 11 months ago | |
.gitignore | 10 months ago | |
README.md | 8 months ago |
README.md
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.