我正在编写我的第一个 Linux 内核模块。它是通过 GPIO 引脚进行通信的标准字符设备。
它就像一个魅力。它使用/dev 下的设备名称和/sys 下我自己的类名注册(它有一些属性可用于主机应用程序的配置)。
我的愿望是将我的设备移动到 /dev/tty/ 和 /sys/class/tty/ 下。
我应该如何更改下面的代码来完成此操作?
非常感谢!
// Allocate major device number
majorNumber = register_chrdev(0, DEVICE_NAME, &devFileOps);
if (majorNumber < 0)
{
kobject_put(dev_kobj);
pr_crit(
"%s/%s: failed to register a major number.\n",
CLASS_NAME,
DEVICE_NAME
);
return majorNumber;
}
pr_debug(
"%s/%s: successfully registered with major number %d.\n",
CLASS_NAME,
DEVICE_NAME,
majorNumber
);
// Register device class
devClass = class_create(THIS_MODULE, CLASS_NAME);
if (IS_ERR(devClass))
{
unregister_chrdev(majorNumber, CLASS_NAME);
kobject_put(dev_kobj);
pr_crit(
"%s/%s: failed to register device class.\n",
CLASS_NAME,
DEVICE_NAME
);
return PTR_ERR(devClass);
}
pr_debug(
"%s/%s: device class successfully registered.\n",
CLASS_NAME,
DEVICE_NAME
);
// Register device driver
devDevice = device_create(
devClass,
NULL,
MKDEV(majorNumber, 0),
NULL,
DEVICE_NAME
);
if (IS_ERR(devDevice))
{
class_destroy(devClass);
unregister_chrdev(majorNumber, CLASS_NAME);
kobject_put(dev_kobj);
pr_crit("%s/%s: failed to create the device.\n", CLASS_NAME, DEVICE_NAME);
return PTR_ERR(devDevice);
}
最佳答案
如果您希望您的设备作为 TTY 公开,请将其实现为串行驱动程序,类似于 drivers/tty/serial
中的其他设备。 .内核将应用 the TTY layer到它,它将显示为 TTY。
关于linux - 库存专业下的自定义字符设备 linux 模块(如 "tty"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44318274/