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文件采用的是较为高级的写法,采用普通的写法会因为系统的原因而不能够执行。

linux内核模块编程实例的更多相关文章

  1. Linux内核模块编程——Hello World模块

    Linux内核模块编程 编程环境 Ubuntu 16.04 LTS 什么是模块 内核模块的全称是动态可加载内核模块(Loadable Kernel Modul,KLM),可以动态载入内核,让它成为内核 ...

  2. Linux c编程实例_例子

    例一:字符与整型变量的实现 #include <stdio.h> int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3=; ...

  3. Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读

    Linux内核模块简单介绍 Linux内核的总体结构已经很庞大,而其包括的组件或许多.我们如何把须要的部分都包括在内核中呢?一种方法是把全部须要的功能都编译到Linux内核.这会导致两个问题.一是生成 ...

  4. Linux多线程编程实例解析

    Linux系统下的多线程遵循POSIX线程接口,称为 pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.顺便说一下,Linux ...

  5. Linux网络编程实例解析

    **************************************************************************************************** ...

  6. linux 定时器编程实例(完善中).....

    最近在写linux 下的定时器编程实验,测试发现 usleep函数在 x86 架构下的定时还是比较准确的,在arm9下 就不太准了. 今天用linux 下的setitimer()函数进行了定时 器的测 ...

  7. 【原创】Linux 内核模块编程

    sudo gedit hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linu ...

  8. Linux文件编程实例

    //捕获fopen调用中的错误 #include <stdio.h> #include <errno.h> #include <string.h> #define  ...

  9. Linux多进程编程实例

    前言:编写多进程程序时,我们应该了解一下,创建一个子进程时,操作系统内核是怎样做的.当通过fork函数创建新的子进程时,内核将父进程的用户地址空间的内容复制给子进程,这样父子进程拥有各自独立的用户空间 ...

随机推荐

  1. LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)

    We define a harmonious array is an array where the difference between its maximum value and its mini ...

  2. 个性化推荐系统(七)--- ABTest ab测试平台

    个性化推荐系统.搜索引擎.广告系统,这些系统都需要在线上不断上线,不断优化,优化之后怎么确定是好是坏.这时就需要ABTest来确定,最近想的办法.优化的算法.优化的逻辑数据是正向的,是有意义的,是提升 ...

  3. iOS之ViewController的多层presentViewController的dismiss问题

    今天在Q群里有人问了个这么个问题: A,B,C,D 都是Viewcontroller.A.B.C.D使用present去切的 他是这么搞的: A -> B, B ->C, C->D, ...

  4. 轻松学会ES6新特性之生成器

    生成器虽然是ES6最具魔性的新特性,但也是最难懂得的一节,笔者写了大量的实例来具体化这种抽象的概念,能够让人一看就懂,目的是希望别人不要重复或者减少笔者学习生成器的痛苦经历. 在说具体的ES6生成器之 ...

  5. sqoop1.4.6配置安装

    1.下载sqoop1.4.6 2.配置环境变量. 3.复制sqoop/conf/sqoop-env-template.sh为sqoop-env.sh 添加相关的配置 #Setpath to where ...

  6. mysql索引优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. 记Javascript的编写方式的全新学习

    前言 这次有幸参与前端的工作,对于前端开发学习了不少新知识,在此记录一下相比之前,完全不同的Javascript编写方式. 原来的编写方式 之前也是写过Javascript,就是常见的.js 文件写函 ...

  8. 在ssm框架中前后台数据交互均使用json格式

    前后台数据交互均使用json. 框架ssm(spring+springmvc+mybatis) @RequestBody注解实现接收http请求的json数据,将json数据转换为java对象,注解加 ...

  9. android版火狐调试器

    Remotely debugging Firefox for Android 使用火狐开发工具可以在桌面上进行远程代码的调试(FF26以上) 具体使用参考: https://developer.moz ...

  10. 关于jQuery.click()函数

    最近接手了前同事的项目,关于使用线程控制实现代码热插拔功能! 在线程中,使用了ChatWebSocketHandler,与前台进行实时交互,今天我拿到需求是这样的,结合chatWebSocketHan ...