linux 内核模块加载 HelloWorld

本文详细介绍如何在Linux环境下创建并操作简单的模块。从目录创建到模块的加载与卸载,包括核心代码实现及编译过程中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1。创建hello目录

mkdir hello

2。进入hello目录

cd hello

3。编写hello.c

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

4。编写Makefile文件

obj-m := hello.o
KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

5。在当前目录下make:

/home/jb/hello# make

成功的结果如下:

make -C /lib/modules/2.6.32-35-generic/build M=/home/jb/hello modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.32-35-generic'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.32-35-generic'

同时目录下有文件 hello.ko 生成 。

如果出现下面的错误:

make: Nothing to be done for `default'

解决办法:

检查Makefile文件:

obj-m := hello.o
KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

看看

$(MAKE) -C $(KDIR) M=$(PWD) modules 前面是不是有tab键空格

6。加载helloworld模块

sudo insmod hello.ko

7。卸载helloworld模块

sudo rmmod hello.ko

8。查看输出信息:

/home/jb/hello# cat /var/log/kern.log | tail -8

或者

/home/jb/hello#dmesg | tail -8


结果如下:

[ 1195.255925] input:  USB OPTICAL MOUSE as /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/input/input11
[ 1195.256119] generic-usb 0003:15D9:0A4C.0005: input,hidraw0: USB HID v1.11 Mouse [ USB OPTICAL MOUSE] on usb-0000:00:1d.0-2/input0
[ 1196.580072] [drm:radeon_fence_wait] *ERROR* fence(c80d6060:0x0000793D) 504ms timeout going to reset GPU
[ 1196.580288] [drm] GPU reset succeed (RBBM_STATUS=0x00000140)
[ 1196.580299] [drm:radeon_fence_wait] *ERROR* fence(c80d6060:0x0000793D) 512ms timeout
[ 1196.580308] [drm:radeon_fence_wait] *ERROR* last signaled fence(0x0000793D)
[ 1470.581094] Hello, world
[ 1476.732844] Goodbye, cruel world






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值