On Thu, Nov 29, 2012 at 4:12 PM, Mayur Nande <mayur.nan@xxxxxxxxx> wrote: > On Wed, Nov 28, 2012 at 1:35 PM, Manavendra Nath Manav > <mnm.kernel@xxxxxxxxx> wrote: >> On Mon, Nov 26, 2012 at 2:02 PM, Jinqiang Zeng <jinqiangzeng@xxxxxxxxx> 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@xxxxxxxxx> >>>> >>>> >>>> On Sat, Nov 24, 2012 at 2:20 PM, Manavendra Nath Manav <mnm.kernel@xxxxxxxxx> wrote: >>>>> >>>>> Hi RK >>>>> >>>>> On Sat, Nov 24, 2012 at 2:03 PM, Manavendra Nath Manav <mnm.kernel@xxxxxxxxx> 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 Also, clone the latest tree from kernel.org and see commit c3b19ff06e0808555403491d61e8f0cbbb53e933. struct class_device was removed. So you have to use device_create now in place of class_device_create. I think ELDD may be use the later. Regards Mayur _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel