2014-07-16 7 views
-1

USB 키보드를 사용하여 LCD에 가상 콘솔을 만들고 잘 작동하지만 USB 키보드를 뽑으면 콘솔에 메시지가 나타납니다. 커널이 원자 맥락에서 잠을하려고 할 때 인쇄USB 키보드를 제거 할 때 '원자 적으로 일정 잡기'오류 및 오류 메시지를 읽는 방법?

# usb 1-1: USB disconnect, device number 2 
BUG: scheduling while atomic: khubd/12/0x00000002 
Modules linked in: 
[c03b58dc : wait_for_common+0xcc/0x1a0 ] 
[c027fc2c : devtmpfs_delete_node+0xa0/0xc8 ] 
[c027920c : device_del+0x160/0x188 ] 
[c02d7a3c : evdev_disconnect+0xc/0x30 ] 
[c02d5960 : input_unregister_device+0xcc/0x174 ] 
[c02f6fb8 : hidinput_disconnect+0x4c/0x70 ] 
[c02f33c4 : hid_disconnect+0x48/0x58 ] 
[c02f343c : hid_device_remove+0x68/0x80 ] 
[c027ba90 : __device_release_driver+0x5c/0xb8 ] 
[c027bb00 : device_release_driver+0x14/0x24 ] 
[c027b628 : bus_remove_device+0xe8/0x10c ] 
[c02791b4 : device_del+0x108/0x188 ] 
[c02f327c : hid_destroy_device+0x20/0x3c ] 
[c02fb770 : usbhid_disconnect+0x18/0x34 ] 
[c02bea74 : usb_unbind_interface+0xd4/0x148 ] 
[c027ba90 : __device_release_driver+0x5c/0xb8 ] 

나는이 '원자는 동안 스케줄링을'알고있다. (인터럽트 동안처럼). 메시지에서 볼 수 있듯이 __device_release_driver 함수에서 시작하여 결국에는 스케줄링을 사용하는 sleep과 같은 wait_for_common 함수로 끝납니다. 내가 읽은 곳은 커널 버그이며 커널을 업그레이드해야한다. 이것이 정말로 커널 버그인지 확실하지 않습니다. (나는 리눅스 3.3을 사용하고있다.)
위의 함수 호출 목록에서 각 함수 이름에 + 뒤에 오는 숫자는 무엇인가? (예 : [c03b58dc : wait_for_common + 0xcc/0x1a0], 0xcc/0x1a0 부분) 미리 감사드립니다.

+0

[스택 추적을 잘 활용하는 방법 (커널 또는 코어 덤프에서)?] (http://stackoverflow.com/questions/10171984/how-to-make-good-use-of-stack) -trace-from-kernel-or-core-dump) –

+0

커널 추적은'label + offset/limit' 형식입니다. 기호가있는 경우 * label *은 함수 이름입니다. * offset *은 * sub-function * 호출을 야기한 특정 명령입니다. * offset *이 * limit *보다 크면, * unknown/unmarked * 함수가 호출 한 것을 나타냅니다. 아마도'objdump -S vmlinux' 출력을보고 어떤 기능을하는지 봅니다. –

+0

확실히, 분명히 커널 버그입니다. –

답변

0

'else'키워드로 인해 spin_unlock_irqrestore가 내가 사용하고있는 urb_dequeue 함수에서 호출되지 못했기 때문입니다. 'else'를 제거한 후에는 모든 것이 정상입니다. 귀하의 정보를 위해서.