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


45

Sadece Linux çekirdeğini tek başına kurmanın mümkün olup olmadığını veya lezzetlerden birini kullanmanız gerekip gerekmediğini merak ediyorum. Mümkün olsaydı nasıl yapardın? Detaylı bir eğitime ihtiyacım yok. Sadece kavramsal olarak nasıl yapıldığını bilmek istiyorum. Düşük seviyeli işler konusunda iyi değilim ve bilgisayara nasıl bir işletim sistemi kazandırdığını bilmek istiyorum. MBR ile bir ilgisi olduğunu hayal ediyorum.

Ah ve ben pek çok cevabın bazı Linux'ların belli bir dağılımını önerdiğini fark ettik. Muhtemelen Linux'a minimal veya çıplak kemik takmayı düşünmediğimi söylemeliydim. 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 derhal bunlara bakacağım.


3
Ne demek "yalnız" ve "tatlar"? Linux bir işletim sistemi değildir, çekirdekdir, işletim sistemi olmayan bir çekirdek ne işe yarar ki? Bunun yerine önyükleyici dizisini anlamaya mı çalışıyorsun?
Caleb,

3
Bir çekirdeğin / işletim sisteminin bilgisayara nasıl girdiğini anlamak istiyorsanız, işte başlangıç ​​noktası. Sadece orada "acemi" soruları sormadığınızdan emin olun, sizi ısırırlar, bunun yerine SO'da sorarlar .
Philomath

3
Yalnız, sadece çekirdeği, eksi kullanıcı arayüzünü ve OpenOffice gibi programları dahil etmek istiyorum. 'Lezzet' ile ubuntu, redhat, debian ve mandriva gibi linux'un farklı dağılımlarını kastediyorum. Ne hakkında konuştuğum hakkında neredeyse hiçbir fikrim yok. Linux çekirdeğinin DOS gibi bazı temel bash yeteneklerine sahip olduğunu hayal ediyordum. Sanırım çekirdekler ve işletim sistemleri ile ilgili düşüncelerim birbirine karışmış olabilir.
cesar

4
Evet, sizler gerçekten GERÇEKTEN YARALANMAYIN :) Bash, yalnızca çekirdek tarafından yönetilen bir işlem olarak çalışan bir kullanıcı ülkesi programıdır. Kendi başına bir çekirdek, başka şeyleri çalıştıracak bir platform dışında size hiçbir şey vermez. Shadur'un cevabında LFS'nin (Sıfırdan Linux) önerisi tam olarak hedefte. Tüm farklı parçaların ne olduğu ve bir dağınıklığı neyin dağıtdığı ve çekirdeğin bittiği ve kullanıcı toprağının kazıma sistemi kurarak başladığı yer hakkında çok şey öğrenirsiniz.
Caleb,

2
Aslında, DOS'un kernelda temel bashözellikleri yoktu. Standart kullanıcı arayüzü kabuk programı tarafından sağlanmıştır COMMAND.COM. Yararlı bir şey yaparak çıplak bir çekirdeğe alabileceğiniz en yakın şey, çekirdek parametresini kullanarak önyüklemektir init=/bin/bash(en az bir Linux'un diskte olduğunu varsayarsak). Cevap olarak, sadece bootloader ve çekirdeğe sahipseniz, bulamadığı zaman çok hızlı bir şekilde duracaktır init.
StarNamer

Yanıtlar:


51

Yalnızca bir önyükleyici ve çekirdeği teknik olarak tek başına kurabilirsiniz, ancak çekirdek önyüklemesi yapar yapmaz "init" başlayamamadan şikayet eder, o zaman orada oturur ve onunla hiçbir şey yapamazsınız.

Btw, bu MBR olan bootloader bir parçasıdır. Çekirdek, bir 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 çalıştırabilir.


MBR'ye nasıl koyarsın?
cesar

Her önyükleyici, kendisini MBR'ye yüklemek için bir araçla birlikte gelir. Boot-Repair gibi dostça araçlar da var ( help.ubuntu.com/community/Boot-Repair ).
Shawn J. Goff,

Peki, bir initramfs oluşturabilir ve onu çekirdek imajına yerleştirebilirsin, ve sonra sadece bir çekirdek imaj dosyasından tamamen çalışan bir sisteme sahip olabilirsin :-)
Patrick

@ ShawnJ.Goff Eğer initramfs sağlıyorsak, çekirdek neden init başlatılamamasından şikayet ediyor?
Pratik Singhal

4
@ ps06756 Eğer initramfs varsa, bu sorulan gibi "yalnız" çekirdek değil. İnitramfs bir init varsa, çekirdek şikayet etmez.
Shawn J. Goff

18

Ne istediğini tam olarak anladığını sanmıyorum, ama Linux From Scratch projesine bakmak isteyebilirsin .


LFS, asgari bir sistemin nasıl inşa edileceğini bulmak için iyi bir fikir olacaktır. Veya MINIX'e bakabilirsiniz (ve kitabı okuyabilirsiniz ). Veya farklı bir giriş için (daha az iş, ancak daha az bilgilendirici), aptitude search '?essential'Debian veya Ubuntu'da “temel” ( ) etiketli paketlere bakın ve her birinin ne yaptığını (en az minimumdan biraz daha fazlası var) anlayın.
Gilles 'SO- kötülük yapmayı bırak'

12

Bir sürü başka program yüklemeden bir çekirdeği mevcut bir sistemin üzerine "çekirdeği" yükleyip yükseltemeyeceğinizi mi soruyorsunuz?

Linux çekirdeği genellikle adında bir ikili dosyadır vmlinuz-x.x.x-x-nameiçinde bootx'in bir sürüm numarası vardır (genellikle sabit diskin başında ayrı bir küçük bölümdür) dizinine. "name", derleme zamanında ayarlanabilecek çekirdek için seçilen bir addır, çekirdeğin ne tür bir makine veya mimariye ya da başka bir nedenden dolayı olduğunu belirlemek için kullanabilirsiniz.

Boottime'da, tipik olarak GRUBBIOS ROM tarafından çağrılan MBR'deki boot koduyla ç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ışan çekirdekle değiştirebilirsiniz. Ancak, GRUBönyüklemek için birden fazla çekirdek seçmenize izin veren harika bir özelliğe sahiptir. Bu yüzden, ek çekirdeğinizi bu listeye eklemek oldukça akıllıca olur, fakat orijinal bilinen çalışma çekirdeğini işler yanlış giderse saklar.

Neredeyse tüm dağıtımlar, aygıt sürücülerinin ayrı dosyalarda bulunduğu "modüler" bir çekirdek oluşturduğuna inanıyorum. Bu nedenle çoğu çekirdeğin önyükleme sırasında kullanılabilir sürücülerin bulunduğu bir dosya sistemine ihtiyaç duyulur ve bu bir "initrd" (ilk RAM diski) veya "initramfs" içindir. GRUBçekirdeği bellekteki bir yere, initrd'ı farklı bir yere yükler ve çekirdeğe initrd'in nerede olduğunu söyleyerek çekirdeğe atlar ve Linux'u başlatır.

Sürücüler ayrıca çekirdeğe "yerleştirilebilir" olabilir ve bu nedenle önyükleyici vmlinuzgörüntüyü yüklediğinde otomatik olarak yüklenip kullanılabilir . Farklı sistemler üzerinde çalışmak üzere olan çekirdekler (çoğu dağıtımda olduğu gibi) genellikle çekirdeğe yerleşik olanları en aza indirger çünkü mevcut donanım önyükleme işleminde daha sonra taranır ve yalnızca mevcut donanımı temsil eden modüller yüklenir.

İnitrds 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 çekirdeğe ç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ı initrd.img-x.x.x.x-nameçekirdeğe benzer şekilde adlandırılır ve çekirdek gibi önyüklemeden sonra değiştirilebilir ve en iyi uygulama, yeni çekirdeğinize + initrd başarıyla çizilinceye kadar bilinen bir initrd silmeyeceğinizi belirtir.

Umarım bu biraz içerik sağlar.

Yüklü ek programları bulunmayan ya da çok az yüklü bir "barebones" Linux kurulumu arıyorsanız, en sevdiğim seçenek her zaman Debian netinstgörüntüsünü yüklemektir . Neredeyse komut satırı metin konsolunu çalıştırmak için gereken en temel araçlara ve nanometin düzenleyicisine sahip olursunuz .


5

Tek çalıştırılabilir rootfs

Mutlak minimum sistem Single Application Linux'ta/init açıkladığım gibi tek bir program çalıştırıyor | Süper kullanıcı

Minimal Linux Live

https://github.com/ivandavidov/minimal

Daha ilginç bir etkileşimli sistem için, bu (çoğunlukla eğitici) küçük bir senaryodur:

  • çekirdek ve meşgul kutusu kaynağını indirir
  • onları derler
  • önyüklenebilir bir 8Mb ISO üretiyor

Daha sonra ISO sizi meşgul kutusuyla minimal bir kabukta bırakır.

QEMU ile kolayca sisteme önyükleme yapabilirsiniz.

Çekirdek kaynak dizininden çalıştırmaya izin verecek şekilde 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 sistemde bir QEMU Penceresinde kalacaksınız. Muhteşem.

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

Ubuntu 16.04'te test edilmiştir.

Buildroot

https://buildroot.org/

Yöneten geniş Makefile betikleri kümesi:

  • GCC çapraz derleme alet zinciri
  • çekirdek derleme
  • bootloader derlemesi
  • rootfs üretimi
  • GTK gibi karmaşık şeyler de dahil olmak üzere kaynak ağacında tonlarca paket indirme / derleme 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.

Sıfırdan X11'i oluşturmak için tarifleri bile var: X11'i kendi Linux Buildroot sistemime nasıl kurarım?

Profesyonel şeyler

Alp Linux

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

Bir web sitesinden önceden derlenmiş ikili dosyalar sunan bir paket yöneticisine katıştırılmış dağıtım.

Ayrıca bakınız


3

İkinci Shadur’un önerinizi, ellerinizi Linux From Scratch yönteminden kirli hale getirmeniz gerektiğini düşünüyorum.
Ayrıca, benzer bir şey, Pocket Linux deneyin .

Pocket Linux Guide, sadece kaynak kodunu ve birkaç disketi kullanarak küçük bir konsol tabanlı GNU / Linux sistemi kurmayı göstermektedir. Sistemlerinin, dağıtıma özgü özelliklerin ve araçların örtüsü altında nasıl çalıştığını daha iyi anlamak isteyen Linux kullanıcıları için hazırlanmıştır.


2
Aklı başında hiç kimsenin / ya / LFS veya PocketLinux'u her türlü önemli üretim görevi için önermediğini unutmayın - her şeyin işleyişinin nasıl çalıştığını öğrenmek için iyidirler, ancak dağıtımların çoğunun tam bir takım araç ve donanım setiyle gelmesinin bir nedeni vardır. çoğu şey için.
Shadur

3

Her zamanki 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. Tipik olarak, çekirdek ROM veya Flash bellekten yüklenir ve söz konusu aygıt için özelleştirilmiştir (genellikle modüller olarak yüklenmek yerine çekirdeğe derlenmiş gerekli sürücüler ile).

initÇekirdek değiştirilmediği sürece, 'init' süreci (zorunlu olarak çağrılmayan , ancak işlem 1 olarak çekirdek tarafından başlatılan ve zorunlu olmayan herhangi bir işlemin otomatik ebeveyni) olmak için en az bir kullanıcı alanı programı mevcut olmalıdır. basitçe özelleştirilmiş değil) bunu gerektirmez.

Çalışmayı Linux tabanlı bir cihaza sahip bir kabuğa sahip olmak kesinlikle gerekli değildir, ancak gelişimi çok daha kolaylaştırabilir!


2

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

Öğrenmek istiyorsanız diğer cevaplar yararlıdır, ancak durum bu olmayabilir: p

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.