在Ubuntu上開發編譯核心模組以及除錯核心模組,並檢視printk列印的訊息
阿新 • • 發佈:2019-02-10
Ubuntu上開發編譯核心模組以及除錯核心模組,並檢視printk列印的訊息
前言:在開發中,為了方便,其實我們是可以先在ubuntu執行和測試核心模組,測試好了再用交叉編譯到ARM裝置上執行。下面就介紹一下方法和測試程式碼。
1.模組C程式碼。
helloworld.c
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> static int __init hello_init(void) { printk(KERN_ALERT "hello driver init!\n");//KERN_EMERG return 0; } static void __exit hello_exit(void) { printk(KERN_ALERT "hello driver exit\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("RFIDUNION"); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("A simple driver"); MODULE_ALIAS("a simple test module");
二、Makefile檔案程式碼如下。其中 /lib/modules/4.4.0-128-generic/build是我電腦ubuntu版本的linux核心。
#MAKEFILE = Makefile ifneq ($(KERNELRELEASE),) module-objs := helloworld.o obj-m := helloworld.o else KERNELDIR := /lib/modules/4.4.0-128-generic/build PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif clean: rm -rf *.o *~core.depend.*.cmd *.ko *.mod.c.tmp versions
三、在ubuntu下載入和解除安裝模組。在載入模組到終端你是看不到printk函式列印的資訊,這是因為printk資訊的輸出的log在核心的命令列引數console=ttyXXX裡指定死了,要看log的一個方法是開啟兩外一個終端然後執行下面的shell來看:
while true
do
sudo dmesg -c
sleep 1
done