首先进入到linux内核目录 /kernel/drivers/下,创建一个目录my6818 创建两个文件 test.c 和Makefile
test.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>
//__init段 内核启动过程中要调用
static __init int test_init(void)
{
int 0;
for(i=0;i<20;i++)
{
printk("<0>""hello world\n");//<0>是消息级别
}
//如果执行成功返回0,否则返回相应错误码
return 0;
}
//内核在启动过程中会调用test_init函数
module_init(test_init);//必须要写
MODULE_LICENSE("GPL");//必须要写
MODULE_AUTHOR("ZhiYONGlI");//可不写
MODULE_VERSION("V1.0");//可不写
MODULE_DESCRIPTION("Test For Class");//可不写
Makefile:
obj-y +=test.o
obj-y 意思是test.c要和内核源码编译到一起 obj-m意思是单独编译test.c文件,编译成.ko文件, obj-n意思是这个test.c文件是不编译的.
然后vim ../Makefile ,然后在这个Makefile中加上 obj-y +=my6818/ 保存退出
再编译内核的时候这个test.c文件就能编译进去了
在 kernel/arch/arm/kernel 下的 calls.s文件可以添加自己的系统调用,然后在当前的kernel目录下实现自己的函数,
cd .. ,在arm目录下 打开vim include/asm/unistd.h 添加系统调用号.
syscall函数根据添加的系统调用号调用