linux内核任意组成模块,Linux内核模块课程设计.doc

Linux课程设计

项目名称: 内核模块编程

姓 名: *****

班 级: 计算机*班

学 号: 2008****

指导教师: **

日 期: 2011.6.19—2011.6.24

目录

一.课程设计目的2

二.任务描述2

三.选题原因2

四、准备阶段3

五.整体思路8

六.程序代码8

七.遇到的问题12

八.测试结果13

九.总结15

一.课程设计目的

通过课程设计对操作系统综合模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。

应用程序与内核模块程序的比较

$sN[ _H;`1o7f0C语言应用程序LUPA开源社区#t)VsE+s7T?? 内核模块程序LUPA开源社区1~|-CX*C*U%s"q4L1p使用函数LUPA开源社区g(`D c'hD??Libc库LUPA开源社区)l-KY5V:e4[5b? ?内核函数7si zK)O*n0运行空间aWx7`h0??用户空间LUPA开源社区#I wYfTV+H? ?内核空间$~?k(e u7HQY4I0运行权限!e{ O;ba`8X#H0??普通用户LUPA开源社区:X} AJ%A4u? ?超级用户LUPA开源社区W7P!MUbMLP入口函数&xBJ(H:B[ H0? ?main()LUPA开源社区;fC.U o6F%e r H@8H??module_init()4f RQV j KZ~M6F0出口函数LUPA开源社区2r)}v0Q%wWI? ?exit()LUPA开源社区cSr,o/Vzi??module_exit()LUPA开源社区v%K$IgD$j5[?(a编译LUPA开源社区h%Ny mUZ2qt!A??Gcc –cLUPA开源社区@3_;M[[+@??Makefile连接+H(iB f.w$v7J0??GccLUPA开源社区&wZKg!o&L??insmodLUPA开源社区Egc0E y C6O W运行LUPA开源社区*o_$\&`G??直接运行LUPA开源社区'o!LK-Qo#dm D? ? insmodsS#HOn` v0调试LUPA开源社区uT-Q;kd7x??Gdb~X.hw~ dP ]0kdbug, kdb,kgdb等LUPA开源社区T ?o#F.H;m(Bg 编译工具make :Make工具通过一个称为 Makefile 的文件来完成并自动维护编译工作。

课本上有提供一个超级通用的Makefile,此文件要与模块在同一个文件夹下。

ifneq ($(KERNELRELEASE),)

obj-m += nullparam.o

else

PWD := $(shell pwd)

KVER := $(shell uname -r)

KDIR := /lib/modules/$(KVER)/build

all:

$(MAKE) -C $(KDIR) M=$(PWD)

clean:

rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers

endif

KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义, 所以make将读取执行else之后的内容。如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuil

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值