Инструкция QEMU RDRAND не поддерживается

Я пытаюсь запустить собственное ядро ​​в qemu-system-x86_64, Это ядро ​​требует использования rdrand инструкция в начале цикла загрузки и не сможет загрузиться, если она не поддерживается процессором. Я прочитал в ответе на этот вопрос, что rdrand требуется как минимум процессор Ivy Bridge. Тем не менее, когда я запускаю QEMU с -cpu SandyBridge параметр (который должен указывать ему эмулировать процессор Sandy Bridge, который поддерживает rdrand), мое ядро ​​все равно не загрузится. я пытался -cpu Broadwell, предположительно потому, что это более новый процессор, но ничего не меняется.

Вот запускаемая сборка, которая проверяет cpuid и выполняет rdrand:

00025c79    xorl    %ebp, %ebp
00025c7b    movl    $0x1, %eax
00025c80    xorl    %ecx, %ecx
00025c82    cpuid
00025c84    testl   $0x40000000, %ecx       ## imm = 0x40000000
00025c8a    jne 0x25c98
00025c8c    movl    $0x2d479, (%esp)        ## 0x2D479 points to an error string
00025c93    calll   _stop                   ## This function call does not return
00025c98    movl    $0x2d4b1, (%esp)        ## 0x2D4B1 points to a debugging message
00025c9f    calll   _printf
00025ca4    movb    $0x0, 0x1b(%esp)
00025ca9    rdrandl %eax
00025cac    setb    0x1b(%esp)
00025cb1    cmpb    $0x0, 0x1b(%esp)
00025cb6    je  0x25ca9

0 ответов

Другие вопросы по тегам