I’m writing my first linux kernel module. It is a standard char device to communicate over a GPIO pin.
It works like a charme. It is registered with its device name under /dev and in my own class name under /sys (it has some attributes available for configuration by the host application).
My wish is to move my device under /dev/tty/ and /sys/class/tty/ .
How should I change my below code to accomplish this?
Thank you very much!
// 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);
}
Advertisement
Answer
If you want your device to be exposed as a TTY, implement it as a serial driver, similar to other devices in drivers/tty/serial. The kernel will apply the TTY layer to it, and it will show up as a TTY.