Fixes in introduction.
[cascardo/kernel/slides/.git] / 01intro / intro
1 %Introduction
2 %Thadeu Cascardo
3
4 # Linux History
5
6 # What is Linux?
7
8 Linux is a POSIX-compatible modern operating system developed since
9 1991, released under the GPLv2, with contributions by thousands of
10 people. It is mostly written in C, with some assembly code.
11
12 It has grown from a non-portable Intel 386 code with thousands lines to
13 a portable code with support for dozens of architectures and hundreds
14 machines and millions of code.
15
16 # When there was no Linux
17
18 * The GNU system
19 * Minix
20 * The Usenet
21 * Intel 386
22 * Finnish student Linus Torvalds
23
24 # The beginning
25
26 * Licensing
27 * Torvalds and Tanenbaum flamewar
28 * People's contributions
29
30 # Evolution
31
32 Since version 1.2, it has supported more than only Intel x86
33 architectures, including now SPARC, PowerPC, ARM, Alpha, M68K, MIPS,
34 S/390, and many others.
35
36 Since version 2.0, it has supported SMP systems, now running in systems
37 with hundreds of processors, multi-core processors, etc. Since then, its
38 SMP support has put to scale, with most bottlenecks removed.
39
40 # Version control
41
42 * CVS
43 * Bitkeeper
44         - controversy
45         - Andrew Tridgell starts reverse-engineering the storage and
46           saves the day
47 * Linus creates git
48
49 # GregKH presentations
50
51 * Linux's growth in the 2.6 cycle
52
53 # Development model
54
55 # The old development model
56
57 * X.Y.Z
58 * Major and minor versions and releases
59 * Even minor versions are stable
60 * Odd minor versions are for development
61
62 # There is no Linux 2.7
63
64 * Development cycles were getting long
65 * Sometimes, people talk about 3.0 and breaking stuff
66 * A new development model
67
68 # The new versioning model
69
70 * After a given release, there are stable point releases: 2.6.33.X
71 * Release candidates are published by Linus: 2.6.34-rcX
72 * There is a linux-next tree that will help development for the next
73   version: 2.6.35
74
75 # The development model (or how Linus gets all those changes)
76
77 * There are subsystems and there are maintainers for those
78 * People Linus trusts who asks for pulls or send patches
79 * People send patches to maintainers and to LKML for review
80 * Andrew Morton does the "missing patches" collection
81
82 # The documentation
83
84 * Documentation/SubmittingPatches
85 * Documentation/CodingStyle
86 * Documentation/SubmitChecklist
87 * MAINTAINERS
88
89 # The tools people use
90
91 * git
92 * quilt
93 * scripts/checkpatch.pl
94 * scripts/get\\_maintainer.pl
95
96 # Tools
97
98 # ketchup
99
100 * kernel.org distributes tarballs, patches and "subpatches"
101 * ketchup makes it easier to get the right files
102 * Reduces download time
103 * Do not forget to import GPG keys or disable signature verification
104
105 # diff
106
107 * Compare two files or two trees
108 * Recursive: -r
109 * Include new files: -N
110 * Unified diff: -u
111 * Show C function: -p
112
113 # patch
114
115 * Apply changes in a patch file using standard input
116 * patch file is generated using diff
117 * Strip directory prefix: -p N
118 * Reverse patch: -R
119
120 # quilt
121
122 * Organize patch series into a directory
123 * QUILT\\_PATCHES environment variable
124 * quilt new name.patch
125 * quilt add src/file
126 * quilt refresh
127 * quile edit src/file
128 * quilt top
129 * quilt pop [-a]
130 * quilt push [-a]
131 * Never forget to do 'quilt add' before editing a file
132
133 # Linux Tree Layout
134
135 # Architecture
136
137 * arch/ARCH/
138 * arch/ARCH/include/asm/
139 * arch/ARCH/kernel/
140 * arch/ARCH/mm/
141 * arch/ARCH/lib/
142 * arch/ARCH/boot/
143 * arch/ARCH/mach-MACH/
144
145 # Headers
146
147 * include/linux/
148 * arch/ARCH/include/asm/
149 * include/asm-generic/
150 * include/OTHER/
151
152 # Main system
153
154 * kernel/
155 * mm/
156 * lib/
157 * init/
158 * ipc/
159 * fs/
160
161 # Drivers and Filesystems
162
163 * drivers/BUS/
164 * drivers/SUBSYSTEM/
165 * block/
166 * sound/
167 * fs/*
168 * fs/FILESYSTEM/
169
170 # Other subsystems
171
172 * net/
173 * crypto/
174 * security/
175 * virt/
176
177 # Others
178
179 * Documentation/
180 * scripts/
181 * samples/
182 * usr/
183 * tools/
184 * firmware/
185
186 # Browsing code
187
188 # Your editor of choice
189
190 * vim works with ctags
191 * emacs works with etags
192 * make tags
193
194 # cscope
195
196 * -k (kernel mode) ignores /usr/include/
197 * make cscope
198 * vim support
199
200 # lxr
201
202 * http://lxr.linux.no/
203
204 # Coding Style
205
206 * Documentation/CodingStyle
207 * scripts/checkpatch.pl
208 * scripts/Lindent
209
210 # git
211
212 # Configuration
213
214 # First configuration
215
216 * make allnoconfig/allyesconfig/allmodconfig
217 * make ranconfig
218 * make defconfig
219 * make config
220 * make menuconfig (requires ncurses)
221 * make xconfig/gconfig
222
223 # Default configurations
224
225 * make XXX\\_defconfig
226 * arch/ARCH/configs
227
228 # Updating configuration
229
230 * make oldconfig
231 * make silentoldconfig
232
233 # Kconfig
234
235 * Menus
236 * Help
237 * Dependencies
238
239 # Configuring for another architecture
240
241 * ARCH=x86\\_64 make menuconfig
242
243 # Building Linux
244
245 # Makefile rules
246
247 * make *image
248 * make bzImage (for x86)
249 * make vmlinux
250 * make modules
251 * make all
252
253 # Installing
254
255 * make modules\\_install
256         - uses INSTALL\\_MOD\\_PATH
257 * make install
258         - uses INSTALL\\_PATH
259
260 # Building out-of-tree
261
262 * make O=BUILDDIR
263
264 # Building packages
265
266 * make deb-pkg
267 * make rpm-pkg
268 * make binrpm-pkg
269 * make tar-pkg
270 * make targz-pkg
271
272 # Booting Linux
273
274 # Kernel parameters
275
276 * Documentation/kernel-parameters.txt
277 * Bootloader configuration
278 * qemu append
279
280 # Init ramdisk
281
282 * Necessary for user space to setup root
283 * filesystem initrd until 2.6.12
284 * initramfs: uses cpio (-H newc)
285
286 # Linux init
287
288 * init/*
289 * /dev/console
290 * init process
291 * kthreadd