如何编写一个简单的 Linux 内核模块

如何编写一个简单的 Linux 内核模块,第1张

编写helloworld.c及其对应的Makefile。

helloworld.c:

#include <linux/module.h>#include <linux/kernel.h>int init_hello_module(void)

{

printk("***************Start***************\n")

printk("Hello World! Start of hello world module!\n") return 0

}void exit_hello_module(void)

{

printk("***************End***************\n")

printk("Hello World! End of hello world module!\n")

}

MODULE_LICENSE("Dual BSD/GPL")

module_init(init_hello_module)

module_exit(exit_hello_module)1234567891011121314151617181920

Makefile:

# To build modules outside of the kernel tree, we run "make"# in the kernel source treethe Makefile these then includes this# Makefile once again.# This conditional selects whether we are being included from the# kernel Makefile or not.# called from kernel build system: just declare what our modules areobj-m := helloworld.oCROSS_COMPILE =

CC= gcc# Assume the source tree is where the running kernel was built

# You should set KERNELDIR in the environment if it's elsewhere

KERNELDIR ?= /usr/src/linux-headers-$(shell uname -r)# The current directory is passed to sub-makes as argument

PWD := $(shell pwd)all: modulesmodules:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:

rm -rf *.o *~ core .depend *.symvers .*.cmd *.ko *.mod.c .tmp_versions $(TARGET)

在Makefile中,在obj-m := helloworld.o这句中,.o的文件名要与编译的.c文件名一致。

KERNELDIR ?= /usr/src/linux-headers-$(shell uname -r)指示当前linux系统内核的源码位置。

Linux *** 作系统主要包括内核组件系统。Linux内核大部分是用C语言编写的,还有部分是用汇编语言写的,因为在对于硬件上,汇编有更好的性能和速度。

Linux的一些组件系统和附加应用程序是用C、C++、Python、perl等语言写的。

扩展资料:

Linux与其他 *** 作系统相比 ,具有开放源码、没有版权、技术社区用户多等特点 ,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈 ,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。

Linux不仅系统性能稳定,其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux *** 作系统不仅仅是被网络运维人员当作服务器使用,Linux既可以当作服务器,又可以当作网络防火墙是Linux的 一大亮点。

参考资料来源:百度百科—linux


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7629616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存