it-swarm-tr.com

Linux çekirdeğini tek başına kurmak mümkün müdür?

Sadece Linux çekirdeğini kurmanın mümkün olup olmadığını veya lezzetlerden birini kullanmanız gerekip gerekmediğini merak ediyorum. Mümkünse nasıl yapardın? Ayrıntılı bir eğiticiye ihtiyacım yok. Sadece kavramsal olarak nasıl yapılacağını bilmek istiyorum. Düşük seviyeli şeylerle iyi değilim ve bir işletim sistemini bilgisayara nasıl soktuğunuzu bilmek istiyorum. MBR ile bir ilgisi olduğunu düşünüyorum.

Oh ve ben bir çok cevabın asgari Linux'un belirli bir dağıtımını önerdiğini fark ettim. Muhtemelen minimal veya çıplak kemikler Linux kurmak istemediğimi belirtmeliydim. Bu soru tamamen teoriktir. Yine de, tüm cevapları gerçekten takdir ediyorum ve eğer gerçekten kişiselleştirilmiş bir Linux kurmak istersem hemen onlara atıfta bulunacağım.

50
cesar

Teknik olarak sadece bir bootloader ve çekirdeği kurabilirsiniz, ancak çekirdek botları en kısa sürede "init" in başlamamasından şikayet eder, o zaman orada oturur ve onunla hiçbir şey yapamazsınız.

BTW, MBR'de bulunan önyükleyicinin bir parçasıdır. Çekirdek, diskin normal alanında bir yere oturur. Bootloader bunun nerede olduğunu bilecek şekilde yapılandırılmıştır, böylece çekirdeği yükleyebilir ve yürütebilir.

54
Shawn J. Goff

Ne istediğini tam olarak anladığını sanmıyorum, ancak Linux From Scratch projesine bir göz atmak isteyebilirsiniz.

20
Shadur

Eğer bir grup başka program kurmadan mevcut bir sistemi "üzerine" kurabilir veya yükseltebilir misiniz diye soruyorsanız?

Linux çekirdeği, x'lerin sürüm numarası olduğu boot dizininde (genellikle sabit sürücünün başlangıcında ayrı bir küçük bölümdür) genellikle vmlinuz-x.x.x-x-name Adlı bir ikili dosyadır. "name" sadece derleme sırasında ayarlanabilen çekirdek için seçilen bir addır, çekirdeğin ne tür bir makine veya mimarinin veya başka bir nedenden dolayı olduğunu tanımlamak için kullanabilirsiniz.

Önyükleme zamanında, tipik olarak GRUB olan ve BIOS ROM tarafından çağrılan MBR'de önyükleme kodu tarafından çağrılan bir bootloader tarafından yüklenir. Yüklendikten sonra "açık tutulmaz" veya özel olarak korunmaz. Böylece bu dosyayı başka bir çalışma çekirdeğiyle değiştirebilirsiniz. Ancak, GRUB, önyüklemek için birden çok çekirdek seçmenizi sağlayan harika bir özelliğe sahiptir. Bu nedenle, ek çekirdeğinizi bu listeye eklemek oldukça akıllıdır, ancak işlerin yanlış gitmesi durumunda bilinen orijinal çekirdeği saklayın.

Hemen hemen tüm dağıtımların, aygıt sürücülerinin ayrı dosyalarda olduğu bir "modüler" çekirdek oluşturduğuna inanıyorum. Bu nedenle çoğu çekirdeğin önyükleme sırasında kullanabileceği sürücüleri içeren bir dosya sistemine ihtiyacı vardır ve bu bir "initrd" (ilk RAM disk) veya “initramfs”) içindir. GRUB çekirdeği bellekteki bir konuma ve initrd'i farklı bir yere yükleyin ve initrd'in nerede olduğunu söyleyerek Linux'a başlayın.

Sürücüler ayrıca çekirdeğe "yerleşik" olabilir ve bu nedenle önyükleyici vmlinuz görüntüsünü yüklediğinde otomatik olarak yüklenir ve kullanılabilir. Farklı sistemlerde (çoğu dağıtımınki gibi) çalışması gereken çekirdekler genellikle çekirdeğe yerleşik olanı en aza indirir, çünkü mevcut donanım önyükleme işleminde daha sonra taranır ve yalnızca mevcut donanımı temsil eden modüller yüklenir.

Initrd'leri değiştirmek ve oluşturmak için araçlar vardır. Debian'ın güzel araçları var ve diğer dağıtımların da yaptığını hayal ediyorum.

Bu nedenle, kernel.org'dan daha yeni bir çekirdek indirir ve yeni bir çekirdek ikili görüntüsü oluşturmak için derlerseniz, bu çekirdekle çalışan sürücülerle bir initrd oluşturmanız veya güncellemeniz gerekir. Eski initrd çalışmaz, çünkü sürücüler çalışan çekirdeğin sürümüyle eşleşmelidir.

İnitrd dosyası, çekirdeğe benzer şekilde initrd.img-x.x.x.x-name Olarak adlandırılır ve önyüklemeden sonra çekirdek gibi değiştirilebilir ve en iyi uygulama, yeni bir önyüklemenize önyükleme yapana kadar bilinen bir çalışan initrd'yi silmediğinizi gösterir. çekirdek + initrd başarıyla.

Umarım bu bir bağlam sağlar.

Herhangi bir ek programın yüklü olmadığı veya çok az programı olmayan bir "barebone" Linux yüklemesi arıyorsanız, en sevdiğim seçim her zaman Debian netinst görüntüsünü kurmak olmuştur. Hemen hemen bir komut satırı metin konsolu ve nano'i metin düzenleyicisi olarak çalıştırmak için gereken en temel araçlara sahipsiniz.

13
LawrenceC

Tek çalıştırılabilir rootfs

Mutlak minimum sistem tek bir /init programını açıkladığım gibi Single Application Linux | Super User

Minimal Linux Live

https://github.com/ivandavidov/minimal

Daha ilginç bir etkileşimli sistem için, bu (çoğunlukla eğitici) küçük bir komut dosyasıdır:

  • çekirdek ve meşgul kutusu için kaynağı indirir
  • onları derler
  • onlarla önyüklenebilir bir 8Mb ISO üretir

ISO, sizi meşgul kutusuyla minimal bir Shell'de bırakır.

QEMU ile kolayca sisteme önyükleme yapabilirsiniz.

Çekirdek kaynak dizininden çalıştırmaya izin vermek için değiştirdim: https://github.com/cirosantilli/runlinux

Kullanımı:

git clone https://github.com/ivandavidov/minimal
cd minimal/src
./build_minimal_linux_live.sh
# Wait.
# Install QEMU.
# minimal_linux_live.iso was generated
./qemu64.sh

ve yeni minimal sistemle birlikte bir QEMU Penceresinin içinde kalacaksınız. Muhteşem.

Küçük olduğu için, kaynağı okumak ve neler olduğunu anlamak için iyi bir seçenektir.

Ubuntu 16.04'te test edildi.

Buildroot

https://buildroot.org/

Aşağıdakileri yöneten büyük Makefile komut dosyaları kümesi:

  • GCC çapraz derleme toolchain
  • çekirdek derlemesi
  • bootloader derleme
  • rootfs üretimi
  • gTK gibi karmaşık şeyler de dahil olmak üzere kaynak ağacında tonlarca paket indirme/oluşturma tarifleri vardır. Bir bağımlılık sistemi var.

Minimal örnek:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
# Can't use -jN, use `BR2_JLEVEL=2` instead.
BR2_JLEVEL=2 make
# Wait.
# cat board/qemu/x86_64/readme.txt
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -Net User
# You are now in a Shell with BusyBox utilities.

Hatta X11'i sıfırdan oluşturmak için tarifler var: X11'i kendi Linux Buildroot sistemime nasıl kurabilirim?

Profesyonel şeyler.

Alpine Linux

https://github.com/gliderlabs/docker-Alpine

Bir web sitesinden önceden derlenmiş ikili dosyalar sunan bir paket yöneticisi ile gömülü dağıtım.

Ayrıca bakınız

Normal kullanıcı alanı araçları olmadan bir Linux çekirdeği kurmak mümkündür. Bu genellikle yönlendiriciler gibi gömülü sistemlerde yapılır. Genellikle, çekirdek ROM veya Flash bellek'ten yüklenir ve söz konusu aygıt için özelleştirilmiştir (genellikle gerekli sürücüler modül olarak yüklenmek yerine çekirdeğe derlenir).

'İnit' süreci (mutlaka init olarak adlandırılmaz, ancak çekirdek tarafından işlem 1 olarak başlatılır ve artık herhangi bir yetim sürecin otomatik üst öğesi) olmak için en az bir kullanıcı alanı programının olması gerekir. çekirdek, bunu gerektirmeyecek şekilde değiştirildi (sadece özelleştirilmiş değil).

Linux tabanlı çalışan bir cihaza sahip bir Shell'in bulunması kesinlikle gerekli değildir, ancak geliştirmeyi daha kolay hale getirebilir!

3
Toby Speight

İkincisi istiyorum Shadur's öneri Ellerinizi Linux Scratch yolundan kirli yapmalısınız.
Ayrıca, benzer bir şey, Pocket Linux deneyin.

Pocket Linux Guide, yalnızca kaynak kodu ve birkaç disket kullanarak küçük bir konsol tabanlı GNU/Linux sisteminin nasıl oluşturulacağını gösterir. Sistemlerinin, dağıtım özel özelliklerinin ve araçlarının örtüsünün altında nasıl çalıştığı hakkında daha derin bir anlayış kazanmak isteyen Linux kullanıcıları için tasarlanmıştır.

3
Philomath

Birçok dağıtım "çekirdek" kurulumlar sağlar. Senin istediğin bu. Ubuntu-minimal, debian net-install, archlinux (varsayılan sadece temeldir).

Diğer cevaplar öğrenmek istiyorsanız faydalıdır, ancak durum böyle olmayabilir = p

2
user606723