首页 > 其他 > 详细

内核第一个程序之Hello World!

时间:2014-11-30 16:44:21      阅读:280      评论:0      收藏:0      [点我收藏+]

这个程序是《Linux device drivers》中的代码片段:

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
      printk(KERN_ALERT "Hello,world\n");
      return 0;
}

static void hello_exit(void)
{
      printk(KERN_ALERT "Goodbye,Cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

下面是makefile, 建议去看一下makefile的基本语法,$(MAKE) -C $(KERNELDIR) SUBDIRS = $(PWD) modules这句就是说首先改变目录到-C选项指定的目录(即内核源代码目录),其中保存了内核的顶层makefile文件。SUBDIRS=选项让该makefile在构造modules目标返回之前到模块源代码目录。然后,modules目标指向obj-m变量设定的模块。

ifneq ($(KERNELRELEASE),)
     obj-m := hello.o
else
     KERNELDIR :=/lib/modules/$(shell uname -r)/build
     PWD := $(shell pwd)
all:
     $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
endif
clean:
     rm -f *.o *.ko *.mod.c .hello*

好了,然后安逸的make一下:

make -C /lib/modules/3.13.0-35-generic/build SUBDIRS=/home/zachery/kernel_programming modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-35-generic‘
  CC [M]  /home/zachery/kernel_programming/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/zachery/kernel_programming/hello.mod.o
  LD [M]  /home/zachery/kernel_programming/hello.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-35-generic‘
 

接下来可以看效果了,

装载模块: insmod ./hello.ko

卸载模块: rmmod hello

terminal是看不到输出的,消息进入了其中一个系统日志文件中, 我当前的Ubuntu14.04是 /var/log/syslog (实际文件名子随 Linux 发布而变化). 可以使用 tail -f /var/log/syslog查看。

 

ps: printk中优先级只是一个字串, 前缀于 printk 格式串之前. 注意在 KERN_ALERT 后面是不需要逗号的!!

内核第一个程序之Hello World!

原文:http://www.cnblogs.com/freedreamnight/p/4133221.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!