zoukankan      html  css  js  c++  java
  • 操作系统课程设计 内核模块

    实验编号

    课程设计专题三

    题目

    内核模块

    实验目的

    1.概念

    2.相关命令

    3.编写

    4.编译

    5.安装、传参、调试

    实验内容

    题目一

    编写一个内核模块;

    编译该模块;

    加载、卸载该模块;

     

    题目二

    用内核模块的方式为系统添加一个系统调用

    具体要求同专题一

    报告内容要求

    (1) 程序实现方法和思路

    (2) 测试及结果

    报  告  正  文

     

    (1)内核模块实现的几个步骤:

    新建模块目录

    用编辑器(vi)编辑源文件

    用编辑器编辑Makefile

    编译模块

     

      内核模块的加载

    #insmod  module_name

    内核模块的卸载

          #rmmod  module_name  

      或者

          #modprobe –r module_name

    查看系统已经加载的模块

          #lsmod

    查看系统已经加载的模块信息

          #modinfo

     

     1 //hello.c
     2 #include <linux/init.h>                      // for module_init()
     3 #include <linux/module.h>              // must be include
     4 #include <linux/kernel.h>                // for printk()
     5  
     6 static int hello_init(void) {               // 模块入口函数
     7     printk("Hello world
    ");
     8     return 0;
     9 }
    10  
    11 static void hello_exit(void) {           // 模块退出函数
    12     printk("Hello module exit
    ");
    13 }
    14  
    15 module_init(hello_init);
    16 module_exit(hello_exit);
    17 MODULE_LICENSE("GPL");
    18 MODULE_AUTHOR("kuy");
    19 MODULE_DESCRIPTION("hello");

     

      说明:

    模块入口函数为hello_init(),由module_init()宏指定,在模块被加载的时候被调用向系统注册。

    入口函数的返回值:0表示成功,非0表示失败。

    模块的退出函数为hello_exit(),由module_exit()宏指定,在模块被卸载时被调用向系统注销,主要来完成资源的清理工作。它被调用完毕后,就模块就被内核清除了。

    一个模块最少需要有入口和退出函数。

     

    printk( )函数

    printk 函数在Linux内核中定义并且对模块可用,为内核提供日志功能,记录内核信息或用来给出警告。与标准C 库函数 printf 的行为相似。

    每个printk()声明都会带一个优先级。内核总共定义了八个优先级的宏, 在linux/kernel.h中定义。若不指明优先级,DEFAULT_MESSAGE_LOGLEVEL这个默认优先级将被采用。

    信息添加到文件/var/log/kern.log,可直接查看,或者用命令dmesg查看。在X-windows下的终端insmod一个模块,日志信息只会记录在日志文件中,而不在终端打印。

     

    内核模块的Makefile

    obj-m := hello.o

    KERNELDIR := /lib/modules/$(shell uname –r)/build

    PWD := $(shell pwd)

    modules:

    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

    modules_install:

    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

     

    clean:

    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

    (2)

     

     

  • 相关阅读:
    聊一聊正则表达式,最全最常用总结
    11个优秀的Android开发开源项目
    一招教你打造一个滑动置顶的视觉特效
    这些优质的电子书 开发必备【干货精选】
    用Kotlin破解Android版微信小游戏跳一跳
    2017上半年技术文章集合【Android】—184篇文章分类汇总
    经常用到的字符串函数
    EhLib使用说明
    Delphi中本年、本月、本周的第一天和最后天
    Delphi中关于listview的一些使用
  • 原文地址:https://www.cnblogs.com/ku1274755259/p/11108895.html
Copyright © 2011-2022 走看看