2011-06-17 45 views
5

Bazı bellek yönetimini yapar ve en az bir metin düzenleyicisi ve bir hesap makinesi vardır Muhtemelen CUI OS Kerneli kodlarken stdio kullanılabilir mi?

C

kodlanmıştır, aslında az işlevselliği ile, bir işletim sistemi, çok küçük ve temel bir inşa etmeye gerek onun Sadece donanımınız üzerinde tam ve doğrudan kontrole sahip bir kodun nasıl yapılacağı konusunda bir deneme olacak.

Yine de, printf (& args), scanf (& args) gibi giriş/çıkış işlevlerine gereksinim duyacağınız bir arabirime gereksinim duyacağım. Şimdi asıl sorum, mevcut üstbilgileri kullanmalı mıyım, yoksa aslında kodlama için kodlamaya gitmeli ve neden böyle?

Size yardım ve yardım için çok teşekkür ederim.

cevap

3

İlk önce, libc'dan bir şeye bağlanamazsınız ... her şeyi sıfırdan kodlamanız gerekecek. Şimdi üzerinde çalışmış olan ben onlar OS için ya alakasız olacak ekstra pek çok bilgi ile darmadağın olacak beri libc ile gelen gerçek stdio başlıklarını kullanın veya olmaz, kendimi-çekirdek mikro

bir irade eksik tanımları, vb nedeniyle derleyici hataları oluşturmak Ne olurdu, bu standart işlevler için aynı işlevsellik imzaları tutmak aynı olsa ... böylece sonunda OS için stdio.h adlı bir dosya olurdu, ama olurdu İhtiyaçlarınız için temel minimum gereksinimlere sahip olan ve yalnızca standart I/O işlevlerine sahip, doğru standart imzalara sahip çok soyulmuş bir başlık dosyası.

Arka uçta, yani, stdio.c dosyanızda, bu işlevleri özel bir konsol sürücüsüne veya ekranınız için başka bir karakter sürücüsüne işaret etmeniz gerekeceğini unutmayın. Ya bu, ya da bazı diğer çekirdek düzeyinde görüntü yazdırma rutinleri için bunları sarmalayıcı olarak kullanabilirsiniz. Ayrıca, bu yazdırma işlevlerine erişmek için diğer OS kod modüllerinde bir #include <stdio.h> yönergesini kullanabilseniz bile, libc karşı bağlantı oluşturmamanız konusunda da emin olmak istersiniz. Bu gcc -ffreestanding kullanılarak yapılabilir.

+0

Çok teşekkürler efendim, ama şimdi senin için sadece başka yükünü dışarı atın , can i vurdu olsun her :) Ben rahatsız edebilir – Kartikya

+1

Haha, tabi sorun, dürüst olmak gerekirse rağmen, sana (http [OSdev.org] millet dan çok daha fazla yardım aşabileceksiniz düşünüyorum: // forumu. osdev.org/). Eğer çevirici dili işinin içinden özellikle bir çekirdek yazma, başlatmak, özellikle de çok zor olabilir, çift ve üçlü (en azından bir özel durum işleyici çift hata yakalayabilirsiniz) faylanma. Kesinlikle QEMU veya Bochs gibi bir emülatör kullanarak ve onların debugger'lar (özellikle Bochs ayıklayıcı) ile çok tanıdık alma düşündürmektedir. Ayrıca Intel işlemci geliştiricisinin kullanım kılavuzuna çok zaman harcamak için hazır olun. – Jason

+0

Biraz ilerleme alır almaz sizinle iletişim kuracağız, size efendim ederiz. – Kartikya

0

Sadece newlib'i yeniden hedefleyin. Tek bir karakter veya tek bir karakter yazdırabilmek için uygulamaya özel işlevlere dayanır.

Daha sonra stdin ve stdout numaranızı UART 1 yapabilirsiniz.

+0

Yani efendim bu newlib ... herhangi desteği olmadan aday olacağını, ben bazı platformu bağımlı doğru değil demek , sadece onaylıyor. ? – Kartikya

+0

Evet. Ben aslında bu işletim şeyi yapmaya başladığınızda, bütün bu geçtiğini biliyorum şimdi ... http://sourceware.org/newlib/ de –

0

Çekirdeği çekirdek modunda tutmak ve planladığınız uygulamaları çalıştırmak istemiyorsanız, Kernel'in kendisi printf ve scanf işlevlerini gerektirmez. Ancak temel printf ve scanf özellikleri için, kendi yazdırma ve tarama işlevlerinizi yazabilirsiniz, bu da giriş almayı yazdırmaya yönelik temel destek sağlayacaktır. Bu konuda fazla bir deneyimim yok, ancak klavye sürücüsünün ASCII karakterlerini (tarama kodlarından dönüştürüldükten sonra) okuduğu bir konsol arabelleği oluşturmayı deneyebilir ve ardından printf ve scanf üzerinde çalışabilirsiniz. Ben bir temel uygulama var scanf yerine gets yazdım ve basit şeyler tuttu. Tamsayı çıktısını almak için dizeyi bir sayıya dönüştürmek üzere bir atoi işlevi yazabilirsiniz.

Diğer kitaplıklarda bağlantı yapmak için kitaplıkların bağımlı olduğu bileşenleri oluşturmanız gerekir. Bu desteğinizi çekirdekte kodlandırabilmeniz için karar vermeniz gerekir, böylece kütüphaneler içeri alınabilir.O zaman ben bu aşamada kötü olmayacak düşünüyorum bazı temel giriş çıkış fonksiyonlarını, kodlama daha zor ise

İlgili konular