Linux 内核编程学习
Linux
内核编程学习
常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds
本人是这样回答的:你必须使用过
Linux
。 这个
……
还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:
1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(
time-shared
)和实时(
real-time
)的区别是什么,进程是个什么东西,
CPU
和系统总线、内存的关系(很粗略即可),等等。
2, 关于
C
语言。不需要已经很精通
C
语言,只要能熟练编写
C
程序,能看懂链表、散列表等数据结构的
C
实现,用过
gcc
编译器,就可以了。当然,如果已经精通
C
语言显然是大占便宜的。
3, 关于
CPU
的知识。这块儿可以在学习内核过程中补,但这样的话你就需要看讲解很详细的书,比方后面将会提到的《情景分析》。你是否熟悉
Intel 80386 CPU
?尝试着回答这几个问题来判断一下:
1
)说出
80386
的中断门和陷阱门的区别;
2
)说出保护模式与实模式的区别;
3
)多处理器机器上,普通的读
-
改
-
写回一块内存这样的动作,为什么需要特殊的手段来保护。等等。讲解基于其它
CPU
的
Linux
内核的书,目前好象只有一本
《IA-64 Linux
内核设计与实现》
─
─也还是
Intel
的,其它都是讲解基于
IA32
的。
以上算是知识方面吧,如果还要再补充一条,我想就是:动手编译过内核。
好了,我们接下来走。好多人装上Linux
之后,第一件事找到内核源码所在的路径,打开一个
C
程序文件,开始哗哗哗翻页,看看大名鼎鼎的
Linux
内核代 码到底长啥模样
──
然后关闭。这是可理解的,但却不是学习的方法。刚开始,必须从读书入手。至少要对内核有一个
Overview
之后,才有可能带着问题去 试图阅读源代码本身。下面就讲一下我读过的几本书:
1, 《
Linux
内核设计与实现》,英文名
Linux Kernel Development
(所以有人叫它
LKD
),机械工业出版社,¥
35,
美国
Robert Love
著,陈莉君译者。 评说:
此书是当今首屈一指的入门最佳图书。作者是为2.6
内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的。这本书讲解浅 显易懂,全书没有列举一条汇编语句,但是给出
相关文档:
使用TAB键
用鼠标拷贝和粘贴提高操作速度 左键拖动---拷贝 中键点击---粘贴
1、mkdir 建立新目录名 加“." 在目录名前为隐藏目录(ls -a可查看)
rm -rf 目录名 删除目录及子目录 rm -- -ee删除-ee文件 或者 rm "文件名"
2、m ......
trap [-lp] [arg] [sigspec ...]
当 shell 收到信号 sigspec 时,命令 arg 将被读取并执行。如果没有给出 arg 或者给出的是 -,
所有指定的信号被设置为它们的初始值 (进入 shell 时它们的值)。如果 arg 是空字符串, sigspec 指定的信号被
shell 和它启动的命令忽略。如果 arg 不存在,并且给出了 -p 那么与每个 sigspec ......
通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。
tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中 ......
当我们在Vmware或者其他虚拟机中安装Linux后,想在X
Windows与虚拟终端之间切换时,却发现Ctrl+Alt+Fx不起作用,那么我们如何解决这个问题呢?其实方法很简单,我们只需要将Vmware或
者其他虚拟机软件的热键改成Ctrl+Alt+Shift即可,如Vmware具体方法如下:中文版——选择编辑—&mdash ......
所有的内核代码,基本都包含了linux\compile.h这个文件,所以它是基础,打算先分析这个文件里的代码看看,有空再分析分析其它的代码。
首先印入眼帘的是对__ASSEMBLY__这个宏的判断,这个变量实际是在编译汇编代码的时候,由编译器使用-D这样的参数加进去 的,AFLAGS这个变量也定义了这个变量,gcc会把这个宏定义为1。用在 ......