驱动学习专栏--字符设备驱动篇--1_chrdevbase

发布于:2025-04-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

字符设备驱动简介

        字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 
流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC SPI
LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。

chrdevbase 字符设备驱动开发实验

新建一个文件夹/home/hya/workspace/Linux_drivers/1_chrdevbase
创建驱动文件
chardevbase.c
#include <linux/module.h>


static int chrdevbase_init(void)
{
    printk("chrdevbase_init\n");
    return 0;
}

static void chrdevbase_exit(void)
{
    printk("chrdevbase_exit\n");
}


/*
    模块入口和出口
*/

module_init(chrdevbase_init);  /* 入口 */
module_exit(chrdevbase_exit);  /* 出口 */

// 必须添加的许可证声明
MODULE_LICENSE("GPL");          // 使用 GPL 许可证
MODULE_AUTHOR("HYA");           // 可选(作者信息)

创建Makefile文件

在写Makefile文件时要注意格式的缩进,另外在rv1106平台上,要配置好交叉编译器的路径

obj-m += chrdevbase.o

KERNEL_BUILD_DIR := /home/hya/workspace/luckfox-pico/sysdrv/source/objs_kernel

KERNEL_SRC_DIR := /home/hya/workspace/luckfox-pico/sysdrv/source/kernel
PWD?=$(shell pwd)
ARCH := arm
TOOLCHAIN_DIR := /home/hya/workspace/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin
CROSS_COMPILE := $(TOOLCHAIN_DIR)/arm-rockchip830-linux-uclibcgnueabihf-


all:
	$(MAKE) O=$(KERNEL_BUILD_DIR) -C $(KERNEL_SRC_DIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) 

clean:
	rm -f *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order

在~/workspace/Linux_drivers/1_chrdevbase下执行make

hya@hya:~/workspace/Linux_drivers/1_chrdevbase$ ls
chrdevbase.c   chrdevbase.mod    chrdevbase.mod.o  Makefile       Module.symvers
chrdevbase.ko  chrdevbase.mod.c  chrdevbase.o      modules.order

执行完成后会生成chrdevbase.ko文件

将ko文件通过adb push到rv1106板端

通过insmod和rmmod注册和卸载模块

[root@luckfox ]# insmod chrdevbase.ko 
[root@luckfox ]# dmesg 
[ 3220.091382] chrdevbase_init
[root@luckfox ]# 
[root@luckfox ]# rmmod chrdevbase.ko 
[root@luckfox ]# dmesg 
[ 3220.091382] chrdevbase_init
[ 3227.083903] chrdevbase_exit