ലിനക്സ് കെർണൽ കമ്പൈലേഷൻ ഭാഗം - #1 കെർണൽ സോഴ്സ് ഡയറക്ടറികള്‍.

സുബിന്‍ പി. റ്റി on 28 മാർച്ച്, 2019

ലിനക്സ് കെർണലിലെ ആർക്കിടെക്ചറുകളുമായി ബന്ധപ്പെട്ട ഭാഗങ്ങളെക്കുറിച്ചും പൊതുവായ ഭാഗങ്ങളെക്കുറിച്ചും കഴിഞ്ഞ പോസ്റ്റിൽ പറഞ്ഞു. ഇനി ലിനക്സ് കെർണൽ സോഴ്സ് കോഡിലെ വിവിധ ഡയറക്ടറികളെക്കുറിച്ച് വിശദമായി പറയാം. ലിനക്സ് കെർണൽ സോഴ്സ് കോഡ് ഓൺലൈനായി ക്രോസ്സ് റെഫറൻസോടെ ലഭിക്കാൻ ഇവിടെ പോയാൽ മതി. മുഴുവൻ ഡൗൺലോഡ് ചെയ്യണമെന്നില്ല. ലിനക്സ് കെർണൽ വേർഷൻ 3.13 അടിസ്ഥാനമാക്കി ആണ് ഞാൻ താഴെയുള്ള വിവരങ്ങൾ ചേർക്കുന്നത്. മറ്റൊരു കെർണൽ വേർഷനിൽ ഈ ഡയറക്ടറികൾ വ്യത്യസ്തമായിരിക്കാം.

arch

ഈ ഡയറക്ടറി ലിനക്സ് കെർണലിലെ പിന്തുണക്കപ്പെടുന്ന പ്രോസസ്സർ ആർക്കിട്ടെക്ചറുകളുമായി ബന്ധപ്പെട്ട ഭാഗങ്ങൾ ഉൾക്കൊള്ളുന്നു. ഇതിലെ ഓരോ സബ് ഡയറക്ടറികളും ഓരോ പ്രോസസ്സർ ആർക്കിട്ടെക്ചറുകൾക്കായി ഉള്ളതാണ്. ഇതിൽ arm, x86, powerpc, mips തുടങ്ങിയവ കാണാൻ സാധിക്കും. arm സബ് ഡയറക്ടറിക്കുള്ളിൽ ചെന്നാൽ mach-xxxxx plat-xxxxx രീതിയിൽ നിരവധി ഡയറക്ടറികൾ കാണാൻ സാധിക്കും. ഇത് ആം അധിഷ്ഠിതമായ വ്യത്യസ്ത ഉപകരണങ്ങളെയും പ്രോസസ്സറുകളെയും പിന്തുണക്കാൻ ഉള്ളതാണ്. എല്ലാ ആം അധിഷ്ഠിത ഉപകരണങ്ങൾക്കും പൊതുവായി ഉള്ള ഡയറക്ടറികൾ ആണ് മേൽപ്പറഞ്ഞ രീതിയിൽ അല്ലാത്ത പേരിലുള്ളവ. ഇതിൽ തന്നെ ഉള്ള config എന്ന ഡയറക്ടറി വിവിധ മെഷീനുകൾക്കായുള്ള കെർണൽ കോൺഫിഗറേഷനുകൾ ഉൾക്കൊള്ളുന്നു. ഈ കോൺഫിഗറേഷനുകൾ കെർണൽ കമ്പൈലേഷൻ സമയത്ത് ഉപയോഗിക്കാനുള്ളവയാണ്.

Documentation

കെർണലിലെ വിവിധ ഭാഗങ്ങളെക്കുറിച്ചും സൗകര്യങ്ങളെക്കുറിച്ചും വിവരിക്കുന്ന നിരവധി ടെക്സ്റ്റ് ഡോക്യുമെന്റുകൾ ഈ ഡയറക്ടറിയിലും അതിന്റെ സബ് ഡയറക്ടറികളിലും ആയി ലഭ്യമാണ്. കെർണലിനെപ്പറ്റി മനസ്സിലാക്കാനും റെഫറൻസുകൾക്കായും ഉപയോഗിക്കാവുന്ന ഏറ്റവും വിശ്വാസയോഗ്യവും പുതുക്കിയതുമായ സ്രോതസ്സ് ഇത് തന്നെയാണ്.

block

സെക്കൻഡറി സ്റ്റോറേജ് ഉപകരണങ്ങളായ (ദ്വിതീയ സംഭരണോപാധികൾ?) ഹാർഡ് ഡിസ്കുകൾ, സിഡി ഡ്രൈവുകൾ, അവയിൽ ഉപയോഗിക്കുന്ന വിവിധ തരത്തിലുള്ള പാർട്ടീഷ്യനുകൾ എന്നിവയ്ക്കുള്ള പൊതുവായ പിന്തുണ നൽകുന്ന ഫയലുകൾ ആണ് ഇതിൽ ഉള്ളത്. ലിനക്സിൽ ബ്ലോക്ക് ലെയർ എന്നറിയപ്പെടുന്ന ഈ പാളി ഓരോ കമ്പനികളുടെയും ഹാർഡ് ഡിസ്കുകൾക്കും ഡിസ്ക് കണ്ട്രോളറുകൾക്കും ആയി എഴുതപ്പെടുന്ന വ്യത്യസ്തമായ ഡ്രൈവറുകൾക്ക് കെർണലുമായി സംവദിക്കുന്നതിനും കെർണലിലെ മറ്റു പാളികൾക്ക് ഇവയുമായി സംവദിക്കുന്നതിനും ഉള്ള ഒരു പൊതു സമ്പര്‍ക്കമുഖം (interface) നൽകുന്നു. ഇതിലെ മെച്ചം എന്താണെന്നാൽ, ഓരോ കമ്പനിയുടെ ഉപകരണങ്ങളുടെയും പ്രവർത്തനം വ്യത്യസ്ത രീതിയിൽ ആയിരിക്കുമല്ലോ. എന്നാലും കെർണലിലെ മറ്റ് ഭാഗങ്ങൾക്ക് ഒന്നും ഈ വ്യത്യാസങ്ങളെ പറ്റി അറിയേണ്ട ആവശ്യമില്ല. ഡിസ്കിലേക്ക് വിവരങ്ങൾ എഴുതാൻ അവക്ക് ഈ ഇന്റർഫേസ് നൽകുന്ന ഫങ്‌ഷനുകൾ ഉപയോഗിച്ചാൽ മതി. ഈ ഇന്റർഫേസ് അതിൽ രെജിസ്റ്റർ ചെയ്യപ്പെട്ടിരിക്കുന്ന വ്യത്യസ്ത ഉപകരണങ്ങളുടെ ഫങ്‌ഷനുകളിൽ നിന്നും ആ ഉപകരണത്തിന് അനുയോജ്യമായ ഫങ്‌ഷൻ കണ്ടെത്തി പ്രവർത്തിപ്പിച്ചുകൊള്ളും.

crypto

ലിനക്സ് കെർണൽ പിന്തുണക്കുന്ന വിവിധ ക്രിപ്റ്റോഗ്രാഫിക് അൽഗോരിതങ്ങളുടെയും വിവരങ്ങളുടെ സമ്പൂർണ്ണത (ഡാറ്റാ ഇന്റഗ്രിറ്റി) ഉറപ്പുവരുത്തുന്നതിനായി ഉപയോഗിക്കുന്ന ചെക്ക്‌സം പോലുള്ള മാർഗ്ഗങ്ങളുടെയും പിന്തുണക്കാവശ്യമായ ഫയലുകൾ ഇതിൽ ഉൾക്കൊള്ളിച്ചിരിക്കുന്നു. ക്രിപ്റ്റോഗ്രാഫിക് അൽഗോരിതങ്ങൾ പിന്തുണക്കുന്ന ഹാർഡ്‌വെയറിനുള്ള നിയന്ത്രണ പ്രോഗ്രാമുകൾ ഇതിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല.

drivers

ലിനക്സ് കെർണലിലെ ഒരു സുപ്രധാന ഡയറക്ടറി ആണിത്. കമ്പ്യൂട്ടറുമായി ബന്ധിപ്പിച്ചിരിക്കുന്ന/കമ്പ്യൂട്ടറിൽ ഉള്ള/കമ്പ്യൂട്ടറുമായി ബന്ധിപ്പിക്കാവുന്ന ആയിരക്കണക്കിന് ഹാർഡ്‌വെയർ ഉപകരണങ്ങളെ പ്രവർത്തിപ്പിക്കാൻ ആവശ്യമായ നിയന്ത്രണ പ്രോഗ്രാമുകൾ ആണ് ഇതിൽ ഉൾക്കൊള്ളിച്ചിരിക്കുന്നത്. വിൻഡോസ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഒരിക്കലെങ്കിലും ഇൻസ്റ്റാൾ ചെയ്റ്റിട്ടുള്ളവർക്ക് ഡിവൈസ് ഡ്രൈവറുകളുടെ ആവശ്യം മനസ്സിലാക്കാൻ വിഷമമുണ്ടാവില്ല. ഇൻസ്റ്റാളേഷൻ കഴിഞ്ഞ ഉടനേ സ്ക്രീനിലെ ചിത്രങ്ങൾ വികലമായി കാണപ്പെടുന്നതും ശബ്ദം ഇല്ലാതിരിക്കുന്നതും ഇന്റർനെറ്റ് കണക്ഷൻ പ്രവർത്തിക്കാതിരിക്കുന്നതും ഒക്കെ ലാപ്‌ടോപ്പുകളിലും മറ്റും സാധാരണമാണ്. ഡിസ്പ്ലേ, സൗണ്ട്, നെറ്റ്‌വർക്ക് കാർഡ് ഡ്രൈവറുകൾ ഇൻസ്റ്റാൾ ചെയ്യുന്ന മുറക്ക് ഇവയൊക്കെ പ്രവർത്തിച്ച് തുടങ്ങുകയും ചെയ്യും. മിക്കവാറും ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങൾ ഹാർഡ്‌വെയർ ഉപകരണങ്ങളെ അവയുണ്ടാക്കുന്ന കമ്പനികളുടെ അടിസ്ഥാനത്തിൽ അല്ല തരം തിരിക്കാറുള്ളത്, മറിച്ച് അവ ചെയ്യുന്ന കാര്യങ്ങളുടെ അടിസ്ഥാനത്തിൽ ആണ്. ഗ്രാഫിക്സ് കാർഡുകളുടെ കാര്യം തന്നെ എടുക്കാം. ഗ്രാഫിക്സ് കാർഡ് ഇന്റലിന്റെ ആയാലും എ എം ഡി യുടെ ആയാലും എൻവിഡിയയുടെ ആയാലും ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം അതിനെ കാണുന്നത് ഒരേ രീതിയിൽ ആണ്. അവയെ പ്രവർത്തിപ്പിക്കാനായി മുൻകൂട്ടി തീരുമാനിച്ചിട്ടുള്ള വിവിധ ഫങ്‌ഷനുകൾ (ചെറു പ്രോഗ്രാമുകൾ) ആണ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഉപയോഗിക്കുക. ഡിസ്പ്ലേ റെസല്യൂഷൻ ക്രമീകരിക്കാൻ ആവശ്യമായ ഒരു ഫങ്ഷൻ മേൽപ്പറഞ്ഞ മൂന്ന് ഗ്രാഫിക്സ് കാർഡുകളിലും വ്യത്യസ്ത രീതിയിൽ ആയിരിക്കും പ്രവർത്തിക്കുക. അതായത് ഇന്റൽ ഗ്രാഫിക്സ് കാർഡ് റെസല്യൂഷൻ ക്രമീകരിക്കാനായി ചെയ്യുന്ന കാര്യങ്ങളിൽ നിന്ന് വ്യത്യസ്തമായിരിക്കാം എൻവിഡിയ കാർഡ് ചെയ്യുന്നവ. എന്നാൽ ഇവ രണ്ടും രണ്ട് രീതിയിൽ ചെയ്യുന്നത് ഒരേ കാര്യം തന്നെ ആണ്. ഇതുപോലെയുള്ള നിരവധി കാര്യങ്ങൾ ചെയ്യാൻ ഓരോ ഉപകരണത്തിലും എന്തൊക്കെ ചെയ്യണം എന്നുള്ള കാര്യങ്ങൾ ആ ഉപകരണങ്ങൾ ഉണ്ടാക്കുന്നവർക്ക് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തെ അറിയിക്കാനുള്ള ഒരു മാർഗ്ഗമാണ് ഡിവൈസ് ഡ്രൈവർ. ഒരു ഉപകരണത്തിന്റെ ഡിവൈസ് ഡ്രൈവർ പ്രോഗ്രാം ലഭ്യമല്ലെങ്കിൽ ആ ഉപകരണത്തെ പ്രവർത്തിപ്പിക്കാൻ കമ്പ്യൂട്ടറിനു സാധാരണ ഗതിയിൽ സാധിക്കുകയില്ല. ലിനക്സിൽ ഉപകരണങ്ങളെ വിവിത്തിയിൽ തരം തിരിച്ചിരിക്കുന്നു. അവ ചെയ്യുന്ന കാര്യങ്ങളുടെ അടിസ്ഥാനത്തിലും (ഉദാ: ഗ്രാഫിക്സ്, ഓഡിയോ, നെറ്റ്‌വർക്കിങ്ങ്, ഇൻപുട്ട്) അവ കമ്പ്യൂട്ടറുമായി എങ്ങനെ ബന്ധിപ്പിക്കപ്പെടുന്നു എന്നതിന്റെ അടിസ്ഥാനത്തിലും (ഉദാ: പിസിഐ, യുഎസ്ബി, ഐഡിഇ, പിസിഎംസിഐഎ, സാറ്റ, പ്ലാറ്റ്ഫോം, ഐ2സി, എസ്പിഐ, എംഎംസി, എസ്ഡി), അവയുമായി ആശയവിനിമയം നടത്തുമ്പോൾ ഒരു തവണ കൈമാറ്റം ചെയ്യപ്പെടുന്ന വിവരങ്ങളുടെ അളവിന്റെ അടിസ്ഥാനത്തിലും (ഉദാ: കാരക്റ്റർ, ബ്ലോക്ക്) ഒക്കെയാണ് ഈ വർഗ്ഗീകരണം. ഓരോ വിഭാഗത്തിനും ഉള്ള ഡ്രൈവറുകൾ അവയുടെ ബന്ധപ്പെട്ട ഡയറക്ടറിയിൽ കാണാൻ സാധിക്കും. ഇന്ന് നിരവധി ലാപ്‌ടോപ്പുകളിൽ കണ്ടുവരുന്ന സിനാപ്റ്റിക് ടച്ച് പാഡിന്റെ ഡ്രൈവർ drivers/input/mouse/synaptics.c എന്ന ഫയലിൽ കാണാൻ സാധിക്കും. ഈ ടച്ച് പാഡ് ഇൻപുട്ട് ഉപകരണങ്ങളുടെ വിഭാഗത്തിൽ മൗസ് എന്ന ഉപ വിഭാഗത്തിൽ ആണ് വരുന്നത്. എന്ന് ഡയറക്റ്ററികളുടെ ക്രമീകരണം നോക്കിയാൽ മനസ്സിലാക്കാം. വിവിധ യു എസ് ബി സ്റ്റോറേജ് ഡിവൈസുകൾക്കുള്ള ഡ്രൈവർ drivers/usb/storage/ എന്ന ഡയറക്ടറിയിലും ഇന്റലിന്റെ i915 എന്ന പ്രസിദ്ധമായ ഗ്രാഫിക്സ് കാർഡിന്റെ ഡ്രൈവർ drivers/gpu/drm/i915/ എന്ന ഡയറക്ടറിയിലും കാണാൻ സാധിക്കും.

firmware

ഉപകരണങ്ങൾക്കുള്ളിൽ തന്നെ അവയെ പ്രവർത്തിപ്പിക്കാൻ ആവശ്യമായ ചെറു പ്രോഗ്രാമുകൾ ഫ്ലാഷ് മെമ്മറികളിലും ഇഇ‌പ്രോം മെമ്മറികളിലും മറ്റുമായി ചേർത്തു വയ്ക്കാറുണ്ട്. സങ്കീർണ്ണമായ പല ഉപകരണങ്ങൾക്കുള്ളിലും ആ ഉപകരണത്തെ നിയന്ത്രിക്കാൻ കമ്പ്യൂട്ടർ സിസ്റ്റത്തിലെ പ്രോസസ്സറിനു പുറമേ മറ്റൊരു പ്രോസസ്സർ കൂടി കാണും. ആ പ്രോസസ്സറിൽ പ്രവർത്തിക്കുന്ന ഒരു ചെറിയ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റമായി ഫേംവെയറിനെ പരിഗണിക്കാവുന്നതാണ്. വയർലെസ്സ് ലാൻ കാർഡുകളും ബ്ലൂടൂത്ത് അഡാപ്റ്ററുകളും മറ്റും ഇതുപോലെ ഫേംവെയറുകളെ അടിസ്ഥാനമാക്കി പ്രവർത്തിക്കുന്നവയാണ്. വിവിധ രാജ്യങ്ങളിലെ അനുവദനീയമായ റേഡിയേഷൻ അളവുകളെ അടിസ്ഥാനമാക്കി വ്യത്യസ്ത ശക്തിയിൽ ഉള്ള റേഡിയേഷനുകൾ പുറപ്പെടുവിക്കാനും മറ്റുമായി ഒരേ ഉപകരണത്തെ തന്നെ അതിലെ ഫേംവെയർ മാത്രം മാറ്റി ക്രമീകരിക്കാൻ സാധിക്കും. ഉപകരണത്തിന് ഒരു പുതിയ പ്രവർത്തനം നടത്താനുള്ള കഴിവുകൾ ചേർക്കാനും ഉള്ള കഴിവുകൾ നീക്കം ചെയ്യാനും ഒക്കെ ഫേംവെയറുകൾ മാറ്റുന്നത് വഴി സാധിക്കും. ഇതുപോലെ നിരവധി ഉപകരണങ്ങൾക്ക് പ്രവർത്തിക്കാനാവശ്യമായ ഫേംവെയറുകൾ ഈ ഡയറക്ടറിയിൽ കാണാം.

fs

ഫയൽ സിസ്റ്റം എന്നതിന്റെ ചുരുക്കമാണ് എഫ് എസ് എന്നത്. ലിനക്സ് കെർണൽ വിവിധ സ്റ്റോറേജ് ഉപകരണങ്ങളിൽ ഉപയോഗിക്കാവുന്ന നിരവധി ഫയൽ സിസ്റ്റങ്ങളെ പിന്തുണക്കുന്നുണ്ട്. ഇഎക്സ്‌റ്റി 2/3/4, ബിറ്റിആർഎഫ്‌എസ്, ഫാറ്റ്, എൻറ്റിഎഫ്എസ്, ഐഎസ്ഓ തുടങ്ങി നിരാവധി ഫയൽ സിസ്റ്റങ്ങൾക്ക് പുറമേ ഡിസ്കുകളിൽ ഒന്നും ശേഖരിക്കപ്പെടാത്ത എന്നാൽ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തെയും കമ്പ്യൂട്ടറിനെയും പ്രോസസ്സുകളെയും പറ്റിയുള്ള നിരവധി വിവരങ്ങൾ തരാനും അവയെ നിയന്ത്രിക്കാനായി ഉപയോഗിക്കാവുന്നതും ആയ പ്രോക്എഫ്എസ്, സിസ്എഫ്എസ് പോലുള്ള സ്യൂഡോ ഫയൽ സിസ്റ്റങ്ങൾക്കും ആവശ്യമായ പ്രോഗ്രാമുകൾ ആണ് ഈ ഡയറക്ടറിയിൽ ചേർത്തിട്ടുള്ളത്. ലിനക്സിൽ പുതിയതായി വികസിപ്പിച്ചുകൊണ്ടിരിക്കുന്ന ബിറ്റിആർഎഫ്എസ് ഫയൽ സിസ്റ്റത്തിനുള്ള പിന്തുണ fs/btrfs/ യിൽ കാണാം. ഈ ഫയൽ സിസ്റ്റത്തിൽ ഉപയോഗിക്കുന്ന ഐനോഡുകൾ, സൂപ്പർബ്ലോക്ക് എന്നിവയെക്കുറിച്ചുള്ള വിവരങ്ങൾ അവിടെ കാണാൻ സാധിക്കും.

include

ലിനക്സ് കെർണൽ പ്രധാനമായും എഴുതപ്പെട്ടിരിക്കുന്നത് സി പ്രോഗ്രാമിങ്ങ് ഭാഷയിൽ ആണ്. വിവിധ സി പ്രോഗ്രാമുകൾക്ക് മറ്റു പ്രോഗ്രാമുകളിൽ നിർവ്വചിച്ചിരിക്കുന്ന ഫങ്ഷനുകളെയും മറ്റും ഉപയോഗിക്കാനുള്ള ഉപാധിയായി ഹെഡർ ഫയലുകൾ ഉപയോഗിക്കുന്നു. ഇങ്ങനെ കെർണലിൽ ഉള്ള സി ഫയലുകളിൽ ഉപയോഗിക്കാനുള്ള ഹെഡർ ഫയലുകൾ‌ ആണ് ഈ ഡയറക്ടറിയിൽ ഉള്ളത്.

ലിനക്സ് കെർണൽ സോഴ്സ് കോഡിലെ ബാക്കി ഡയറക്ടറികളെപ്പറ്റിയുള്ള വിവരണം തുടർന്നു വരുന്ന പോസ്റ്റുകളിൽ.
ഈ ലേഖനം ശ്രീ സുബിന്‍ പി. റ്റി അദ്ദേഹത്തിന്റെ ബ്ലോഗില്‍ ക്രിയേറ്റീവ് കോമണ്‍സ് സിസി-ബൈ-എസ്.എ 3.0 ലൈസന്‍സ് പ്രകാരം പ്രസിദ്ധീകരിച്ചതാണ്.