LINUX.ORG.RU

Самописный модуль вызывает ошибку в ядре.

 , ,


0

2

Здравствуйте! При подключении USB устройства обрабатывающегося самописным драйвером, происходит ошибка в ядре. Она появилась, после добавления в модуль работы с urbs.

Исходники модуля:
usb-pkk-backlight.h
usb-pkk-backlight.c

Выхлоп dmesg

P.S. Если я правильно понимаю, то основная ошибка это

[11479.097379] BUG: unable to handle kernel NULL pointer dereference at 0000000000000080


Основная? Это там единственная ошибка, только это как бы не ошибка, а следствие ошибки в коде. Ядро не должно обращаться по нулевому указателю. Либо код портит стек, либо что-то не проинициализировано.

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

Исходя из того, что ошибка появилась при добавлении кода, работающего с urbs. Получаеьтся, что ошибка в заполнении urb в функции usb_fill_int_urb.

Но я ничего пока не нашёл.

Dm3Ch ()

по-ходу у тебя стек едет
таких варнингов быть не должно:

usb-pkk-backlight.c:155:5: warning: passing argument 6 of ‘usb_fill_int_urb’ from incompatible pointer type [enabled by default]
     usb_fill_int_urb(urb, udev, usb_rcvintpipe(&intf->dev, PKK_BL_OUT_ENDPOINT), transfer_buffer_out, PKK_BL_TRANSFER_BUFFER_OUT_SIZE, urb_out_complete, data, PKK_BL_OUT_INTERVAL);

ну и без жестких приведений типов, все должно быть по-честному

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

могу предложить «дебаг пинтфами»

раскидай несколько printk в куске кода, который падает. в частности перед usb_fill_int_urb выведи все переменные, которые ей передаешь - посмотри, может что забыл инициализировать...

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

мне проверит не на чем, могу только теоретически помочь %)
«usb_rcvintpipe(to_usb_device(&intf->dev), PKK_BL_OUT_ENDPOINT)» наверное следует заменить на «usb_rcvintpipe(udev, PKK_BL_OUT_ENDPOINT)»...

metawishmaster ★★★★ ()

проверяйте код возврата dev_set_drvdata(), ну и неплохобы делать этот вызов когда та самая data готова к использованию ;)

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

Эта ошибка явно не связана с data, т.к. всё работало до того, как я ввёл работу с urbs.

Dm3Ch ()
Ответ на: комментарий от metawishmaster

Плюсую «дебаг пинтфами». И лучше, чтобы все printk содержали перевод строки, а то, вроде как ядро может их буферезировать. Потому что сейчас даже не понятно, выводится ли сообщение "Backlight device initialized.".

Не уверен, что ошибка из-за usb_fill_int_urb(), там кода то в этой функции и нет, просто заполнение полей структуры urb.

mky ★★★★★ ()
transfer_buffer_out = kzalloc(sizeof(unsigned char) * PKK_BL_TRANSFER_BUFFER_OUT_SIZE, GFP_KERNEL);

инициализируется позже вызова цепочки pkk_bl_init_backlight->pkk_bl_set_brightness в которой пишется в буфер

*transfer_buffer_out = PKK_BL_CMD_SET_BRIGHTNESS;
transfer_buffer_out++;
*transfer_buffer_out = *brightness;

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

Соответственно и urb к тому моменту тоже еще не инициализированно. Так что проще всего вызов pkk_bl_set_brightness вынести в конец pkk_bl_probe

anonymous ()

тут есть некоторые поправки из топика, кроме двух последних постов
но из твоего dmesga, скорее всего валится в функции pkk_bl_init_backlight

у меня тоже валится там, на вызове dev_name(dev), но у меня и девайса такого нет. или ты неправильно инициализируешь

вобщем, покажи выхло dmesg'a этой фигни :)

http://pastebin.com/NhSYziki

metawishmaster ★★★★ ()
Ответ на: комментарий от metawishmaster
[ 2820.198588] usb 3-2: new full-speed USB device number 4 using xhci_hcd
[ 2820.218918] usb 3-2: string descriptor 0 read error: -71
[ 2820.218929] usb 3-2: New USB device found, idVendor=04d8, idProduct=c002
[ 2820.218932] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2820.219542] USB PKK-BL Driver: Hardware probe...
[ 2820.219545] pkk_bl_probe: intf = ffff8801161c0800
[ 2820.219546] pkk_bl_probe: &intf->dev = ffff8801161c0830
[ 2820.219548] USB PKK-BL Driver: Backlight device initialization...
[ 2820.219549] USB PKK-BL Driver: no such interface
[ 2820.219551] USB PKK-BL Driver: Backlight device unregistering...
[ 2820.219552] USB PKK-BL Driver: Backlight device unregistered successfully.
[ 2820.219553] USB PKK-BL Driver: Can't initializate backlight device.
[ 2825.223326] usbhid 3-2:1.0: can't add hid device: -71
[ 2825.223388] usbhid: probe of 3-2:1.0 failed with error -71
Dm3Ch ()
Ответ на: комментарий от metawishmaster

ты вызывал pkk_bl_init_backlight(data) с обнуленным data->intf

так получилось пройти чуток дальше, но у меня все еще падает. нужно привести в соответствие с комментариями анонимуса...

покажи, что у тебя вышло :)

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

«[ 2820.219549] USB PKK-BL Driver: no such interface»
эта строчка будет только при data->intf == NULL

строчка 100 и 59, это ИМХО из 59

metawishmaster ★★★★ ()
Ответ на: комментарий от metawishmaster
[ 7346.894303] usbcore: registered new interface driver usb_pkk_backlight
[ 7355.871391] mce: [Hardware Error]: Machine check events logged
[ 7358.433700] usb 3-1: new full-speed USB device number 5 using xhci_hcd
[ 7358.453623] usb 3-1: string descriptor 0 read error: -71
[ 7358.453644] usb 3-1: New USB device found, idVendor=04d8, idProduct=c002
[ 7358.453653] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7395.904808] usbcore: deregistering interface driver usb_pkk_backlight
[ 7400.204974] usbcore: registered new interface driver usb_pkk_backlight
[ 7418.245470] usb 3-1: USB disconnect, device number 5
[ 7424.121517] usb 3-2: new full-speed USB device number 6 using xhci_hcd
[ 7424.140395] usb 3-2: string descriptor 0 read error: -71
[ 7424.140401] usb 3-2: New USB device found, idVendor=04d8, idProduct=c002
[ 7424.140402] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7429.142190] usbhid 3-2:1.0: can't add hid device: -71
[ 7429.142223] usbhid: probe of 3-2:1.0 failed with error -71
[ 7429.142253] USB PKK-BL Driver: Hardware probe...
[ 7429.142258] pkk_bl_probe: intf = ffff880048fb8400
[ 7429.142261] pkk_bl_probe: &intf->dev = ffff880048fb8430
[ 7429.142263] USB PKK-BL Driver: Backlight device initialization...
[ 7429.142267] pkk_bl_init_backlight(): data->intf = ffff880048fb8400
[ 7429.142267] dev = ffff880048fb8430
[ 7429.142267] data = ffff88000cdd42c0
[ 7429.142273] pkk_bl_init_backlight(): dev_name(dev) = 3-2:1.0
[ 7429.142273] dev = ffff880048fb8430
[ 7429.142273] data = ffff88000cdd42c0
[ 7429.142383] USB PKK-BL Driver: pkk_bl_init_backlight():73
[ 7429.142387] USB PKK-BL Driver: Brightness set function called. New brightness: 255.
[ 7429.142418] BUG: unable to handle kernel NULL pointer dereference at           (null)
[ 7429.142544] IP: [<ffffffffa06b508e>] pkk_bl_set_brightness+0x3e/0x90 [usb_pkk_backlight]
[ 7429.142667] PGD 0 
[ 7429.142708] Oops: 0002 [#1] SMP 
[ 7429.142769] Modules linked in: usb_pkk_backlight(OF) usbhid hid ctr ccm snd_hrtimer pci_stub vboxpci(OF) vboxnetadp(OF) vboxnetflt(OF) vboxdrv(OF) rfcomm bnep binfmt_misc snd_hda_codec_hdmi snd_hda_codec_realtek uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_core rts5139(C) videodev snd_hda_intel snd_hda_codec snd_hwdep btusb bluetooth snd_pcm snd_page_alloc snd_seq_midi snd_seq_midi_event asus_nb_wmi asus_wmi sparse_keymap snd_rawmidi arc4 iwldvm mac80211 intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm crct10dif_pclmul snd_seq crc32_pclmul ghash_clmulni_intel snd_seq_device snd_timer aesni_intel snd iwlwifi aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd joydev serio_raw cfg80211 i915 soundcore lpc_ich mei_me mei wmi drm_kms_helper drm mac_hid i2c_algo_bit video parport_pc ppdev lp parport psmouse ahci libahci [last unloaded: usb_pkk_backlight]
[ 7429.144328] CPU: 1 PID: 43 Comm: khubd Tainted: GF        C O 3.13.0-32-generic #57-Ubuntu
[ 7429.144447] Hardware name: ASUSTeK COMPUTER INC. UX31A/UX31A, BIOS UX31A.218 01/31/2013
[ 7429.144558] task: ffff880118ad47d0 ti: ffff880118522000 task.ti: ffff880118522000
[ 7429.144663] RIP: 0010:[<ffffffffa06b508e>]  [<ffffffffa06b508e>] pkk_bl_set_brightness+0x3e/0x90 [usb_pkk_backlight]
[ 7429.144826] RSP: 0018:ffff880118523908  EFLAGS: 00010286
[ 7429.144905] RAX: 0000000000000047 RBX: ffff88000cdd42c0 RCX: 0000000000000006
[ 7429.145008] RDX: 0000000000000007 RSI: 0000000000000046 RDI: 0000000000000246
[ 7429.145113] RBP: ffff880118523920 R08: 0000000000000096 R09: 00000000000004c7
[ 7429.145216] R10: 0000000000000000 R11: ffff880118523636 R12: 0000000000000000
[ 7429.145319] R13: ffff8800b0b3c800 R14: ffff8800b0b3c800 R15: ffff88000cdd42c0
[ 7429.145424] FS:  0000000000000000(0000) GS:ffff88011ee80000(0000) knlGS:0000000000000000
[ 7429.145540] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 7429.145625] CR2: 0000000000000000 CR3: 0000000001c0e000 CR4: 00000000001407e0
[ 7429.145719] Stack:
[ 7429.145761]  ffff880048fb8400 ffff880078012088 ffff880118523938 ffff880118523978
[ 7429.145851]  ffffffffa06b53a9 ffff880078012000 000000ff00000000 0000000000000000
[ 7429.145920]  0000000000000001 ffff880078012088 ffff880078012000 ffffffffa06b7068
[ 7429.145990] Call Trace:
[ 7429.146020]  [<ffffffffa06b53a9>] pkk_bl_probe+0x209/0x311 [usb_pkk_backlight]
[ 7429.146083]  [<ffffffff815471c4>] usb_probe_interface+0x1c4/0x2f0
[ 7429.146135]  [<ffffffff8149355d>] driver_probe_device+0x12d/0x3e0
[ 7429.146185]  [<ffffffff81493810>] ? driver_probe_device+0x3e0/0x3e0
[ 7429.146237]  [<ffffffff8149384b>] __device_attach+0x3b/0x40
[ 7429.146286]  [<ffffffff81491583>] bus_for_each_drv+0x63/0xa0
[ 7429.146333]  [<ffffffff814933b8>] device_attach+0x88/0xa0
[ 7429.146377]  [<ffffffff814927c8>] bus_probe_device+0x98/0xc0
[ 7429.146425]  [<ffffffff81490625>] device_add+0x4c5/0x640
[ 7429.146470]  [<ffffffff815451db>] usb_set_configuration+0x4fb/0x810
[ 7429.146523]  [<ffffffff8154f54e>] generic_probe+0x2e/0xa0
[ 7429.146567]  [<ffffffff81546fb2>] usb_probe_device+0x32/0x80
[ 7429.146614]  [<ffffffff8149355d>] driver_probe_device+0x12d/0x3e0
[ 7429.146663]  [<ffffffff81493810>] ? driver_probe_device+0x3e0/0x3e0
[ 7429.146714]  [<ffffffff8149384b>] __device_attach+0x3b/0x40
[ 7429.146761]  [<ffffffff81491583>] bus_for_each_drv+0x63/0xa0
[ 7429.146807]  [<ffffffff814933b8>] device_attach+0x88/0xa0
[ 7429.146851]  [<ffffffff814927c8>] bus_probe_device+0x98/0xc0
[ 7429.146898]  [<ffffffff81490625>] device_add+0x4c5/0x640
[ 7429.146945]  [<ffffffff815397f8>] usb_new_device+0x268/0x430
[ 7429.146992]  [<ffffffff8153bee0>] hub_port_connect_change+0x5c0/0xb50
[ 7429.147045]  [<ffffffff8153c934>] hub_events+0x4c4/0xa20
[ 7429.147091]  [<ffffffff8153cec5>] hub_thread+0x35/0x160
[ 7429.147137]  [<ffffffff810aaf00>] ? prepare_to_wait_event+0x100/0x100
[ 7429.147207]  [<ffffffff8153ce90>] ? hub_events+0xa20/0xa20
[ 7429.147270]  [<ffffffff8108b3d2>] kthread+0xd2/0xf0
[ 7429.147327]  [<ffffffff8108b300>] ? kthread_create_on_node+0x1d0/0x1d0
[ 7429.147404]  [<ffffffff8172c5bc>] ret_from_fork+0x7c/0xb0
[ 7429.147468]  [<ffffffff8108b300>] ? kthread_create_on_node+0x1d0/0x1d0
[ 7429.147569] Code: 00 00 41 54 53 e8 23 dc dd e0 41 8b 75 00 4c 8b 60 20 48 89 c3 48 c7 c7 78 60 6b a0 40 88 70 30 40 0f b6 f6 31 c0 e8 e1 08 06 e1 <41> c6 04 24 91 0f b6 43 30 be d0 00 00 00 41 88 44 24 01 48 8b 
[ 7429.147989] RIP  [<ffffffffa06b508e>] pkk_bl_set_brightness+0x3e/0x90 [usb_pkk_backlight]
[ 7429.148063]  RSP <ffff880118523908>
[ 7429.148094] CR2: 0000000000000000
[ 7429.173546] ---[ end trace 4eafd83bc1b7dc1d ]---
Dm3Ch ()
Ответ на: комментарий от Dm3Ch

это как раз то, о чем говорил анонимус

у меня уже все ок, только с раскручиванием выхода из _probe() я не делал пока ничего ничего
ща все будет! =)

metawishmaster ★★★★ ()

ну вот как-то так: http://pastebin.com/ihzBfkPE
dmesg:


[ 2475.835597] USB PKK-BL Driver: Hardware probe...
[ 2475.835603] pkk_bl_probe: intf = ffff8800ce202000
[ 2475.835604] pkk_bl_probe: &intf->dev = ffff8800ce202030
[ 2475.835606] USB PKK-BL Driver: Backlight device initialization...
[ 2475.835607] pkk_bl_init_backlight(): data->intf = ffff8800ce202000
[ 2475.835607] dev = ffff8800ce202030
[ 2475.835607] data = ffff8800d23d21c0
[ 2475.835610] pkk_bl_init_backlight(): dev_name(dev) = 5-2:1.0
[ 2475.835610] dev = ffff8800ce202030
[ 2475.835610] data = ffff8800d23d21c0
[ 2475.835646] USB PKK-BL Driver: pkk_bl_init_backlight():74pkk_bl_set_brightness(): data->transfer_buffer_out = ffff88003551e968
[ 2475.835648] USB PKK-BL Driver: Brightness set function called. New brightness: 255.
[ 2475.835650] USB PKK-BL Driver: Urb submit failled. Urb status: 0. Usb_submit_urb returned:-22.
[ 2475.835666] USB PKK-BL Driver: Backlight device initialized.
[ 2475.835667] USB PKK-BL Driver: Device activated and initialized.
[ 2475.835690] usbcore: registered new interface driver usb_pkk_backlight

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

последняя ссылка как раз и лечила такую ошибку, может ты чего напутал?
давай переделаю: http://pastebin.com/scagMe6n
у меня-то дмесг чистый, правда и девайса такого нет

metawishmaster ★★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от metawishmaster
root@Dm3Ch-UX31A:~/Workspace/usb-pkk-backlight_driver# dmesg 
[57716.853270] usb 3-2: USB disconnect, device number 6
[57726.781515] usb 3-1: new full-speed USB device number 7 using xhci_hcd
[57726.803123] usb 3-1: New USB device found, idVendor=04d8, idProduct=c002
[57726.803143] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[57726.803156] usb 3-1: Manufacturer: ITUNER INC
[57726.804016] usb 3-1: can't set config #1, error -71

Dm3Ch ()
Ответ на: комментарий от anonymous

PicoLCD - частный случай устройства имеющего необходимую функциональность. После написания драйвера, будет запрограммированна апаратная часть.

Dm3Ch ()

А почему не через libusb драйвер, а в режиме ядра? Я как-то привык что уже почти все через нее работает

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

Нужен именно драйвер, это устройство должно будет функционировать в составе автономной машины.

Dm3Ch ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.