On Wed, Nov 28, 2012 at 1:35 PM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
On Mon, Nov 26, 2012 at 2:02 PM, Jinqiang Zeng <jinqiangzeng@gmail.com> wrote:
first creat a device class,then register a device to the kernel. using the following functions: struct class *class_create(struct module *owner, char *name); struct class_device *class_device_create(struct class *cls, struct class_device *parent, dev_t devt, struct device *device, char *fmt, ...)
2012/11/26 Manavendra Nath Manav <mnm.kernel@gmail.com>
On Sat, Nov 24, 2012 at 2:20 PM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
Hi RK
On Sat, Nov 24, 2012 at 2:03 PM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
I have written a simple UART serial driver in embedded Linux running busybox with mdev rules. I have provided .dev_name as "ttyC2C" in my driver code.
static struct uart_driver serial_omap_reg = { .owner = THIS_MODULE, .driver_name = "Omap-C2C-Serial", .dev_name = "ttyC2C", .nr = OMAP_MAX_HSUART_PORTS, .cons = NULL, };
However the node is getting created in
./sys/devices/platform/omap_c2c_uart.0/tty/ttyC2C0 ./sys/class/tty/ttyC2C0
/ # ls -l ./sys/class/tty/ttyC2C0 lrwxrwxrwx 1 root 0 0 Jan 1 00:14 ./sys/class/tty/ttyC2C0 -> ../../devices/platform/omap_c2c_uart.0/tty/ttyC2C0
/ # ls -l ./sys/devices/platform/omap_c2c_uart.0/tty/ttyC2C0 -r--r--r-- 1 root 0 4096 Jan 1 00:14 dev lrwxrwxrwx 1 root 0 0 Jan 1 00:14 device -> ../../../omap_c2c_uart.0 drwxr-xr-x 2 root 0 0 Jan 1 00:14 power lrwxrwxrwx 1 root 0 0 Jan 1 00:14 subsystem -> ../../../../../class/tty -rw-r--r-- 1 root 0 4096 Jan 1 00:14 uevent / #
The mdev rules for tty are:
tty 0:5 0666 tty.* 0:0 0620
How to get device node as /dev/ttyC2C ?
-- Manavendra Nath Manav
can you help me on following issue?
-- Manavendra Nath Manav
In "Essential Linux Device Drivers" book, it says that that the driver name in "struct platform_driver" and "struct uart_driver" should be same. I modified the code according but still /dev/ttyC2C node is not being populated.
-- Manavendra Nath Manav
When i add .major and .minor to the struct uart_driver and create the device node manually using "mknod" then the driver works fine. Why the kernel (3.4.0) is not able to create it automatically?
In the driver, you just need to take care of populating the appropriate device class and device information into the /sys. udev should then take care of the rest (assuming you are using udev). Something like this should work: struct class *cl = class_create(THIS_MODULE, "<device_class_name>"); device_create(cl, NULL, first, NULL, "<device_name>", ...); first is dev_t with the corresponding <major, minor>. /dev should than have the /dev/device_name entry. This should work. If it does not, please share your code if possible. HTH! Regards Mayur