linux 核心模組載入 HelloWorld

2021-06-21 08:20:25 字數 2094 閱讀 5402

1。建立hello目錄

mkdir hello

2。進入hello目錄

cd hello

3。編寫hello.c

#include

#include

module_license("gpl");

static int hello_init(void)

static void hello_exit(void)

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

Linux核心模組自動載入機制

提交者 addylee 日期 2008 10 8 22 50 閱讀 636 www.osplay.org 摘要 本文討論了linux核心中udevd的模組自動載入機制。標題 思 考 如果想讓核心啟動過程中自動載入某個模組 該怎麼做呢?最容易想到的方法就是到 etc init.d 中新增乙個啟動指令碼...

Linux核心模組自動載入機制

思 考 如 果想讓核心啟動過程中自動載入某個模組該怎麼做呢?最容易想到的方法就是到 etc init.d 中新增乙個啟動指令碼,然後在 etc rcn.d 目 錄下建立乙個符號鏈結,這個鏈結的名字以s開頭,這核心啟動時,就會自動執行這個指令碼了,這樣就可以在指令碼中使用modprobe來實現自動載入...

Linux核心模組自動載入機制

標題 思考 如 果想讓核心啟動過程中自動載入某個模組該怎麼做呢?最容易想到的方法就是到 etc init.d 中新增乙個啟動指令碼,然後在 etc rcn.d 目 錄下建立乙個符號鏈結,這個鏈結的名字以s開頭,這核心啟動時,就會自動執行這個指令碼了,這樣就可以在指令碼中使用modprobe來實現自動...