1. 程式人生 > >在Ubuntu上開發編譯核心模組以及除錯核心模組,並檢視printk列印的訊息

在Ubuntu上開發編譯核心模組以及除錯核心模組,並檢視printk列印的訊息

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