内核编写试步0
时间:2006-12-02 来源:longtem
第一份hello world 代码:
#include <linux/module.h>
#include <linux/init.h>
/*----------------all variables-------------*/
static char *string = "Marry has a little lamb!";
static int count = 6;
module_param (string, charp, S_IRUGO);
module_param (count, int, S_IRUGO);
/*----------------over----------------------*/
static int __init start (void);
static void __exit end (void);
static int __init
start (void)
{
int i;
printk (KERN_ALERT "File: %s. Pid: %d.\n", current->comm, current->pid);
for (i = 0; i < count; i++)
printk (KERN_ALERT "%s\n", string);
return 0;
}
static void __exit
end (void)
{
printk (KERN_ALERT "Good bye, boys and girls!\n");
}
module_init (start);
module_exit (end);
MODULE_LICENSE ("GPL");
MODULE_AUTHOR ("Sody");
MODULE_DESCRIPTION ("Just for excerise!");
---------------------------------------------------------------------------------------------------
Makefile:
obj-m := myk0.o
编译命令:make -C /usr/src/kernels/2.6.9-42.EL-smp-i686/ SUBDIRS=$PWD modules
有个万能的命令的,忘了,就不写出来了。但一定要对上自己的内核源代码位置。
---------------------------------------------------------------------------------------------------
说明:printk跟printf除了运行级别不一样外,其他都差不多,只是不支持浮点数--好像内核不大喜欢浮点数
预载差数要小心。比如,字符串的长度要限制好。但内核本身会做得比较好,会限定得比较死。
跟普通的C程序相比,驱动的编写有点像是写C++程序,要写很多“成员函数”。当然,要更小心,限制也很大
包含的头函数也不一样。跟踪也比较麻烦(普通的C在vi下用K可跟踪)
还有好多不同,等我日后慢慢添加上去。
#include <linux/module.h>
#include <linux/init.h>
/*----------------all variables-------------*/
static char *string = "Marry has a little lamb!";
static int count = 6;
module_param (string, charp, S_IRUGO);
module_param (count, int, S_IRUGO);
/*----------------over----------------------*/
static int __init start (void);
static void __exit end (void);
static int __init
start (void)
{
int i;
printk (KERN_ALERT "File: %s. Pid: %d.\n", current->comm, current->pid);
for (i = 0; i < count; i++)
printk (KERN_ALERT "%s\n", string);
return 0;
}
static void __exit
end (void)
{
printk (KERN_ALERT "Good bye, boys and girls!\n");
}
module_init (start);
module_exit (end);
MODULE_LICENSE ("GPL");
MODULE_AUTHOR ("Sody");
MODULE_DESCRIPTION ("Just for excerise!");
---------------------------------------------------------------------------------------------------
Makefile:
obj-m := myk0.o
编译命令:make -C /usr/src/kernels/2.6.9-42.EL-smp-i686/ SUBDIRS=$PWD modules
有个万能的命令的,忘了,就不写出来了。但一定要对上自己的内核源代码位置。
---------------------------------------------------------------------------------------------------
说明:printk跟printf除了运行级别不一样外,其他都差不多,只是不支持浮点数--好像内核不大喜欢浮点数
预载差数要小心。比如,字符串的长度要限制好。但内核本身会做得比较好,会限定得比较死。
跟普通的C程序相比,驱动的编写有点像是写C++程序,要写很多“成员函数”。当然,要更小心,限制也很大
包含的头函数也不一样。跟踪也比较麻烦(普通的C在vi下用K可跟踪)
还有好多不同,等我日后慢慢添加上去。
相关阅读 更多 +