Comments 9
Вот и продолжение. Благодарю.
+6
Интересно, что почти этот же подход можно применить и без эмулятора на живой линукс системе с заоффлайненым ядром:
загрузить ядро с дыркой в физ. памяти, например memmap=64M$0x19000000
заоффлайнить ядро в линуксе с echo 0 > /sys/devices/system/cpu/cpu2/online
скопировать бинарник в 0x19000000 физической памяти через /dev/mem,mmap. (в бинарник добавить настройку gdt,idt по вкусу)
и небольшой загрузчик в соответствующий адрес (линкскрипт настроить соответственно),
инициировать INIT/SIPIx2 через LAPIC адрес на ACPI ID заоффлайненого ядра (warning: ACPI ID не всегда = Linux kernel core ID)
Общаться потом можно через шаренную физ. память и например mwait.
загрузить ядро с дыркой в физ. памяти, например memmap=64M$0x19000000
заоффлайнить ядро в линуксе с echo 0 > /sys/devices/system/cpu/cpu2/online
скопировать бинарник в 0x19000000 физической памяти через /dev/mem,mmap. (в бинарник добавить настройку gdt,idt по вкусу)
и небольшой загрузчик в соответствующий адрес (линкскрипт настроить соответственно),
инициировать INIT/SIPIx2 через LAPIC адрес на ACPI ID заоффлайненого ядра (warning: ACPI ID не всегда = Linux kernel core ID)
Общаться потом можно через шаренную физ. память и например mwait.
+18
Мсье знает толк.
+5
Мне это напомнило диалоги из House M.D
+7
Ух ты, это же просто гениально!
Правда, с приходом аппаратной виртуализации уже не так актуально. То же самое, в принципе может сделать гипервизор, но при этом он ещё и виртуализирует ком-порт, например. Можно будет аттачиться дебаггером. И не нужно танцы с бубном для загрузки в память и перезапуска остановленного ядра.
Но вообще идея хороша.
Кстати, нечто очень похожее сейчас используется в мобильных процессорах. Например в TI OMAP на паре Cortex A9 работает линукс, а на паре Cortex M3 запускается проприетарная Realtime OS, на которой бегают аппаратные медиа-кодеки. И общение как раз происходит через shared memmory + аппаратные mailbox.
Правда, с приходом аппаратной виртуализации уже не так актуально. То же самое, в принципе может сделать гипервизор, но при этом он ещё и виртуализирует ком-порт, например. Можно будет аттачиться дебаггером. И не нужно танцы с бубном для загрузки в память и перезапуска остановленного ядра.
Но вообще идея хороша.
Кстати, нечто очень похожее сейчас используется в мобильных процессорах. Например в TI OMAP на паре Cortex A9 работает линукс, а на паре Cortex M3 запускается проприетарная Realtime OS, на которой бегают аппаратные медиа-кодеки. И общение как раз происходит через shared memmory + аппаратные mailbox.
0
Любой ARM с MMU это вполне может с одним ядром начиная с ARM9. Стартует реалтаймовое ядро и из-под него запускается паравиртуализированный линукс. Собственно так работают телефоны на андроиде у quallcom — есть реалтаймовость для bb и аппаратная защита проприетарного кода от линукса.
0
UFO just landed and posted this here
UFO just landed and posted this here
Sign up to leave a comment.
Как запустить программу без операционной системы: часть 2