Özel işletim sistemi yapmak için linux kaynak kodunu değiştirmeye nasıl başlanır? [kapalı]


15

Kaynak kodunu değiştirerek Linux'u özelleştirebileceğimizi (Ubuntu diyelim) duydum ve tamamen yeni işletim sistemi yapabiliriz. Linux çekirdeğinin kaynak kodunu www.kernel.org web sitesinden indirdim. Ama görerek, hiçbir şey anlayamıyorum, çok sayıda dizin, dosyalar içinde dosyalar var (bence tek bir büyük program olacağını düşünüyorum). Bunu bir üniversite projesi olarak yapmak istiyorum ve ayrıca gerekli değişiklikleri yaparak Linux'a katkıda bulunmak istiyorum. Ancak bu soruyu bazı sitelerde sorduktan sonra, Linux kaynak kodunun çok büyük olduğunu söylediler. Minix'i deneyebilirsiniz. Şimdi kafam çok karıştı.

Lütfen başlangıç ​​seviyesindeki bazı kitapların yanı sıra gerekli adımlarla (Linux'u özelleştirmek için kaynak kodunu değiştirme) bu yolculuğa nasıl başlamam gerektiği konusunda ayrıntılı önerilerde bulunun.


Amacın ne? Nasıl katkıda bulunmak istersiniz?
Spidey

(Linux) kaynak kodunu değiştirerek kendi özel işletim
sistemimi

Linux adlı çekirdek Gnu / Linux değildir (Ubuntu, Debian, RedHat, Suse, vb distrowatch.com ) Ancak çoğu insan Linux terimini kafa karıştırıcı bir şekilde GNU / Linux + X11 + anlamına gelir. Ancak Linux, GNU ve diğer işletim sistemleriyle kullanılabilen çekirdeklerden sadece biridir. Ubuntu ya da benzerini değiştirmek istiyorsanız, Linux adındaki çekirdeği değiştirmekle aynı şey değildir.
ctrl-alt-delor

Yanıtlar:


29

Unix.stackexchange.com'a hoş geldiniz!

Sorunuza kolay bir cevap yok ve benden çok daha iyi insanlar Linux çekirdeği ve genel olarak işletim sistemleri hakkındaki tüm kitapları yazdılar.

Projenin kapsamı hakkında: bir işletim sistemi yazmak basit bir iş değildir! Minix gibi maksatlı bir işletim sistemi bile oldukça karmaşık bir şey! Size Linux hakkında bir fikir vermek için şimdiye kadar yazdığınız C programlarını düşünün. Ortalama bir üniversite dersi en fazla birkaç bin satır C olma eğilimindedir. Sanırım son yıl projem yaklaşık 30-35.000 satır C ++ idi. Linux çekirdeği kabaca 13.000.000 satır C kodudur.

Neden hepsi ayrı dosyalarda? Büyük projeler lojistik ve pratik nedenlerle ayrı dosyalarda saklanır. Sadece bir editöre 13.000.000 satır dosyası yüklemeyi düşünün! Linux gibi büyük bir projeyle mücadele etmeden önce, C becerilerinizi kesinlikle 'neden birden fazla dosya' sorununun kendisine cevap verdiği noktaya getirmelisiniz. Ayrıca C kodunu da okuyabilmeniz gerekir , sadece yazmakla kalmaz. (ilk bakışta göründüğünden daha zor)

Kesinlikle C konusunda çok yetkin olmalısınız. Çekirdek binlerce kişi tarafından korunur ve her birinin kişisel C deyimlerini anlamanız istenir (oldukça katı çekirdek kodlama standartları dahilinde verilir, ancak yine de - herkes kendi problem çözme stilleri).

C fu'nuzu aldıktan sonra işletim sistemlerini anladığınızdan emin olun. Bu, kodu anlamanıza yardımcı olacaktır. Tüm Linux gerekli değildir. Uygun çekirdek oldukça küçük! Ne şişiriyor:

  • Çeşitli cihazlar için binlerce donanım sürücüsü.
  • API'leri ve sürücü yazmayı basitleştirmek için çeşitli cihaz sınıfları için soyutlama katmanları. Örneğin, dosya sistemleri için VFS, giriş aygıtları için Olay katmanı vb. Var.
  • Şiddetli miktarda koşullu derlenmiş kod ve Linux çalıştıran çeşitli mimarilere hitap eden dosyalar (her Linux makinesi bir Intel PC değildir ve bazıları beklediğinizden inanılmaz derecede farklıdır). Çekirdek bu farklılıklarla uğraşmak zorunda ve bu da daha fazla kod anlamına geliyor.

Hemen bulacağınız bir sorun, bu bileşenlerin fişini çekmenin, değiştirmenin ve tekrar takmanın o kadar kolay olmamasıdır. Çok sayıda ilişki vardır. Kısacası, çekirdeğin bitlerini değiştirmek zor.

İnsanların Minix'i size önermesinin nedeni basit: tam bir işletim sistemi, ancak Linux kadar karmaşık bir sistemin ihtiyaçları tarafından yüklenmiyor. Kod küçük ama yine de tam işlevsellik sağlıyor. Sonuçta, Linux'un ilk sürümleri Minix'ten ilham aldı.

Elbette, Minix'in bugünlerde daha az donanım desteği var. Ne olmuş yani? Bu bir nimet! Modern bilgisayarlar çok iyi sanallaştırır. Bunu kendi yararınıza kullanın: Minix'i çalıştırmak için bir VM çok hafiftir, geliştirmeyi göz kamaştırır.

Projeniz bir işletim sistemi kurmaksa, Minix'i inceleyerek başlamaktan daha kötüsü yapabilirsiniz. Minix'in ' Andrew Tanenbaum'un Modern İşletim Sistemleri'ne eşlik etmesi için yazılan kitabı satın almak ve okumak da isteyebilirsiniz .

Ayrıca hedeflerinizi belirlemeli ve terimlerinizi tam olarak tanımlamalısınız . Bir işletim sistemi tanımınız Microsoft ise (GUI ve tam yazılım paketine sahip bir işletim sistemi), çok uzun bir proje için hazır olabilirsiniz! Sonuçta, yüz binlerce insan 1960'lardan beri bizi bulunduğumuz yere getirmek için çalıştı.

Son olarak, Bilgisayar Bilimcisi'nin savaş çığlığını hatırlayın: ' asla tekerleği yeniden icat etmeyin! '(elbette öğrenirken istisnalar yapmak isteriz. Ve eğlence için :))


1
[link] (www.linuxfromscratch.org) hayalimi tam dolduracak ... ilgimi gösterdiğin için teşekkürler sorum
dubex

LFS, bir POSIX sisteminin kullanıcı alanının nasıl çalıştığını öğrenmek için harika. Linux'a özgü olduğunu bildiğim kadarıyla, çekirdeği alışılmadık bir yönde (kendi çekirdeğinizi yaparken yaptığınız gibi) değiştirmekle ilgilenmiyor. Ancak, konunun yanı sıra, çekirdeğiniz POSIX'ten uzaklaştığında, kullanıcı alanı uyumsuz olacak ve taşınması veya yeniden uygulanması gerekecektir.
Alexios

Yanlış anlama için özür dilerim ... Ama kendi çekirdeğimi yapacağım anlamına gelmiyordu (çok yetenekli olmadığım için :)). Kaynak kodunda diğerlerinden farklı görünebilecek ve kendi yaratıcılığım gibi görünecek bir değişiklik yapmak istiyorum. Örneğin: Linux (diyelim ubuntu) yüklü bazı ses tanıma yazılımı ile önyükleme yaparken, ekranda (yaptığım) ses ile bir tür animasyon istiyorum. Bir kez daha teşekkürler.
dubex

1
Bu durumda, farklı bir işletim sistemi değil, kendi Linux dağıtımınızı yapıyorsunuz. LFS bunun için doğru araçtır. İyi şanslar!
Alexios

1
@Alexios, çok iyi ve açıklayıcı cevap, teşekkürler.
0xAF

7

Linux Scratch From projesini kontrol edin . Adından da anlaşılacağı gibi, kendi Linux dağıtımınızı oluşturmak için gerekli tüm ayrıntıları içerir


4

Bence tanımlamanız gereken ilk şey "İşletim Sistemine getirmek istediğiniz değişiklikler nelerdir". Buna karar verene kadar, hiçbir yere ulaşamayacaksınız. Öğrenmenin "tek bir yolu" yoktur.

Ayrıca, işletim sistemi ile ne demek istediğinizi daha iyi tanımlamanız gerektiğini düşünüyorum. Ubuntu kaynak kodunun büyük bir kısmı (büyük bir kısmı) Linux'un dışındadır. Linux sadece çekirdektir , (bazen İşletim Sistemi olarak da adlandırılır) Akademik çevrelerde, dolayısıyla karışıklıkta ) ve bu nedenle "basit" işine sahiptir:

  • kaynakları yönetme.
  • donanım ile iletişim.

Temel kullanıcı alanı yardımcı programları (genellikle utils vs), GUI, bir dağıtımın temel uygulamalar,

Ancak, hala çekirdeği hacklemeyi öğrenmeye hazırsanız, belki de bu sitede en çok oy alan soru olan bu soru ile başlamalısınız ;)


soru sormakta o kadar spesifik olmadığım için özür dilerim ... ama gerçekte tüm bunlar hakkında ayrıntılı bir fikrim yok. Aslında linux (ubuntu diyelim) önyükleme yaparken ekranda bir tür animasyon (sesle) istiyorum ... lütfen tüm bu alanları keşfetme ve belirli bir alanda nasıl ilerleyeceğimi (donanımla iletişim kurarak gui deyin) hakkında fikir verin ) ...
dubex

@ dubex plymouth ile başlar ve ses için Linux kütüphanelerine bakar. SDL_mixer kolay olabilir.
sourcejedi

2

Bu konunun biraz yanında olabilir, ancak Linux çekirdeği hakkında bilgi edinmek ve geliştirmeye başlamak istiyorsanız, gerçekten çekirdek yenilerini incelemelisiniz . Bu, çekirdek mekaniğine (Alexios'un mükemmel bir şekilde yaptığı gibi) ilişkin bilgi veren bir sitedir, aynı zamanda ele almak için küçük bir görev seçmenize izin verir (çekirdek hademe olarak adlandırılır). Öğrenmek için harika bir yol ve kesinlikle tavsiye ederim!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.