Зависает при загрузке на реальном компьютере. Как снять лог?

Everything you can't fit into other forums
  • kolibri_IDEUSB_trytofix4_dbg2.7z тоже висит и при обычной загрузке и при включении C и D пунктов :

    http://yadi.sk/d/ByBZAPkYJDzWT
    http://yadi.sk/d/vUzlVOinJDzWK

    K: Kernel SVN r4575
    K: 2 CPU detected
    K: Attach Interrupt 6 Handler 8002FFF1
    K: Set IDE IRQ6 return code 8005CD00






    K: Dev: Optiarc DVD RW AD-5200S
    K: PIO mode 00000003
    K: Multiword DMA mode 00000007
    K: Ultra DMA mode 0000203F
    K: Primary Bus Master IDE Status Register 00000020
    K: Secondary Bus Master IDE Status Register 00000060
    K: Attach Interrupt 15 Handler 80031040
    K: Set IDE IRQ15 return code 8005CD14
  • Итого: установленный обработчик IRQ15 для IDE контроллера не вызывается совсем.
    Я прописал там вывод отладочных сообщениий в:
    kernel\trunk\blkdev\hd_drv.inc
    Spoiler:

    Code: Select all

    ;-----------------------------------------------------------------------------
    align 4
    IDE_irq_14_handler:
            DEBUGF  1, "K : IDE_irq_14_handler \n"
            cmp     [IDE_common_irq_param], irq14_num
            jne     .exit
    
            pushfd
            cli
            pushad
            mov     [IDE_common_irq_param], 0
            mov     dx, [IDEContrRegsBaseAddr]
    ; test whether it is our interrupt?
            add     edx, 2
            in      al, dx
            test    al, 100b
            jz      @f
    ; clear Bus Master IDE Status register
    ; clear Interrupt bit
            out     dx, al
    ; clear Bus Master IDE Command register
            sub     edx, 2
            xor     eax, eax
            out     dx, al
    ; read status register and remove the interrupt request
            mov     edx, [hdbase]
            add     edx, 0x7
            in      al, dx
            popad
            popfd
            mov     al, 1
            ret
    ;--------------------------------------
    align 4
    @@:
            popad
            popfd
    ;--------------------------------------
    align 4
    .exit:
            mov     al, 0
            ret
    ;-----------------------------------------------------------------------------
    align 4
    IDE_irq_15_handler:
            DEBUGF  1, "K : IDE_irq_15_handler \n"
            cmp     [IDE_common_irq_param], irq15_num
            jne     .exit
    
            pushfd
            cli
            pushad
            mov     [IDE_common_irq_param], 0
            mov     dx, [IDEContrRegsBaseAddr]
            add     dx, 8
    ; test whether it is our interrupt?
            add     edx, 2
            in      al, dx
            test    al, 100b
            jz      @f
    ; clear Bus Master IDE Status register
    ; clear Interrupt bit
            out     dx, al
    ; clear Bus Master IDE Command register
            sub     edx, 2
            mov     al, 0
            out     dx, al
    ; read status register and remove the interrupt request
            mov     edx, [hdbase]
            add     edx, 0x7
            in      al, dx
            popad
            popfd
            mov     al, 1
            ret
    ;--------------------------------------
    align 4
    @@:
            popad
            popfd
    ;--------------------------------------
    align 4
    .exit:
            mov     al, 0
            ret
    ;-----------------------------------------------------------------------------
    align 4
    IDE_common_irq_handler:
            pushfd
            cli
            pushad
            DEBUGF  1, "K : IDE_common_irq_handler \n"	
            xor     ebx, ebx
            mov     eax, IDE_common_irq_param
    	DEBUGF  1, "K : [IDE_common_irq_param] %x \n", [eax]:2
            mov     [eax], bl
    ; test whether it is our interrupt?
            mov     dx, [IDEContrRegsBaseAddr]
            add     edx, 2
            in      al, dx
    	DEBUGF  1, "K : channel 1 interrupt? %x \n", eax
            test    al, 100b ; check channel 1 interrupt
    	jnz	@f
    	
    	add     dx, 8
            in      al, dx
    	DEBUGF  1, "K : channel 2 interrupt? %x \n", eax
            test    al, 100b ; check channel 2 interrupt
    	jnz	@f
            DEBUGF  1, "K : IDE - no, it's not our interrupt \n"
            popad
            popfd
            mov     al, 0 ; no, it's not our interrupt
            ret
    ;--------------------------------------
    align 4
    @@:
    ; clear Bus Master IDE Status register
    ; clear Interrupt bit
    	DEBUGF  1, "K : IDE - clear Interrupt bit \n"
            out     dx, al
    ; clear Bus Master IDE Command register
            sub     edx, 2
            xor     eax, eax
    	DEBUGF  1, "K : IDE -  clear Bus Master IDE Command register \n"
            out     dx, al
    ; read status register and remove the interrupt request
            mov     edx, [hdbase]
            add     edx, 0x7
            in      al, dx
    	DEBUGF  1, "K : read status register and remove the interrupt request %x \n", eax
    	
            DEBUGF  1, "K : IDE - yes, this is our interrupt \n"
            popad
            popfd
            mov     al, 1 ; yes, this is our interrupt
            ret
    ;-----------------------------------------------------------------------------
    И получается контроллер IDE вроде и не при чем...

    Что возвращает нас к вопросу:
    Кто убил кролика Роджера?
    Почему зависает при инициализации USB.
    Last edited by Mario_r4 on Thu Feb 20, 2014 10:38 am, edited 1 time in total.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Может все таки дело в usb драйвере . Хотя вам виднее я не программист . Как бывает в больницах врачи проводят заседания по сложным вопросам так и тут может стоит собрать разработчиков Колибри и устроить собеседование . Одна голова хорошо а две лучше .
    Last edited by lastar on Thu Feb 20, 2014 2:03 pm, edited 2 times in total.
  • При чём тут IRQ15? Контроллер жёсткого диска 00:1f.1 висит на IRQ10, обработчик IRQ15 и не должен вызываться.
    Сделаем мир лучше!
  • CleverMouse wrote:При чём тут IRQ15? Контроллер жёсткого диска 00:1f.1 висит на IRQ10, обработчик IRQ15 и не должен вызываться.
    Если посмотреть фото, то можно увидеть, как 15 прерывание устанавливается на контроллер IDE диска, а затем согласно выводимому логу на 15 прерывание же вешается один из USB контроллеров. Тот контроллер, который повешен на IRQ10, вообще не трогается кодом работы с IDE. Получается парадокс - контроллер генерирует прерывание без какого-либо обращения к нему.

    З.Ы. Сдается мне в текущей схеме, где кодом поддерживается только один контроллер проблема вообще не имеет решения.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:
    CleverMouse wrote:При чём тут IRQ15? Контроллер жёсткого диска 00:1f.1 висит на IRQ10, обработчик IRQ15 и не должен вызываться.
    Если посмотреть фото, то можно увидеть, как 15 прерывание устанавливается на контроллер IDE диска, а затем согласно выводимому логу на 15 прерывание же вешается один из USB контроллеров. Тот контроллер, который повешен на IRQ10, вообще не трогается кодом работы с IDE. Получается парадокс - контроллер генерирует прерывание без какого-либо обращения к нему.

    З.Ы. Сдается мне в текущей схеме, где кодом поддерживается только один контроллер проблема вообще не имеет решения.
    Тот USB-контроллер, который вешается на IRQ15, молчит в тряпочку, зависание происходит сразу после того, как следующий USB-контроллер - который тоже молчит в тряпочку и будет молчать как минимум 100 мс на USB-шный initial debounce, а если к нему ничего не подключено, то вообще пока не подключат что-нибудь - устанавливает свой обработчик на IRQ10 и размаскирует IRQ10. Почему вообще код контроллера IDE-диска думает, что IDE-диск всегда даёт IRQ15? Здесь он даёт IRQ10.
    Сделаем мир лучше!
  • Вот тут решалась проблема работы моего контроллера в ReactOS http://jira.reactos.org/browse/CORE-6668


    Вот в этой теме похоже про это прерывание написал автор UniATA Alter :

    Alter added a comment - 2012-09-17 13:14
    Seems it is incorrectly handled USB Interrupt.
    Infinite ISR loop happens immediately after connecting to IRQ 15 (which is shared between IDE and USB controllers)
    There were no operations with IDE, those can cause and interrupt, thus, interrupt is treated as unexpected for IDE and should be passed to other handler.
    Similar problem had already been observed in the past (I don't remember exact BUG ID).
    ---
    00:1d.2 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 [8086:27ca] (rev 01)
    Subsystem: P5KPL-VM Motherboard [1043:8179]
    Flags: bus master, medium devsel, latency 0, IRQ 15
    I/O ports at b400 [size=1K]
    Device is using IRQ 15! ISA Cards using that IRQ may fail!
    Device is an Intel UHCI (USB) Controller. Turn off Legacy USB in your BIOS!
    ---
    00:1f.1 IDE interface [0101]: Intel Corporation 82801G (ICH7 Family) IDE Controller [8086:27df] (rev 01)
    Subsystem: P5KPL-VM Motherboard [1043:8179]
    Flags: bus master, medium devsel, latency 0, IRQ 15
    I/O ports at c080
    I/O ports at c000 [size=16K]
    I/O ports at 08f0
    I/O ports at 08f8
    I/O ports at b800 [size=2K]
    Last edited by lastar on Thu Feb 20, 2014 2:21 pm, edited 1 time in total.
  • CleverMouse wrote:Почему вообще код контроллера IDE-диска думает, что IDE-диск всегда даёт IRQ15? Здесь он даёт IRQ10.
    Потому что он получил это значение от BIOS, еще в Real Mode CPU
    kernel\trunk\boot\bootcode.inc
    Spoiler:

    Code: Select all

    ; \begin{Mario79}
    ; find HDD IDE DMA PCI device
    ; check for PCI BIOS
            mov     ax, 0xB101
            int     0x1A
            jc      .nopci
            cmp     edx, 'PCI '
            jnz     .nopci
    ; find PCI class code
    ; class 1 = mass storage
    ; subclass 1 = IDE controller
    ; a) class 1, subclass 1, programming interface 0x80
    ; This is a Parallel IDE Controller which uses IRQs 14 and 15.
            mov     ax, 0xB103
            mov     ecx, 1*10000h + 1*100h + 0x80
            mov     [es:BOOT_IDE_PI_16], cx
            xor     si, si  ; device index = 0
            int     0x1A
            jnc     .found_1 ; Parallel IDE Controller
    ; b) class 1, subclass 1, programming interface 0x8f
            mov     ax, 0xB103
            mov     ecx, 1*10000h + 1*100h + 0x8f
            mov     [es:BOOT_IDE_PI_16], cx
            xor     si, si  ; device index = 0
            int     0x1A
            jnc     .found_1
    ; c) class 1, subclass 1, programming interface 0x85
            mov     ax, 0xB103
            mov     ecx, 1*10000h + 1*100h + 0x85
            mov     [es:BOOT_IDE_PI_16], cx
            xor     si, si  ; device index = 0
            int     0x1A
            jnc     .found_1
    ; d) class 1, subclass 1, programming interface 0x8A
    ; This is a Parallel IDE Controller which uses IRQs 14 and 15.
            mov     ax, 0xB103
            mov     ecx, 1*10000h + 1*100h + 0x8A
            mov     [es:BOOT_IDE_PI_16], cx
            xor     si, si  ; device index = 0
            int     0x1A
            jnc     .found_1 ; Parallel IDE Controller
    ; Controller not found!
            xor     ax, ax
            mov     [es:BOOT_IDE_PI_16], ax
            jmp     .nopci
    ;--------------------------------------
    .found_1:
    ; get memory base BAR4
            mov     ax, 0xB10A
            mov     di, 0x20        ; memory base is config register at 0x20
            push    cx
            int     0x1A
            jc      .no_BAR4        ;.nopci
            and     cx, 0xFFFC      ; clear address decode type
            mov     [es:BOOT_IDE_BASE_ADDR], cx
    .no_BAR4:
            pop     cx
    ;--------------------------------------
    .found:
    ; get Interrupt Line
            mov     ax, 0xB10A
            mov     di, 0x3c        ; memory base is config register at 0x3c
            push    cx
            int     0x1A
            jc      .no_Interrupt        ;.nopci
    
            mov     [es:BOOT_IDE_INTERR_16], cx
    .no_Interrupt:
            pop     cx
    ;--------------------------------------
    ; get memory base BAR0
            mov     ax, 0xB10A
            mov     di, 0x10        ; memory base is config register at 0x10
            push    cx
            int     0x1A
            jc      .no_BAR0        ;.nopci
    
            mov     [es:BOOT_IDE_BAR0_16], cx
    .no_BAR0:
            pop     cx
    ;--------------------------------------
    ; get memory base BAR1
            mov     ax, 0xB10A
            mov     di, 0x14        ; memory base is config register at 0x14
            push    cx
            int     0x1A
            jc      .no_BAR1        ;.nopci
    
            mov     [es:BOOT_IDE_BAR1_16], cx
    .no_BAR1:
            pop     cx
    ;--------------------------------------
    ; get memory base BAR2
            mov     ax, 0xB10A
            mov     di, 0x18        ; memory base is config register at 0x18
            push    cx
            int     0x1A
            jc      .no_BAR2        ;.nopci
    
            mov     [es:BOOT_IDE_BAR2_16], cx
    .no_BAR2:
            pop     cx
    ;--------------------------------------
    ; get memory base BAR3
            mov     ax, 0xB10A
            mov     di, 0x1C        ; memory base is config register at 0x1c
            push    cx
            int     0x1A
            jc      .no_BAR3        ;.nopci
    
            mov     [es:BOOT_IDE_BAR3_16], cx
    .no_BAR3:
            pop     cx
    ;--------------------------------------
    .nopci:
    ; \end{Mario79}
    И мне почему то казалось, что прерывания после перехода в Protected Mode CPU не меняются. Если же они меняются, то мне интересно какой код это делает? Почему то у lastar, если отключен контроллер USB, то эта схема прокатывает, т.е. назначенный BIOS в Real Mode CPU номер прерывания не меняется после перехода в Protected Mode CPU.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:
    CleverMouse wrote:Почему вообще код контроллера IDE-диска думает, что IDE-диск всегда даёт IRQ15? Здесь он даёт IRQ10.
    Потому что он получил это значение от BIOS, еще в RealMode CPU
    kernel\trunk\boot\bootcode.inc
    И мне почему то казалось, что прерывания после перехода в Protected Mode CPU не меняются. Если же они меняются, то мне интересно какой код это делает? Почему то у lastar, если отключен контроллер USB, то эта схема прокатывает, т.е. назначенный BIOS в RealMode CPU номер прерывания не меняется после перехода в Protected Mode CPU.
    Убедительно. Не меняются.

    lastar, нужен лог от вот этой версии ядра, она показывает все PCI-устройства с точки зрения ядра.
    Attachments
    kernel.7z (81.93 KiB)
    Downloaded 197 times
    Сделаем мир лучше!
  • все пошел на перезагрузку для теста
  • http://yadi.sk/d/6LKFaPerJExoK
    http://yadi.sk/d/lqEYi_VuJEyB6
    http://yadi.sk/d/tXlu9EMdJEycR

    Если плохо видно и надо будет переписать в ручную лог с экрана то напишите


    Вот тут решалась проблема работы моего контроллера в ReactOS http://jira.reactos.org/browse/CORE-6668


    Вот в этой теме похоже про это прерывание написал автор UniATA Alter :

    Alter added a comment - 2012-09-17 13:14
    Seems it is incorrectly handled USB Interrupt.
    Infinite ISR loop happens immediately after connecting to IRQ 15 (which is shared between IDE and USB controllers)
    There were no operations with IDE, those can cause and interrupt, thus, interrupt is treated as unexpected for IDE and should be passed to other handler.
    Similar problem had already been observed in the past (I don't remember exact BUG ID).
    ---
    00:1d.2 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 [8086:27ca] (rev 01)
    Subsystem: P5KPL-VM Motherboard [1043:8179]
    Flags: bus master, medium devsel, latency 0, IRQ 15
    I/O ports at b400 [size=1K]
    Device is using IRQ 15! ISA Cards using that IRQ may fail!
    Device is an Intel UHCI (USB) Controller. Turn off Legacy USB in your BIOS!
    ---
    00:1f.1 IDE interface [0101]: Intel Corporation 82801G (ICH7 Family) IDE Controller [8086:27df] (rev 01)
    Subsystem: P5KPL-VM Motherboard [1043:8179]
    Flags: bus master, medium devsel, latency 0, IRQ 15
    I/O ports at c080
    I/O ports at c000 [size=16K]
    I/O ports at 08f0
    I/O ports at 08f8
    I/O ports at b800 [size=2K]
  • Вот Фото получше сделал поэкспериментировал с настройками камеры телефона :

    http://yadi.sk/d/X3txobXUJF3pe

    http://yadi.sk/d/FbjhBUJ6JF494

    http://yadi.sk/d/aYZubhaAJF4AZ

    http://yadi.sk/d/jYGMUNWcJF4Cq
  • Проверь, пожалуйста, это ядро.
    Attachments
    kernel.7z (81.92 KiB)
    Downloaded 194 times
    Сделаем мир лучше!
  • CleverMouse Колибри загрузилась

    1 BOARD лог со стандартными параметрами http://yadi.sk/d/Py3J7WzXJFAx5
    2 BOARD лог со включенным пунктом D http://yadi.sk/d/G8p4QAW0JFAxb и скриншоты со включенным пунктом D http://yadi.sk/d/K6cVZL0pJFBhK http://yadi.sk/d/bUea-bYQJFBjP http://yadi.sk/d/TXz9KMX2JFBmm


    В чем же была проблема ?
  • Who is online

    Users browsing this forum: No registered users and 49 guests