C++ Kernel Yazarken Kütüphane Kullanma / Ekleme

Can-K.

Doçent
Katılım
7 Nisan 2015
Mesajlar
975
Reaksiyon puanı
17
Puanları
18
Daha önceki konumda bunu sormamıştım fakat bu daha detaylı bir soru olacak sanırım.Kernel yazarken araştırıyorum kimi sadece #endif tarzı denetleyici yönergeleri kullanmış , kimisi bayağı #include "stdio.h" tarzı komutlarda eklemiş ( tam kaynağını bulursam iletirim lakin çalıştığına dair kanıt yok ) haliyle kafam karıştı.

Eğer böyle bir şey mümkünse , ben kernelimde cout ve cin komutlarını kullanım konsol aplikasyonumuş gibi bir kernel düzenlemek istiyorum.C dilinde yazarken burada gets() puts() tarzı komutlar kullanarak kütüphane ihtiyacını gidermek mümkün fakat bu komtun karşılığı mevcut mu hiç duymadım doğrusu :)
 

orcnd

Dekan
Katılım
13 Ekim 2008
Mesajlar
6,394
Reaksiyon puanı
255
Puanları
63
stdio.h gibi şeyleri kullanamazsın. zira bu komutlar çalışan aktif kernel üzerinede çalışmak için varlar.
erkan çıktısı almak için assembly üzerinden kendi geliştirdiğin çıktı komutunu kullanman gerekiyor.

örnek olarak Writing a 16-bit dummy kernel in C/C++ - CodeProject
 

Can-K.

Doçent
Katılım
7 Nisan 2015
Mesajlar
975
Reaksiyon puanı
17
Puanları
18
stdio.h gibi şeyleri kullanamazsın. zira bu komutlar çalışan aktif kernel üzerinede çalışmak için varlar.
erkan çıktısı almak için assembly üzerinden kendi geliştirdiğin çıktı komutunu kullanman gerekiyor.

örnek olarak Writing a 16-bit dummy kernel in C/C++ - CodeProject

Mantıklı düşünürsek bence kernel'in içinde assembly değilde , dediğiniz gibi stdio.h adlı bir dosya bulunursa olmazmı ? Zaten bir bakıma düşünürsek bahsettiğimiz loader.asm denen çağırma dosyası aynı klasörde arıyor , burada düzgün bir linking ile sorun çıkmayabilir diye düşünüyorum.

Bahsettiğim yerde

Kod:
char hello = Hello World!;

puts(hello);

Şeklinde verilmiş tabii yanlış hatırlamıyorsam.Benim kernel içinde düşündüğüm dosyalar tamamiyle basit , en çekirdek halde olan.Sonra üstüne nasıl inşa edeceğiz ona hiç bakmadım.Eğer kütüphaneler kullanılıyorsa zaten sorun değil inşaa etmesi.
 

Can-K.

Doçent
Katılım
7 Nisan 2015
Mesajlar
975
Reaksiyon puanı
17
Puanları
18
Ve getchar() putchar() komutu verilmiş bahsettiğiniz sitede , bunlar kütüphanesiz kullanılıyor mu? Yoksa bunları kullanmak daha mantıklı.
 

Anti-Code

Asistan
Katılım
14 Haziran 2014
Mesajlar
168
Reaksiyon puanı
2
Puanları
18
Ve getchar() putchar() komutu verilmiş bahsettiğiniz sitede , bunlar kütüphanesiz kullanılıyor mu? Yoksa bunları kullanmak daha mantıklı.
Bu tarz soruları ve ileride kafana takılacak soruları stackoverflowa da sorarsan daha temiz cevaplar alabilirsin. Teknik anlamda yardımcı olamıyorum ama bilgilendirme açısından olayım dedim. İyi çalışmalar.
 

Can-K.

Doçent
Katılım
7 Nisan 2015
Mesajlar
975
Reaksiyon puanı
17
Puanları
18
Bu tarz soruları ve ileride kafana takılacak soruları stackoverflowa da sorarsan daha temiz cevaplar alabilirsin. Teknik anlamda yardımcı olamıyorum ama bilgilendirme açısından olayım dedim. İyi çalışmalar.

Teşekkür ederim oradan okuyorum bir çok şeyi zaten ama bszı cevaplar inanılmaz karışık verilmiş.Yine de soracağım , tekrardan teşekkürler :)
 

orcnd

Dekan
Katılım
13 Ekim 2008
Mesajlar
6,394
Reaksiyon puanı
255
Puanları
63
Ve getchar() putchar() komutu verilmiş bahsettiğiniz sitede , bunlar kütüphanesiz kullanılıyor mu? Yoksa bunları kullanmak daha mantıklı.
kodun üst taraflarında görürsün getchar'ı kendi tanımlamış. onuda assembly üzerinden çağırıyor.

basit bir sebebi var bunun. kernel dediğimiz şey programcı ile donanım arasındaki bağlantıyı kurar.
bildğimiz c++ kütüphaneleri bildiğimiz kerneller üzerinde çalışmak için tasarlanmıştır.
yani assembly kısmında tanımlanacak sabit bir komut setine ihtiyaç duyar bu kütüphaneler.
tabi bu giriş çıkış aygıtlarını kullanan kütüphaneler için geçerli. bunun dışındaki kütüphaneleri rahatlıkla kullanabilirsin.

farklı bir bakış açısı istiyorsan şu makaleye bak How to develop an operating system using - C++ Articles


ayrıca şunu belirtmek isterim. bu bilgiler benim teorik olarak bildiğim bilgiler üzerine senin sorun için araştırdığım pratik bilgilerle yazıldı.

daha iyi bilen arkadaşların detaylandırması ve hataları düzeltmesi rica olunur
 

Can-K.

Doçent
Katılım
7 Nisan 2015
Mesajlar
975
Reaksiyon puanı
17
Puanları
18
kodun üst taraflarında görürsün getchar'ı kendi tanımlamış. onuda assembly üzerinden çağırıyor.

basit bir sebebi var bunun. kernel dediğimiz şey programcı ile donanım arasındaki bağlantıyı kurar.
bildğimiz c++ kütüphaneleri bildiğimiz kerneller üzerinde çalışmak için tasarlanmıştır.
yani assembly kısmında tanımlanacak sabit bir komut setine ihtiyaç duyar bu kütüphaneler.
tabi bu giriş çıkış aygıtlarını kullanan kütüphaneler için geçerli. bunun dışındaki kütüphaneleri rahatlıkla kullanabilirsin.

farklı bir bakış açısı istiyorsan şu makaleye bak How to develop an operating system using - C++ Articles

Cevaplar için çok teşekkür ederim öncelikle, sanırım tek çaremiz , assemblya bir şey tanımlamak , cout cin tarzı komutlar aslında konsol komutları bunların farkındayım , hatta benim amacım acaba bu şey için kullanılan bir zımbırtı var mıdır dı , cevabımı buldum sayılır.

Ben ayrı bir ekran kartı driver'ı yazdım geçen günlerde , burada kernella birleşik vermiş , onun dışında bir de void komutlarıyla böyle birşey hazırlamış.Ben assembly ile getchar'ı tanıtmayı hatta in out tarzı bir komut hazırlamayı düşünüyorum.Teşekkürler.Araştırmaya devam ;)
 
Üst