Puncte:0

Ce fac modulele „$ make” și „$ make” atunci când compilați/construiți nucleul?

drapel ph

Încerc să construiesc nucleul configurat. Așa că colegul meu de serviciu mi-a spus să introduc terminalul

face

apoi pe urmă

face module

Am încercat să caut pe google, dar cel mai apropiat rezultat este acest dar când derulez în jos, se vede umake, nu face.

drapel cn
Ray
Întrebarea dvs. nu are nimic de-a face cu Ubuntu -- acolo ați făcut greșeala în căutarea pe Google. Începeți de [aici](https://en.wikipedia.org/wiki/Make_(software)) în schimb.
waltinator avatar
drapel it
Citiți `man face`.
Puncte:0
drapel tj

Am de gând să răspund la întrebarea dvs. reală, dar voi lua o cale obișnuită pentru a ajunge acolo, astfel încât să aveți un context mai bun.

tldr: Pachetul de care ai nevoie este face sau construcție-esențială. Trebuie să fiți în același director cu codul sursă Linux și să aveți un fișier .config configurat (ceea ce se pare că ați făcut deja). Apoi rulați acele comenzi. Cuvintele cheie Google care ar putea ajuta sunt „compilați nucleul linux”

Asa de face este un sistem de construcție. Vă permite să rulați o serie de comenzi de compilare (sau orice comenzi, într-adevăr), recursiv printr-o structură de directoare. Utilizează un sistem simplu pentru compilarea doar a programelor cu modificări.

Make permite declararea „țintelor”. În mod tradițional, o țintă este un nume de fișier și este urmată de fișierele de care depinde.

Deci un exemplu simplu este:

helloworld: helloworld.c helloworld.h
    gcc helloworld.c -o helloworld

Acesta va fi stocat într-un apel de fișier Makefile și îi spune make că pentru a construi fișierul helloworld (binar compilat), rulați gcc helloworld.c -o helloworld și dacă helloworld există deja, nu faceți nimic decât dacă există modificări la helloworld.c sau helloworld.h care sunt mai noi decât fișierul helloworld.

Dacă aceasta este singura regulă din makefile, rulează face va invoca această regulă (deoarece este prima regulă) și va încerca să construiască Salut Lume dar ar putea fi, de asemenea, invocat în mod explicit prin rulare face Helloworld

Makefile-urile sunt de obicei mult mai complicate și ar putea arăta mai degrabă așa (acesta este un exemplu foarte născocit și îmi dau seama că un makefile aproape niciodată nu va arăta așa, dar este bun pentru explicație):

salut: salut.o libhello.o
    gcc salut.o libhello.o -o salut

hello.o: hello.c hello.h
    gcc -c salut.c -o salut.o

libhello.o: libhello.c libhello.h
    gcc -c libhello.c -o libhello.o

Deci dacă fugi face sau salută acest fișier make va verifica hello.o și libhello.o, dacă nu există, va căuta acele ținte și, astfel, va afla cum să construiți hello.o și libhello.o și APOI construiți binarul hello așa cum ați cerut in primul loc. Acest lucru vă permite să specificați dependențele pe rând și să vă dați seama în ce ordine să compilați totul pentru ca totul să funcționeze (de asemenea, acest lucru poate economisi timp de compilare dacă una dintre bibliotecile dvs. nu s-a schimbat, nu trebuie să recompilați acel obiect ).

Puteți specifica o țintă fără dependențe, în acest caz va rula doar dacă fișierul țintă nu există. În plus, ținta dvs. nu trebuie să fie un fișier care este creat de această regulă. De exemplu:

curat:
   rm salut *.o

Acest lucru vă permite să alergați face curat și va șterge fișierul binar compilat și fișierele obiect. Deoarece nu creează de fapt un fișier numit curat, de fiecare dată când alergi face curat această regulă este executată și curăță directorul de lucru. Aceasta se numește o țintă falsă și sunt folosite destul de des. face instalarea este unul pe care probabil să îl vedeți des pentru a instala un program pe care l-ați creat cu make.

Înapoi la întrebarea ta inițială

Deci, nucleul Linux folosește make pentru a construi. Are o grămadă de ținte false, când rulează în rădăcina sursei Linux face ajutor pentru a vă arăta țintele. În mod normal, începeți cu una dintre ținte care lansează un program pentru a vă ajuta să construiți un .config fişier. Acestea ar fi face config, face menuconfig, face xconfig, și alte câteva.

face va rula ținta implicită care compilează nucleul utilizând opțiunile specificate în fișierul .config. face module va compila numai biții marcați ca module în fișierul .config fişier. Între aceste două comenzi ar trebui să ajungeți cu un nucleu vmlinuz și o grămadă de module binare ale nucleului. Ceea ce este/face kernel-ul Linux depășește domeniul de aplicare al acestei postări, dar povestea scurtă este că este software-ul central al sistemului de operare (dacă întregul sistem este un nebun, atunci nucleul ar fi nucleul central, nu? ). Acesta rulează la cel mai înalt nivel de privilegii pe procesor și este singura bucată de software care interacționează direct cu memoria și hardware-ul, iar toate celelalte software-uri din sistem vorbește cu nucleul pentru a intermedia accesul la hardware. (Există aproximativ 20 de avertismente în acea descriere, dar aceasta acoperă cele mai comune 80% din modul în care funcționează lucrurile).

Dar sperăm că asta vă oferă suficient context pentru a căuta mai multe informații utile, dacă căutați „compilați nucleul linux” ar trebui să găsiți o jumătate de duzină de resurse la toate nivelurile de complexitate. Ghidul oficial este la linux.org, dar intră foarte repede în buruieni și nu este de mare ajutor dacă este prima dată.

În Ubuntu (și în majoritatea distribuțiilor), make este în face pachet, deci este instalat cu sudo apt install make totuși, pentru a construi nucleul, veți avea nevoie și de alte programe, așa că, în general, doriți să instalați lanțul de instrumente de construcție și accesoriile cu sudo apt install build-essential care include make.

drapel ph
Chiar în inimă. Mulțumesc foarte mult!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.