nhmk/示例/3-ioctl/chardev.h

38 lines
1.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* chardev.h - 包含 ioctl 定义的头文件。
* 这些声明必须放在头文件中,因为它们需要同时被内核模块(在 chardev2.c 中)和调用 ioctl() 的进程(在 userspace_ioctl.c 中)所知晓。
*/
#ifndef CHARDEV_H
#define CHARDEV_H
#include <linux/ioctl.h>
/* 主设备号。由于 ioctl 需要知道主设备号,我们不能再依赖动态注册。 */
#define MAJOR_NUM 100
/* 设置设备驱动的消息 */
#define IOCTL_SET_MSG _IOW(MAJOR_NUM, 0, char *)
/* _IOW 表示我们正在创建一个 ioctl 命令,用于将信息从用户进程传递到内核模块。
* 第一个参数 MAJOR_NUM 是我们使用的主设备号。
* 第二个参数是命令的编号(可以有多个命令,含义不同)。
* 第三个参数是我们希望从进程传递到内核的数据类型。
*/
/* 获取设备驱动的消息 */
#define IOCTL_GET_MSG _IOR(MAJOR_NUM, 1, char *)
/* 此 IOCTL 用于输出,获取设备驱动的消息。
* 需要一个缓冲区来存放消息,该缓冲区由进程分配。
*/
/* 获取消息的第 n 个字节 */
#define IOCTL_GET_NTH_BYTE _IOWR(MAJOR_NUM, 2, int)
/* 此 IOCTL 用于输入和输出。它从用户获取一个数字 n并返回消息的第 n 个字节。
*/
/* 设备文件的名称 */
#define DEVICE_FILE_NAME "char_dev"
#define DEVICE_PATH "/dev/char_dev"
#endif