您的位置:首页 > 运维架构 > Linux

Linux内核编程入门hello,world!

2014-02-21 20:35 381 查看
kernel space中的程序入口,出口分别是module_init,module_exit中的handler,__init 宏是告知编译程序相关的程序或者变量仅用于初始化,会放到特殊的内存段中,初始化结束后就释放这段内存。在驱动程序中仅有一个module-init和cleanup_exit点。插入或移除模块后,可以通过dmesg看到相应的消息。hello_kernel.c:
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>

static int __init lkp_init(void)
{
        printk(" <1> hello ,world..\n");
        return 0;
}

static void __exit lkp_cleanup(void)
{
        printk("<2> goodbye, leaving kernel space...\n");
}

module_init(lkp_init);
module_exit(lkp_cleanup);


Makefile的写法(在内核的Makefile中定义了KERNELRELEASE,先执行内核代码下面的Makefile,然后执行当前工作目录的这个Makefile):

ifneq ($(KERNELRELEASE),)

mymodule-objs:=hello.c

obj-m += hello.o

else

PWD := $(shell pwd)

KVER := $(shell uname -r)

KDIR := /lib/modules/$(KVER)/build

all:

$(MAKE) -C $(KDIR) M=$(PWD)

clean:

rm -rf *.o *.mod.c *.ko *.mod.o *.symvers *.order *-

endif

--------
参考文献:《linux内核编程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: