一、问题描述
在写好一个linux驱动模块,在开发板上运行的时候,出现以下提示:
WARNING: CPU: 0 PID: 100 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x54/0x74()
sysfs: cannot create duplicate filename '/class/led_class'
Modules linked in: leddriver(O+) [last unloaded: leddriver]
CPU: 0 PID: 100 Comm: modprobe Tainted: G W O 4.1.15 #1
Hardware name: Freescale i.MX6 Ultralite (Device Tree)
[<80015ed4>] (unwind_backtrace) from [<80012794>] (show_stack+0x10/0x14)
[<80012794>] (show_stack) from [<8068ca68>] (dump_stack+0x80/0xc8)
[<8068ca68>] (dump_stack) from [<8003824c>] (warn_slowpath_common+0x74/0xb0)
[<8003824c>] (warn_slowpath_common) from [<800382b8>] (warn_slowpath_fmt+0x30/0x40)
[<800382b8>] (warn_slowpath_fmt) from [<8014b774>] (sysfs_warn_dup+0x54/0x74)
[<8014b774>] (sysfs_warn_dup) from [<8014b860>] (sysfs_create_dir_ns+0x84/0x9c)
[<8014b860>] (sysfs_create_dir_ns) from [<8029e380>] (kobject_add_internal+0xa0/0x2d8)
[<8029e380>] (kobject_add_internal) from [<8029e670>] (kset_register+0x50/0x7c)
[<8029e670>] (kset_register) from [<8034e604>] (__class_register+0xa8/0x1bc)
[<8034e604>] (__class_register) from [<8034e758>] (__class_create+0x40/0x78)
[<8034e758>] (__class_create) from [<7f008104>] (led_probe+0x70/0x19c [leddriver])
[<7f008104>] (led_probe [leddriver]) from [<8034f2c0>] (platform_drv_probe+0x44/0xa4)
[<8034f2c0>] (platform_drv_probe) from [<8034db88>] (driver_probe_device+0x16c/0x2b0)
[<8034db88>] (driver_probe_device) from [<8034dd9c>] (__driver_attach+0x8c/0x90)
[<8034dd9c>] (__driver_attach) from [<8034c100>] (bus_for_each_dev+0x6c/0xa0)
[<8034c100>] (bus_for_each_dev) from [<8034d33c>] (bus_add_driver+0x140/0x1ec)
[<8034d33c>] (bus_add_driver) from [<8034e388>] (driver_register+0x78/0xf8)
[<8034e388>] (driver_register) from [<80009704>] (do_one_initcall+0x80/0x1d8)
[<80009704>] (do_one_initcall) from [<8068a954>] (do_init_module+0x58/0x1a8)
[<8068a954>] (do_init_module) from [<80095e48>] (load_module+0x165c/0x1d48)
[<80095e48>] (load_module) from [<800966bc>] (SyS_finit_module+0x64/0x74)
[<800966bc>] (SyS_finit_module) from [<8000f500>] (ret_fast_syscall+0x0/0x3c)
---[ end trace dec46dec8f9e0b01 ]---
------------[ cut here ]------------
WARNING: CPU: 0 PID: 100 at lib/kobject.c:240 kobject_add_internal+0x25c/0x2d8()
kobject_add_internal failed for led_class with -EEXIST, don't try to register things with the same name in the same directory.
Modules linked in: leddriver(O+) [last unloaded: leddriver]
CPU: 0 PID: 100 Comm: modprobe Tainted: G W O 4.1.15 #1
Hardware name: Freescale i.MX6 Ultralite (Device Tree)
[<80015ed4>] (unwind_backtrace) from [<80012794>] (show_stack+0x10/0x14)
[<80012794>] (show_stack) from [<8068ca68>] (dump_stack+0x80/0xc8)
[<8068ca68>] (dump_stack) from [<8003824c>] (warn_slowpath_common+0x74/0xb0)
[<8003824c>] (warn_slowpath_common) from [<800382b8>] (warn_slowpath_fmt+0x30/0x40)
[<800382b8>] (warn_slowpath_fmt) from [<8029e53c>] (kobject_add_internal+0x25c/0x2d8)
[<8029e53c>] (kobject_add_internal) from [<8029e670>] (kset_register+0x50/0x7c)
[<8029e670>] (kset_register) from [<8034e604>] (__class_register+0xa8/0x1bc)
[<8034e604>] (__class_register) from [<8034e758>] (__class_create+0x40/0x78)
[<8034e758>] (__class_create) from [<7f008104>] (led_probe+0x70/0x19c [leddriver])
[<7f008104>] (led_probe [leddriver]) from [<8034f2c0>] (platform_drv_probe+0x44/0xa4)
[<8034f2c0>] (platform_drv_probe) from [<8034db88>] (driver_probe_device+0x16c/0x2b0)
[<8034db88>] (driver_probe_device) from [<8034dd9c>] (__driver_attach+0x8c/0x90)
[<8034dd9c>] (__driver_attach) from [<8034c100>] (bus_for_each_dev+0x6c/0xa0)
[<8034c100>] (bus_for_each_dev) from [<8034d33c>] (bus_add_driver+0x140/0x1ec)
[<8034d33c>] (bus_add_driver) from [<8034e388>] (driver_register+0x78/0xf8)
[<8034e388>] (driver_register) from [<80009704>] (do_one_initcall+0x80/0x1d8)
[<80009704>] (do_one_initcall) from [<8068a954>] (do_init_module+0x58/0x1a8)
[<8068a954>] (do_init_module) from [<80095e48>] (load_module+0x165c/0x1d48)
[<80095e48>] (load_module) from [<800966bc>] (SyS_finit_module+0x64/0x74)
[<800966bc>] (SyS_finit_module) from [<8000f500>] (ret_fast_syscall+0x0/0x3c)
---[ end trace dec46dec8f9e0b02 ]---
二、问题解决
1、有一条重要的错误提示:
object_add_internal failed for led_class with -EEXIST, don't try to register things with the same name in the same directory.
那应该是由于class类的名字已经存在,重新申请的时候出现重名冲突的情况,所以修改类的名字或者删掉原来的类即可(推荐第一种)。
2、很多时候都会出现这种形式的错误,无非是命名冲突,或者申请,释放的对象出现错误,只要细心一点或者能够根据错误提示修改即可。