2011-12-23 13 views
6

Qemu'nun içinde tam bir çekirdek çalıştırabilmenin nihai hedefi ile, ARM mimarisine xnu çekirdeğini bağlamak istiyorum. Bunun çok zor bir görev olduğunu anladığım halde, yine de buna devam etmek istiyorum.Çekirdeği farklı bir mimariye mi yüklüyorsunuz?

Bildiğim kadarıyla, kextel (osfmk/arm/start.s) için başlangıç ​​noktası (MMU ve PlatformExpert) yaptığınız ve Kext/IOKit alt sistemlerinin başlatılabildiği ve CPU'ya özel uzantıların yüklenebileceği bir giriş noktası yazmanız gerekiyordu (önyükleme, GPIO, saat) ya ikiliye önceden yüklenir veya önyükleyici tarafından yüklenir (, çünkü çekirdek, NAND uzantılarının henüz kullanılamaması nedeniyle dosya sistemi ile etkileşimde bulunamaz, çünkü).

  • düşük yapın: Ben nasıl ARM CPU çalışmalarına genel bir fikir var iken ben nasıl tamamen emin değilim çünkü

    , ben bile, nerede xnu portu ile başlamak için bilmiyorum seviye hata ayıklama (çekirdek hata ayıklama olanakları başlangıçta erken kullanılamaz olduğundan).

  • ARM dalını çekirdek kaynak ağacının geri kalanıyla bütünleştirin (örn. osfmk/kern numaralı belgenin çalışmakta olduğundan emin olun).
  • Platform bağımsız çekirdeği başlatmak için bir akıl ortamı oluştur (machine_startup());
  • Platformun belirli kodlarını ana çekirdek kodunun içinde düzeltin (platform kodunun çoğu osfmk/platform_name ile sınırlıdır, ancak bazılarının osfmk/kern ve diğerleri ile tümleştirilmesi gerekir). Farklı platformlara XNU (veya en azından Mach) çekirdek taşıma herhangi terbiyeli kılavuzları Linux kılavuzları vardır, tıpkı

var mı?

+1

+1 Cesaretinizi alkışlıyorum. Birisi sert şeyler yapmak zorunda.Bu konuda hiçbir şey bilmiyorum ama eğer bunu baştan başlayacak olursanız, muhtemelen hata ayıklama rehberini yazacak olan siz olacaksınız! Kai Kaha kardeşim. –

cevap

2

bir cevap vermek edilemez ama bir kaç ipucu:

"büyük adamlar" işlemci, kayıtları tek devirli olmasını sağlar ekli özel donanımıyla ilgili bir sistem üzerinde çalışması bu tür şeyleri incelenir, vb. Ve aynı tesislere sahip bir emülatör üzerinde çalışmanın çoğunu yapabilirler. Donanım hata ayıklayıcı kurulumu, muhtemelen (ve satın almak için biraz pahalı) inşa etmek için yeteneklerinizi dışındadır, ancak emülatör tamamen uygulanabilir (ve Gates'in ve Altair BASIC'de nasıl başladığı - Allen, emülatörlerin Gates'i yazmasaydı) hala Harvard'da video oyunları oynuyor).

Tam bir hata ayıklayıcısının kısa bir kısmı, ekli herhangi bir karakter gösterimi eklediyseniz, kod ilerledikçe karakterleri ekrana yazmak için hata ayıklama koduna yerleştirebilirsiniz. Yol A, bir sonraki yerdeki "A" kelimesini (bir yerde ayrılmış bir bellek sözcüğünde tutulan bir dizin) yazabilirken, B yolu "B", vb. Yazabilir. Çok kaba, ancak bazen küçük projeler için yeterlidir.

Bu yüzden önce öykünücüyü yazmanızı öneririm. Yine de işlemciye aşina olmanın iyi bir yolu.

(malzeme entegre gelince, ben her zaman sadece "Hey, Jeremy! Benim için bu entegre sizi edecek?" Demek)

1

Kaynak kodunun tüm bir zorluk biraz olarak değil karşılaşacak kullanılabilir . Platform uzmanının kaynak kodunun bir kısmı, xnu kaynaklarının bir parçası olarak mevcuttur, ancak com.apple.driver.AppleACPIPlatform.kext değildir.