Qemu, busybox, linux kernel - partea 1, asamblare, badembed

Pentru a începe, descărcați Busybox:

Kernel-ul Linux de care aveți nevoie:

În ciuda creșterii puternice a scoicilor grafice și a interfețelor "prietenoase", este imposibil să ne imaginăm UNIX fără linie de comandă și utilități de bază în zilele noastre. Numeroși interpreți și utilități de bază ale sistemului nu stau în picioare, se dezvoltă și se dezvoltă, ceea ce duce în mod inevitabil la o creștere a volumului acestora. În același timp, există domenii de activitate în care compactitatea oricărei aplicații din motive evidente este foarte importantă, de exemplu, în dispozitivele încorporate. În același timp, în multe cazuri, o mare parte din funcționalitatea inerentă utilităților de bază "cu scop general" nu este necesară.







Pentru a rezolva aceste probleme la mijlocul anilor '90, Bruce Perens a creat pachetul BusyBox. Acum, proiectul este poziționat ca un "cuțit elvețian pentru sisteme încorporate Linux" și vizează în primul rând utilizarea în distribuții mici de GNU / Linux. Distribuită sub a doua versiune a licenței GNU GPL.

BusyBox este singurul fișier executabil care pornește cu o interfață de comandă completă. Așa cum scrie în documentația oficială a BusyBox. Pentru a crea o versiune minimă a GNU / Linux, trebuie doar să adăugați kernelul OS și directoarele / etc, / dev.

Unul dintre obiectivele principale urmărit de dezvoltatorii de BusyBox. - cod optimizat și compact - calcul pentru memorie limitată. Acest lucru nu numai că reiterează beneficiile utilizării sale în dispozitivele încorporate, dar, de asemenea, merge bine cu o altă abordare în spiritul modului UNIX. nivel înalt de personalizare (numai componentele necesare pot fi incluse în fișierul binar BusyBox).

La etapa de compilare (sau mai degrabă, înainte de procesul de construire în sine), puteți selecta numai acele utilități de bază necesare. Acesta este implementat în stilul de tuning a kernel-ului Linux. În locul celei mai comune metode care este colectată de la aplicațiile automake sub forma scriptului "configure" pentru preconfigurarea BusyBox, trebuie executată una dintre următoarele comenzi:

Argumentul "config" inițiază lansarea "chestionarului" cu o listă de opțiuni disponibile și oferta de utilități de bază pentru a pune "Y" sau "N" în locul capacităților necesare și inutile, respectiv.

Argumentul "menuconfig" determină o configurație mai convenabilă ca meniu cu o interfață bazată pe blesteme.

Argumentul "defconfig" include automat toate opțiunile disponibile, pregătindu-se pentru asamblarea BusyBox "scop general".

La fel ca și kernelul Linux. După configurare, fișierul de configurare .config este creat. care pot fi întotdeauna returnate de comanda:

Acest lucru este important atunci când faceți upgrade la o versiune mai nouă a BusyBox cu vechea configurație (astfel încât atunci când configurați doar să lucrați cu opțiunile care apar în următoarea versiune).







În mod implicit, dacă nu există niciun fișier .config înainte de apelul "make menuconfig". make este inițializată automat cu argumentul "defconfig". Astfel, utilizatorul va trebui doar să dezactiveze caracteristicile inutile. Există, de asemenea, o opțiune inversă: executarea face cu "allnoconfig" dezactivează toate opțiunile, astfel încât după aceea puteți selecta doar ceea ce aveți nevoie.

Mai mult, toate sunt tradiționale:

În plus față de setul de coreutils alternativ (ls, cat, mv, cp, rm, chmod, df, ln, data, wc, frumos, test ...), BusyBox include și multe alte programe.

Prezentat pe larg facilitățile de rețea: client și server. Dintre demoni, voi selecta httpd, dnsd, telnetd, inetd, udhcpd. Pentru FTP, există ftpget, ftpput și clientul tftp. În plus, există și o versiune nativă a GNUwget. Dintre celelalte utilitare standard: ifconfig, route, traceroute, ping / ping6, netstat, nslookup, arp și arping.

Apoi, în meniu am pus o bifare:
-> Setări Busybox
-> Opțiuni de construire
[] Construiește BusyBox ca un static binar (fără shared libs)

salvați și ieșiți.

CONFIG_PREFIX = ./ ../ busybox_rootfs - indică tatălui unde busybox va pune fișierele de ieșire.

Initrd (scurt pentru Diskul inițial RAM în RAM pentru inițierea inițială) este un sistem de fișiere temporar utilizat de kernel-ul Linux la momentul încărcării. Initrd este de obicei folosit pentru inițierea inițială înainte de a monta sisteme de fișiere "reale".

Începând cu versiunea kernel 2.6, am ajuns la conceptul de initramfs. Aceasta este, de obicei, o arhivă cpio comprimată, în care există un busybox mini-sistem, care îndeplinește același rol ca initrd.

Puteți să o utilizați pentru a testa orice funcționalitate a sistemului încorporat - când doriți doar să puneți întregul sistem în memorie pentru a funcționa rapid și nu contează dacă modificările dvs. vor fi salvate după repornire.

Conținutul initramfs se face prin crearea unui cpio-arhivă.

Toate fișierele, instrumentele, bibliotecile, setările de configurare (dacă este cazul) etc. sunt plasate în cpio-arhiva. Această arhivă este apoi comprimată utilizând utilitarul gzip și stocată în același loc ca și kernelul Linux. Apoi, bootloader-ul îl va trimite la kernel-ul Linux la momentul încărcării, astfel încât nucleul să știe că sunt necesare initramfs.

Când este detectat, kernelul Linux va crea un sistem de fișiere tmpfs. extrage conținutul arhivei și apoi execută scriptul de inițializare. localizat în directorul rădăcină al sistemului de fișiere tmpfs.

Acum creați initramfs-urile cu buzunarul nostru construit:

Notă: nodul nu poate fi creat prin mknod. dar copiați-l din sistemul principal de operare.

Apoi, copiați totul din dosarul busybox_rootfs în directorul rootfs. Astfel, Linux va apărea în initrd-ul nostru. care implementează busybox.

Îl facem executabil:

Să creăm initramf-urile:

Imaginea de kernel comprimată este / arch / x86_64 / boot / bzImage.

Noi copiem bzImage și rootfs.cpio.gz într-un director separat, du-te în el și

Initrd built-in kernel

În plus, puteți compila initrd-ul cu nucleul. Pentru a face acest lucru, trebuie să specificați calea la rootfs atunci când configurați kernel-ul (vedeți mai jos):

Și în / path_to_rootfs / rootfs ar trebui să ai rootfs (/ bin, / dev / dev / sda / dev / console, etc. - vezi descrierea de mai sus). Nu uitați să creați și să inițiați un script.

Apoi, după compilarea kernelului, qemu poate fi rulat fără a specifica initrd:

Trecerea de la Initrd la rootfs pe disc

Mai întâi, creați un disc pe care să puneți rootfs-urile:

Creați rootfs aici (în / mnt), precum și cum a fost descris mai sus (/ bin, / dev / dev / sda / dev / console etc. - consultați descrierea de mai sus). Nu uitați să creați și să inițiați un script.

Acum avem rootfs pe imaginea discului hdd.

Pentru a începe qemu cu un disc, utilizați sl. comandă:

Când boot-ul de kernel din initrd. Pentru a comuta la rootfs de pe disc, executați următoarele comenzi:

Descărcați fără Initrd

pentru că y pe rootfs este deja pe disc, atunci nu este necesar să boot-e de la initrd. Pentru a încărca imediat rootfs-urile de pe disc, trebuie să transferați parametrul kernel-ului (în bootloader) la parametrul root.







Trimiteți-le prietenilor: