#include
#include
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);
1、其中module_init和module_exit是Linux驱动程序的入口,分别在加载内核和卸载内核的时候引用
2、MODULE_LICENSE是Linux 内核的一个特殊的宏,用来告诉内核,该模块采用自由许可证,是驱动程序中不可缺少的。
3、printk类似与c语言中的printf,但是在内核中是没有gcc的,内核中调用的是内核中的函数变量,KERN_ALERT是内核消息的优先级
3、Makefile文件的编写
学习嵌入式Linux的一个很重要的技能就是Makefile文件的编写,在Linux中,最好用的编译器就是GCC,但是当C文件的很多的时候,一个一个文件的编译链接就显得十分麻烦,Makefile文件可以很容易的解决这个问题。 一个简单的Makefile代码如下:
ifneq ($(KERNELRELEASE),)
obj-m := helloworld.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.mod.c *.order *.symvers
endif
效果如下:
4、讲驱动程序加载到内核中
操作内核的命令主要有三个:make ARCH=arm CROSS_COMPILE=arm-linux-gnuea -j4
会生成.ko的驱动文件。利用U盘拷到开发板上,和Ubuntu下的加载和卸载方式一样,测试驱动是否可用