38 lines
1.3 KiB
C
38 lines
1.3 KiB
C
|
/*
|
|||
|
* 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
|