浅谈debian Linux 内核开发

上传人:jiups****uk12 文档编号:45657232 上传时间:2018-06-18 格式:PPT 页数:58 大小:354KB
返回 下载 相关 举报
浅谈debian Linux 内核开发_第1页
第1页 / 共58页
浅谈debian Linux 内核开发_第2页
第2页 / 共58页
浅谈debian Linux 内核开发_第3页
第3页 / 共58页
浅谈debian Linux 内核开发_第4页
第4页 / 共58页
浅谈debian Linux 内核开发_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《浅谈debian Linux 内核开发》由会员分享,可在线阅读,更多相关《浅谈debian Linux 内核开发(58页珍藏版)》请在金锄头文库上搜索。

1、浅谈Debian Linux 内核开发武钢2 007.12.8 Debian简介 编译内核 Linux的内核结构 内核模块 内核的调试 内核相关的资源和书籍 1. Debian简介 Debian 是一个致力于自由软件开发并宣扬 自由软件基金会之理念的自愿者组织。 Debian 计划创建于 1993 年。 经过多年的成长,那群由 自由软件基金会 资助并受 GNU 哲理影响的爱好者已经演 变为一个拥有大约 1000多 位 Debian 开发 人员的组织。 Debian 开发人员参与制定的重要计划 Linux Standard Base (LSB) 是一个针对 GNU/Linux 系统标准化的项目,

2、它将使第三方软 件和硬件开发者能更容易的为“普通”的 Linux 设 计程序和设备驱动,而不仅仅是为某个特定的 GNU/Linux 发行版进行开发。 Filesystem Hierarchy Standard (FHS) 则 是朝 Linux 文件系统布局标准化方向的一种努力 。FHS 将使软件开发者能集中精力设计程序,而 不需要担心软件包在不同的 GNU/Linux 发行版 的安装。 Debian GNU/Linux 将 Debian 哲学与方法论,GNU 工具集、 Linux 内核,以及其他重要的自由软件 结 合在一起所构成的独特的软件发行版称为 Debian GNU/Linux。 Deb

3、ian 具有优秀的技术,为 Linux 引入的 许多特性现在已经成为了非常通用的标准 。 Debian 与其他 Linux 发行版最大的不同 之处在于包管理系统的特性。这些工具给 予 Debian 系统管理员对安装到系统上的 软件包的完全控制. Module-init-tools更新 编译内核前的准备 获取module-init-tools工具程序,并解压缩tar -zxvf module-init-tools-3.0.tar.gz 进入module-init-tools目录,输入./configure prefix=/ 将旧版模块工具程序/sbin/insmod与 /sbin/rmmod改名

4、make moveold 编译,安装与设定make make install./generate-modprobe.conf /etc/modprobe.conf 编译内核 获取内核源码,并解压缩tar zxvf linux-2.6.18.tar.gz 输入make menuconfig调出编译内核的参 数设定, 选择相应的配置时,有三种选择: * 将该功能编译进内核 不将该功能编译进内核 M 将该功能编译成可以在需要时动态插 入到内核中的模块 在/usr/src/linux-2.6.18目录下输入make指 令编译内核 编译出bzImage文件后,输入make modules 指令,编译可加

5、载模块 输入make modules_install安装模块 Make install reboot龙芯平台上的内核编译 注意的问题 Linux/MIPS toolchain 的制作 binutils 版本最好是2.8.1 以上版本的 制作系统本身和制作mips64位系统基本类 似 具体请参考孙海勇的文章“手把手教你源代码制作龙芯64位系统 “Linux的内核结构 GNU/Linux 操作系统的基本体系结构 用户空间之下是内核空间,Linux 内核正是位于 这里,它可以进一步划分成 3 层。最上面是系统调 用接口,它实现了一些基本的功能,系统调用接 口之下是内核代码,可以更精确地定义为独立于

6、体系结构的内核代码。在这些代码之下是依赖于 体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。 它提供了连接内核的系统调用接口,还提供了在 用户空间应用程序和内核之间进行转换的机制。Linux 内核的主要子系统 Linux 内核的一个体系结构透视图系统调用接口 SCI 层提供了某些机制执行从用户空间到 内核的函数调用。这个接口依赖于体系结 构。SCI 实际上是一个非常有用的函数调 用多路复用和多路分解服务。进程管理 进程管理的重点是进程的执行。在内核中 ,这些进程称为线程,代表了单独的处理 器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间

7、,通常使用进程 这 个术语,不过 Linux 实现并没有区分这两 个概念(进程和线程)。 2.6 调度系统从设计之初就把开发重点放在 更好满足实时性和多处理机并行性上,并 且基本实现了它的设计目标。 继承和发扬 2.4 版调度器的特点: 交互式作业优先 轻载条件下调度/唤醒的高性能 公平共享 基于优先级调度 高 CPU 使用率 SMP 高效亲和 实时调度和 cpu 绑定等调度手段 在此基础之上的新特性: O(1)调度算法,调度器开销恒定(与当前系统 负载无关),实时性能更好 高可扩展性,锁粒度大幅度减小 新设计的 SMP 亲和方法 优化计算密集型的批处理作业的调度 重载条件下调度器工作更平滑

8、子进程先于父进程运行等其他改进 内存管理 内核所管理的另外一个重要资源是内存。 为了提高效率,如果由硬件管理虚拟内存 ,内存是按照所谓的内存页 方式进行管理 的(对于大部分体系结构来说都是 4KB) 。Linux 包括了管理可用内存的方式,以及 物理和虚拟映射所使用的硬件机制 Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟 踪内存页使用情况,比如哪些内存页是满 的,哪些页面没有完全使用,哪些页面为 空。这样就允许该模式根据系统需要来动 态调整内存使用。虚拟文件系统 虚拟文件系统(VFS)为文件系统提供了 一

9、个通用的接口抽象。VFS 在 SCI 和内核 所支持的文件系统之间提供了一个交换层. 在 VFS 上面,是对诸如 open、close、 read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定 义了上层函数的实现方式。 文件系统层之下是缓冲区缓存,它为文件 系统层提供了一个通用函数集。这个缓存 层通过将数据保留一段时间从而优化了对 物理设备的访问。 网络协议栈 Linux 操作系统的最大特性之一就是它的网 络栈。它最初源于 BSD 的网络栈,具有一 套非常干净的接口,组织得非常好。其接 口范围从协议无关层(例如通用 socket 层 接口或设备层)到

10、各种网络协议的具体层 。 最上面是用户空间层,或称为应用层,其 中定义了网络栈的用户。 底部是物理设备,提供了对网络的连接能 力。 中间是内核空间,即网络子系统。流经网 络栈内部的是 socket 缓冲区sk_buffs), 它负责在源和汇点之间传递报文数据。内核模块 内核模块是内核的扩展,它提供了在内核运 行过程中动态加载的特性.内核模块通常用 来实现设备驱动程序. 模块被加载进系统后,就在内核态下运行了, 成了内核的一部分,可以读写内核数据结构.工具文件 lsmod, insmod, rmmod列出加载模块,插入,删除模块 Modinfo列出指定模块的信息,比如path/filename,

11、licence, versionmagic modprobe智能的加载或删除模块模块的初始化和关闭 模块的初始化函数负责注册模块所提供的 任何设施. 通常定义如下: Static int _init initialization_func(void)/*初始化代码*/module_init(initialization_func); Module_init作用在模块的目标代码中增加一个特殊的段,用 于说明内核初始化函数所在的位置 模块可以注册许多不同类型的设施,包括不 同类型的设备,文件系统等 清除函数每个重要的模块都需要一个清除函数,该函数在模 块被移除前注销接口并向系统返回所有资源stat

12、ic void _exit cleanup_func(void)/*这里是清除代码*/module_exit(cleanup_func) Module_exit作用帮助内核找到模块的清除函数如果一个模块未定义清除函数,内核就不允 许卸载该模块 宏 _init 和 _exit作用可以使函数在运行完成后自动回收内存 模块参数 内核允许对模块指定参数,可以在装载模块 时改变,这些参数的值可以在运行insmod或 modprobe命令时赋值 参数使用module_param来声明,它需要三 个参数:变量名称,类型和访问许可掩码 要声明数组参数用module_param_array(name,type,

13、num,per m)内核符号表 公共内核符号表中包含了所有的全局内核 项的地址.当模块装入内核后,它所导出的任 何符号都变成内核符号表的一部分. 一个模块向其他模块导出符号使用下面2个 宏EXPORT_SYMBOL(name)EXPORT_SYMBOL_GPL(name)模块说明的相关宏 MODULE_LICENSE() 说明代码许可类型 MODULE_DESCRIPTION() 模块描述 MODULE_AUTHOR() 作者 MODULE_SUPPORTED_DEVICE() 模块 支持的设备 Makefile obj-m += myModule.o KDIR:=/lib/modules/$

14、(shell uname -r)/build # PWD=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules clean: make -C $(KDIR) M=$(PWD) clean obj-m := myModule.o表示编译后生成 myModule.ko模块。 $(KDIR) 指定了内核源码的路径,“M=”表 示这是个外部模块,M=$(PWD) 指定了该 模块文件所在的路径。 如果是多个源文件编译出一个模块,假设模块名是test.ko ,那么源文件名不能有test.c obj-m := test.o test-objs := file1

15、.o file2.o file3.o KDIR := /lib/modules/$(shell uname -r)/build #PWD := $(shell pwd) all: make -C $(KDIR) M=$(PWD) modules clean: make -C $(KDIR) M=$(PWD) clean关键数据结构 内核使用file_operations结构来访问模块程 序中的函数. 管理模块的方法都是file_operations结构提 供的函数指针 Ssize_t(*read)(struct file*,char*,size_t,loff_t *) Ssize_t(*write)(struct file*,const char*,size_t,loff_t *) Int(*open)(struct inode*,struct file) Int(*release)(struct inode*,struct file*) Int(*ioctl)(struct inode*,struct file*,unsigned int,unsigned long)内核和用户空间的数据传输 copy_to_user

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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