怎么编写Linux内核模块HelloWorld

技术怎么编写Linux内核模块HelloWorld本篇内容介绍了“怎么编写Linux内核模块HelloWorld”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情

本文介绍了关于“如何编写Linux内核模块HelloWorld”的知识。很多人在实际办案过程中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

00-1010在接下来的操作之前,我先准备了一台电脑,安装了一个虚拟机,系统是Ubuntu16.04,如果是开发板,需要安装交叉编译器,但是目前我只完成了虚拟机Ubuntu16.04系统中驱动模块的加载和卸载,实现最简单的内核模块,通过这个最简单的驱动学习最基本的概念。

需要先安装相应的开发支持。

Yum安装内核头kernel-develoggcglibcgcc-c-y//等。自动配置、制作等。

准备工作

模块是可以根据实际需要动态加载和卸载到内核中的代码。它们扩展了内核的功能,模块可以在不重启系统的情况下加载和工作。例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。如果没有模块,我们必须构建整个内核,并直接向内核映像添加新功能。除了拥有更大的内核之外,还有另一个缺点,那就是每当我们想要一个新的函数时,我们都需要重新编译内核并将其刻录到设备上。

什么是内核模块

# include link/init . h

//所有模块都需要这个头文件。

# include link/module . h

//以下宏需要

# include link/kernel . h

//通用内核库函数

static int _ _ inithello _ init(void){ 0

printk(KERN _ INFO ' moduleinitsuccess \ n ');

返回0;

}

static void _ _ existello _ exit(void){ 0

printk(KERN _ INFO ' moduleexit success \ n ');

}

module _ init(hello _ init);

module _ exit(hello _ exit);

MODULE _ LICENSE(' GPL ');

//开源协议

MODULE _ AUTHOR(' AUTHOR ');

MODULE_DESCRIPTION('函数描述');这是一个简单的内核模块程序,可以动态加载和卸载。虽然没有实用功能。

模块初始化成功\n将在加载模块时打印\ n

模块退出成功\n将在模块卸载时打印\ n

编写 hello.c

Makefile

obj-m:=hello.o

PWD:=$(shellpwd)

kvr :=$(shelluname-r)

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

all:

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

clean:

Rm-RF *。o *。mod.c *。mod.o *。ko *。符号*。订单*。a在同一路径编译hello.c和Makefile。编译成功后,将在当前路径中生成hello.ko,这是我们将加载到内核中的模块。

模块编译

namefunctionlsmod查看已经加载到内核中的模块insmod将模块加载到内核中rmmod从内核中卸载模块depmod以生成模块。modprobe (-h)

相关指令

10-1010的强大指令将hello.ko模块加载到内核中。

如果模块加载成功,您可以查看该模块。

lsmod|grephello的成功加载将显示以下结果

并且可以查看内核打印的消息。

dmesg | grep ' init success '[4160.003247]Moduleinitsuccess

测试结果

rmmodhello . ko成功卸载hello模块后,可以检查内核是否正常打印出我们在程序中预设的打印信息。

Dmesg | grep 'exitsuccess '可以看到终端上显示模块退出成功,表示hello.ko通过rmmod卸载成功。

[7160.003247]modulexitaccess此时,如果通过lsmod查看当前内核模块,会发现hello.ko已经消失了。

这里介绍一下“如何编写Linux内核模块HelloWorld”的内容。感谢您的阅读。如果你想了解更多的行业,可以关注网站。边肖将为您输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126282.html

(0)

相关推荐

  • 面向对象的绑定方法和属性的增删改查

    技术面向对象的绑定方法和属性的增删改查 面向对象的绑定方法和属性的增删改查目录一:绑定方法二:属性的查找顺序
    一:绑定方法是一个函数就应该有一个参数,方便对象只要一调就能够传进来定义类
    class St

    礼包 2021年12月3日
  • 5 个用命令行操作 LibreOffice 的技巧是什么

    技术5 个用命令行操作 LibreOffice 的技巧是什么这篇文章给大家介绍5 个用命令行操作 LibreOffice 的技巧是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。直接在命令行中对文

    攻略 2021年11月12日
  • 黑色上衣配什么颜色的裤子好看,黑色上衣配什么颜色裤子好看

    技术黑色上衣配什么颜色的裤子好看,黑色上衣配什么颜色裤子好看虽然已经是夏天,天气炎热,但是还是有很多人喜欢穿黑色,如果说黑色的裤子倒还是百搭的如果是上衣应该怎么搭配呢黑色上衣配什么颜色的裤子好看?男装黑色上衣大多会搭配牛

    生活 2021年10月21日
  • 如何解决C# 7.2中的结构体性能问题

    技术如何解决C# 7.2中的结构体性能问题本篇内容介绍了“如何解决C# 7.2中的结构体性能问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年11月26日
  • jdbc操作mysql的步骤(简述jdbc数据库编程的基本步骤)

    技术怎么使用ScalikeJDBC操作MySQL数据库本篇内容介绍了“怎么使用ScalikeJDBC操作MySQL数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处

    攻略 2021年12月22日
  • 洗发水推荐,有哪些蓬松控油的洗发水推荐

    技术洗发水推荐,有哪些蓬松控油的洗发水推荐先说下我的发质吧,我是头皮油,发丝干,到了夏天头皮更容易出油,所以我基本上春夏都喜欢用清爽洗发水推荐、控油比较好,且洗完之后头发比较蓬松的洗发水。推荐几款我用过觉得清洁力强,洗完

    生活 2021年10月29日