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文件采用的是较为高级的写法,采用普通的写法会因为系统的原因而不能够执行。
linux内核模块编程实例的更多相关文章
- Linux内核模块编程——Hello World模块
Linux内核模块编程 编程环境 Ubuntu 16.04 LTS 什么是模块 内核模块的全称是动态可加载内核模块(Loadable Kernel Modul,KLM),可以动态载入内核,让它成为内核 ...
- Linux c编程实例_例子
例一:字符与整型变量的实现 #include <stdio.h> int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3=; ...
- Linux内核模块编程与内核模块LICENSE -《具体解释(第3版)》预读
Linux内核模块简单介绍 Linux内核的总体结构已经很庞大,而其包括的组件或许多.我们如何把须要的部分都包括在内核中呢?一种方法是把全部须要的功能都编译到Linux内核.这会导致两个问题.一是生成 ...
- Linux多线程编程实例解析
Linux系统下的多线程遵循POSIX线程接口,称为 pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.顺便说一下,Linux ...
- Linux网络编程实例解析
**************************************************************************************************** ...
- linux 定时器编程实例(完善中).....
最近在写linux 下的定时器编程实验,测试发现 usleep函数在 x86 架构下的定时还是比较准确的,在arm9下 就不太准了. 今天用linux 下的setitimer()函数进行了定时 器的测 ...
- 【原创】Linux 内核模块编程
sudo gedit hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linu ...
- Linux文件编程实例
//捕获fopen调用中的错误 #include <stdio.h> #include <errno.h> #include <string.h> #define ...
- Linux多进程编程实例
前言:编写多进程程序时,我们应该了解一下,创建一个子进程时,操作系统内核是怎样做的.当通过fork函数创建新的子进程时,内核将父进程的用户地址空间的内容复制给子进程,这样父子进程拥有各自独立的用户空间 ...
随机推荐
- 双十一临近,怎样让买家流畅地秒杀? ——腾讯WeTest独家开放电商产品压测服务
WeTest 导读 十一月临近,一年一度的电商大戏"双十一"又将隆重出场,目前各大商家已经开始各类优惠券的发放,各类大促的商品表单也已经提前流出,即将流入各个用户的购物车中. 作为 ...
- print、println与printf之间的区别
//print没有换行的而println有自动换行功能.实例:uprint.java class uprint{public static void main(String arg[]){int i, ...
- 【hihoCoder】#1039 : 字符消除 by C solution
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- 读书笔记-你不知道的JS上-闭包与模块
闭包定义 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行. 看一段最简单的闭包代码: function foo() { var a = 2; //闭包 fun ...
- 对Numpy广播操作的理解
1.首先检查两个矩阵维数是否相同,若不同,对维数少的补一.注意这里的维数不是指n行d列中的n和d的值,对于这种情况维数就是2.若一个两维的矩阵(n,d)和一个一维的数组(m,)相乘,补一操作就是将那个 ...
- Ubuntu 共享 转载
Ubuntu 14.04 文件服务器--samba的安装和配置 听语音 | 浏览:29526 | 更新:2014-10-10 22:28 | 标签:ubuntu 1 2 3 4 5 6 7 分步阅读 ...
- 阿里云centos 搭建SVN
1. 安装 先进入想安装的目录,执行 yum install subversion 2. 创建SVN目录 mkdir -p /var/svn/svnrepos ,然后创建版本库 svnadmin c ...
- SQL系统函数的使用(实验五)
SQL系统函数的使用(试验5) 函数在查询语句中的使用 查询员工的姓名和日工资(保留1位小数): 查询并显示部门号为01和02的所有员工的姓名首字及岗位: 查询并显示所有员工的姓名及工龄: 查询199 ...
- 将Excel文件数据导入到SqlServer数据库的三种方案
方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作. openFil ...
- 初始MyBatis
初始MyBatis 框架的概念: 框架是一个提供可重复的功用结构的半成品.它为我们构建新的应用程序提供了极大的便利,一方面提供了可以拿来就用的工具,更重要的是提供了可重用的设计.D 框架技术的优势: ...