写过一篇文章是在ARM11上完成的LED的驱动和应用程序,现在换了平台,在am335x上。相比之前是在内核里面修改Kconfig和Makefile文件,然后编译模块或者.ko文件,这次直接编写Makefile,然后指定内核目录和编译器即可编译获得.ko文件,以后的驱动开发都可以参考此Makefile部分,故编写此文档,以备他日参考之用。
参考代码:
#include linux/kernel.h
#include linux/module.h
static int __init ARM_Hello_Init(void)
{
printk("Hello, Hello module is installed !\n");
return 0;
}
static void __exit ARM_Hello_Exit(void)
{
printk("Good-bye, Hello module was removed!\n");
}
module_init(ARM_Hello_Init);
module_exit(ARM_Hello_Exit);
MODULE_LICENSE("GPL");
参考Makefile
#ifneq ($(KERNELRELEASE),)
obj-m:=hello-dev.o
#else
#generate the path
CURRENT_PATH:=$(shell pwd)
export ARCH = arm
export CROSS_COMPILE = arm-none-linux-gnueabi-
CC :=$(CROSS_COMPILE)gcc
LD :=$(CROSS_COMPILE)ld
#the absolute path
#LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build
LINUX_KERNEL_PATH=/opt/ti-sdk-am335x-evm-08/board-support/linux-3.14.26-g2489c02
.PHONY: clean distclean
#complie object
default:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
rm -rf *.o *.mod.c *.mod.o *.order *.symvers
distclean:
rm -rf *.o *.mod.c *.mod.o *.order *.symvers *.ko
#endif
编译结果生成:
hello.ko
查看结果信息:
$ modinfo hello.ko
filename: /mnt/share/example/hello-dev/hello-dev.ko
license: GPL
srcversion: 831720228EB3107175F1056
depends:
vermagic: 3.14.26-g07d13c6-dirty mod_unload modversions ARMv7 p2v8
放到ARM平台加载、卸载:
$Insmod hello.ko
Hello, DeepFish Hello module is installed !
$rmmod hello.ko
Good-bye,DeepFish Hello module was removed!
大功告成!
还可参考另一份日志: