第 1 天,hello world
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第 1 天,hello world相关的知识,希望对你有一定的参考价值。
本文描述了如何编写并且加载一个 Linux 内核模块,以及实验过程中遇到的问题和解决方法。本实验在模块加载时在系统日志文件中输出信息“Hello world!",在模块被删除时在系统文件中输出信息”Goodbye World!"。包括以下内容:
- 实验环境
- 源代码
- 演示步骤
- 问题及解决方法
- 实验环境Win8 系统, VirutalBox 5.0.14 r105127, Ubuntu 15.10 desktop
- 源代码
2.1 hello.c
1 // ---- HelloMod.c ---- // 2 #include <linux/module.h> 3 #include <linux/kernel.h> 4 #include <linux/init.h> 5 6 MODULE_LICENSE( "GPL" ); //get rid of taint message 7 MODULE_AUTHOR( "kunzhang" ); 8 MODULE_DESCRIPTION( "Hello World module" ); 9 10 static int __init lkp_init( void ) 11 { 12 printk( KERN_NOTICE"Hello, World! from the kernel message space ...\n" ); 13 return 0; 14 } 15 16 static void __exit lkp_cleanup( void ) 17 { 18 printk( KERN_NOTICE"<1>Goodbye, World! Leaving kernel space ...\n" ); 19 } 20 21 module_init( lkp_init ); 22 module_exit( lkp_cleanup );
2.2 Makefile
1 ifneq ($(KERNELRELEASE),) 2 obj-m := hello.o 3 else 4 KDIR := /lib/modules/4.2.0-16-generic/build 5 6 all: 7 make -C $(KDIR) M=$(PWD) modules 8 clean: 9 rm -f *.ko *.o *.mod.o *mod.c *.symvers *.order 10 endif
- 演示步骤
3.0 准备工作
在任意一个目录内建立两个文件hello.c 以及 Makefile, 文件内容如上所示。
3.1 编译文文件
打开终端,并切换到hello.c 以及 Makefile 所在的路径下
%> make
编译成功以后在当前目录下会生成 5 个新的文件: hello.ko, hello.mod.c, hello.mod.o,modules.order Module.symvers。其中hello.ko是我们所需要的二进制模块文件。
3.2 装载及卸载
%> sudo insmod hello.ko
%> sudo rmomd hello.ko
3.3 查看实验结果
文中我们使用的信息输出函数 "printk" 不能在屏幕上输出,而是将信息写在了系统的日志文件/var/log/syslog 里。
Feb 8 17:37:20 SeventhCorner kernel: [ 3850.565815] Hello, World! from the kernel message space ... Feb 8 17:37:25 SeventhCorner kernel: [ 3856.246795] Goodbye, World! Leaving kernel space ...
- 遇到的问题以及解决方法
本实验并无稀奇古怪的问题,笔者在执行过程中遇到的错误都可归结为“不够细心”。以下两点应该注意:
a. 注意Linux机器上已有的内核版本
6. 注意Makefile 不要有拼写错误 - 参考资料a. 《The Linux® Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》,Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski
b. linux设备驱动--HelloWorld
以上是关于第 1 天,hello world的主要内容,如果未能解决你的问题,请参考以下文章
C++从入门到精通开发第一天 - C++的Hello World