第一个内核模块编写:
#include <linux/module.h>
#include <linux/init.h>
// 模块安装函数
static int __init chrdev_init(void)
{
printk(KERN_INFO "chrdev_init helloworld init\n");
return 0;
}
// 模块卸载函数
static void __exit chrdev_exit(void)
{
printk(KERN_INFO "chrdev_exit helloworld exit\n");
}
module_init(chrdev_init);
module_exit(chrdev_exit);
// MODULE_xxx这种宏作用是用来添加模块描述信息
MODULE_LICENSE("GPL"); // 描述模块的许可证
MODULE_AUTHOR("Mark"); // 描述模块的作者
MODULE_DESCRIPTION("test for driver"); // 描述模块的介绍信息
MODULE_ALIAS("alias test"); // 描述模块的别名信息
Makefile 编写
KERNEL_DIR=/home/wyz/share/kernel_5.10.10/linux-5.10.10
CURDIR=`pwd`
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH CROSS_COMPILE
obj-m := led.o
all:
make -C $(KERNEL_DIR) M=$(CURDIR) modules
.PHONE:clean cp
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean
cp:
sudo cp *.ko /home/wyz/share/tool_server_dir/nfs -rf