Книга: Fedora™ Unleashed, 2008 edition
The Linux Source Tree
The Linux Source Tree
The source code for the Linux kernel is kept in a group of directories called the kernel source tree. The structure of the kernel source tree is important because the process of compiling (building) the kernel is automated; it is controlled by scripts interpreted by the make
application. These scripts, known as Makefiles, expect to find the pieces of the kernel code in specific places or they do not work. You will learn how to use make to compile a kernel later in this chapter.
It is not necessary for the Linux kernel source code to be installed on your system for the system to run or for you to accomplish typical tasks such as email, web browsing, or word processing. It is necessary that the kernel sources be installed, however, if you want to compile a new kernel. In the next section, we show you how to install the kernel source files and how to set up the special symbolic link required. That link is /usr/src/kernels/<yourkernelversion>
, and it is how we will refer to the directory of the kernel source tree as we examine the contents of the kernel source tree.
The /usr/src/kernels/<yourkernelversion>
directory contains the .config
and the Makefile
files among others. The .config
file is the configuration of your Linux kernel as it was compiled. There is no .config
file by default; you must select one from the /configs
subdirectory. There you will find configuration files for each flavor of the kernel Fedora provides; simply copy the one appropriate for your system to the default directory and rename it .config
.
We have already discussed the contents of the /configs
subdirectory, so now you can examine the other directories found under /usr/src/kernels/<yourkernelversion>
. The most useful is the Documentation
directory. In it and its subdirectories, you will find almost all the documentation concerning every part of the kernel. The 00-INDEX
file (each Documentation
subdirectory also contains a 00-INDEX
file as well) contains a list of the files in the main directory and a brief explanation of what they are. Many files are written solely for kernel programmers and application writers, but a few are useful to the intermediate or advanced Linux user attempting to learn about kernel and device driver issues. Some of the more interesting and useful documents are
? devices.txt
— A list of all possible Linux devices that are represented in the /dev
directory, giving major and minor numbers and a short description. If you have ever gotten an error message that mentions char-major-xxx
, this file is where that list is kept. Devices are mentioned in Chapter 35, "Managing the File System."
? ide.txt
— If your system uses IDE hard drives, this file discusses how the kernel interacts with them and lists the various kernel commands that can be used to solve IDE-related hardware problems, manually set data transfer modes, and otherwise manually manage your IDE drives. Most of this management is automatic, but if you want to understand how the kernel interacts with IDE devices, this file explains it.
? initrd.txt
— Chapter 34 also discusses the initial RAM disk. This file provides much more in-depth knowledge of initial RAM disks, giving details on the loopback file system used to create and mount them and explaining how the kernel interacts with them.
? kernel-parameters.txt
— This file is a list of most of the arguments that you can pass at boot time to configure kernel or hardware settings, but it does not appear too useful at first glance because it is just a list. However, knowing that a parameter exists and might relate to something you are looking for can assist you in tracking down more information because now you have terms to enter into an Internet search engine such ashttp://www.google.com/linux.
? sysrq.txt
— If you have ever wondered what that SysRq key on your keyboard is used for, this file has the answer. Briefly, it is a key combination hardwired into the kernel that can help you recover from a system lockup. Fedora disables this function by default for security reasons. You can re-enable it by entering the command # echo "1" > /proc/sys/kernel/sysrq
and disable it by echoing a value of 0
instead of 1
.
In the other directories found in Documentation
, you will find similar text files that deal with the kernel modules for CD-ROM drivers, file system drivers, gameport and joystick drivers, video drivers (not graphics card drivers — those belong to X11R6 and not to the kernel), network drivers, and all the other drivers and systems found in the Linux operating system. Again, these documents are usually written for programmers, but they can provide useful information to the intermediate and advanced Linux user as well.
The directory named scripts contains many of the scripts that make
uses. It really does not contain anything of interest to anyone who is not a programmer or a kernel developer (also known as a kernel hacker).
After a kernel is built, all the compiled files wind up in the arch
directory and its subdirectories. Although you can manually move them to their final location, we will show you later in this chapter how the make
scripts will do it for you. In the early days of Linux, this post-compilation file relocation was all done by hand; you should be grateful for make
.
NOTE
The make
utility is a very complex program. Complete documentation on the structure of Makefiles, as well as the arguments that it can accept, can be found at http://www.gnu.org/software/make/manual/make.html.
The remaining directories contain the source code for the kernel and the kernel drivers. When you install the kernel sources, these files are placed there automatically. When you patch kernel sources, these files are altered automatically. When you compile the kernel, these files are accessed automatically. Although you never need to touch the source code files, they can be useful. The kernel source files are nothing more than text files with special formatting, which means that we can look at them and read the programmers' comments. Sometimes, a programmer will write an application, but cannot (or often does not) write the documentation. The comments he puts in the source code are often the only documentation that exists for the code.
Small testing programs are even hidden in the comments of some of the code, along with comments and references to other information. Because the source code is written in a language that can be read as easily — almost — as English, a nonprogrammer might be able to get an idea of what the application or driver is actually doing (see Chapter 28, "C/C++ Programming Tools for Fedora"). This information might be of use to an intermediate to advanced Linux user when he is confronted by kernel- and driver-related problems.
NOTE
The interaction and control of hardware is handled by a small piece of the kernel called a device driver. The driver tells the computer how to interact with a modem, a SCSI card, a keyboard, a mouse, and so on in response to a user prompt. Without the device driver, the kernel does not know how to interact with the associated device.
- The Linux Kernel
- Practical Advice for the Practicing Embedded Developer
- 4.1.2. Kernel Source Repositories
- 4.2.1. Top-Level Source Directory
- 16.1.1. The Architecture Branch
- The Project
- InterBase Classic Server под Linux
- Каталог BIN в InterBase Classic Server для Linux
- 4.4.4 The Dispatcher
- Open Source Insight and Discussion
- About the author
- Chapter 7. The state machine