在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

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值