Professional Documents
Culture Documents
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Architecture Difference of Each Linux Kernel
CPU Architecture
Control Unit Arithmetic Logic Unit Registers Program Counter Instruction Register Cache Translation Lookaside Buffer
Protected Mode pmode. pmode 80286 x86 CPU x86 LinuxFreeBSD Windows 2.0
MMU
MMUMemory Management Unit CPU MMU
- -
X86 MMU4K/2M/4MPAGE
CPU CPU
0 1 2 3 COM2
4
5 6 7 8
COM1
LPT2 LPT1
9
10 11 12 13
PC
Available Available PS/2
14
15 NM1
Available
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Architecture Difference of Each Linux Kernel
OS Basic Knowledge
- -
RTOS POSIX
IPC
GUI
RTOS
Real Time Operating SystemRTOS .
- -
- =+CPU+ISR - =MAX() + ISR
RTOSVxWorks, uC/OS.
POSIX
POSIX Portable Operating System Interface of Unix POSIX UNIX Institute of Electrical and Electronics EngineersIEEE POSIX UNIX POSIX UNIX DEC OpenVMS Windows NT POSIX IEEE Std. 1003.1-19901995 POSIX.1POSIX.1 C API POSIX.1 International Standards OrganizationISO ISO/IEC 99451:1990
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Architecture Difference of Each Linux Kernel
2.0.35 2.1.88
Kernel
patch linux kernel - linux-2.2.16 linux-2.2.17
linux-2.2.17
patch - patch patch-xx.xx.xx.bz2, bzip2
gzip .gz
patch
- patch /usr/src : bzip2 -cd patch-xx.xx.xx.bz2 | patch -p0
http://bugzilla.kernel.o
rg Mail archive site:
UCLinux RTLinux
Linux Kernel
Linux Distribution 300Linux Linux
Linux Distribution
1. 2. MBRLILO, GRUB 3. CDE/KDE/GNOME 4. X WindowXfree86 5. DNS/HTTP/SMTP/FTP/NNTP/PPP
6. NFSSamba
7. mysqlPostgreSQLDB2Oracle 8 Sybase
8. Netscape/StarOffice/xIRC/LICQ/Gimp/x11amp
9. //DPM / RPM
300Linux
Debian fedora Suse dubuntu Ubuntu Mandriva archlinux Slackware turbolinux gentoo lfs magiclinux LINUX linux centos caos 2x 64 Studio Abuldu Adamantix ADIOS Admelix Alinex aLinux ALT amaroK Live Amber Annvix AnNyung ANTEMIUM APODIO Arabian ArcheOS Archie Ark Arudius AsianLinux Asianux ASLinux ASPLinux Astaro Asterisk Athene ATmission Atomix Aurora Aurox AUSTRUMI Hubworx B2D BackTrack Bayanihan BeatrIX Berry BIG LINUX BioBrew Bioknoppix blackPanther BLAG Blin Bluewall Buffalo Caixa Mgica Ctix CCux CDlinux Censornet ClarkConnect Clusterix clusterKNOPPIX Condorux Cosix Coyote CRUX Damn Small Danix DARKSTAR DeadCD Deep-Water DeLi AGNULA Devil Dizinha DNALinux Dreamlinux P!tux dyne:bolic Eadem Edubuntu eduKnoppix EduLinux Ehad eLearnix Elive ELX EnGarde ERPOSS ESware Euronode Evinux EzPlanet One FAMELIX Feather Featherweight Fermi Finnix Flash Flonix Foresight FoRK FoX Desktop Freedows Freeduc Freeduc-Sup GNIX Gnoppix GNUstep GobLinX GoboLinux Grafpup grml Guadalinex h3knix Haansoft Hakin9 Hancom Hedinux Helix Hikarunix Hiweed HKLPG Holon Honeywall How-Tux iBox IDMS Ignalum Impi ndLinux INSERT IPCop Slack JoLinux Julex K12LTSP Kaella Kalango KANOTIX Karamad Kate OS K-DEMar Kinneret Klax kmLinux knopILS Knoppel Knopperdisk KNOPPIX Knoppix 64 KnoppiXMAME Knoppix STD KnoppMyth KnoSciences Komodo Kororaa Kubuntu Kurumin L.A.S LG3D LIIS Linare Lineox LinEspa gnuLinEx LinnexOS Linpus Linspire LinuxConsole Linux-EduCD LINUXO LinuxLive LinuxTLE Linux XP Litrix LiveCD Router LiVux LLGP LliureX LNX-BBC Loco Lormalinux Luit Lunar MAX Mayix MCNLive Media Lab Mediainlinux MEPIS Miracle Mockup MoLinux Momonga Monoppix Morphix MoviX Muriqui Murix Musix Mutagenix Myah OS myLinux Nasgaa Natures Navyn OS NepaLinux Netwosix Niigata Nitix Nonux NST NuxOne Omoikane Onebase O-Net OpenLab OpenLX OpenNA Openwall Oralux Overclockix PaiPix ParallelKnoppix Pardus Parsix PCLinuxOS Peachtree Penguin Sleuth Pentoo Pequelin Phaeronix Phayoune PHLAK Pie Box Pilot Pingo Pingwinek Plamo PLD pocketlinux Poseidon pQui Progeny Project dEv PUD Puppy QiLinux Quantian redWall Resala RIP ROCK Rocks Cluster ROOT ROSLIMS rPath Linux4all RR4/RR64 Rubix Heretix RUNT Salvare SAM Santa Fe Scientific Securepoint Sentry Firewall Shabdix Skolelinux Slackintosh Slamd64 SLAMPP SLAX Slix Slo-Tech SLYNUX SME Server SmoothWall SNAPPIX Snfrix SoL Sorcerer Source Mage StartCom StressLinux STUX STX SuliX Symphony OS SystemRescue T2 TA-Linux Tablix Tao Taprobane Thinstation Tilix tinysofa Topologilinux Trinity Trustix Truva TumiX TupiServer Turkix Ufficio Zero UHU-Linux Ultima Underground Ututo Vector VLOS Vine VNLinux Voltalinux Wazobia White Box WIENUX Wolvix WOMP! Xandros Xarnoppix Xenoppix X-evian Xfld X/OS Xteam Yellow Dog Yoper YES Zenwalk ZerahStar ZoneCD Frugalware FTOSX GeeXboX Gelecek GenieOS GentooTH Gentoox GEOLivre Gibraltar Ging Caixa
Linux
Ubuntu openSUSE Fedora Debian GNU/Linux Mandriva Linux PCLinuxOS MEPIS Linux KNOPPIX Slackware Linux Gentoo Linux
Linxu
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Architecture Difference of Each Linux Kernel
portability
clarity
extensibility
Linux Features
UNIX-like operating system all the features you would expect in a modern UNIX - preemptive multitasking - virtual memory (protected memory, paging) - shared libraries - demand loading, dynamic kernel modules - shared copy-on-write executables - TCP/IP networking other features: - SMP support, large memory, large files - advanced networking, advanced filesystems - efficient, stable, highly portable, supports most device hardware - active development community, support, documentation, open source - GUIs, applications
Linux
OS
Module Interface
Modules
Linux Kernel
Device Driver Interface
Linux
Device Drivers
CPU Disk
Other Devices
Linux
1. S C H E DC P U C P U 2. M M
3. V F S V F S V F S
4. N E T
5. I P C
linuxmonolithic windows(microkernel)
Vahalias Diagram
From Unix Internals: The New Frontiers Uresh Vahalia / Prentice-Hall 1996
elf
coff
NFS exec switch FFS
anonymous
s5fs
disk
scheduler framework
time-sharing
network
tty
Process Manager
Socket Manager
VFS
Memory Allocator
Math Support
Network Protocols
File Systems
Char Devices
Block Devices
Packet Requestor
Net Devices
IO Requestor
Waterloo Diagrams
mm fs ipc
Conceptual
Concrete
Another Diagrams
Applications
I/O Related
Modules File Systems Networking Device Drivers
Linux/Init
Linux/ipc Linux/kernel Linux/lib
alpha arm i386 ia64 m68k mips mips64 ppc s390 sh sparc sparc64
acorn atm block cdrom char dio fc4 i2c i2o ide ieee1394 isdn macintosh misc net
adfs affs autofs autofs4 bfs code cramfs devfs devpts efs ext2 fat hfs hpfs
asm-alpha asm-arm asm-generic asm-i386 asm-ia64 asm-m68k asm-mips asm-mips64 linux math-emu net pcmcia scsi video
adfs affs autofs autofs4 bfs code cramfs devfs devpts efs ext2 fat hfs hpfs
802 appletalk atm ax25 bridge core decnet econet ethernet ipv4 ipv6 ipx irda khttpd lapb
linux/Documentation
spotty but important collection of developer-generated documentation; you need to read whats in here! recent effort to produce javadoc-style documentation from source header comments using OpenDoc an ambitious open-source kernel book effort has begun; see kernelbook.sourceforge.net for details some especially interesting entries:
kernel-docs.txt (a bit out of date but good) filesystems/ (very extensive) networking/ (very extensive) kmod.txt oops-tracing.txt spinlocks.txt (the official story from Linus)
linux/arch
subdirectories for each current port each contains kernel, lib, mm, boot and other directories whose contents override code stubs in architecture independent code lib contains highly-optimized common utility routines such as memcpy, checksums, etc.
arch as of 2.4:
- alpha, arm, i386, ia64, m68k, mips, mips64 - ppc, s390, sh, sparc, sparc64
linux/drivers
largest amount of code in the kernel tree (~1.5M) device, bus, platform and general directories drivers/char n_tty.c is the default line discipline
linux/fs
contains:
- virtual filesystem (VFS) framework - subdirectories for actual filesystems
vfs-related files:
- exec.c, binfmt_*.c - files for mapping new process images - devices.c, blk_dev.c device registration, block device support - super.c, filesystems.c - inode.c, dcache.c, namei.c, buffer.c, file_table.c - open.c, read_write.c, select.c, pipe.c, fifo.c - fcntl.c, ioctl.c, locks.c, dquot.c, stat.c
linux/include
include/asm-* - architecture-dependent include subdirectories include/linux - header info needed both by the kernel and user apps - usually linked to /usr/include/linux - kernel-only portions guarded by #ifdefs - #ifdef __KERNEL__ /* kernel stuff */ - #endif other directories: - math-emu - net - pcmcia - scsi - video
linux/init
just two files: version.c, main.c version.c contains the version banner that prints at boot main.c architecture-independent boot code start_kernel is the primary entry point
linux/ipc
System V IPC facilities if disabled at compile-time, util.c exports stubs that simply return ENOSYS one file for each facility:
- sem.c semaphores - shm.c shared memory - msg.c message queues
linux/kernel
the core kernel code sched.c the main kernel file
- scheduler, wait queues, timers, alarms, task queues
process control
- fork.c, exec.c, signal.c, exit.c - acct.c, capability.c, exec_domain.c
other operations
- time.c, resource.c, dma.c, softirq.c, itimer.c - printk.c, info.c, panic.c, sysctl.c, sys.c
linux/lib
kernel code cannot call standard C library routines files:
brlock.c Big Reader spinlocks cmdline.c kernel command line parsing routines errno.c global definition of errno inflate.c gunzip part of gzip.c used during boot string.c portable string code
- usually replaced by optimized, architecture-dependent routines
linux/mm
paging and swapping - swap.c, swapfile.c (paging devices), swap_state.c (cache) - vmscan.c paging policies, kwapd - page_io.c low-level page transfer allocation and deallocation - slab.c slab allocator - page_alloc.c page-based allocator zone allocator - vmalloc.c kernel virtual-memory allocator memory mapping - memory.c paging, fault-handling, page table code - filemap.c file mapping - mmap.c, mremap.c, mlock.c, mprotect.c
linux/net
changing too fast!
linux/scripts
scripts for:
- menu-based kernel configuration - kernel patching - generating kernel documentation
Sizes (linux-2.4.0)
size 90M 4.5M 16.5M 54M directory /usr/src/linux/ Documentation arch drivers entries 19 97 12 31 files 7645 380 1685 2256 loc 2.6M na 466K 1.5M
5.6M
14.2M 28K 120K 332K 80K 356K 5.8M 400K
fs
include init ipc kernel lib mm net scripts
70
19 2 6 25 8 19 33 26
489
2262 2 6 25 8 19 453 42
150K
285K 1K 4.5K 12K 2K 12K 162K 12K
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Architecture Difference of Each Linux Kernel
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Source Architecture Difference of Each Linux Kernel
CVS/SVN
VI / VIM
Basic and powerful editor on Linux.
GNU
GCC
- LinuxgccGNU C CompilerGNU GNU gcc 20%~30%
GDB
- Linux gdb GNU . gdb C C++ . .
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Architecture Difference of Each Linux Kernel
Linux
- Makefile Linux Makefile Linux - config.in - Ncurses Xwindows Make configMake menuconfig make xconfig
Tcl/TKPerl C
Makefile Linux config.in Linux , :
Makefile
Makefile Linux Linux Makefile Linux Makefile Makefile - Makefile Makefile - .config make config - arch/*/Makefile CPU Makefile arch/arm/Makefile Makefile - Makefile drivers/Makefile - Rules.make Makefile make config .config Makefile .config Makefile vmlinux module Makefile Makefile Makefile include arch/$(ARCH)/Makefile CPU Makefile Makefile Makefile .config include $(TOPDIR)/Rules.make Rules.make Makefile c Makefile
make clean
make bzImage make modules make modules_install make install Use the command ls -l /boot to make sure the initrd-2.6.x.img file was created. Confirm that the file /boot/grub/grub.conf contains a title section with the same version as the kernel package just installed Reboot
Build
Build
Agenda
Hardware Basic Knowledge OS Basic Knowledge Linux Kernel Intro Linux Kernel Source Architecture Difference of Each Linux Kernel
End
Any Questions?