linux驅動之Hello World

首先需要編譯一份linux內核並使之運行起來,然後開始第一個驅動程序Hello World的實踐。

1、新建一個目錄並新建hello.c文件

參考LLD3上的代碼。
注意代碼中的tab鍵位置不要用空格代替,會出問題,具體原因還不瞭解。
並且tab鍵要調成4個空格大小,ubuntu的gedit編輯器默認是8個。

#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, World\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, World\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");

2、在同一個目錄下新建Makefile

新建Makefile文件,文件名不要隨意改動,據說會有問題。例如:makefile是不行的。
注意KERNELDIR := 後的路徑要寫自己modules目錄裏的相應位置。
同樣需要注意tab

ifeq ($(KERNELRELEASE),)
    KERNELDIR := /lib/modules/4.14.6/build
    PWD := $(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
else
    obj-m := hello.o
endif

3、編譯測試

在hello.c這個目錄中打開終端,切換到root模式,依次執行以下三條命令

make
insmod ./hello.ko
rmmod hello

如果在insmod命令後終端打印了“Hello World”,並且rmmod命令後打印了“Goodbye World”,那麼這部分就結束了。如果很不幸的沒有打印出來就到/var/log/kern.org裏看一下。這是由於系統傳遞消息機制的不同,輸出到了系統日誌文件中。據說不同的系統文件名可能略有不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章