• Průvodce vytvořením jednoduchého OS typu UNIX. Jak napsat operační systém od začátku

    Dříve nebo později každý uživatel Linuxu přemýšlí o vytvoření vlastní distribuce. Někteří tvrdí, že si můžete „všechno přizpůsobit pro sebe“. Jiní si stěžují, že mezi distribucemi již prezentovanými ve Vetku není žádná ideální. A mají prý superkoncepční nápady pro svůj vlastní systém. Proč jsem začal s celou tou psychologií? Aby hned utnul kyslík začátečníkům hrajícím si s Linuxem, kteří nemají co dělat. Pokud již uvažujete o vytvoření OS, domyslete až do konce. Tak,

    Chci vytvořit OS založený na linuxu.
    Varuji vás hned: bylo by 18. století, všichni ti, kteří za základ své budoucí systém volí jinou vyvinutou distribuční stavebnici (a nedej bože oblíbenou...) šibenice by počkala. Příspěvek je o vytvoření systému od nuly, což znamená všemožné Slax a Linux Mint nedotkneme se.

    Krok 1: Vyberte médium
    Existuje několik možností: buď se váš operační systém spustí z LiveCD, nebo z pevný disk nebo z flash disku. Okamžitě udělám rezervaci: Neřeknu o tom ani slovo HDD, protože je mnohem pohodlnější vytvořit flexibilní distribuční sadu ze série „Všechno nosím s sebou“, nebo uzamčenou distribuční sadu na optickém disku. Pokud se naučíte, jak vytvořit systém LiveCD nebo LiveUSB, nebudou s instalací na pevný disk žádné problémy.

    Pro případ, připravte se čistý flash disk, CD a nakonec nainstalujte Virtualbox.

    Krok 2 Kompilace jádra
    Pokud jde o vydání třetího linuxového jádra, tento krok povzbudí další vývoj... Takže potřebujeme zdrojové kódy jádra. Každý uživatel ví, že je lze získat z kernel.org. V žádném případě, slyšíte?, nikdy nezašroubujte cizí jádro, které jste nezkompilovali vy, do svého systému!

    Protože moje lenost šla mimo rozsah, vytvořil jsem složku / linuxkernel a rozbalil archiv se zdroji tam. Přihlásil jsem se jako root a provedl jsem následující:

    cd /linuxkernel
    udělat menuconfig

    V zásadě lze jádro nakonfigurovat třemi způsoby: make config (online konfigurace), make menuconfig (pseudografická konfigurace pomocí ncurses) a make xconfig (grafická konfigurace). Pointa je, že make config vám zničí náladu na dlouhou dobu, protože. bude klást všechny možné otázky na všechny aspekty všech témat. Problém s make xconfig nenajdeme u každého, ale setkal jsem se a stále nacházím. Pokud máte chuť to udělat přes X, přijďte na to sami. Nejlepší možností je udělat menuconfig. Tato věc vám otevře pseudografické rozhraní, přes které si můžete jádro upravit po svém. Tato věc vyžaduje knihovnu ncurses, která se snadno instaluje.

    V zásadě platí, že pokud váš mozek Linuxu vůbec rozumí, pochopíte i konfiguraci. Proces je to zajímavý, možností je opravdu hodně a pomoci, i když anglický jazyk, ale přesto potěší svou dostupností a jednoduchostí.

    Stále však musíte být nasměrováni. Přejděte na Souborové systémy ---> a vložte požadované hvězdičky. Písmeno M znamená, že podpora konkrétního ovladače se provádí připojením externího modulu k jádru (nesnáším je!). Pro čtení disků potřebujeme také podporu isofs. Souborové systémy ---> Souborové systémy CD-ROM/DVD ---> Podpora souborového systému CDROM ISO 9660. Stále můžete podporovat staré systémy dos.

    Podivní vývojáři Mandriva zapomněli povolit souborové systémy ---> Souborové systémy DOS/FAT/NT ---> podporu zápisu NTFS a na jedné z jejich distribucí jsem měl problém s přístupem ke starému oddílu Windows.

    Podívejte se Typ a vlastnosti procesoru ---> Rodina procesorů, bylo mi doporučeno zvolit Pentium-MMX.

    Také se ponořte do Ovladače zařízení, je to užitečné. Pro zábavu si tam můžete vše vybrat a sestavit si jádro o váze > 50 MB.

    Dále. Jádro, po načtení samo, musí načíst ve skutečnosti systém. Buď z vlastních kompilovaných souborů (používaných ve vestavěných systémech), nebo z archivu CPIO komprimovaného něčím, nebo z Initrd. Toto není DOS pro vás, zde se nebudete moci okamžitě odkázat na nějaký init "nový soubor v kořenovém adresáři disku nebo flash disku. Ve skutečnosti to bude fungovat, neposlouchejte strýčka Annixe! To je špatně, i když na rozdíl od toho už je na internetu silná polemika. V našem systému použijeme initrd, protože je to pohodlné a nezpůsobí výrazy IO-partne archivů od třetích stran, archivy IO.

    Ach ano, zkompilujte jádro pomocí příkazu

    Pokud máte x86, najdete ho na /linuxkernel/arch/x86/boot/bzImage.

    Pro drsné programátory Čeljabinsk můžete použít křížovou kompilaci ...

    Vytvořte Ramdisk.

    Nyní potřebujeme initrd s nainstalovaným jednoduchým shellem. Budeme používat busybox, protože tato nyasha dokáže cokoliv. Ukradneme cestu Robertu de Leovi, tvůrci Movixu (dokonce bych si ho začal vážit, nebýt transcendentní lásky k Perl):

    dd if=/dev/zero of=/dev/ram0 bs=1k count=5000 - Vytvořte Ramdisk v RAM našeho počítače.
    mke2fs -m0 /dev/ram0 5000 - Formátování Ramdisk na systému Ext2
    mkdir /distro - Vytvořte složku
    mount /dev/ram0 /distro - Připojte do složky /distro

    Vše, nyní tu máme Ramdisk s kapacitou 5 MB. Můžete udělat více, ale nemusíte. Na rozdíl od Thomase Mathejiska nebudu cpát initrd moduly Squashfs komprimovanými LZMA. Vše, co je potřeba, bude zkompilováno s jádrem. Ano, není to příliš logické a správné, ale průšvihů je stokrát menší. A zvláště pro ty, kteří tento přístup odsuzují, můžete v jádře povolit možnost modularity: Enable loadable module support.

    V našem Ramdisku, namontovaném v / distro je taková složka ztraceno + nalezeno. Je to proto, že jsme ji naformátovali v ext2. V žádném případě by se neměla smazat, i když zde pravděpodobně nepomůže, obraz je opraven. Nejdříve bychom dali busybox ...

    Instalace Busyboxu
    Proč mají takové skvělé projekty tak podělané weby? I když... už je vlastně jedno, jestli se zdroje stáhnou a úspěšně rozbalí do složky /busybox.

    Busybox můžete nakonfigurovat stejným způsobem:

    cd /busybox
    udělat menuconfig

    Pokud stále nechápete, co to je, vysvětlím. Busybox nahrazuje tuny unixových aplikací uložených ve složkách /bin, /sbin, /usr/bin, /usr/sbin. Místo toho se vytvoří pouze jedna aplikace: /bin/busybox a ve výše uvedených složkách se na ni vytvoří hromada odkazů. Nainstalujte busybox pomocí následujícího příkazu:

    make CONFIG_PREFIX=/instalace distribuce

    Busybox také z nějakého důvodu vytvoří soubory /sbin/init a /linuxrc, aby se váš systém spustil správně. Ale nebyly vytvořeny všechny potřebné složky. Takže vše dokončíme rukama a vytvoříme:

    /distro/atd
    /distro/lib
    /distro/dev
    /distro/mnt
    distro/proc
    /distro/root
    /distro/tmp
    /distro/root

    Pokud jste na něco zapomněli, pamatujte, protože Tyto adresáře je těžké zapomenout.

    Vše by bylo v pořádku, ale busybox vyžaduje ke svému fungování knihovny, které je nutné zkopírovat do naší distribuce. Je velmi snadné zjistit, které:

    ldd /distro/bin/busybox

    Program nám ukáže knihovny potřebné pro náš shell. Okamžitě říkám: linuxová brána je vytvořena jádrem a nelze ji zkopírovat.

    Při kopírování knihoven můžete odříznout informace o ladění (jak radí Roberto):

    objcopy --strip-debug odkud

    Vytváření Linuxu z Linuxu

    Musíte vytvořit několik systémových textových souborů:

    Potřebujeme /etc/inittab. Překvapím vás: na začátku života systém ani neví, co je Root. Máme dokonce nejmenovaného uživatele, ale soubor celosystémových nízkoúrovňových funkcí (ONF) musí být přítomen. Pilotní obsah souboru je následující:

    # Úplně první soubor, který se spustí, /sbin/init poté.
    ::sysinit:/etc/rc.d/rc.S

    # Spusťte shell v konzole.
    ::respawn:-/bin/sh

    # Příkazy, které se mají provést před vypnutím a restartem.
    ::vypnutí:/sbin/swapoff -a >/dev/null 2>&1
    ::vypnutí:/bin/umount -a -r >/dev/null 2>&1

    Další soubor je /etc/fstab. Toto je tabulka, která popisuje, co a kam namontovat při bootování. Ta věc je zbytečná! Potřebujeme připojit proc, jinak nebude fungovat vůbec nic, takže do souboru zapíšeme:

    žádné /proc proc výchozí 0 0

    Mount také potřebuje /etc/mtab. Vytvořte jej a nechte jej prázdný.

    Ale mount udělá to, co potřebuje, jen když ho o to výslovně požádáme. A zeptáme se ve stejném spouštěcím souboru /etc/rc.d/rc.S (rc.d je složka). Zdvořile se ptáme:

    /bin/mount -av -t nonfs

    Potřebujeme také profilový soubor (b) (a) sh, obecně existuje svoboda pro představivost. Vytvořte soubor /etc/profile a vyplňte jej následujícím:

    PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:"
    MENŠÍ=-MM
    TERM=linux
    HOME=/root
    PS1=">"
    PS2=">"
    ignoreeof=10
    export PATH ZOBRAZIT MENEJ TERMÍN PS1 PS2 HOME ignorovat

    Budete také potřebovat soubor /etc/shell, který označuje, že existuje shell:

    /bin/sh
    /bin/popel
    /bin/bash

    To je vlastně vše. Náš Ramdisk můžeme zapsat do souboru.

    mkdir /os - složka pro "připraveno".
    umount /dev/ram0 - odpojí část paměti RAM.
    dd if=/dev/ram0 of=/os/initrd bs=1k count=5000 - vytvořit soubor.
    gzip /os/initrd - komprimuje soubor initrd

    Vytvořte spouštěcí flash disk

    "Cílová čára" našeho malého vývoje. Vezmeme USB flash disk, vložíme, naformátujeme ve vfatu (lze i v ext, ale nezapomeňte, že ne všichni uživatelé Windows se ještě zastřelili).

    Na flash disku vytvořte spouštěcí složku, obsahuje složky initrd a kernel.

    Ze složky / os zkopírujte komprimovaný Ramdisk do složky boot / initrd na jednotce flash, nazvěte ji „main.gz“. Ze složky se zdroji jádra zkopírujte bzImage do složky boot / kernel na USB flash disku, nazvěte ji „main.lk“. Získáváme soubory bootloaderu Syslinux (na internetu nebo z jiné distribuce: zde na tom nezáleží), konkrétně syslinux.bin, syslinux.boot, syslinux.cfg. Zkopírujeme je do kořenového adresáře našeho flash disku. Do souboru syslinux.cfg zapíšeme něco takového:

    výchozí mm
    výzva 1
    časový limit 100
    štítek mm
    jádro /boot/kernel/main.lk

    štítek mc
    jádro /boot/kernel/main.lk

    štítek cm
    jádro /boot/kernel/custom.lk
    připojit initrd=/boot/initrd/main.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
    štítek cc
    jádro /boot/kernel/custom.lk
    připojit initrd=/boot/initrd/custom.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
    štítek hd
    localboot 0x80

    Podpořili jsme tedy vlastní initrd a jádro, které lze pro účely experimentu připojit k naší distribuci.

    Pojďme zjistit, jaké zařízení je náš flash disk v systému (můžete spustit mount bez parametrů a uvidíte). Toto je buď /dev/sdb1 nebo /dev/sdc1 nebo /dev/sdd1. Před zahájením instalace se vyplatí flash disk odpojit.

    Nainstalujte syslinux (pokud balíček není v systému, apt-get install syslinux):

    syslinux -d cesta_zařízení

    Soubor ldlinux.sys by se měl objevit v kořenovém adresáři flash disku. Pokud ano, pak syslinux.bin, syslinux.boot již nejsou potřeba.

    Neřeknu vám, jak nastavit BIOS na bootování z USB flash disku – je to snadné. Jen podotknu, že je velmi vhodné vytvořit si složku /boot/initrd/init, do které můžete připojit /boot/initrd/main pro další práci s ní. Jen ho nezapomeňte dekomprimovat a zkomprimovat pomocí gzip.

    Dobře, teď je po všem.

    Jako jsem vám právě řekl, jak vytvořit systém Linux od nuly. Snadné, že? Poté můžete upravit skript /sbin/init, protože vás čeká ještě spousta práce! Budete muset napsat skript pro připojení flash disku, který chrootuje do kořenového adresáře. V opačném případě budete nuceni pracovat s oddílem 5 MB ReadOnly. Ale to je úplně jiný příběh.

    Pokud půjdete k věci...

    OS je věc, která implementuje multitasking (obvykle) a spravuje distribuci zdrojů mezi těmito úkoly a obecně. Je potřeba zajistit, aby se úkoly nemohly vzájemně poškozovat a pracovat v různých oblastech paměti a pracovat postupně se zařízeními, alespoň to tak je. A také musíte poskytnout možnost přenášet zprávy z jednoho úkolu do druhého.

    Jiný OS, pokud je k dispozici dlouhodobá paměť, musí k němu poskytovat přístup: tedy poskytovat všechny funkce pro práci se souborovým systémem. Je to minimum.

    Téměř všude musí být úplně první zaváděcí kód napsán v assembleru – existuje spousta pravidel o tom, kde by měl být, jak by měl vypadat, co by měl dělat a jakou velikost by neměl přesáhnout.

    Pro PC je potřeba napsat bootloader na asma, který zavolá BIOS a který by bez překročení čtyř stovek bajtů měl něco udělat a spustit hlavní OS - přenést řízení do hlavního kódu, který už bude v blízké budoucnosti možné psát v C.

    Pro ARM musíte vytvořit tabulku přerušení na asma (reset, různé chyby, přerušení IRQ, FIQ atd.) a přenést řízení na hlavní kód. I když v mnoha vývojových prostředích je takový kód dostupný pro téměř jakýkoli řadič.

    To znamená, že je k tomu nutné:

    1. Znát assembler cílové platformy.
    2. Znáte architekturu procesoru a všechny druhy servisních příkazů a registrů, abyste jej mohli nakonfigurovat tak, aby pracoval v požadovaném režimu. Na PC se jedná o přechod např. do chráněného režimu nebo do 64bitového ... Na ARMu je to nastavení taktů jádra a periferií.
    3. Vědět přesně, jak se OS spustí, kam a jak je potřeba vložit kód.
    4. Umět jazyk C - v asma je těžké napsat velký kód bez zkušeností, ještě složitější bude jeho údržba. Proto je nutné napsat jádro v C.
    5. Zjistěte, jak OS funguje. No, v ruštině je spousta knih na toto téma, i když nevím, jestli jsou všechny dobré.
    6. Mějte hodně trpělivosti a vytrvalosti. Budou tam chyby a bude potřeba je najít a opravit. A také budete muset hodně číst.
    7. Mít hodně a hodně času.

    Dále. Řekněme, že jste něco napsal. Je potřeba to otestovat. Buď potřebujete fyzické zařízení, na kterém budou experimenty probíhat (debug board, druhý počítač), nebo jeho emulátor. Druhá je obvykle jednodušší a rychlejší. Pro PC například VMWare.

    Článků na toto téma je na internetu také dost, pokud budete dobře hledat. A také existuje mnoho příkladů hotových OS se zdrojovými kódy.

    I se silnou touhou se dokonce můžete podívat na zdroje starého jádra NT-systémů (Windows), a to jak samostatně (které zveřejňuje microsoftware, s komentáři a různými druhy referenčních materiálů), tak ve spojení se stejnými starými operačními systémy (unikly).

    Nejprve se naučte programovat. Je nutná znalost assembleru; důrazně se také doporučuje být si vědom dalších další jazyky programování nižší úrovně jako C.

    Rozhodněte se, na kterém zařízení chcete zavést operační systém. Může to být CD, DVD, flash disk, pevný disk nebo jiný počítač.

    Rozhodněte se, jaký chcete mít operační systém. Měla by to být plná verze OS GUI uživatelské rozhraní (GUI) nebo možná něco více minimalistického? Před zahájením procesu musíte vědět, kterým směrem se vydat.

    Zkontrolujte, kterou procesorovou platformu bude váš operační systém podporovat. AI-32 a x86_64 jsou dvě nejběžnější verze pro osobní počítače, takže je lze považovat za nejlepší volbu.

    Rozhodněte se, zda dáváte přednost tomu, abyste vše dělali sami od začátku, nebo zda existují jádra, na kterých byste chtěli stavět. Linux From Scratch je projekt pro ty, kteří si chtějí například vytvořit vlastní distribuci Linuxu.

    Vyberte si, zda chcete použít svůj vlastní bootloader nebo předem sestavený Grand Unified Bootloader (GRUB). Protože kódování vlastním programem bootování vyžaduje rozsáhlé znalosti počítačového softwaru a BIOSu, což může posunout plán programování živého jádra.

    Rozhodněte se, jaký programovací jazyk budete používat. Samozřejmě je dokonale možné vyvinout OS v jazyce, jako je Pascal nebo BASIC, ale je lepší ho napsat v C nebo v assembleru. Assembler je naprosto nezbytný, protože některé důležité části operačního systému vyžadují znalost tohoto konkrétního jazyka. C++ na druhou stranu obsahuje klíčová slova nutné ke spuštění plné verze OS.

    • Chcete-li sestavit OS pomocí kódu C nebo C++, budete samozřejmě používat jeden kompilátor za druhým. To znamená, že byste si měli přečíst manuál/pokyny/dokumentaci pro vybraný kompilátor C/C++, který je dodáván se softwarem nebo je dostupný na webových stránkách distributora. Budete se muset naučit spoustu složitých věcí o kompilátoru a abyste mohli zlepšit C++, budete se muset naučit jeho schéma a ABI. Očekává se, že budete rozumět různé formáty spustitelné úlohy (ELF, PE, COFF, běžné binární soubory atd.) a všimněte si, že nativní formát Windows PE (.exe) je chráněn autorským právem.
  • Vyberte aplikační programovací rozhraní (API). Jednou sbírkou dobrých API je POSIX, jak je dobře zdokumentováno. Všechno Unixové systémy mít alespoň částečnou podporu POSIX, takže by bylo triviální připojit unixové programy k vašemu operačnímu systému.

    Rozhodněte se o designu. Existují monolitická jádra a mikrojádra. Monolitická jádra provozují všechny služby v jádře, zatímco mikrojádra mají malé jádro kombinované s vlastní implementací služby. Obecně jsou monolitická jádra rychlejší, ale mikrojádra mají lepší izolaci a ochranu proti možným poruchám.

    Zvažte vývoj a týmovou práci. Budete tedy potřebovat méně času na vyřešení velké problémy, což vám umožní vytvořit kvalitnější operační systém za kratší dobu.

    Nemažte svůj pevný disk úplně. Pamatujte, že formátování disku trvale vymaže všechna vaše data! Pomocí GRUB nebo jiného správce duplikujte spouštění počítače z jiného OS, dokud nebude vaše verze plně funkční.

    Začněte v malém. Než přejdete ke komplexním prvkům, jako je správa paměti a multitasking, věnujte nejprve pozornost maličkostem, jako je zobrazení textu a přerušení.

    Uložit záloha nejnovější pracovní verze. To dává jistý klid v případě, že se něco absolutně pokazí současná verze váš OS nebo novější doplňky. V případě, že se váš počítač porouchá a není možné spustit, jak sami chápete, je to skvělá příležitost mít k dispozici druhou kopii, abyste mohli řešit existující problémy.

    Otestujte svůj nový operační systém na virtuálním počítači. Místo restartování počítače pokaždé, když provedete změny nebo přenesete soubory z pracovního počítače do testovacího počítače, můžete použít aplikaci ke spuštění operačního systému ve virtuálním počítači, zatímco váš aktuální operační systém běží dál. Aplikace VM zahrnují VMWare (který má také volně dostupný server), alternativní software s otevřeným zdrojovým kódem, Bochs, Microsoft Virtual PC (není kompatibilní s Linuxem) a XVM VirtualBox.

    Vydat verzi vydání. To umožní uživatelům informovat vás o možných chybách ve vašem operačním systému.

  • Operační systém by měl být také uživatelsky přívětivý, takže nezapomeňte přidat užitečné funkce, který se stane nedílnou součástí vašeho designu.

    • Po dokončení vývoje zvažte, zda chcete kód zpřístupnit veřejnosti, nebo k němu nastavit soukromá práva.
    • Pokud chcete, aby byl váš systém životaschopný, ujistěte se, že bezpečnostní funkce jsou vaší nejvyšší prioritou.
    • Nespouštějte projekt vývoje operačního systému za účelem učení se programování. Pokud neznáte C, C++, Pascal nebo jiné relevantní jazyky a funkce, včetně typů ukazatelů, nízkoúrovňových bitových operací, přepínání bitů, inline assembler atd., pak ještě nejste připraveni vytvořit OS.
    • Procházejte portály jako OSDev a OSDever, které vám pomohou zlepšit váš vlastní operační systém. Vezměte prosím na vědomí, že u většiny problémů komunita OSDev.org upřednostňuje, abyste k obsahu stránky přistupovali sami, než abyste se připojili k fóru. Pokud se přesto rozhodnete vstoupit do řad členů fóra, musí pro to existovat určité předpoklady. Musíte mít důkladnou znalost C nebo C++ a x86 assembleru. Měli byste také rozumět obecným a komplexním konceptům programování, jako jsou propojené seznamy, fronty atd. Komunita OSDev ve svých pravidlech výslovně uvádí, že nikdo nebude hlídat nové programátory. Pokud se snažíte vyvinout OS, je samozřejmé, že jste „bůh“ v programování. Musíte si také přečíst příručku k procesoru pro architekturu dle vašeho výběru; např. x86 (Intel), ARM, MIPS, PPC atd. Takový odkaz na strukturu procesoru lze snadno najít vyhledáním Google ("Intel Manuals", "ARM manuals" atd.). Neregistrujte se na fóru OSDev.org, abyste mohli klást zřejmé otázky. To povede pouze k odpovědím jako „Přečtěte si ten zasraný manuál“. Pro začátek byste si měli zkusit přečíst Wikipedii, manuály pro různé nástroje, které budete používat.
    • Zkontrolujte potenciální hluchá místa a další chyby. Chyby, zablokování a další problémy mohou ovlivnit návrh vašeho operačního systému.
    • Pokud chcete jednodušší způsob, představte si linuxové distribuce jako Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd nebo SUSE Studio a SUSE KIWI. Operační systém, který vytvoříte, je však ve vlastnictví společnosti, která službu poprvé představila (ačkoli máte právo jej volně šířit, upravovat a provozovat, jak chcete, pod licencí GPL).
    • Dobrým řešením by bylo vytvořit zcela nový oddíl pro vyvíjený operační systém.

    Varování

    • Neopatrné přepisování OS na pevný disk jej může zcela poškodit. buď opatrný
    • Nebudeš úplně připravený systém Na dva týdny. Začněte se zaváděcím operačním systémem a poté přejděte k zajímavějším věcem.
    • Pokud uděláte něco neuváženého, ​​jako je zápis náhodných bajtů na libovolné I/O porty, zničíte si operační systém a (teoreticky) můžete spálit váš hardware.
    • Nečekejte, že sestavit kvalitní operační systém bude snadné. Existuje mnoho složitých vzájemných závislostí. Například, aby byl operační systém schopen obsluhovat více procesorů, musí mít váš správce paměti zavedeny „uzamykací“ mechanismy, které zabrání dalším procesorům v přístupu ke stejnému zdroji ve stejnou dobu. Použité "bloky" předpokládají přítomnost plánovače, aby bylo zajištěno, že pouze jeden procesor přistupuje k kritickému zdroji v daném okamžiku, zatímco všechny ostatní jsou nečinné. Činnost plánovače však závisí na přítomnosti správce paměti. Toto je příklad závislosti na uváznutí. Ne standardním způsobem vyřešit takové problémy; od každého tvůrce operačního systému se očekává, že bude dostatečně zručný, aby přišel s vlastním řešením.

    Prameny

    Co budete potřebovat

    • Počítač
    • Procesor, na kterém budete stavět
    • Dostatečný RAM(RAM) pro virtuální počítač
    • Primární OS (používá se k vývoji zdrojového kódu assembleru (atd.) a sestavení a balení brzy; váš vlastní OS se nakonec stane primárním)
    • Editor syntaxe barevného kódu (používá se, když není k dispozici integrované vývojové prostředí)
    • Kompilátor
    • CD/DVD mechanika
  • Ilja Alexandrov

    Sestavte si svůj vlastní OS založený na Linuxu

    Existují stovky distribucí Linuxu a není známo, kolik dalších se objeví. Desítky společností a tisíce programátorů soutěží o vytvoření nejlepšího linuxového projektu a mezitím se každý zkušený uživatel může stát autorem domácího PC systému, který není horší než produkty gigantů IT průmyslu.

    Za léta práce s Linuxem jsem použil obrovské množství různých distribucí: Mandriva, Fedora, SlackWare, Debian, Ubuntu a mnoho dalších. Některé projekty se mi líbily více, některé méně. Ale ve všech distribucích se člověk nevyhnutelně musel vypořádat s vážnými nedostatky, které velmi ztěžovaly práci. Jeden je příliš náročný na zdroje, druhý nepodporuje vše potřebné vybavení, třetí postrádá různý software. Tehdy jsem si vzpomněl na známou východní moudrost: když něco potřebuješ udělat dobře, udělej to sám.

    Linux od nuly

    Nejsem sám, kdo se rozhodl začít budovat vlastní verzi Linuxu - OS, ve kterém se za základ bude brát základní část systému a jádro, kde ale nebude ani jeden kilobajt navíc od vývojáře, tedy od vás. Velké množství linuxových distribucí, které nesplňují požadavky uživatelů, přimělo Gerarda Beekmanse k vytvoření distribuce, která každému umožní postavit systém, který bude mít pouze komponenty a funkce, které potřebuje.

    Touha talentovaného programátora vyústila v projekt Linux from Scratch (www.linuxfromscratch.org), zkráceně LFS. Tento projekt vám umožňuje sestavit od začátku, ze zdrojových kódů, váš operační systém založený na Linuxu. Kompilace LFS probíhá na počítači s již nainstalovaným systémem Linux, vhodné je však i „pokročilé“ Live-CD, např. Knoppix.

    Současně může být systém Linux použitý pro sestavení jakýkoli - pouze přítomnost kompilátoru a systémové knihovny. Linux From Scratch lze jen stěží nazvat distribucí v obvyklém slova smyslu – je to něco jako pomocný software, který vám spolu se základní částí operačního systému umožní vytvořit si vlastní, unikátní verzi OS.

    Jak víte, Linus Torvalds vyvíjel svůj operační systém pod heslem "Just for fun!" - tedy jen tak pro zábavu. Je třeba přiznat, že LFS se na serverech opravdu často nenachází, zpravidla tento systém používají počítačoví nadšenci. Instalace a práce s Linuxem od nuly vám pomůže pochopit vztah mezi komponentami OS, což je užitečné pro váš vlastní vývoj linuxové distribuce, a to nejen založené na LFS. Proto je LFS z velké části určen pro ty lidi, pro které je proces budování vlastní distribuce vzrušující a zajímavý – a věřte, že takových lidí je spousta.

    Pokud jste tedy připraveni strávit celý den (nebo i více) návrhem systému, pak doporučuji stáhnout si z webu (2) LFS-packages-6.0, LFS-book a pokračovat ve čtení tohoto článku.

    Rozdělení disku a vytvoření stromu adresářů

    Pro lepší pochopení materiálu popisujeme celý průběh procesu obecně (viz obr. 1).

    V první fázi se disk rozbije pomocí již nainstalované distribuční sady nebo LiveCD. Na pevném disku je přidělen oddíl pro nový systém. Poté na tomto oddílu budete muset staticky zkompilovat všechny potřebné programy a systémové jádro. Dále se kořenový adresář změní na oddíl pevného disku přidělený pro náš nový operační systém. Budete muset kompilaci opakovat, ale tentokrát musí být software sestavován dynamicky (rozdíl mezi dynamickou a statickou kompilací bude popsán níže). Poslední krok zahrnuje vytvoření kritické knihovny glibc a konfiguraci nainstalovaného OS. Jak vidíte, nemusíte dělat nic zvlášť obtížného.

    Během celého procesu je vaším hlavním pomocníkem dokumentace z balíčku LFS-book, jejíž ruský překlad najdete zde: http://multilinux.sakh.com/download/lfsbook.tar.bz2 . Kniha podrobně popisuje každý krok vytváření operačního systému, takže pokud narazíte na problémy, nezapomeňte se podívat na tuto příručku (tento článek nemá nahradit tak rozsáhlou dokumentaci).

    tvoříme nová sekce- v mém případě je to /dev/hda5, protože oddíl /dev/hda1 je již obsazen pevným diskem Linuxový disk Slackware. Doporučuje se, abyste si nejprve vytvořili zálohu systému, abyste jej mohli v případě poškození obnovit, i když pravděpodobnost se blíží nule. A tady je, myslím, vše jasné: pro kořenový adresář přidělíme požadované množství (stačí 23 GB), prostor rovný dvojnásobku velikosti RAM pro swapovací oddíl, pokud si přejete, můžete vytvořit samostatné oddíly pro domovský adresář (/ home) a pro / boot. Mnohými oblíbená možnost rozdělení - alokace veškerého dostupného místa mínus swap do kořenového adresáře a následné vytvoření skutečného swapu - je však také docela přijatelná při sestavování LFS. Na autorově počítači Linux Slackware, což je nadřazený OS, i LFS používají stejný pevný disk, nicméně instalace LFS na jiný pevný disk také není obtížná.

    Vyberte souborový systém podle svého uvážení: nebyly žádné problémy s Ext3 a ReiserFS pod LFS. Fanoušci XFS ale budou muset být zklamáni – pokusy o to, aby Linux From Scratch fungoval s tímto FS, nebyly úspěšné.

    Nyní připojíme oddíl vyhrazený pro nový OS:

    $ mount /dev/hda5 /mnt/mylin

    Pro usnadnění si definujme proměnnou MYLIN:

    $ export MYLIN=/mnt/mylin

    Skvělé, pro další práci je lepší tvořit individuální uživatel mylin, kterému přidělíme vlastníka připojeného oddílu.

    $ useradd mylin

    $ chown -R mylin $MYLIN

    Musíte vytvořit strom adresářů v kořenovém adresáři nového oddílu:

    $ cd $MYLIN

    $ mkdir –p bin boot dev etc home lib mnt opt ​​​​root sbin usr/(X11R6,local) var

    V adresářích usr, usr/X11R6, usr/local vytvoříme potřebnou strukturu: podadresáře bin, etc, include, lib, sbin, share, src.

    Poté uděláme totéž pro adresáře /var a /opt budoucího systému:

    $ mkdir var/(cache,lib,local,lock,log,opt,run,spool)

    $ mkdir opt/(bin,doc,include,info,lib,man)

    Nezapomínejme, že existují hlubší hierarchie, jako je /usr/share/man/man1. Objem článku nám však neumožňuje uvést všechny informace o struktuře stromové struktury souborů, takže musíte buď použít dokument Filesystem Hierarchy Standard (dostupný na: http://linux-ve.net/MyLDP/file-sys/fhs-2.2-rus), nebo pečlivě prostudovat strukturu operačního systému Linux, který již máte nainstalovaný. Po přípravě pevného disku přistoupíme ke statické montáži.

    Statická montáž

    Proč používáme statickou montáž? Při statické kompilaci je zdrojový kód knihovny připojen ke kódu aplikace, což vede ke zvětšení její velikosti, ale zároveň je zachována integrita. Při dynamické kompilaci je knihovna v samostatném souboru, ke kterému mají aplikace přístup podle potřeby. Díky tomu všechny programy pracují s jednou verzí knihovny

    Ale když použijeme příkaz chroot k nastavení kořenového adresáře pro nově vybudovaný systém, „rodičovské“ knihovny, nainstalovaný systém, umístěný v /lib, /usr/lib a dalších, již nebude dostupný, takže dynamicky kompilované programy odmítnou fungovat, navíc kompatibilitu verzí nikdo nezaručí.

    Abyste tomu zabránili, vše, co potřebujete software pro náš budoucí systém jej nejprve zkompilujeme staticky. Začněme bash shellem. (Fanoušci ZSH nebo TCSH si mohou po instalaci systému nainstalovat své oblíbené interprety, ale jejich použití ve fázi budování není autorem LFS zamýšleno). Měli byste zkontrolovat, zda máte soubor /usr/lib/libcurses.a, a pokud ne, nainstalovat balíček ncursesdev. Všechny balíčky musí být sestaveny se statickými příznaky sestavení: "--enable-static-link", "--disable-shared" nebo "--static". Která každému vyhovuje konkrétní případ, lze nalézt v dokumentaci ke konkrétnímu balíčku nebo z výstupu konfiguračního skriptu spuštěného s volbou "--help".

    $ ./configure --help

    Aby nedošlo k záměně později staticky kompilovaných programů s "dynamickými" programy, vytvoříme pro ně speciální adresář:

    $ mkdir $MYLIN/stat

    Při sestavování a instalaci balíčků nezapomeňte přidat parametr "--prefix=$MYLIN/stat" pro přesun souborů do tohoto adresáře. A nakonec nainstalujte bash:

    $ ./configure --enable-static-link --prefix=$MYLIN/stat

    $make

    $ provést instalaci

    Stejným způsobem sbíráme i zbytek potřebných balíčků. : binutils, bzip2, textutils, texinfo, tar, sh-utils, gcc, grep, gzip, gawk, diffutils, fileutils, make, patch, sed, a ve skutečnosti linux-kernel.

    Ano, při kompilaci jádra nezapomeňte, že pro starší verze jádra (2.2.x-2.4.x) je potřeba použít gcc 2.95 a pro aktuální verzi 2.6.x se doporučuje použít gcc 3.x, aby nebyly problémy.

    Nezapomeňte se podívat do příslušných sekcí knihy LFS, říká o této a mnoha dalších nuancích. Obecně se kompilace jádra v LFS neliší od podobného postupu, který se provádí při použití distribuční sady nainstalované na HDD. Rozbalte zdrojový kód jádra do $MYLIN/usr/src/linux-2.6.xx a poté jej nakonfigurujte spuštěním:

    $ make menuconfig

    Proces konfigurace parametrů jádra byl na internetu mnohokrát popsán (6), není třeba se tím zabývat podrobněji. Dále zadáme do zdrojové složky jádra Linuxu následující příkazy:

    $ make bzImage

    $ vytvořit moduly

    Vše na $MYLIN/usr/src/linux-2.6.xx/arch/i386/boot/bzImage je nové jádro.

    Dále vytvoříme $MYLIN/etc/passwd a $MYLIN/etc/group. V prvním registrujeme zatím jediného uživatele - root s libovolným heslem a ve druhém skupiny uživatelů (pro začátek s jednou root skupinou bude také stačit).

    Tím jsou naše přípravy na další krok dokončeny a přecházíme k jemnější dynamické montáži.

    Dynamická sestava

    Nyní je potřeba změnit kořenový adresář na /mnt/mylin, kde budeme používat pouze staticky zkompilované utility – již se nebudeme moci uchýlit k pomoci nástrojů z „rodičovského“ OS. V konzoli zadáme příkaz:

    $ chroot $MYLIN/usr/bin/env -i

    >HOME=/root TERM=$TERM PS1='u:w$'

    >PATH=/bin: /usr/bin: /sbin: /usr/sbin: /stat/sbin

    >/stat/bin/bash --přihlášení

    Tímto příkazem jsme označili cesty k spustitelné soubory, typ terminálu, interpret a typ příkazového řádku.

    Aby některé programy fungovaly, musíte je nainstalovat souborový systém proc na novém systému.

    $ mount proc /proc -t proc

    Nastal nejdůležitější okamžik. Budování knihovny glibc. Je nejzodpovědnější, protože většina lidí pracuje bez ní. potřebné programy nebude a nemá smysl používat Linux bez základní knihovny. Budování glibc na druhou stranu často způsobuje spoustu problémů.

    Při sestavování jsme zadali parametr „--prefix=$MYLIN/stat“, takže při změně kořenového adresáře budou všechny staticky sestavené balíčky v adresáři /stat nového oddílu OS.

    Rozbalte tedy archiv glibc-2.x.x.tar.gz (například do adresáře /usr/src/) a přejděte do adresáře glibclinuxthreads. Zdrojový kód budeme muset mírně upravit kvůli tomu, že v této fázi není možné v systému identifikovat uživatele jménem (právě kvůli absenci glibc a dalších knihoven), a také kvůli tomu, že instalace glibc vyžaduje interpret Perl, který nemáme.

    Nahrazení jména uživatel root v souboru login/Makefile na jeho uid, tj. 0, a proměnná $PERL v souboru malloc/Makefile by měla být nahrazena cestou k interpretu - /usr/bin/perl - a během konfigurace bude jednoduše ignorována.

    $ /usr/src/glibc-2.x.x/configure --prefix=/usr --enable-add-ons --libexecdir=/usr/bin &&

    & udělat

    & provést instalaci

    $ make localedata/install-locales

    $ /stat/bash --login

    Pokud jste udělali vše správně, glibc se zkompiluje, ve výzvě se konečně objeví "root" a všechny programy lze dynamicky překompilovat.

    Dokončete instalaci jádra:

    $ make modules_install

    $ provést instalaci

    Chcete-li přesunout nové jádro do adresáře /boot, spusťte ještě jeden příkaz:

    $ provést instalaci

    Shromažďujeme všechny nainstalované a některé nové programy, nyní bez příznaků statické kompilace. Budeme potřebovat (v této fázi je velmi důležité nezapomenout sestavit vše následující) (viz tabulka 1).

    Tabulka 1. Požadovaná sada balíků pro montáž

    autokonf

    grep

    perl

    automobilka

    groff

    bash

    gzip

    procinfo

    bin86

    procps

    binutils

    méně

    pmsc

    bzip2

    reiserfs-progs

    diffutils

    libtool

    e2fsprogs

    lilo

    sh-utils

    stín

    soubor

    udělat

    syslogd

    fileutils

    makedev

    sysvinit

    findutils

    manuálové stránky

    flex

    moduly

    texinfo

    zírat

    ncurses

    textutils

    netkitbase

    utilit linux

    bizon

    síťové nástroje

    gettext

    náplast

    Po provedení dynamické rekompilace můžete odstranit adresář se staticky vytvořenými balíčky:

    $ rm -rf /stat

    Můžete si vydechnout a vypít kávu – to nejtěžší, rutina, zůstane za vámi. Pojďme k další krok– počáteční konfigurace našeho systému.

    Počáteční konfigurace systému

    Před pokračováním v konfiguraci upozorňuji, že všechny změny je třeba provést v souborech adresáře nového OS, nikoli rodičovský systém.

    Chcete-li nastavit systémový čas, vytvořte soubor /etc/sysconfig/clock obsahující pouze jeden řádek:

    UTC=0

    Nyní budou hodiny počítače zobrazovat čas ve vašem časovém pásmu – za předpokladu, že je hodnota času v BIOSu nastavena správně.

    Počítač pojmenujeme:

    echo "HOSTNAME=my_linux" > /etc/sysconfig/network

    Nyní určíme oddíly, které by měl systém připojit při spouštění v /etc/fstab:

    # souborový systém mount-point fs-type options dump fsck-order

    /dev/hda5 / ext3 výchozí 1 1

    /dev/hda3 swap swap pri=1 0 0

    proc /proc výchozí proc je 0 0

    Namísto /dev/hda3 a /dev/hda5 zapisujte své oddíly (root a swap), doplňte soubor v případě potřeby o přípojné body pro další oddíly pevného disku a CD-ROM.

    Nyní udělejme náš systém bootovatelný.

    Pokud kromě lFS používáte další Linuxové distribuce, nyní se musíte přihlásit starý systém- za tímto účelem provedeme příkaz:

    $exit

    Již v nadřazeném OS přidejte do souboru /etc/lilo.conf následující:

    # LFS

    image=/boot/bzImage

    Label=lfs

    kořen=

    Pouze ke čtení

    Je jasné, že „/boot/bzImage“ je cesta k systémovému jádru, které jste zkompilovali, a „partition“ je oddíl disku, kde se nachází kořenový adresář.

    Pokud neplánujete používat jiné operační systémy a distribuce Linuxu, pak okamžitě přejděte k nastavení LILO v LFS.

    V tomto případě by lilo.conf vypadal asi takto:

    boot=/dev/hda

    zpoždění = 40

    Kompaktní

    Vga=normální

    Root=/dev/hda1

    Pouze ke čtení

    Image=/boot/zImage-2.6.12

    Label=Linux

    Proveďte potřebné změny v závislosti na vaší konfiguraci. Aktualizujte bootloader pomocí příkazu:

    $ /sbin/lilo -v

    A pokud byly všechny předchozí kroky provedeny správně, ocitneme se v novém systému. Stále je však před námi dlouhá fáze „jemného“ ladění (zvláštní pozornost by měla být věnována bezpečnosti nového systému, protože LFS ve výchozím nastavení vypadá dost nejistě, jako každý nově nainstalovaný OS). Ale ručně sbírané Linux verze už máš.

    P.S

    Gerard Beekmans není jediný, kdo má nápad postavit si vlastní Linux. Další projekt, BYOLinux, vedený Jonathanem Thorpem, dnes ukončil svůj vývoj, ačkoli dokumentace, kterou napsal, zůstává aktuální i nyní, ale není tak podrobná jako kniha LFS a není přeložena do ruštiny. Hlavním rozdílem Johnovy metody je to, že knihovna glibc je přenesena z nadřazeného systému do podřízeného systému bez rekompilace, což není tak efektivní, ale zabraňuje mnoha problémům se sestavováním. Touhu cítit se jako návrhář OS také zažívají někteří uživatelé FreeBSD.

    Nyní je to docela možné - na http://ezine.daemonnews.org/200302/fbsdscratch.html je článek o sestavení FreeBSD ze zdroje jako celku - od distribucí po porty a metodou ne podobnou obvyklému "přestavbě" systému, ale podobnou metodě Gerarda Beekmense. Nyní máte osobní, jedinečný systém postavený na Linuxu. V případě problémů hledejte jejich řešení v LFS-booku, tam je vše podrobně popsáno. Doporučuji také stáhnout manuál z portálu http://www.tldp.org Linuxová síť Administrátorská příručka, i když se nevztahuje přímo na LFS, bude se hodit ve fázi nastavení systému. Nezapomeňte, že s každým programem jsou dodávány také různé uživatelské a informační stránky, které jsou také navrženy tak, aby usnadnily život uživatele Linuxu.

    1. LFS-kniha v ruštině - http://multilinux.sakh.com/lfs.
    2. Oficiální portál projektu LFS je http://www.linuxfromscratch.org.
    3. Portál ByoLinux – http://www.byolinux.org.
    4. Článek o FreeBSD od nuly - http://ezine.daemonnews.org/200302/fbsdscratch.html.
    5. Článek o kompilaci linuxového jádra - http://vikos.lrn.ru/MyLDP/kernel/kompil-2-6.html .
    6. Bairak A. Přehled Knoppix 3.7 Russian Edition. - Časopis "Správce systému", č. 3, březen 2005 - 4-6 s. ().

    Jedním z nejlepších způsobů, jak ušetřit čas při jakékoli činnosti, je vytvořit si pro ni systém. Jeho výhodou je, že automatizací a optimalizací práce se stanete produktivnější a získáte více času na jiné pro vás důležité úkoly.

    Systém je metoda, postup nebo rutina, která je vytvořena k provádění opakující se činnosti prostřednictvím strategie. Systémy vám umožní řídit svou práci a život efektivněji.

    Zde jsou některé oblasti života, pro které můžete tvořit vlastní systém:

    • Systematizace.
    • Systematizace.
    • Systemizace úkolů pro blogování.
    • Systém úklidu domu.
    • Systematizace ranní a večerní rutiny.
    • Systematizace zpracování elektronické pošty.
    • Systemizace pracovních úkolů.

    Následujících pět kroků vám umožní vytvořit si vlastní systém pro téměř jakoukoli činnost.

    Proveďte inventuru

    Začněte tím, že identifikujete činnosti, které pravidelně vykonáváte, a to jak doma, tak v práci. Analyzujte svůj den a podívejte se na všechny aktivity, které tvoří váš denní rozvrh. Například: ranní příprava do práce/školy, příprava dětí do školy, dojíždění, odpovídání na otázky e-maily a telefonní hovory, psaní zpráv, večerní běh, vaření večeře, psaní příspěvku na blog, marketing vaší knihy a tak dále.

    Přejděte na seznam konkrétních případů pro vybranou položku a zeptejte se sami sebe na následující:

    • jak to děláš teď?
    • Myslíte si, že to děláte co nejefektivněji?
    • Kde ztrácíte spoustu času?
    • kde ztrácíš peníze?
    • Jaké aktivity vás nejvíce rozčilují?
    • Co se v současné době nedělá tak rychle, jak to jde?
    • Co je potřeba optimalizovat?

    Na základě inventáře vyberte jednu aktivitu, kterou chcete uspořádat.

    Analyzujte, co právě děláte

    Proveďte akce, které chcete organizovat, pomocí normálního postupu (tj. chovejte se jako obvykle). Zdokumentujte proces zapsáním všech následujících informací:

    • Jaké kroky podnikáte?
    • Jaké nástroje používáte?
    • Kde jsou „úzká místa“ (kde se ztrácí čas, neustále dochází ke zpožděním, něco se pokazí)?
    • co tě zklamalo?
    • Jak dlouho trvá dokončení této aktivity?
    • Kolik to bude stát?
    • Jaké výsledky získáváte?

    Poté si přijatý dokument prohlédněte a prostudujte.

    Naplánujte si nový proces

    Systém, jak jsme již dříve zdůraznili, je proces, který vytváříte za účelem zefektivnění úkolů a zvýšení efektivity. Podívejte se na svůj dokument a aktivitu, kterou chcete optimalizovat, a položte si následující otázky:

    • Jakého výsledku chcete touto činností dosáhnout? Jakého cíle se snažíte dosáhnout? Jaký je ideální výsledek?
    • Jsou všechny kroky, které podnikáte, nutné? Lze některé z nich odstranit?
    • Dodržujete kroky v nejúčinnějším pořadí? Byly by výsledky jiné, kdybyste změnili pořadí kroků?
    • Jak to všechno udělat rychleji?
    • Můžete pro tuto aktivitu vytvořit kontrolní seznam, diagram, myšlenkovou mapu nebo skript?
    • Lze některé kroky nebo celý proces automatizovat? Existuje nějaký program, který by se na to dal použít?
    • Je možné delegovat některé kroky nebo celý proces?
    • Potřebují nástroje, které používáte, aktualizovat?

    Nyní zapište svůj nový systém podrobný popis každého kroku.

    Postupujte podle plánu

    Jakmile máte plán, musíte jej okamžitě uvést do praxe. Možná budete nejprve potřebovat pomoc jiných lidí nebo budete muset zakoupit software nebo upgradovat nástroje.

    Je čas spustit proces a vyzkoušet jeho fungování. Utraťte to a věnujte pozornost výsledkům. Položte si následující otázky:

    • Dosáhli jste požadovaných výsledků?
    • co funguje?
    • Co nefunguje?
    • Kolik času jste ušetřili?
    • Kolik to všechno stojí? Je systém vzhledem k výsledkům účinný?
    • Dosahujete svého cíle tím nejjednodušším způsobem?
    • Jsou v procesu mezery?
    • Lze proces dále optimalizovat?

    Proveďte potřebné úpravy a změny. Aktualizujte svůj systém, dokud nedosáhnete požadovaných výsledků.

    Neustále vylepšovat systém

    Sledovat svůj systém se vyplatí neustále, protože ve světě, který se rychle mění, může stejně rychle zastarat. Vždy se sami sebe zeptejte, zda je potřeba zlepšení.

    • Funguje systém jak má?
    • Můžete snížit náklady na systém?
    • Dokážete systém ještě zefektivnit?
    • Můžete zjednodušit systém, abyste dosáhli lepších výsledků?

    Nastavení systému vždy vyžaduje investici času. Ale tím, že zpočátku utratíte více, než obvykle, ušetříte nakonec hodně. A minimalizovat dopad provozního stresu.

    Přejeme hodně štěstí!