În Capitolul 2, v-am recomandat să construiți și să instalați propriul kernel și să nu rulați kernelul furnizat împreună cu distribuția. Unul dintre principalele motive pentru care rulezi propriul kernel este că dezvoltatorii kernel-ului au construit câteva capabilități de depanare în kernel-ul propriu-zis. Aceste funcții pot crea rezultate suplimentare și pot reduce performanțele, astfel încât acestea nu sunt incluse cel mai adesea în nucleele colectate de distribuitori. În calitate de dezvoltator de kerneluri, cu toate acestea, aveți alte priorități și ați accepta fericit (minimal) suport suplimentar pentru depanare în kernel.
Iată parametrii de configurare care ar trebui să fie incluși pentru kernelurile folosite pentru dezvoltare. Dacă nu se specifică altfel, toate aceste opțiuni se găsesc în meniul "kernel hacking" al oricărui utilitar de configurare a kernel-ului. Rețineți că unii dintre acești parametri nu sunt acceptate de toate arhitecturile.
Această opțiune este pur și simplu disponibilă făcând alte opțiuni de depanare; ar trebui inclusă, dar nu include nici o posibilitate în sine.
Acest parametru important include mai multe tipuri de verificări în funcțiile de alocare a memoriei nucleului; Când aceste verificări sunt activate, puteți detecta erori de depășire a memoriei și nici o inițializare. Fiecare octet al memoriei alocate este setat la 0xa5 înainte de a fi trimis către apelant și setat la 0x6b. când este eliberat. Dacă vedeți aceste pattern-uri "otrăvitoare" repetitive atunci când ieșiți de la driver-ul dvs. (sau de multe ori în imprimate Oops), veți ști exact ce eroare să căutați. Cu debugging activat, kernelul plasează, de asemenea, valori speciale de protecție înainte și după fiecare obiect de memorie alocat; dacă aceste valori sunt schimbate, kernelul știe că cineva a provocat o depășire a memoriei și exprimă cu voce tare nemulțumirea. De asemenea, sunt incluse diverse verificări pentru erori mai puțin cunoscute.
Când această opțiune este activată, kernelul captează operațiunile de blocare a centurilor neinitializate și alte erori diferite (cum ar fi deblocarea dublă).
Această opțiune vă permite să verificați dacă există o încercare de a adormi în timp ce țineți spinlock-ul. De fapt, se plânge dacă apelați o funcție care ar putea să adoarmă, chiar dacă apelul din solicitare nu va dormi.
Marcajul __init (sau __initdata) marcat este șters după ce sistemul este inițializat sau modulul este încărcat. Această opțiune vă permite să verificați codul care încearcă să acceseze memoria utilizată în timpul inițializării, după finalizarea inițializării.
Această opțiune face ca kernelul să fie compilat cu informații de depanare complete atașate. Aveți nevoie de aceste informații dacă doriți să debugați un kernel cu gdb. De asemenea, este posibil să doriți să activați CONFIG_FRAME_POINTER. dacă intenționați să utilizați gdb.
Activează butonul "SysRq" ("magic SysRq"). Vom vedea acest buton mai târziu în acest capitol în secțiunea "Sistemul se blochează".
Aceste opțiuni vă pot ajuta să urmăriți depășirea stivei kernel-ului. Un semn clar de depășire a stivei este listarea Oops fără nici un indiciu al unei backtrace rezonabile. Prima opțiune adaugă teste explicite de depășire în kernel; al doilea determină kernelul să controleze utilizarea stivei și să pună la dispoziție unele statistici accesibile prin intermediul butonului SysRq.
Acest parametru (în setările "Setări generale / caracteristici standard") face ca informațiile despre simbolurile kernel-ului să fie integrate în kernel; este activat implicit. Informațiile despre simboluri sunt utilizate în contextele de depanare; fără listarea Oops vă poate oferi o trasare a nucleului invers doar în hexazecimal, ceea ce nu este foarte util.
Acești parametri (găsiți în meniul "Setări generale") obligă kernelul să fie complet integrat în kernel și să îl pună la dispoziție prin intermediul / proc. Majoritatea dezvoltatorilor kernelului cunosc configurațiile pe care le-au folosit și nu au nevoie de aceste opțiuni (care fac ca kernel-ul să fie mai mare). Deși pot fi utile dacă încercați să găsiți o problemă într-un nucleu compilat de altcineva.
Situat în "Power management / ACPI" ("Power Management / ACPI"). Această opțiune include informații detaliate despre depanare pentru ACPI (Advanced Configuration and Power Interface), care pot fi utile dacă suspectați că problema este legată de ACPI.
Situat în "Drivere de dispozitiv". Include informații de depanare în kernelul driverului, care pot fi utile pentru urmărirea problemelor din codul de suport la nivel scăzut. Vom analiza kernelul driverului în capitolul 14.
Acest parametru, descoperit în "Drivere de dispozitiv / suport dispozitiv SCSI", este încorporat în informațiile pentru mesaje de eroare SCSI detaliate. Dacă lucrați la un driver SCSI, probabil că doriți să activați această opțiune.
Această opțiune (în secțiunea "Drivere de dispozitiv / suport pentru dispozitive de intrare", "Drivere de dispozitiv / suport pentru dispozitive de intrare") include înregistrarea detaliată a evenimentelor de intrare. Dacă lucrați la un driver pentru un dispozitiv de intrare, această opțiune poate fi utilă. Cu toate acestea, fiți conștienți de implicațiile privind securitatea: tot ceea ce este introdus este înregistrat, inclusiv parolele.
Această opțiune este localizată în secțiunea "Suport de profilare". Profilarea este de obicei folosită pentru a ajusta performanța sistemului, dar poate fi de asemenea utilă pentru urmărirea anumitor blocări ale kernel-ului și a problemelor conexe.
Vom reveni la unele dintre opțiunile de mai sus atunci când analizăm diferite moduri de urmărire a problemelor kernelului. Însă mai întâi vom examina tehnica clasică de depanare: rapoartele de imprimare.