zoukankan      html  css  js  c++  java
  • linux内核模块编程实例

    linux内核模块编程实例

    学号:201400814125 班级:计科141 姓名:刘建伟

    1.确定本机虚拟机中的Ubuntu下Linux的版本


    通过使用命令uname -a/uname -r/uname -p来查询版本号

    本机Linux的内核版本为:4.2.0-16-generic

    2.编写最简单的内核模块hello

    共有两个文件编写而成:hello.c 与 Makefile

    <1>新建空白文档,命名为hello.c。在shell下编程,截图如下:


    编写过程中需要注意TAB键和空格的区别。命令前用TAB,否则编译不通过。同时,并非是C语言中的printf,而是prink。这两者是有区别的,虽然现在还不是特别清楚。

    <2>新建空白文档,命名为Makefile。在shell下编程,截图如下:


    需要注意的地方有以下几点:

    命名一定要命名为Makefile或者是makefile,这两个都可以识别,其他的就不行了。并且要把makefile文件要同hello.c文件放置在同一个目录下。如果只是编写了hello.c文件,直接用gcc编译时会提示缺少头文件。

    3.运行命令make生成内核模块,截图如下:


    由上图可以看出,在执行命令的过程中同时也显示出了内核的绝对路径:/usr/src/linux-header-4.2.0-16-generic

    再通过命令ls查看当前位置下的文件,可以看出已经生成了一系列的文件,其中包括要执行的hello.ko的文件。

    4.内核模块的加载,使用命令insmod hello.ko

    当然如果直接使用这个命令会提示没有权限访问,则需要使用命令su root来成为管理员用户来访问hello.ko文件。截图如下:


    通过上图可以看出刚刚操作的一系列步骤。再转换为root管理员之后重新执行命令发现终端窗口并没有反馈什么信息。但是此时已经挂载上了信息,在终端窗口可以通过命令dmesg可以查看当前系统下的各项挂载信息,如下图所示


    信息加载完成后,显示信息:

    [20850.915892]<1>Hello Liu Jianwei!       挂载成功。

    5.内核模块的卸载,使用命令rmmod hello.ko


    同样的,还是需要通过dmesg命令来查看是否卸载成功。

    信息加载完成后,显示信息:

    [21517.046098]<2>See you, Liu Jianwei!       卸载成功。

    6.全部文件信息展示


    虽然只是编写了两个文件,但是在生成过程中额外增加了7个文件,是的功能完整。此外,在本次实验中,Makefile文件采用的是较为高级的写法,采用普通的写法会因为系统的原因而不能够执行。

  • 相关阅读:
    在 XD 和 Axure 中使用 iconfont
    chartjs 曲线图 纪要
    js ajax 等的的一些纪要
    程序员的方向
    sqlserver 常用的练习50例子
    (function(){})()原理
    layer弹出层详解
    sqlserver 表值函数 保存使用
    关于批量下载线程池与信号机制的使用
    tp5.1 phpstudy composer 配置等
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776121.html
Copyright © 2011-2022 走看看