首页 > 系统相关 >ubuntu内核模块编译

ubuntu内核模块编译

时间:2022-12-10 16:59:01浏览次数:73  
标签:kmod Makefile 编译 init 内核 ubuntu World hello 内核模块

1、hello.c:

 1 #include<linux/module.h>
 2 #include<linux/kernel.h>
 3 #include<linux/init.h>
 4 MODULE_LICENSE("GPL");
 5 //__init是属性标志,意思是将函数放入.init.txt的输入段,该段在内核启动完毕后被释放
 6 static int __init kmod_init(void)
 7 {
 8     printk(KERN_ALERT "Hello World!\n");
 9     return 0;
10 }
11 static void __exit kmod_cleanup(void)
12 {
13     printk(KERN_ALERT "Bye World!\n");
14 }
15 module_init(kmod_init);
16 module_exit(kmod_cleanup);
17 MODULE_AUTHOR("ubuntu-mod-tester");
18 MODULE_DESCRIPTION("hello");

2、Makefile:

1 obj-m := hello.o
2 KERNELBUILD :=/lib/modules/$(shell uname -r)/build
3 default:
4     make -C $(KERNELBUILD) M=$(shell pwd) modules
5 clean:
6     rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order *.symvers .tmp_versions

  Makefile复制到文件中后,将第4行和第6行开头的空格要修改为tab,否则编译会出错。

  -C选项将工作目录转到$(KERNELBUILD)指定的目录下,该目录下有内核顶层的Makefile;

  M=选项是把当前路径,传递到内核顶层的Makefile,要求在建立内核模块前,回到指定的路径。

3、编译:

#sudo make

4、加载模块:

#sudo insmod ./hello.ko

5、卸载模块:

#sudo rmmod ./hello

6、查看内核打印:

#dmesg

7、显示如下:

1 [10220.986528] hello: module verification failed: signature and/or  required key missing - tainting kernel
2 [10220.987639] Hello World!
3 [10244.817856] Bye World!

 

标签:kmod,Makefile,编译,init,内核,ubuntu,World,hello,内核模块
From: https://www.cnblogs.com/zzx2bky/p/16971818.html

相关文章

  • 在ubuntu下 service iptables start启动iptables失败
    尝试通过执行serviceiptablesstart启动iptables失败,提示iptables:unrecognizedservice。可以通过modprobeip_tables启动。补充:1、service可以控制系统服务(打开、......
  • Ubuntu2204设置固定IP地址
    前言Ubuntu每次升级都会修改一部分组件.从1804开始Ubuntu开始使用netplan的方式进行网络设置.但是不同版本的配置一直在升级与变化.今天掉进坑里折腾了好久.所以这边总结一......
  • 【软件工具安装】ubuntu20.04安装matlab2017b
    前言 系统环境:ubuntu20.04,安装matlab2017b;问题按照参考博客安装之后,基本功能可以使用,不过复制粘贴等快捷键不能使用,重新设置之后还是不行;出现一些warning问题,特别是VideoRe......
  • ubuntu linux pip安装报错 TypeError: expected string or bytes-like object
     File"/usr/share/python-wheels/packaging-17.1-py2.py3-none-any.whl/packaging/specifiers.py",line703,incontains  item=parse(item) File"/usr/shar......
  • Ubuntu 安装 Stanford CoreNLP
    安装JAVAStanfordCoreNLP是用JAVA写的,因此需要先安装JAVA更新软件包列表apt-getupdate安装openjdk-8-jdkapt-getinstallopenjdk-8-jdk查看java版本java......
  • ubuntu使用服务启动redis
    问题在ubuntu20.04上安装好redis5.0.14后,通过下面的命令启动redis服务,发现报错FailedtostartLSB:Redisdatastructureserver.serviceredisdstart解决方案:修......
  • proto编译不同文件夹下互相包含的proto
    1.improt内只要写文件名即可2.在编译路径中加两个路径//xpb_publicxpb_src两个文件都在同一级不同的写具体路径,但是不要出现../应该从同./下开始protoc-I./x......
  • Ubuntu 14.04 设置固定 IP
    首先用root用户登录,然后输入你的root密码,如果不用root登录可以在命令之前添加sudo。然后编辑interfaces文件,该文件位于/etc/network/下面,执行如下命令:sudovim/etc/netwo......
  • ubuntu20.04关闭防火墙
    ufw特别好用,只需几条简单的命令,即可关闭防火墙、打开防火墙、开放端口等功能。1.ufw打开与关闭关闭:sudoufwdisable打开:sudoufwenable2.查看ufw状态sudoufwstatus......
  • VSCode C/C++编译/调试配置文件
    VSCode其实是一款编辑器,再加上一系列的扩展之后,就可以作为IDE使用了,而且很多轻量方便的扩展非常有用,特别是remote-SSH,已经成为远程开发linux程序必不可少的工具,我是用VSCod......