LINUX.ORG.RU

подскажите по драйверу


0

1

написаны два модуля. собираются под ядра 2.6 и под 3.2. под ядром 2.6 нет вообще никаких проблем, под ядром 3.2 при загрузке одного из модулей все нормально, при загрузке второго во время вызова request_irq в логи попадает такой дамп:

Apr 19 21:58:06 localhost kernel: ------------[ cut here ]------------
Apr 19 21:58:06 localhost kernel: WARNING: at fs/proc/generic.c:323 __xlate_proc_name+0x8e/0x98()
Apr 19 21:58:06 localhost kernel: Hardware name: To Be Filled By O.E.M.
Apr 19 21:58:06 localhost kernel: name 'own_module2'
Apr 19 21:58:06 localhost kernel: Modules linked in: own_module2(O+) ipv6 crc_ccitt snd_hda_codec_realtek serio_raw pcspkr i2c_i801 i2c_core thermal snd_hda_intel ac video e100 fan backlight mii intel_agp intel_gtt snd_hda_codec snd_pcm iTCO_wdt iTCO_vendor_support processor button thermal_sys snd_timer snd agpgart snd_page_alloc tg3 libphy e1000 fuse xfs exportfs nfs nfs_acl auth_rpcgss lockd sunrpc jfs ext4 jbd2 raid10 dm_snapshot dm_crypt dm_mirror dm_region_hash dm_log dm_mod scsi_wait_scan hid_sunplus hid_sony hid_samsung hid_pl hid_petalynx hid_monterey hid_microsoft hid_logitech hid_gyration hid_ezkey hid_cypress hid_chicony hid_cherry hid_belkin hid_apple hid_a4tech sl811_hcd usbhid ohci_hcd ssb uhci_hcd usb_storage ehci_hcd usbcore usb_common aic94xx libsas lpfc qla2xxx megaraid_sas megaraid_mbox megaraid_mm megaraid aacraid sx8 DAC960 cciss 3w_9xxx 3w_xxxx mptsas scsi_transport_sas mptfc scsi_transport_fc scsi_tgt mptspi mptscsih mptbase atp870u dc395x qla1280 imm parport dmx3191d sym53c8xx qlogicfas408 gdth advansys initio BusLogic arcmsr aic7xxx aic79xx scsi_transport_spi sg pdc_adma sata_inic162x sata_mv ata_piix ahci libahci sata_qstor sata_vsc sata_uli sata_sis sata_sx4 sata_nv sata_via sata_svw sata_sil24 sata_sil sata_promise pata_pcmcia pcmcia pcmcia_core
Apr 19 21:58:06 localhost kernel: Pid: 21030, comm: insmod Tainted: G           O 3.2.1-gentoo-r2 #3
Apr 19 21:58:06 localhost kernel: Call Trace:
Apr 19 21:58:06 localhost kernel: [<c012f2d6>] warn_slowpath_common+0x65/0x7a
Apr 19 21:58:06 localhost kernel: [<c01f687d>] ? __xlate_proc_name+0x8e/0x98
Apr 19 21:58:06 localhost kernel: [<c012f34f>] warn_slowpath_fmt+0x26/0x2a
Apr 19 21:58:06 localhost kernel: [<c01f687d>] __xlate_proc_name+0x8e/0x98
Apr 19 21:58:06 localhost kernel: [<c01f68cf>] __proc_create+0x48/0xe2
Apr 19 21:58:06 localhost kernel: [<c01f6d63>] proc_mkdir_mode+0x1e/0x43
Apr 19 21:58:06 localhost kernel: [<c01f6d97>] proc_mkdir+0xf/0x11
Apr 19 21:58:06 localhost kernel: [<c017259e>] register_handler_proc+0xc2/0xd0
Apr 19 21:58:06 localhost kernel: [<c0170baf>] __setup_irq+0x2d7/0x375
Apr 19 21:58:06 localhost kernel: [<c0170d1c>] request_threaded_irq+0xcf/0xf4
Apr 19 21:58:06 localhost kernel: [<e01fcb30>] ? msp_drv_poll+0x50/0x50 [msp]
Apr 19 21:58:06 localhost kernel: [<e00f348b>] msp_drv_init+0x426/0x843 [msp]
Apr 19 21:58:06 localhost kernel: [<c0414f86>] ? mutex_unlock+0x8/0xa
Apr 19 21:58:06 localhost kernel: [<c0182d45>] ? trace_module_notify+0x1fb/0x205
Apr 19 21:58:06 localhost kernel: [<c0414f86>] ? mutex_unlock+0x8/0xa
Apr 19 21:58:06 localhost kernel: [<c04186d1>] ? notifier_call_chain+0x26/0x48
Apr 19 21:58:06 localhost kernel: [<c0149001>] ? __blocking_notifier_call_chain+0x3d/0x48
Apr 19 21:58:06 localhost kernel: [<c010120b>] do_one_initcall+0x71/0x11e
Apr 19 21:58:06 localhost kernel: [<e00f3065>] ? exch_setup+0x2b/0x2b [msp]
Apr 19 21:58:06 localhost kernel: [<c0158b6f>] sys_init_module+0x1316/0x1506
Apr 19 21:58:06 localhost kernel: [<c041aed8>] sysenter_do_call+0x12/0x28
Apr 19 21:58:06 localhost kernel: ---[ end trace e41e5c7373962a7d ]---

насколько я понял, это вылетает когда цепляется прерывание и эта информация отображается куда-то в fs /proc, которой что-то не нравится. тогда непонятно, почему этого не происходит при загрузке первого модуля - в этом плане они идентичны. и хотя модуль работает, хотелось бы такого дампа в логе избавиться.

★★

Хоть бы на исходник глянул:

http://lxr.free-electrons.com/source/fs/proc/generic.c?v=3.2

У тебя небось с неверным аргументом вызывается. Не находит такого девайса.

296 /*
297  * This function parses a name such as "tty/driver/serial", and
298  * returns the struct proc_dir_entry for "/proc/tty/driver", and
299  * returns "serial" in residual.
300  */
301 static int __xlate_proc_name(const char *name, struct proc_dir_entry **ret,
302                              const char **residual)
303 {
304         const char              *cp = name, *next;
305         struct proc_dir_entry   *de;
306         unsigned int            len;
307 
308         de = *ret;
309         if (!de)
310                 de = &proc_root;
311 
312         while (1) {
313                 next = strchr(cp, '/');
314                 if (!next)
315                         break;
316 
317                 len = next - cp;
318                 for (de = de->subdir; de ; de = de->next) {
319                         if (proc_match(len, cp, de))
320                                 break;
321                 }
322                 if (!de) {
323                         WARN(1, "name '%s'\n", name);
324                         return -ENOENT;
325                 }
326                 cp += len + 1;
327         }
328         *residual = cp;
329         *ret = de;
330         return 0;
331 }

ziemin ★★ ()
Последнее исправление: ziemin (всего исправлений: 1)
Ответ на: комментарий от ziemin

да глянул, в том-то и дело. и не понял, какие еще subdir он в /proc не находит. он хочет, чтобы я обязательно в /proc что-то прописывал, что-ли? так это все равно не объясняет, почему первый модуль нормально грузится?

Vinill ★★ ()
Ответ на: комментарий от Vinill

Вот патч какого-то драйвера на эту тему

https://lkml.org/lkml/2010/6/1/138

Они просто убрали слеши из имени драйвера.

Кстати этот WARN то пихают, то убирают. В 2.6 тоже был в некоторых версиях.

ziemin ★★ ()
Последнее исправление: ziemin (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.