Linux内核学习起步.pdf

上传人:飞****9 文档编号:134041596 上传时间:2020-06-02 格式:PDF 页数:29 大小:1.46MB
返回 下载 相关 举报
Linux内核学习起步.pdf_第1页
第1页 / 共29页
Linux内核学习起步.pdf_第2页
第2页 / 共29页
Linux内核学习起步.pdf_第3页
第3页 / 共29页
Linux内核学习起步.pdf_第4页
第4页 / 共29页
Linux内核学习起步.pdf_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《Linux内核学习起步.pdf》由会员分享,可在线阅读,更多相关《Linux内核学习起步.pdf(29页珍藏版)》请在金锄头文库上搜索。

1、Linux 内 核 学 习 起 步 albcamus Last Update 2007 年 12月 06日 1 1 编译内核 编译内核 1 0 1 0 获取内核压缩获取内核压缩 在http www kernel org pub linux kernel v2 6 能看到一系列的文件 如 ChangeLog 2 6 xx linux 2 6 xx tar gz bz2 和patch 2 6 xx gz bz2 你应该下载 linux 2 6 23 tar bz2 这样的压缩包 1 1 1 1 找一个旧的找一个旧的 config config 作参考 作参考 安装内核开发包 以FC8 为例 是 k

2、ernel devel 2 6 23 1 42 fc8 i686 rpm 则 lib modules build 目录下会有 config 文件 cd linux 2 6 24 rc3 cp lib modules 2 6 23 1 42 fc8 build config 1 2 1 2 配置 编译和安装 配置 编译和安装 配置 make menuconfig gconfig xconfig oldconfig defconfig allyesconfig allmodconfig FYI 一般用 menuconfig 比较多 如果你喜欢 GUI 风格 也可以选择基于 Qt 的 xconfig

3、 或 基于 Gtk 的gconfig FYI 可以用 O 指定编译生成的文件放在哪个目录 举例来说 如果我的内核源代码目录是 usr src linux 2 6 23 编译内核时指定了 make O home arc build linux 2 6 23 那么 lib modules 2 6 23 下的 source 和 build 这两个符号链接就分别指 向了源代码和目标代码目录 ls l lib modules 2 6 23 source lrwxrwxrwx 1 root root 21 11 22 13 35 lib modules 2 6 23 source usr src linu

4、x 2 6 23 ls l lib modules 2 6 23 build lrwxrwxrwx 1 root root 28 11 22 13 35 lib modules 2 6 23 build home arc build linux 2 6 23 编译 make FYI V 1 verbose 模式 把每一部执行的命令都打印出来 一个小技巧就是 把标准输出重定向到一个文件中 这样以后查找模块之间的依赖关系就很方便了 C 1 需要安装 sparse 程序 进行严格的静态 C语法检查 一般开发者会通过它来预防 BUG 安装 make modules install make insta

5、ll FYI 正常情况下 make install 会根据你机器的配置为你定制 initrd 文件 并更新 grub conf 文件中的内容 但如果重新引导时发现无法启动 注意手工 mkinitrd 例如 mkinitrd v preload libata ko with ext3 boot initrd 2 6 24 rc3 img 2 6 24 rc3 其中 preload 指定的模块会在 etc modprobe conf 之前加载 而 with 指定的模块会在 这之后加载 1 3 1 3 文档文档 make htmldocs 你也可以不用 htmldocs 指令 HTML 格式 而指定

6、 pdfdocs 或 psdocs make mandocs 为 kernel API生成 man 手册 make installmandocs 将kernel API 的手册页安装到 man 程序能找到的 目录中 这样就可以 man copy from user 了 FYI 执行 make htmldocs pdfdocs psdocs 之后 在 O 指定的目录 如果没使用 O 则是 源代码目录 的 Documentation DocBook 下 会生成几份很重要的文档 kernel api 内核开发的 API 手册 usb USB host 端的 API 手册 gadget USB dev

7、ice 端的 API 手册 kernel locking 内核加锁的 HOWTO 文档 kernel hacking 内核开发的一些注意事项 FYI 内核源代码目录的 Documentation 目录 kernel parameter txt 内核参数 加在一个 grub entry 的 kernel 指令后面 filesystems vfs txt Linux 虚拟文件系统的深入介绍 memory barriers 关于 barriers 的文档 CodingStyle 内核编码的规范 等等 图 1 1 menuconfig 图 1 2 xconfig 图 1 3 gconfig 2 2 浏

8、览代码 浏览代码 2 1 vim ctags cscope 2 1 vim ctags cscope 2 1 1 2 1 1 编译编译 ctagsctags 需要的需要的 tagstags 文件 文件 make ARCH x86 tags FYI ARCH 的意思是 除了指定的体系结构外 不索引其他体系结构相关的代码 FYI 2 6 24 之前 用 i386 指代 32 位的 x86 处理器 用 x86 64 指代 64 位的 x86 处理器 但 在2 6 24 中这 2者即将合并 统称为 x86 2 1 2 2 1 2 编译编译 cscopecscope 程序需要的程序需要的 cscope

9、outcscope out 文件 文件 make ARCH x86 cscope 2 1 3 2 1 3 在在 VimVim 中用中用 ctagsctags 浏览 浏览 ts do fork tag select 效果等同于光标停在 do fork 上 按 Ctrl 如果想返回原来的位置 Ctrl T tn tag next tp tag previous tf tag first tl tag last FYI 安装 Vim 的taglist 插件 浏览更方便 又 vimrc 中控制 number added by albcamus function TlistWrapper2 Tlist

10、if winnr 2 winnr return the number of current window while winnr returns the number of all windows set nonu else set nu endif endfunction command nargs 0 List call TlistWrapper2 map List 则可以按 F1 键来调用 taglist 2 1 4 2 1 4 在在 VimVim 中用中用 cscopecscope 浏览 浏览 cs add cscope out 添加一个 connection 浏览内核时经常发现 cs

11、cope 链接断开 可以调用 cs a cscope out cs show 显示所有 connections cs kill 杀死第 号connection 第 号就是 cs show 显示出来的 cs reset reset 所有 connections cs find c d e f g i s t 解释 c查找 name被哪些函数调用 d查找 name调用了哪些函数 eegrep 句型 f查找名为 name的文件 g查找 name的定义 i查找 include 本 name 的文件 s查找 name这个 C符号 t查找何处对 name赋值 对 Linux 内核来说 如果既有 tags

12、文件 又有 cscope out 文件 则 Vim 中 set cst 意味着使用 cscope 风格的 也就是 tag命令 于是 如果想用 ctags 找到 do IRQ ts do IRQ 如果想用 cscope 找到 do IRQ ta do IRQ FYI 可以在 vimrc 中自定义命令 这样就不必每次都输入符号名 nmap g cs find g expand nmap c cs find c expand nmap s cs find s expand nmap t cs find t expand nmap e cs find e expand nmap f cs find f

13、 expand nmap i cs find i expand nmap d cs find d expand 这样 当你在 Vim 中把光标挪到字符串 do fork 上 按 Ctrl c 先按 Ctrl 然后 按c cscope 就会列出所有调用了 do fork 函数的地方 FYI GNU Global 程序也不错 对喜爱 Emacs 编辑器的朋友 还可以用 etags 和xcscope 来 替代 喜欢 Source Insight 的朋友也可以常识一下 kscope 它的界面和 SI很类似 kscope 依赖于 KDE 的库 如果你用 gnome 作窗口管理器 也得安装了 KDE 才能

14、安装 kscope 使用 kscope 之前需要安装 ctags cscope 和 dot 程序 dot 在graphviz 包中 kscope 抓图 2 2 lxr Linux Cross Referrence 2 2 lxr Linux Cross Referrence 我一般都只在网上浏览 http lxr linux no http users sosdg org qiyong lxr source 3 3 内核相关的图书内核相关的图书 入门推荐 入门推荐 LKD2 LKD2 LinuxLinux 内核设计与实现内核设计与实现 第第 2 2 版 版 从入门开始 介绍了诸如中断 系统调用

15、 虚拟文件系统 同步与互斥 内存管理 进程控制等方面 内容比较浅显易懂 是入门的好书 优点 适合入门 个人认为 没有比 LKD2 更优秀的内核入门图书 缺点 内容不够深入 覆盖面不广 对高手来说估计就像休闲材料 3 1 ULK3 3 1 ULK3 深入理解深入理解 LinuxLinux 内核内核 3rd 3rd 一本很全面的 Linux 内核原理书 书中以 2 6 11 为示例版本 着重讲述了 x86 平台的 Linux 内核实现 优点 深入 全面 缺点 N A 我觉得看完 ULK3 就是高手了 而且由于书中着重介绍了 X86 体系结构 也称得 上半个 x86 专家了 3 2 3 2 Linu

16、xLinux 内核源代码情景分析 内核源代码情景分析 以 2 4 0 为例讲解 注重代码级别的剖析 对中断 内存管理 文件系统 SMP PCI 和USB IPC 的讲解都是代码级别的深入细致 优点 深入 缺点 针对的内核版本较旧 且每个 情景 都很长 不容易坚持读完 FYI 新手不要从 情景分析 开始学习内核 这样只会增长你的学习周期 3 3 LDD3 Linux3 3 LDD3 Linux 设备驱动程序设备驱动程序 3rd 3rd LDD3 写的很精彩 但如果要学会写具体的驱动程序 还是得参照硬件的 datasheet 读一个内核中现成的驱动程序 FYI 内核中自带的驱动程序 skeleton drivers net pci skeleton c 和drivers usb usb skeleton c 分别是为 PCI USB 驱动程序员提供的参考代码 3 4 3 4 现代体系结构上的现代体系结构上的 UnixUnix 系统 系统 内核程序员的内核程序员的 SMPSMP 和和 CachingCaching 技术 技术 这本书着重讲解各种体系结构上的 Unix 实现注意事项 e g S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号