linux 内核 kernel_核 travel_旅行 linux kernel travel
linux 2.6
1
hellomod.c
001
// hello world driver for linux 2.6
#include <linux/module.h> /*所有模块都要使用头文件module.h*/
#include<linux/kernel.h> /*kernel.h包含了常用的内核函数*/
#inlcude<linux/init.h> /* init.h 包含了宏 _init和_exit 它们容许释放内存*/
/* 头文件*/
static int_init lkp_init(void)
{
printk("<1>hello,world! from the kernel space... \n"); /* 模块初始化,printk函数
相当于C语言中的printf输出 函数,<1>立即输出*/
return 0;
}
static void_exit lkp_cleanup(void)
{
printk("<1>Goodbye,world! leaving kernel space...\n");
}
module_init(lkp_init); /* 入口点*/
module_exit(lkp_cleanup); /* 可加载模块,内核在此处调用 lkp_cleanup 函数*/
MODULE_LICENSE("GPL"); /* 提示没有GNU公共许可证*/
module_init() 和 cleanup_exit
module_init() 向内核注册模块所提供的新功能
cleanup_exit() 注销由模块提供的新功能
C语言应用程序 内核模块程序
使用函数 Libc库 内核函数
运行空间 用户空间 内核空间
运行权限 普通用户 超级用户
入口函数 main() module_init()
出口函数 exit() module_exit()
编译 Gcc-c makefile
连接 Gcc insmod
运行 直接运行 insmod
调试 Gdb kdbug kdb kgdb