




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux内核编程 四川大学计算机学院网络安全实验室 陈家军 讲座内容 Linux内核简介 Linux内核编程基础 Linux内核模块编程 关于linux内核学习 Linux内核发行版简史 2.6 内核的发布已经持续了很长时间,那 么什么时候将会推出 2.7 ? 目前,Linux内核的源代码数量已经超过1000万 行,上千人参与开发,每23个月发布一个版本。 Linux内核树 2.6.x内核 基础稳定版本 2.6.x.y内核 稳定内核,包含了对一个给定的 2.6.x内核的一些重要问题的修复 -rc内核 候选的发布内核,具有不稳定性 2.6.x -git 内核 Linus维护的内核树的每日快照,它们比-rc内核更具实验性 质。 2.6.x -mm 内核 这些是Andrew Morton发布的实验性质的内核,包含了新特 性和实验性补丁 GNU/Linux 操作系统的基本体系结构 最上面是用户(或应用程序)空间。这是用户应用程 序执行的地方。用户空间之下是内核空间,Linux 内核正 是位于这里。 Linux 内核的主要子系统 进程管理、内存管理、文件系统、网络协议栈、设备 驱动程序、系统调用接口和依赖体系结构的代码 Linux内核配置和编译 内核配置 make config(基于文本的命令行配置工具) make menuconfig (基于ncurse库编制的图形配置工具 ) make xconfig (基于X11的图形配置工具) make gconfig (基于gtk+的图形配置工具) make defconfig(为你的体系结构创建一个默认配置) make 编译内核,生成内核映像文件、内核模块 make install 安装内核映像 make modules_install 安装内核模块 内核开发的特点 没有libc库 没有内存保护机制 小而固定的栈 同步和并发 不要轻易在内核中使用浮点数 Linux内核模块编程 Linux内核的模块机制允许内核在运行时动态地载入和删除内 核代码。这样基本内核镜像可以尽可能的小。也给我们编写内核程 序提供方便,我不需要把自己编写的内核程序编译进内核,不用重 启机器,需要的时候加载相应的模块,不需要时卸载。 Linux内核模块管理工具 insmod 安装内核模块 rmmod 卸载内核模块 depmod创建模块依赖文件 modprobe提供依赖性分析,错误检查等功能和选项 depmod xxx.ko#为某个创建依赖文件 modprobe xxx.ko#加载某个模块 modprobe -r xxx.ko#卸载某个模块 lsmod显示当前加载的所有模块,相当cat/proc/modules modinfo查看内核模块信息 编程环境准备 从网站上获得一个“主线”内核,在自己的系统中 配置并构造好内核树。因为2.6内核的模块要和内核源代码树中 的目标文件链接。 简单说,你必须先配置过内核,执行过 make,然后才能 make 你自 己的模块。要运行编译出的模块,最好安装编译后的内核( make install 、 make modules_install )。 也可以安装Linux发行版的内核开发包,需要你的机器上已经安 装了kernel-devel这个包,也就提供编译模块所必须的东西:内 核的头文件、目标文件和一些Makefile。 发行版厂商提供的内核通常打了许多补丁,从而和主线内核存在 一些差异。 Linux内核编程实例1 内核模块Makefile obj-m表明生成的是外部模块 make -C $(KDIR) M=$(shell pwd) modules 该命令首先改变目录到-C选项指定的位置(即内核源代码目录),其 中保存有内核顶层Makefile。M=选项让该Makefile在构造modules目标 前返回到模块源代码目录。 Modules目标指向obj-m变量中设定的模块。 make -C $(KDIR) M=$(shell pwd) clean 删除所有编译生成文件 实例1模块运行结果 Linux内核编程实例2 hello_load.c hello_unload.c 相应的Makefile Linux内核编程实例3 内核模块参数 可以在系统启动或模块装载时在指定参数值,这些参数属于全局 变量。 定义一个模块参数可通过宏module_param()完成 module_param(name, type, perm) name: 变量的名称 type: 变量的类型 perm: sysfs文件系统下的对应文件权限(0则表示禁止所 有的sysfs项) 实例3 运行截图 Linux内核调试方法 Oops和panic 企业版的linux厂商一般将他们的内核定制为发生一个oops是就使内 核崩溃(panic)。 oops(慌张)消息包含系统错误的细节,如 CPU 寄 存器的内容。在 Linux 中,调试系统崩溃的传统方法是分析在发生崩溃 时发送到系统控制台的 oops 消息。 kgdb内核调试器 kgdb是一个补丁(已集成到新版本的内核中。在Kernel hacking里 ,需要在编译内核时选上)。它可以让我们在远端主机上通过串口利用 gdb的所有功能对内核进行调试。您可以接着深入到内核中、设置断点 、检查数据等其它操作(类似于在应用程序上使用 gdb 的方式)。 kdb内核调试器 kdb是kgdb的一种替代品,这个补丁对内核源代码进行了很多修改, 是调试在本地主机上就可以进行。 其实,Linus不支持在内核中内置调试器。他担心这些调 试器会导致一些不良的修改。 Kernel panic 关于Linux内核学习 Linus Torvalds的回答过类似的问题:你必须使用过Linux。(动 手编译内核) 至少要对内核有一个大概了了解。Linux内核设计与实现, 英文名Linux Kernel Development(LKD),此书是当今最佳的 入门图书。 带着问题去试图阅读内核源代码。 浏览内核源代码 在Windows下,用Source Insight, 它可以很方便的在代码之间进行关联 阅读。 在Linux,可使用 vim+cscope+ctags 浏览内核源码,还可用Source Navigator等 lxr(Linux Cross R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 描述一个成功的零售店铺案例
- 保护地球的议论文11篇
- 中试平台建设中的协同创新与跨界合作
- 非遗保护传统工艺美术生产制作技术规程
- 环境影响评估实例分析
- 航空发动机技术考点归纳题
- 风电项目可行性研究报告(模板)
- 2025年音乐史与音乐理论考试试卷及答案
- 2025年舞蹈教育专业资格考试试卷及答案
- 2025年汽车维修工程师职称考试试卷及答案
- 2025年河北省万唯中考定心卷生物(一)
- 2025-2030中国食物病原体检测行业市场发展趋势与前景展望战略分析研究报告
- 托里县铁厂沟镇工业固废垃圾填埋场项目环境影响报告书
- 中草药种植技术课件
- T/CHES 63-2022活塞式调流调压阀技术导则
- T/CCMA 0048-2017二手工程机械评估师
- 传染病防治法试题(答案)
- 家居建材联盟协议书
- 2024北京海淀区六年级(下)期末语文试题及答案
- 无人机航线规划与飞行策略试题及答案
- 2025年全国保密教育线上培训考试试题库带答案(典型题)含答案详解
评论
0/150
提交评论