码迷,mamicode.com
首页 > 其他好文 > 详细

内核第一个程序之Hello World!

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

标签:style   blog   ar   color   os   使用   sp   文件   div   

这个程序是《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!

标签:style   blog   ar   color   os   使用   sp   文件   div   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!