ലിനക്സ് കേർണൽ കംപൈൽ ചെയ്യുന്നു. എന്തുകൊണ്ടാണ് ലിനക്സ് കേർണലിനെ "ഇമേജ്" എന്ന് വിളിക്കുന്നത്

ഈ ഘട്ടം ഘട്ടമായുള്ള ഗൈഡിൽ, ഉബുണ്ടു ഒഎസ് ഫാമിലിയിൽ ബ്രാഞ്ച് കേർണൽ > 2.6 എങ്ങനെ ശരിയായി നിർമ്മിക്കാമെന്നും ഇൻസ്റ്റാൾ ചെയ്യാമെന്നും നിങ്ങൾ പഠിക്കും.

ഘട്ടം 1: കേർണൽ സോഴ്സ് കോഡ് നേടുന്നു

ഉബുണ്ടു കേർണൽ ഉറവിടങ്ങൾ രണ്ട് തരത്തിൽ ലഭിക്കും:

    ഏറ്റവും പുതിയ ഔദ്യോഗിക പാച്ചുകളുടെ സ്വയമേവയുള്ള ആപ്ലിക്കേഷൻ ഉപയോഗിച്ച്, ശേഖരത്തിൽ നിന്ന് ആർക്കൈവ് ഇൻസ്റ്റാൾ ചെയ്യുന്നതിലൂടെ. ഇത് നിലവിലെ ഫോൾഡറിലേക്ക് ~150 MB വലുപ്പമുള്ള ഒരു പാക്കേജ് ഡൗൺലോഡ് ചെയ്യും. കമ്പ്യൂട്ടറിൽ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുള്ള കേർണലിന്റെ ഉറവിടങ്ങൾ ലഭിക്കുന്നതിന്, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: apt-get source linux-image-`uname -r`

    അല്ലെങ്കിൽ `uname -r` ന് പകരം നിങ്ങൾക്ക് റിപ്പോസിറ്ററിയിൽ ലഭ്യമായ ഒരു പ്രത്യേക പതിപ്പ് വ്യക്തമാക്കാം.

"apt-get source linux-image-" എന്ന കമാൻഡ് ടൈപ്പുചെയ്യുന്നതിലൂടെ റിപ്പോസിറ്ററിയിൽ ലഭ്യമായ പതിപ്പുകളുടെ ലിസ്റ്റ് കാണാനാകും, കൂടാതെ, Enter അമർത്താതെ, ടാബ് കീ രണ്ടുതവണ അമർത്തുക.

റിപ്പോസിറ്ററിയിൽ ഉറവിട പങ്കിടൽ പ്രവർത്തനക്ഷമമാക്കാൻ മറക്കരുത് (സിസ്റ്റം ക്രമീകരണങ്ങൾ → പ്രോഗ്രാമുകളും അപ്‌ഡേറ്റുകളും → ഉബുണ്ടു സോഫ്റ്റ്‌വെയർ → സോഴ്‌സ് കോഡ്). /etc/apt/sources.list ഫയലിൽ deb-src എന്ന് തുടങ്ങുന്ന വരികൾ അൺകമന്റ് ചെയ്തുകൊണ്ട് കൺസോളിൽ നിന്ന് നിങ്ങൾക്ക് ഇത് ചെയ്യാൻ കഴിയും, തുടർന്ന് "sudo apt-get update" എന്ന കമാൻഡ് ഉപയോഗിച്ച് അപ്ഡേറ്റ് ചെയ്യുക.

    കേർണലിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് git വഴി ലഭ്യമാണ്. ഡൗൺലോഡ് ചെയ്ത പാക്കേജിന്റെ വലുപ്പം ~500-800 MB ആണ്. ജിറ്റ് ക്ലോൺ git://kernel.ubuntu.com/ubuntu/ubuntu- .git

    എവിടെ - റിലീസ് പേര്, ഉദാഹരണത്തിന്:

    ജിറ്റ് ക്ലോൺ git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git

മറ്റ് കേർണലുകൾ

ഉബുണ്ടുവിൽ പ്രവർത്തിക്കുമെന്ന് ഉറപ്പില്ലാത്ത കേർണലുകളുമുണ്ട്. ഉദാഹരണത്തിന്, നിരവധി ജനപ്രിയ സിസ്റ്റം ആപ്ലിക്കേഷനുകളിൽ (പ്രത്യേകിച്ച് NVidia ഡ്രൈവറുകൾ, VirtualBox) അറിയപ്പെടുന്ന ഒരു പ്രശ്നമുണ്ട്, അവ ഇൻസ്റ്റാൾ ചെയ്യുമ്പോൾ, ഇൻസ്റ്റാൾ ചെയ്ത കേർണലിനായി കംപൈൽ ചെയ്യുന്നു. അതിനാൽ, ഉബുണ്ടുവിന്റെ നൽകിയിരിക്കുന്ന പതിപ്പിന് നിലവാരമില്ലാത്ത ഒരു കേർണലിൽ അവ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് (ഉദാഹരണത്തിന്, ഉബുണ്ടു 16.04 കേർണൽ 4.4.0-നൊപ്പമാണ് വരുന്നത്) പ്രത്യേക മാനുവൽ കംപൈലേഷനോ പ്രത്യേക പാച്ചുകളോ ആവശ്യമായി വന്നേക്കാം, കൂടാതെ ആപ്ലിക്കേഷൻ അതിന്റെ ഏറ്റവും പുതിയ പതിപ്പുകളെ പിന്തുണച്ചേക്കില്ല. kernel.org-ൽ നിന്നുള്ള കേർണലുകൾ.

    പാച്ചുകൾ ഇല്ലാതെ അടിസ്ഥാന പതിപ്പിൽ നിന്ന് ആർക്കൈവ് ചെയ്യുക, അതായത്. ഉദാഹരണത്തിന് "4.8.0", "4.8.10": sudo apt-get install linux-source

കമാൻഡുകൾ ഉപയോഗിച്ച് ലഭിച്ച ആർക്കൈവ് അൺപാക്ക് ചെയ്യുക:

Cd ~/ tar -xjf linux-2.6.x.y.tar.bz2

അല്ലെങ്കിൽ linux-source-ന്റെ കാര്യത്തിൽ:

Cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2

ഘട്ടം 2. അസംബ്ലിക്ക് ആവശ്യമായ പാക്കേജുകൾ നേടുന്നു

കേർണൽ ആദ്യമായി കമ്പ്യൂട്ടറിൽ അസംബിൾ ചെയ്താൽ മാത്രമേ ഈ ഘട്ടം നടപ്പിലാക്കാവൂ

കോർ പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ താഴെ പറയുന്ന കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കുക:

Sudo apt-get update sudo apt-get build-dep linux sudo apt-get install kernel-package

    കോൺഫിഗറേഷൻ- പരമ്പരാഗത കോൺഫിഗറേഷൻ രീതി. പ്രോഗ്രാം കോൺഫിഗറേഷൻ ഓപ്ഷനുകൾ ഒരു സമയം പ്രദർശിപ്പിക്കുന്നു, അവ ഓരോന്നിനും വ്യത്യസ്തമായ മൂല്യം സജ്ജമാക്കാൻ നിങ്ങളെ പ്രേരിപ്പിക്കുന്നു. അനുഭവപരിചയമില്ലാത്ത ഉപയോക്താക്കൾക്ക് ശുപാർശ ചെയ്യുന്നില്ല.

    oldconfig- നിലവിലെ കേർണൽ കോൺഫിഗറേഷൻ അടിസ്ഥാനമാക്കി കോൺഫിഗറേഷൻ ഫയൽ സ്വയമേവ സൃഷ്ടിക്കപ്പെടുന്നു. തുടക്കക്കാർക്കായി ശുപാർശ ചെയ്യുന്നു.

    defconfig- സ്ഥിരസ്ഥിതി മൂല്യങ്ങളെ അടിസ്ഥാനമാക്കി കോൺഫിഗറേഷൻ ഫയൽ യാന്ത്രികമായി സൃഷ്ടിക്കപ്പെടുന്നു.

    മെനു കോൺഫിഗറേഷൻ- മാനുവൽ കോൺഫിഗറേഷനുള്ള കപട-ഗ്രാഫിക്കൽ ഇന്റർഫേസ്, പാരാമീറ്റർ മൂല്യങ്ങളുടെ തുടർച്ചയായ ഇൻപുട്ട് ആവശ്യമില്ല. ഒരു ടെർമിനലിൽ ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു.

    xconfig- മാനുവൽ കോൺഫിഗറേഷനുള്ള ഗ്രാഫിക്കൽ (എക്സ്) ഇന്റർഫേസ്, പാരാമീറ്റർ മൂല്യങ്ങളുടെ തുടർച്ചയായ ഇൻപുട്ട് ആവശ്യമില്ല.

    gconfig- മാനുവൽ കോൺഫിഗറേഷനുള്ള ഗ്രാഫിക്കൽ (GTK+) ഇന്റർഫേസ്, പരാമീറ്റർ മൂല്യങ്ങളുടെ തുടർച്ചയായ ഇൻപുട്ട് ആവശ്യമില്ല. ഗ്നോം പരിതസ്ഥിതിയിൽ ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു.

    ലോക്കൽമോഡ് കോൺഫിഗറേഷൻ- ഈ പ്രത്യേക ഉപകരണത്തിന് ആവശ്യമുള്ളത് മാത്രം ഉൾക്കൊള്ളുന്ന ഒരു കോൺഫിഗറേഷൻ ഫയൽ സ്വയമേവ സൃഷ്ടിക്കപ്പെടുന്നു. ഈ കമാൻഡ് വിളിക്കുമ്പോൾ, മിക്ക കോറുകളും മോഡുലേറ്റ് ചെയ്യപ്പെടും

നിങ്ങൾ ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്ന സാഹചര്യത്തിൽ കോൺഫിഗറേഷൻ, oldconfig, defconfig, ലോക്കൽമോഡ് കോൺഫിഗറേഷൻഅഥവാ ലോക്കൽ കോൺഫിഗറേഷൻ, നിങ്ങൾക്ക് ഇനി അധിക പാക്കേജുകളൊന്നും ആവശ്യമില്ല. ശേഷിക്കുന്ന മൂന്ന് ഓപ്ഷനുകളുടെ കാര്യത്തിൽ, നിങ്ങൾ അധിക പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യണം.

മെനു കോൺഫിഗറേഷൻഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Sudo apt-get install libncurses5-dev

ഉപയോഗത്തിന് ആവശ്യമായ പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ gconfigഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev

ഉപയോഗത്തിന് ആവശ്യമായ പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ xconfigഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

ഉബുണ്ടു 12.04-ന് മുമ്പ്: sudo apt-get install qt3-dev-tools libqt3-mt-dev

Sudo apt-get install libqt4-dev

ഘട്ടം 3. പാച്ചുകൾ പ്രയോഗിക്കുന്നു

ഈ ഘട്ടം ഓപ്ഷണൽ ആണ്.

മുകളിൽ വിവരിച്ചിരിക്കുന്ന കമാൻഡ് ഉപയോഗിച്ചാണ് കേർണൽ ലഭിച്ചതെങ്കിൽ, ഉറവിടങ്ങളിൽ ഔദ്യോഗിക പാച്ചുകൾ ഇതിനകം പ്രയോഗിച്ചു:

Apt-get source linux-image-`uname -r`

നിങ്ങൾ മുമ്പ് സോഴ്സ് കോഡിലേക്ക് പാച്ചുകൾ പ്രയോഗിച്ചിട്ടില്ലെങ്കിൽ, ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Sudo apt-get ഇൻസ്റ്റാൾ പാച്ച്

ഈ കമാൻഡ് പാച്ച് പ്രോഗ്രാം ഇൻസ്റ്റാൾ ചെയ്യും, അത് പാച്ചുകൾ പ്രയോഗിക്കുന്നതിന് ആവശ്യമാണ്. ഇപ്പോൾ നിങ്ങൾ കേർണൽ എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്‌ത ഫോൾഡറിലേക്ക് പാച്ച് ഫയൽ ഡൗൺലോഡ് ചെയ്യുക. ഇത് ഒന്നുകിൽ ഒരു ആർക്കൈവ് ഫയൽ (ഉദാ: Bzip2 അല്ലെങ്കിൽ Gzip) അല്ലെങ്കിൽ കംപ്രസ് ചെയ്യാത്ത ഒരു പാച്ച് ഫയൽ ആകാം.

ഈ സമയത്ത്, നിങ്ങൾ മുമ്പ് കേർണൽ അൺപാക്ക് ചെയ്യുകയും പാച്ച് പ്രോഗ്രാം ഇൻസ്റ്റാൾ ചെയ്യുകയും ചെയ്ത ഫോൾഡറിലേക്ക് ഫയൽ ഇതിനകം സംരക്ഷിച്ചിട്ടുണ്ടെന്ന് അനുമാനിക്കാം.
നിങ്ങൾ ഡൗൺലോഡ് ചെയ്‌ത ഫയൽ Gzip (*.gz) ഫോർമാറ്റിലാണെങ്കിൽ, ആർക്കൈവിന്റെ ഉള്ളടക്കങ്ങൾ എക്‌സ്‌ട്രാക്‌റ്റുചെയ്യുന്നതിന് ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

ഗൺസിപ്പ് പാച്ച്-2.6.x.y.gz

നിങ്ങൾ ഡൗൺലോഡ് ചെയ്‌ത ഫയൽ Bzip2 (*.bz2) ഫോർമാറ്റിലാണെങ്കിൽ, ആർക്കൈവിന്റെ ഉള്ളടക്കങ്ങൾ എക്‌സ്‌ട്രാക്‌റ്റുചെയ്യുന്നതിന് ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Bunzip2 പാച്ച്-2.6.x.y.bz2

ഇവിടെ 2.6.x.y എന്നത് കേർണൽ പാച്ച് പതിപ്പാണ്. ഉചിതമായ കമാൻഡുകൾ പാച്ച് ഫയൽ കേർണൽ സോഴ്സ് ഫോൾഡറിലേക്ക് എക്സ്ട്രാക്റ്റ് ചെയ്യും. പാച്ച് പ്രയോഗിക്കുന്നതിന് മുമ്പ്, അത് പിശകുകളില്ലാതെ പ്രവർത്തിക്കുമെന്ന് നിങ്ങൾ ഉറപ്പാക്കേണ്ടതുണ്ട്. ഇത് ചെയ്യുന്നതിന്, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

പാച്ച് -p1 -i പാച്ച്-2.6.x.y --ഡ്രൈ-റൺ

ഇവിടെ 2.6.x.y എന്നത് കേർണൽ പാച്ച് പതിപ്പാണ്. ഈ കമാൻഡ് ഫയലുകൾ മാറ്റാതെ തന്നെ ഒരു പാച്ചിന്റെ പ്രയോഗത്തെ അനുകരിക്കും.

അതിന്റെ നിർവ്വഹണ സമയത്ത് പിശകുകളൊന്നും സംഭവിക്കുന്നില്ലെങ്കിൽ, മാറ്റങ്ങൾ സുരക്ഷിതമായി ഫയലുകളിൽ തന്നെ നടപ്പിലാക്കാൻ കഴിയും. ഇത് ചെയ്യുന്നതിന്, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

പാച്ച് -p1 -i പാച്ച്-2.6.x.y

ഇവിടെ 2.6.x.y എന്നത് കേർണൽ പാച്ച് പതിപ്പാണ്. പിശകുകളൊന്നും ഇല്ലെങ്കിൽ, സോഴ്സ് കോഡിലേക്ക് പാച്ച് വിജയകരമായി പ്രയോഗിച്ചു.

ശ്രദ്ധ!പാച്ച് പ്രയോഗിക്കുന്നതിന് മുമ്പ്, ഇനിപ്പറയുന്ന ഘട്ടങ്ങൾ ചെയ്യുക: 1. http://www.kernel.org-ൽ നിന്ന് നിങ്ങളുടെ ഉറവിടങ്ങളുടെ അതേ പതിപ്പിന്റെ പാച്ച് ഡൗൺലോഡ് ചെയ്യുക. 2. ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: patch -p1 -R

ഇവിടെ 2.6.x.y എന്നത് പാച്ചിന്റെയും നിങ്ങളുടെ ഉറവിടങ്ങളുടെയും പതിപ്പാണ്

ഘട്ടം 4. ഭാവിയിലെ കേർണൽ ബിൽഡിന്റെ കോൺഫിഗറേഷൻ

കമാൻഡ് പ്രവർത്തിപ്പിച്ച് നിങ്ങൾ കേർണൽ എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്‌ത ഫോൾഡറിലേക്ക് പോകുക

Cd ~/linux-2.6.x.y

നിങ്ങൾ ഡൗൺലോഡ് ചെയ്‌ത കേർണലിന്റെ പതിപ്പാണ് 2.6.x.y.

ഈ ഘട്ടത്തിൽ, നിങ്ങൾ ഇതിനകം ഒരു കേർണൽ കോൺഫിഗറേഷൻ രീതി തീരുമാനിച്ചിരിക്കണം (ഇല്ലെങ്കിൽ, "ബിൽഡ് ചെയ്യാൻ ആവശ്യമായ പാക്കേജുകൾ നേടൽ" വിഭാഗത്തിൽ അവ പരിശോധിക്കുക) ഇതിനെ ആശ്രയിച്ച്, നിങ്ങൾ തിരഞ്ഞെടുത്ത കോൺഫിഗറേഷൻ രീതി പ്രവർത്തിപ്പിക്കുന്നതിന് ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

    കോൺഫിഗറേഷൻ- പരമ്പരാഗത കോൺഫിഗറേഷൻ രീതി. പ്രോഗ്രാം കോൺഫിഗറേഷൻ ഓപ്ഷനുകൾ ഒരു സമയം പ്രദർശിപ്പിക്കുന്നു, അവ ഓരോന്നിനും വ്യത്യസ്തമായ മൂല്യം സജ്ജമാക്കാൻ നിങ്ങളെ പ്രേരിപ്പിക്കുന്നു. make config കമാൻഡ് വഴി വിളിക്കുന്നു

    oldconfig- നിലവിലെ കേർണൽ കോൺഫിഗറേഷൻ അടിസ്ഥാനമാക്കി കോൺഫിഗറേഷൻ ഫയൽ സ്വയമേവ സൃഷ്ടിക്കപ്പെടുന്നു. തുടക്കക്കാർക്കായി ശുപാർശ ചെയ്യുന്നു. make oldconfig വഴി വിളിക്കുന്നു

    defconfig- ഈ പ്രത്യേക ആർക്കിടെക്ചറിനായി സ്ഥിരസ്ഥിതി മൂല്യങ്ങളെ അടിസ്ഥാനമാക്കി കോൺഫിഗറേഷൻ ഫയൽ സ്വയമേവ സൃഷ്ടിക്കപ്പെടുന്നു. make defconfig വഴി വിളിക്കുന്നു

    മെനു കോൺഫിഗറേഷൻ- മാനുവൽ കോൺഫിഗറേഷനുള്ള കപട-ഗ്രാഫിക്കൽ ഇന്റർഫേസ്, പാരാമീറ്റർ മൂല്യങ്ങളുടെ തുടർച്ചയായ ഇൻപുട്ട് ആവശ്യമില്ല. ഒരു ടെർമിനലിൽ ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു. വിളിക്കുക: menuconfig ഉണ്ടാക്കുക

    gconfigഒപ്പം xconfig- മാനുവൽ കോൺഫിഗറേഷനുള്ള ഗ്രാഫിക്കൽ കോൺഫിഗറേറ്ററുകൾ. വിളിക്കുക: gconfig ഉണ്ടാക്കുക

    xconfig ഉണ്ടാക്കുക

    യഥാക്രമം

    ലോക്കൽമോഡ് കോൺഫിഗറേഷൻഒപ്പം ലോക്കൽ കോൺഫിഗറേഷൻ- ഓട്ടോമാറ്റിക് കോൺഫിഗറേറ്ററുകൾ. നിലവിൽ വിളിക്കപ്പെടുന്ന മൊഡ്യൂളുകളും പ്രവർത്തിക്കുന്ന കേർണലും അടിസ്ഥാനമാക്കിയാണ് കോൺഫിഗറേഷൻ സൃഷ്ടിച്ചിരിക്കുന്നത്. ഈ രണ്ട് കോൺഫിഗറേറ്ററുകൾ തമ്മിലുള്ള വ്യത്യാസം മൊഡ്യൂളുകളുടെ എണ്ണമാണ്. ആദ്യ സന്ദർഭത്തിൽ, കുറഞ്ഞത് 50% കോർ ഉണ്ടായിരിക്കും, രണ്ടാമത്തേതിൽ 2 മൊഡ്യൂളുകളിൽ കൂടരുത്. വിളിക്കുക: localmodconfig ഉണ്ടാക്കുക

    ലോക്കൽ കോൺഫിഗറേഷൻ ഉണ്ടാക്കുക

    യഥാക്രമം

ഒരിക്കൽ വിളിച്ചാൽ, അനുബന്ധ കോൺഫിഗറേഷൻ പ്രോഗ്രാം സമാരംഭിക്കും. നിങ്ങളുടെ ആവശ്യങ്ങൾക്കനുസരിച്ച് ആവശ്യമായ ക്രമീകരണങ്ങൾ ഉണ്ടാക്കുക, കോൺഫിഗറേഷൻ ഫയൽ സംരക്ഷിച്ച് അടുത്ത ഘട്ടത്തിലേക്ക് പോകുക.

ഘട്ടം 5: കേർണൽ നിർമ്മിക്കുന്നു

അങ്ങനെ ഒരുക്കങ്ങൾ പൂർത്തിയായി. ഇപ്പോൾ നിങ്ങൾക്ക് കേർണൽ നിർമ്മാണ പ്രക്രിയ ആരംഭിക്കാം. ഇത് ചെയ്യുന്നതിന്, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j<количество ядер процессора>+1

കമ്പ്യൂട്ടറിന്റെ കേർണൽ കോൺഫിഗറേഷനും സാങ്കേതിക പാരാമീറ്ററുകളും അനുസരിച്ച് കേർണൽ നിർമ്മിക്കുന്നതിന് 20 മിനിറ്റ് മുതൽ നിരവധി മണിക്കൂർ വരെ എടുക്കാം. ഒരു മൾട്ടി-കോർ പ്രൊസസർ ഉപയോഗിച്ച് അസംബ്ലി പല മടങ്ങ് വേഗത്തിലാക്കാം

ഘട്ടം 6: കേർണൽ ഇമേജുകളും ഹെഡറുകളും ഇൻസ്റ്റാൾ ചെയ്യുന്നു

കേർണൽ നിർമ്മാണം പൂർത്തിയാകുമ്പോൾ, നിങ്ങളുടെ ഹോം ഫോൾഡറിൽ രണ്ട് deb പാക്കേജുകൾ ദൃശ്യമാകും. അവ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. ഇത് ചെയ്യുന്നതിന്, കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കുക:

Cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.60.y.x. Custom_arc.deb

ഇവിടെ 2.6.x.y എന്നത് അസംബിൾ ചെയ്ത കേർണലിന്റെ പതിപ്പാണ്, ആർക്ക് എന്നത് പ്രോസസർ ആർക്കിടെക്ചറാണ് (i386 - 32-ബിറ്റ്, amd64 - 64-ബിറ്റ്).
പാക്കേജിന്റെ കൃത്യമായ പേര് നിങ്ങൾക്ക് അറിയില്ലെങ്കിൽ, കമാൻഡ് ഉപയോഗിച്ച് നിങ്ങളുടെ ഹോം ഡയറക്ടറിയിലെ ഫയലുകൾ ലിസ്റ്റ് ചെയ്യുക

ഈ രണ്ട് പാക്കേജുകളും കണ്ടെത്തുക.

ഘട്ടം 7. പ്രാരംഭ റാം ഡിസ്ക് സൃഷ്ടിക്കുന്നു

ശരിയായി പ്രവർത്തിക്കാൻ, ഉബുണ്ടുവിന് ഒരു പ്രാരംഭ റാം ഡിസ്ക് ഇമേജ് ആവശ്യമാണ്. ഇത് സൃഷ്ടിക്കാൻ, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Sudo update-initramfs -c -k 2.6.x.y-custom

ഇവിടെ 2.6.x.y എന്നത് കംപൈൽ ചെയ്ത കേർണലിന്റെ പതിപ്പാണ്.

ഘട്ടം 8: GRUB ബൂട്ട് ലോഡർ കോൺഫിഗറേഷൻ അപ്ഡേറ്റ് ചെയ്യുന്നു

കമ്പ്യൂട്ടർ ബൂട്ട് ചെയ്യുമ്പോൾ തിരഞ്ഞെടുക്കുന്നതിന് പുതിയ കേർണൽ പതിപ്പ് ലഭ്യമാണെന്ന് ഉറപ്പാക്കാൻ, ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

സുഡോ അപ്ഡേറ്റ്-ഗ്രബ്

ഇൻസ്റ്റാൾ ചെയ്ത ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളുടെയും കേർണൽ ഇമേജുകളുടെയും ലഭ്യത അനുസരിച്ച് മെനു.lst (GRUB പതിപ്പ് 1-ന്) അല്ലെങ്കിൽ grub.cfg (GRUB പതിപ്പ് 2-ന്) ഫയൽ അപ്ഡേറ്റ് ചെയ്യും.

ഘട്ടം 9: കേർണൽ പരിശോധിക്കുന്നു

കേർണൽ അസംബ്ലിയും ഇൻസ്റ്റാളേഷനും വിജയകരമായി പൂർത്തിയായി! ഇപ്പോൾ നിങ്ങളുടെ കമ്പ്യൂട്ടർ പുനരാരംഭിച്ച് പുതിയ കേർണൽ ഉപയോഗിച്ച് സിസ്റ്റം ബൂട്ട് ചെയ്യാൻ ശ്രമിക്കുക. സിസ്റ്റം പുതിയ കേർണലിലാണ് പ്രവർത്തിക്കുന്നതെന്ന് ഉറപ്പാക്കാൻ, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക

ഉണമേ -ആർ

ഇത് ഉപയോഗിക്കുന്ന കേർണൽ പതിപ്പ് പ്രദർശിപ്പിക്കും.

എല്ലാം ശരിയായി ചെയ്താൽ, നിങ്ങളുടെ ഹോം ഫോൾഡറിലെ സോഴ്സ് കോഡ് ആർക്കൈവുകളും മുഴുവൻ linux-2.6.x.y ഡയറക്ടറിയും നിങ്ങൾക്ക് ഇല്ലാതാക്കാം. ഇത് നിങ്ങളുടെ ഹാർഡ് ഡ്രൈവിൽ ഏകദേശം 5 GB സ്വതന്ത്രമാക്കും (നിങ്ങളുടെ ബിൽഡ് സജ്ജീകരണങ്ങളെ ആശ്രയിച്ചാണ് സ്ഥലം സ്വതന്ത്രമാക്കുന്നത്).

ഇത് അസംബ്ലിയും ഇൻസ്റ്റാളേഷൻ പ്രക്രിയയും പൂർത്തിയാക്കുന്നു, അഭിനന്ദനങ്ങൾ!

ഒരു Android ഫോണിനായി നിങ്ങൾക്ക് ഒരു Linux കേർണൽ ഇമേജ് ഉണ്ടെന്ന് സങ്കൽപ്പിക്കുക, എന്നാൽ നിങ്ങൾക്ക് അനുബന്ധ ഉറവിടമോ കേർണൽ ഹെഡർ ഫയലുകളോ ഇല്ല. മൊഡ്യൂളുകൾ ലോഡുചെയ്യുന്നതിന് കേർണലിന് പിന്തുണയുണ്ടെന്ന് സങ്കൽപ്പിക്കുക (നന്ദിയോടെ), ആ കേർണലിനായി നിങ്ങൾ ഒരു മൊഡ്യൂൾ നിർമ്മിക്കാൻ ആഗ്രഹിക്കുന്നു. നിങ്ങൾക്ക് ഉറവിടത്തിൽ നിന്ന് ഒരു പുതിയ കേർണൽ നിർമ്മിക്കാൻ കഴിയാത്തതിന് നിരവധി നല്ല കാരണങ്ങളുണ്ട് (ഉദാഹരണത്തിന്, ബിൽറ്റ് കേർണലിന് LCD അല്ലെങ്കിൽ ടച്ച്‌സ്‌ക്രീൻ പോലുള്ള ചില പ്രധാന ഉപകരണങ്ങളുടെ പിന്തുണയില്ല). ലിനക്സ് കേർണലിന്റെ നിരന്തരമായി മാറിക്കൊണ്ടിരിക്കുന്ന എബിഐയും സോഴ്സ്, ഹെഡ്ഡർ ഫയലുകളുടെ അഭാവവും, നിങ്ങൾ ഒരു അവസാനഘട്ടത്തിലെത്തിയെന്ന് നിങ്ങൾ കരുതിയേക്കാം.

വസ്തുതയുടെ ഒരു പ്രസ്താവന എന്ന നിലയിൽ, നിങ്ങളുടെ പക്കലുള്ള കേർണൽ ഇമേജ് നിർമ്മിക്കാൻ ഉപയോഗിക്കുന്നതിനേക്കാൾ വ്യത്യസ്തമായ ഹെഡർ ഫയലുകൾ ഉപയോഗിച്ചാണ് നിങ്ങൾ ഒരു കേർണൽ മൊഡ്യൂൾ നിർമ്മിക്കുന്നതെങ്കിൽ, ഹെഡർ ഫയലുകൾ ആവശ്യമായതിൽ നിന്ന് എങ്ങനെ വ്യത്യാസപ്പെട്ടിരിക്കുന്നു എന്നതിനെ ആശ്രയിച്ച് പിശകുകളോടെ മൊഡ്യൂൾ ലോഡ് ചെയ്യുന്നതിൽ പരാജയപ്പെടും. മോശം ഒപ്പുകൾ, മോശം പതിപ്പുകൾ, മറ്റ് കാര്യങ്ങൾ എന്നിവയെക്കുറിച്ച് അയാൾ പരാതിപ്പെട്ടേക്കാം.

കേർണൽ കോൺഫിഗറേഷൻ

കേർണൽ ഇമേജിനോട് കഴിയുന്നത്ര അടുത്തിരിക്കുന്ന കേർണൽ ഉറവിടങ്ങൾ കണ്ടെത്തുക എന്നതാണ് ആദ്യപടി. ശരിയായ കോൺഫിഗറേഷൻ ലഭിക്കുന്നത് മൊഡ്യൂൾ അസംബ്ലി പ്രക്രിയയുടെ ഏറ്റവും ബുദ്ധിമുട്ടുള്ള ഭാഗമാണ്. /proc/version ൽ നിന്ന് വായിക്കാൻ കഴിയുന്ന കേർണൽ പതിപ്പ് നമ്പർ ഉപയോഗിച്ച് ആരംഭിക്കുക. എന്നെപ്പോലെ, നിങ്ങളും ഒരു Android ഉപകരണത്തിനായി ഒരു മൊഡ്യൂൾ നിർമ്മിക്കുകയാണെങ്കിൽ, നിങ്ങളുടെ ഉപകരണത്തിന് ഏറ്റവും അടുത്തുള്ള കോഡ് Aurora, Cyanogen, അല്ലെങ്കിൽ Android എന്നിവയിൽ നിന്നുള്ള Android കേർണലുകൾ പരീക്ഷിക്കുക. എന്റെ കാര്യത്തിൽ, അത് msm-3.0 കേർണൽ ആയിരുന്നു. നിങ്ങളുടെ കേർണൽ ഇമേജ് പതിപ്പിന്റെ അതേ ഉറവിട പതിപ്പിനായി നിങ്ങൾ നോക്കേണ്ടതില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക. ചെറിയ പതിപ്പ് വ്യത്യാസങ്ങൾ മിക്കവാറും ഒരു പ്രശ്നമാകില്ല. ഞാൻ കേർണൽ ഉറവിടങ്ങൾ 3.0.21 ഉപയോഗിച്ചു, അതേസമയം നിലവിലുള്ള കേർണൽ ഇമേജിന്റെ പതിപ്പ് 3.0.8 ആയിരുന്നു. എന്നിരുന്നാലും, നിങ്ങൾക്ക് 3.0.x കേർണൽ ഇമേജ് ഉണ്ടെങ്കിൽ 3.1 കേർണൽ ഉറവിടങ്ങൾ ഉപയോഗിക്കാൻ ശ്രമിക്കരുത്.

നിങ്ങളുടെ പക്കലുള്ള കേർണൽ ഇമേജ് ഒരു /proc/config.gz ഫയൽ നൽകാൻ പര്യാപ്തമാണെങ്കിൽ, നിങ്ങൾക്ക് അത് ഉപയോഗിച്ച് ആരംഭിക്കാം, അല്ലാത്തപക്ഷം, നിങ്ങൾക്ക് സ്ഥിരസ്ഥിതി കോൺഫിഗറേഷൻ ഉപയോഗിച്ച് ആരംഭിക്കാൻ ശ്രമിക്കാം, എന്നാൽ ഈ സാഹചര്യത്തിൽ നിങ്ങൾ അതീവ ജാഗ്രത പാലിക്കേണ്ടതുണ്ട് ( അതേസമയം ഡിഫോൾട്ട് കോൺഫിഗറേഷൻ ഉപയോഗിക്കുന്നതിനെ കുറിച്ച് ഞാൻ വിശദമായി പറയില്ല, കാരണം അത് അവലംബിക്കേണ്ടതില്ല എന്നത് എന്റെ ഭാഗ്യമാണ്, എന്തുകൊണ്ടാണ് ശരിയായ കോൺഫിഗറേഷൻ വളരെ പ്രധാനമായത് എന്നതിനെക്കുറിച്ചുള്ള കുറച്ച് വിശദാംശങ്ങൾ ചുവടെയുണ്ട്).

നിങ്ങളുടെ PATH എൻവയോൺമെന്റ് വേരിയബിളിലെ പാഥുകളിലൊന്നിൽ arm-eabi-gcc ലഭ്യമാണെന്നും കേർണൽ സോഴ്സ് ഫോൾഡറിൽ ഒരു ടെർമിനൽ തുറന്നിട്ടുണ്ടെന്നും കരുതി, നിങ്ങൾക്ക് കേർണൽ കോൺഫിഗർ ചെയ്യാനും ഹെഡർ ഫയലുകളും സ്ക്രിപ്റ്റുകളും ഇൻസ്റ്റാൾ ചെയ്യാനും കഴിയും:

$ mkdir build $ gunzip config.gz > build/.config # അല്ലെങ്കിൽ എന്തും തയ്യാറാക്കാൻ .config $ ഉണ്ടാക്കുക silentoldconfig headers_install scripts ARCH=arm CROSS_COMPILE=arm-eabi- O=build KERNELRELEASE=`adb shell uname - r`
നിങ്ങൾക്ക് ചില ഓപ്‌ഷനുകൾ പ്രവർത്തനക്ഷമമാക്കാൻ താൽപ്പര്യമുണ്ടോ എന്ന് സൈലന്റ്‌കോൺഫിഗ് ബിൽഡ് ചോദിക്കും. നിങ്ങൾക്ക് ഡിഫോൾട്ടുകൾ തിരഞ്ഞെടുക്കാം, പക്ഷേ ഇത് നന്നായി പ്രവർത്തിച്ചേക്കില്ല.

KERNELRELEASE-ൽ നിങ്ങൾക്ക് മറ്റെന്തെങ്കിലും ഉപയോഗിക്കാം, എന്നാൽ നിങ്ങൾ മൊഡ്യൂൾ ലോഡ് ചെയ്യാൻ ഉദ്ദേശിക്കുന്ന കേർണലിന്റെ പതിപ്പുമായി ഇത് കൃത്യമായി പൊരുത്തപ്പെടണം.

ഒരു ലളിതമായ മൊഡ്യൂൾ എഴുതുന്നു

ഒരു ശൂന്യമായ മൊഡ്യൂൾ സൃഷ്‌ടിക്കുന്നതിന്, നിങ്ങൾ രണ്ട് ഫയലുകൾ സൃഷ്‌ടിക്കേണ്ടതുണ്ട്: ഒരു ഉറവിടവും ഒരു മേക്ക്‌ഫയലും. ഇനിപ്പറയുന്ന കോഡ് hello.c ഫയലിൽ ഒരു പ്രത്യേക ഡയറക്ടറിയിൽ സ്ഥാപിക്കുക:

#ഉൾപ്പെടുന്നു /* എല്ലാ മൊഡ്യൂളുകൾക്കും ആവശ്യമാണ് */ #ഉൾപ്പെടുത്തുക /* KERN_INFO ന് ആവശ്യമാണ് */ #ഉൾപ്പെടുത്തുക /* മാക്രോകൾക്ക് ആവശ്യമാണ് */ സ്റ്റാറ്റിക് ഇൻറ്റ് __init hello_start(void) ( printk(KERN_INFO "Hello world\n"); return 0; ) static void __exit hello_end(void) ( printk(KERN_INFO "Goodbye world\n"); ) module_init(hello_start); module_exit(hello_end);
ഇനിപ്പറയുന്ന വാചകം അതേ ഡയറക്‌ടറിയിൽ ഒരു Makefile-ൽ സ്ഥാപിക്കുക:

Obj-m = hello.o
മൊഡ്യൂൾ കൂട്ടിച്ചേർക്കുന്നത് വളരെ ലളിതമാണ്, എന്നാൽ ഈ ഘട്ടത്തിൽ തത്ഫലമായുണ്ടാകുന്ന മൊഡ്യൂൾ ലോഡ് ചെയ്യാൻ കഴിയില്ല.

മൊഡ്യൂൾ അസംബ്ലി

ഒരു സാധാരണ കേർണൽ ബിൽഡ് സമയത്ത്, കേർണൽ ബിൽഡ് സിസ്റ്റം ഒരു hello.mod.c ഫയൽ സൃഷ്ടിക്കുന്നു, ഇതിലെ ഉള്ളടക്കം വിവിധ പ്രശ്നങ്ങൾ ഉണ്ടാക്കാം:

MODULE_INFO(vermagic, VERMAGIC_STRING);
VERMAGIC_STRING മൂല്യം നിർണ്ണയിക്കുന്നത് UTS_RELEASE മാക്രോ ആണ്, അത് കേർണൽ ബിൽഡ് സിസ്റ്റം ജനറേറ്റുചെയ്‌ത ഉൾപ്പെടുത്തിയ/ജനറേറ്റഡ്/utsrelease.h ഫയലിൽ സ്ഥിതിചെയ്യുന്നു. സ്ഥിരസ്ഥിതിയായി, ഈ മൂല്യം നിർണ്ണയിക്കുന്നത് കേർണൽ പതിപ്പും git റിപ്പോസിറ്ററി നിലയുമാണ്. ഇതാണ് കെർണൽ കോൺഫിഗർ ചെയ്യുമ്പോൾ KERNELRELEASE സെറ്റ് ചെയ്യുന്നത്. VERMAGIC_STRING കേർണൽ പതിപ്പുമായി പൊരുത്തപ്പെടുന്നില്ലെങ്കിൽ, മൊഡ്യൂൾ ലോഡുചെയ്യുന്നത് dmesg-ൽ ഇതുപോലുള്ള ഒരു സന്ദേശത്തിന് കാരണമാകും:

ഹലോ: പതിപ്പ് മാജിക് "3.0.21-perf-ge728813-00399-gd5fa0c9" "3.0.8-perf" ആയിരിക്കണം
അടുത്തതായി, മൊഡ്യൂൾ ഘടനയുടെ ഒരു നിർവചനവും ഇവിടെയുണ്ട്:

ഘടനാ ഘടകം __this_module __attribute__((section(".gnu.linkonce.this_module"))) = ( .name = KBUILD_MODNAME, .init = init_module, #ifdef CONFIG_MODULE_UNLOAD .
സ്വന്തമായി, ഈ നിർവചനം നിരുപദ്രവകരമാണെന്ന് തോന്നുന്നു, എന്നാൽ നിർവചിച്ചിരിക്കുന്ന സ്ട്രക്റ്റ് മൊഡ്യൂൾ ഘടനയിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്നത്/linux/module.h ഒരു അസുഖകരമായ ആശ്ചര്യമാണ്:

സ്ട്രക്റ്റ് മൊഡ്യൂൾ (...) #ifdef CONFIG_UNUSED_SYMBOLS (...) #endif (...) /* സ്റ്റാർട്ടപ്പ് ഫംഗ്‌ഷൻ. */ int (*init)(അസാധു); (...) #ifdef CONFIG_GENERIC_BUG (.. .) #endif #ifdef CONFIG_KALLSYMS (...) #endif (...) (... ധാരാളമായി ifdefs ...) #ifdef CONFIG_MODULE_UNLOAD (...) /* ഡിസ്ട്രക്ഷൻ ഫംഗ്‌ഷൻ. */ void (*എക്സിറ്റ്) (അസാധു); (...) #endif (...) )
ഇതിനർത്ഥം, init പോയിന്റർ ശരിയായ സ്ഥലത്ത് അവസാനിക്കുന്നതിന്, CONFIG_UNUSED_SYMBOLS എന്നത് നമ്മുടെ കേർണൽ ഇമേജ് ഉപയോഗിക്കുന്നത് അനുസരിച്ച് നിർവചിക്കേണ്ടതാണ്. എക്സിറ്റ് പോയിന്ററിനെ സംബന്ധിച്ചെന്ത്, ഇവയാണ് CONFIG_GENERIC_BUG , CONFIG_KALLSYMS , CONFIG_SMP , CONFIG_TRACEPOINTS , CONFIG_JUMP_LABEL , CONFIG_TRACING , CONFIG_EVENT_COUNT_CFRECEGD_COUNT _UNLOAD .

ഞങ്ങളുടെ കേർണൽ നിർമ്മിച്ച അതേ ഹെഡർ ഫയലുകൾ ഞങ്ങൾ സാധാരണയായി ഉപയോഗിക്കേണ്ടത് എന്തുകൊണ്ടാണെന്ന് നിങ്ങൾ മനസ്സിലാക്കാൻ തുടങ്ങിയോ?

സ്റ്റാറ്റിക് കൺസ്ട്രക്റ്റ് modversion_info ____versions __used __attribute__((section("__versions"))) = ( ( 0xsomehex, "module_layout" ), ( 0xsomehex, "__aeabi_unwind_cpp_pr0" )," , "xprint" );
ഈ നിർവചനങ്ങൾ Module.symvers ഫയലിൽ നിന്നാണ് വരുന്നത്, അത് ഹെഡർ ഫയലുകൾക്കനുസരിച്ച് ജനറേറ്റ് ചെയ്യപ്പെടുന്നു.

അത്തരത്തിലുള്ള ഓരോ എൻട്രിയും മൊഡ്യൂളിന് ആവശ്യമായ ചിഹ്നത്തെ പ്രതിനിധീകരിക്കുന്നു, ചിഹ്നത്തിന് എന്ത് ഒപ്പ് ഉണ്ടായിരിക്കണം. ആദ്യത്തെ പ്രതീകം, module_layout , struct മൊഡ്യൂൾ എങ്ങനെയിരിക്കും എന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു, അതായത്, നേരത്തെ സൂചിപ്പിച്ച കോൺഫിഗറേഷൻ ഓപ്ഷനുകൾ പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്നു എന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു. രണ്ടാമത്തേത്, __aeabi_unwind_cpp_pr0, ഒരു ARM ABI നിർദ്ദിഷ്ട ഫംഗ്‌ഷനാണ്, അവസാനത്തേത് ഞങ്ങളുടെ printk ഫംഗ്‌ഷൻ കോളുകൾക്കുള്ളതാണ്.

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

അതിനാൽ, നമ്മുടെ പക്കലുള്ള കേർണൽ ഇമേജ് നിർമ്മിക്കാൻ ഉപയോഗിച്ചതിന് അടുത്തായി ഉറവിടങ്ങളും കോൺഫിഗറേഷനുകളും ഉള്ള ഒരു കേർണൽ നിർമ്മിക്കുകയാണെങ്കിൽ, നമ്മുടെ കേർണൽ ഇമേജിലെ അതേ ഒപ്പുകൾ നമുക്ക് ലഭിക്കാതിരിക്കാനുള്ള സാധ്യതയുണ്ട്, അത് എപ്പോൾ ക്രാഷ് ആകും. മൊഡ്യൂൾ ലോഡ് ചെയ്യുന്നു:

ഹലോ: ചിഹ്നം_നാമത്തിന്റെ പതിപ്പിനെക്കുറിച്ച് വിയോജിക്കുന്നു
ഇതിനർത്ഥം കേർണൽ ഇമേജിനായി നമുക്ക് ശരിയായ Module.symvers ഫയൽ ആവശ്യമാണ്, അത് ഞങ്ങളുടെ പക്കലില്ല.

കേർണൽ പഠിക്കുന്നു

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

കേർണൽ അതിന്റെ ചിഹ്ന പട്ടിക (kernel/module.c ൽ) നോക്കുന്നതിന് ഇനിപ്പറയുന്ന ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു:

Bool ഓരോ_സിംബോൾ_സർപ്പം (ബൂൾ (* എഫ്എൻ) (കോൺകൂൾ * ഉടമ, ശൂന്യമായ മൊഡ്യൂൾ * ഉടമ, ശൂന്യമായ * ഡാറ്റ), (സ്ട്രൈക്ക്-കോൺട്രാബ്, __start___ക്സിമറ്റാബ്, __start___ക്സിമറ്റാബ്, __start___ക്ക്റ്റാബ്, __start___ക്ക്ക്റ്റാബ്, __start___ക്ക്ക്റ്റാബ്, __start___ക്ക്ക്റ്റാബ്, __start___ക്ക്ക്റ്റാബ്, __ സ്റ്റാർട്ട്___ക്ക്ക്റ്റാബ്, __ സ്റ്റാർട്ട്___ക്ക്റ്റാബ്, അല്ല_ , തെറ്റ് ), ( __start___ksymtab_gpl, __stop___ksymtab_gpl, __start___kcrctab_gpl, GPL_ONLY, false ), ( __start___ksymtab_gpl_future, __stop___ksymtab_gpl_future, __start___ksymtab_gpl_future, __start_gpl_fal_GPL_gpl_fal_gpl_gpl_y), def CONFIG_UNUSED _SYMBOLS ( __start___ksymtab_unused, __stop___ksymtab_unused, __start___kcrctab_unused, NOT_GPL_ONLY, true ), ( __start___ksymtab_unused_gpl, __stop__ctrab_kgtk , GPL_ONLY, true ), #endif ); (ഓരോ_ചിഹ്നവും_സെക്ഷനിലെ (arr, ARRAY_SIZE(arr), NULL, fn, ഡാറ്റ)) true എന്ന് തിരികെ നൽകുകയാണെങ്കിൽ; (...)
ഈ ഫംഗ്‌ഷനിൽ ഉപയോഗിച്ചിരിക്കുന്ന ഘടനയെ ഉൾപ്പെടുത്തിയിരിക്കുന്നത്/linux/module.h:

struct symsearch ( const struct kernel_symbol *start, *stop; const unsigned long *crcs; enum (NOT_GPL_ONLY, GPL_ONLY, WILL_BE_GPL_ONLY, ) ലൈസൻസ്; ബൂൾ ഉപയോഗിക്കാത്തത്; );
ശ്രദ്ധിക്കുക: കഴിഞ്ഞ നാല് വർഷമായി ഈ കേർണൽ കോഡിന് കാര്യമായ മാറ്റമൊന്നും സംഭവിച്ചിട്ടില്ല (പ്രത്യക്ഷമായും കേർണൽ 3.0 പുറത്തിറങ്ങിയതിന് ശേഷം - ഏകദേശം).

ഓരോ_symbol_section ഫംഗ്‌ഷനിലും നമുക്ക് മുകളിൽ ഉള്ളത് മൂന്ന് (അല്ലെങ്കിൽ CONFIG_UNUSED_SYMBOLS പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ അഞ്ച്) ഫീൽഡുകളാണ്, ഓരോന്നിലും ചിഹ്ന പട്ടികയുടെ തുടക്കവും അതിന്റെ അവസാനവും രണ്ട് ഫ്ലാഗുകളും അടങ്ങിയിരിക്കുന്നു.

ഈ ഡാറ്റ സ്ഥിരവും സ്ഥിരതയുള്ളതുമാണ്, അതായത് ഇത് കേർണൽ ബൈനറിയിൽ ദൃശ്യമാകും. ഓരോ_symbol_section-ലെ നിർവചനങ്ങളിൽ നിന്നും പൂർണ്ണസംഖ്യ മൂല്യങ്ങളും തുടർന്ന് കേർണൽ വിലാസ സ്ഥലത്ത് മൂന്ന് പോയിന്ററുകളുടെ തുടർച്ചയായ മൂന്ന് സീക്വൻസുകൾക്കായി കേർണൽ സ്കാൻ ചെയ്യുന്നതിലൂടെ, നമുക്ക് ചിഹ്നത്തിന്റെയും സിഗ്നേച്ചർ ടേബിളുകളുടെയും സ്ഥാനം നിർണ്ണയിക്കാനും കേർണലിൽ നിന്ന് Module.symvers ഫയൽ വീണ്ടും സൃഷ്ടിക്കാനും കഴിയും. ബൈനറി.

നിർഭാഗ്യവശാൽ, ഇന്ന് മിക്ക കേർണലുകളും കംപ്രസ്സുചെയ്‌തതാണ് (zImage), അതിനാൽ കംപ്രസ് ചെയ്‌ത ഇമേജിലൂടെ ലളിതമായ തിരയൽ സാധ്യമല്ല. കംപ്രസ് ചെയ്ത കേർണൽ യഥാർത്ഥത്തിൽ ഒരു ചെറിയ ബൈനറിയാണ്, തുടർന്ന് കംപ്രസ് ചെയ്ത സ്ട്രീം. കംപ്രസ് ചെയ്‌ത സ്ട്രീം കണ്ടെത്താനും അതിൽ നിന്ന് ഡീകംപ്രസ് ചെയ്‌ത ചിത്രം എക്‌സ്‌ട്രാക്‌റ്റുചെയ്യാനും നിങ്ങൾക്ക് ഒരു zImage ഫയൽ സ്കാൻ ചെയ്യാം.

ടാഗുകൾ: ടാഗുകൾ ചേർക്കുക

ലിനക്സ് കേർണൽ പുനർനിർമ്മിക്കുന്നത് വളരെ രസകരമായ ഒരു ബിസിനസ്സാണ്, ചില കാരണങ്ങളാൽ പലപ്പോഴും തുടക്കക്കാരെ ഭയപ്പെടുത്തുന്നു. എന്നാൽ അതിൽ സങ്കീർണ്ണമായ ഒന്നും തന്നെയില്ല, കൂടാതെ ലിനക്സ് കേർണൽ കംപൈൽ ചെയ്യുന്നത് ഉറവിടത്തിൽ നിന്ന് മറ്റേതെങ്കിലും പ്രോഗ്രാം നിർമ്മിക്കുന്നതിനേക്കാൾ ബുദ്ധിമുട്ടുള്ള കാര്യമല്ല. നിലവിലെ കേർണലിൽ ഉൾപ്പെടുത്തിയിട്ടില്ലാത്ത ചില സവിശേഷതകൾ നിങ്ങൾക്ക് ആവശ്യമുള്ളപ്പോൾ കേർണൽ പുനർനിർമ്മിക്കുന്നത് ആവശ്യമായി വന്നേക്കാം, അല്ലെങ്കിൽ, എന്തെങ്കിലും പ്രവർത്തനരഹിതമാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു. ഞങ്ങൾ ഉബുണ്ടു ലിനക്സിൽ എല്ലാ തുടർ പ്രവർത്തനങ്ങളും നടത്തും.

യൂട്ടിലിറ്റികൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നു

ലിനക്സ് കേർണൽ കോൺഫിഗർ ചെയ്യുന്നതിനും നിർമ്മിക്കുന്നതിനും, കെർണൽ നിർമ്മിക്കുന്നതിനും ക്രമീകരിക്കുന്നതിനും ആവശ്യമായ നിരവധി പാക്കേജുകൾ നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്: കേർണൽ-പാക്കേജ്, ബിൽഡ്-എസൻഷ്യൽ, libncurses-dev. കമാൻഡ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഇത് ചെയ്യാൻ കഴിയും:

sudo apt-get install build-essential kernel-package libncurses-dev

കേർണൽ സോഴ്സ് കോഡ് ഡൗൺലോഡ് ചെയ്യുക

ഇപ്പോൾ നിങ്ങൾ കേർണൽ സോഴ്സ് കോഡ് ഡൗൺലോഡ് ചെയ്യേണ്ടതുണ്ട്. ഞങ്ങൾ ഉബുണ്ടുവിനുള്ള കേർണൽ ഡൗൺലോഡ് ചെയ്യും. നിങ്ങൾ നിലവിൽ ഉപയോഗിക്കുന്നതുപോലുള്ള കേർണലിന്റെ ഒരു നിർദ്ദിഷ്‌ട പതിപ്പ് നിങ്ങൾക്ക് ഡൗൺലോഡ് ചെയ്യാം അല്ലെങ്കിൽ ഏറ്റവും പുതിയ പതിപ്പ് ഡൗൺലോഡ് ചെയ്യാം. നിങ്ങൾ ഉപയോഗിക്കുന്ന Linux കേർണലിന്റെ പതിപ്പ് നിർണ്ണയിക്കാൻ, -r ഓപ്ഷൻ ഉപയോഗിച്ച് uname കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

ഉണമേ -ആർ

കമാൻഡിന്റെ ഔട്ട്പുട്ട് ഇതുപോലെയായിരിക്കും:

$uname -r 2.6.27-11-generic

കേർണൽ സോഴ്സ് കോഡ് അടങ്ങിയ പാക്കേജിന്റെ പേര് സാധാരണയായി ഇതുപോലെയാണ് കാണപ്പെടുന്നത്: linux-source-Version. ഉദാഹരണത്തിന്, കേർണൽ പതിപ്പ് 2.6.24: linux-source-2.6.24. ഉബുണ്ടു റിപ്പോസിറ്ററികളിലെ കേർണലിന്റെ ഏറ്റവും പുതിയ പതിപ്പിനെ ലിനക്സ്-സോഴ്സ് എന്ന് വിളിക്കുന്നു, അവസാനം പതിപ്പൊന്നും വ്യക്തമാക്കിയിട്ടില്ല. ഏറ്റവും പുതിയ ഉബുണ്ടു ലിനക്സ് കേർണൽ ഉറവിടങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന്, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

sudo apt-get install linux-source

ഈ കമാൻഡ് കേർണൽ ഉറവിടങ്ങൾ ഡൗൺലോഡ് ചെയ്യുകയും അവയെ /usr/src ഡയറക്ടറിയിൽ സ്ഥാപിക്കുകയും ചെയ്യുന്നു. എഴുതുമ്പോൾ, ഡൗൺലോഡ് ചെയ്ത കേർണലിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് 2.6.27 ആണ്, അതാണ് ഞങ്ങൾ ഉപയോഗിക്കുന്നത്. നമ്മൾ ഇപ്പോൾ /usr/src ഡയറക്ടറിയിൽ പോയി ls കമാൻഡ് എക്സിക്യൂട്ട് ചെയ്താൽ, ഫയലുകൾക്കിടയിൽ linux-source-2.6.27.tar.bz2 എന്ന ഫയൽ ഉണ്ടെന്ന് കാണാം. ലിനക്സ് കേർണലിന്റെ (ഉബുണ്ടു കേർണൽ) സോഴ്സ് കോഡുകൾ ഇവയാണ്.

കേർണൽ സോഴ്സ് കോഡ് അൺപാക്ക് ചെയ്യുന്നു

നമുക്ക് /usr/src ഡയറക്ടറിയിലേക്ക് പോയി കേർണൽ അൺസിപ്പ് ചെയ്യാം. ഇത് ചെയ്യുന്നതിന്, ഇനിപ്പറയുന്ന കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കുക:

Cd /usr/src sudo tar xjf linux-source-2.6.27.tar.bz2 sudo ln -s linux-source-2.6.27 linux

കേർണൽ കോൺഫിഗറേഷൻ

ഇനി നമുക്ക് കേർണൽ ക്രമീകരിക്കുന്നതിലേക്ക് പോകാം. ആദ്യം മുതൽ ഒരു കോൺഫിഗറേഷൻ സൃഷ്ടിക്കാതിരിക്കാൻ, നിലവിൽ ഉപയോഗത്തിലുള്ള കേർണൽ കോൺഫിഗറേഷൻ ഞങ്ങൾ അടിസ്ഥാനമായി എടുക്കും. make oldconfig കമാൻഡ് പ്രവർത്തിപ്പിച്ച് നിങ്ങൾക്ക് നിലവിലെ കോൺഫിഗറേഷൻ ലഭിക്കും. ടെർമിനലിൽ പ്രവർത്തിപ്പിക്കുക:

Cd /usr/src/linux sudo പഴയ കോൺഫിഗറേഷൻ ഉണ്ടാക്കുക

make oldconfig പ്രവർത്തിപ്പിക്കുന്നത് കേർണൽ കോൺഫിഗറേഷൻ ഓപ്ഷനുകൾ അടങ്ങിയ ഒരു .config ഫയൽ സൃഷ്ടിക്കും.

make help കമാൻഡ് പ്രവർത്തിപ്പിക്കുന്നതിലൂടെ ലിനക്സ് കേർണലിനുള്ള എല്ലാ മേക്ക് ഓപ്ഷനുകളിലും നിങ്ങൾക്ക് സഹായം ലഭിക്കും.

കേർണൽ കോൺഫിഗറേഷൻ മാറ്റുന്നതിന്, ഞങ്ങൾ മെനു കോൺഫിഗേഷൻ കൺസോൾ യൂട്ടിലിറ്റി ഉപയോഗിക്കും. ഇത് പ്രവർത്തിപ്പിക്കാൻ, പ്രവർത്തിപ്പിക്കുക:

സുഡോ മെനു കോൺഫിഗറേഷൻ ഉണ്ടാക്കുക

നിങ്ങൾക്ക് ചില കേർണൽ ഓപ്ഷനുകൾ പ്രാപ്തമാക്കാനോ പ്രവർത്തനരഹിതമാക്കാനോ കഴിയുന്ന ഒരു ഇന്റർഫേസ് നിങ്ങൾ കാണും:

ഉദാഹരണത്തിന്, ഞാൻ "NTFS റൈറ്റ് സപ്പോർട്ട്" ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കും. ഇത് ചെയ്യുന്നതിന്, ഡൗൺ ബട്ടൺ അമർത്തിക്കൊണ്ട്, "ഫയൽ സിസ്റ്റങ്ങൾ" എന്ന ഇനം കണ്ടെത്തി എന്റർ അമർത്തുക.

ഫയൽ സിസ്റ്റം ക്രമീകരണ മെനുവിൽ നിങ്ങൾ സ്വയം കണ്ടെത്തും. ഈ ലിസ്റ്റിൽ "DOS/FAT/NT ഫയൽസിസ്റ്റംസ്" എന്ന ഇനം കണ്ടെത്തി എന്റർ അമർത്തുക.

"NTFS എഴുത്ത് പിന്തുണ" ഇനത്തിലേക്ക് പോയി Space അമർത്തുക, ഇനത്തിന് അടുത്തായി ഒരു നക്ഷത്രചിഹ്നം ദൃശ്യമാകും, ഈ ഓപ്ഷൻ കേർണലിൽ ഉൾപ്പെടുത്തുമെന്ന് സൂചിപ്പിക്കുന്നു.

ഇപ്പോൾ "എക്സിറ്റ്" തിരഞ്ഞെടുക്കുക (വലത് ബട്ടൺ അമർത്തി എന്റർ ചെയ്യുക) യൂട്ടിലിറ്റിയിൽ നിന്ന് പുറത്തുകടക്കുക. യൂട്ടിലിറ്റിയിൽ നിന്ന് പുറത്തുകടക്കുന്നതിന് മുമ്പ്, വരുത്തിയ മാറ്റങ്ങൾ സംരക്ഷിക്കാൻ ആവശ്യപ്പെടുന്ന ഒരു സന്ദേശം പോപ്പ് അപ്പ് ചെയ്യും, അതെ തിരഞ്ഞെടുക്കുക.

കേർണൽ കംപൈൽ ചെയ്യുന്നു

മുമ്പത്തെ ഘട്ടത്തിൽ ഞങ്ങൾ വരുത്തിയ മാറ്റങ്ങൾ ഉപയോഗിച്ച് കേർണൽ കംപൈൽ ചെയ്യാനുള്ള സമയമാണിത്. ആദ്യം, മുമ്പത്തെ സമാഹാരത്തിൽ നിന്ന് ശേഷിക്കുന്ന ഫയലുകൾ (എന്തെങ്കിലും ഉണ്ടെങ്കിൽ) ഇല്ലാതാക്കുന്ന ഒരു കമാൻഡ് പ്രവർത്തിപ്പിക്കാം:

സുഡോ മേക്ക്-കെപികെജി ക്ലീൻ

അവസാനമായി, കേർണൽ കംപൈൽ ചെയ്യാൻ ആരംഭിക്കുന്നതിന്, കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:

Sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

കംപൈലേഷന് ശേഷം നമുക്ക് ലഭിക്കുന്ന കേർണൽ ഇമേജ് ഫയലിന്റെ പേരിലേക്ക് സ്ട്രിംഗ് -mykernel ചേർക്കാൻ -append-to-version സ്വിച്ച് ഉപയോഗിക്കുന്നു, അതിനാൽ നമ്മുടെ കേർണൽ തിരിച്ചറിയാൻ എളുപ്പമാണ്. -mykernel-ന് പകരം നിങ്ങൾക്ക് ഏത് പ്രിഫിക്സും ഉപയോഗിക്കാം.

ഒരു കേർണൽ കംപൈൽ ചെയ്യുന്നതിന് വളരെയധികം സമയമെടുക്കുന്നു, നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ ശക്തിയെ ആശ്രയിച്ച് നിരവധി പതിനായിരക്കണക്കിന് മിനിറ്റ് മുതൽ മണിക്കൂറുകൾ വരെ നീണ്ടുനിൽക്കും.

കേർണലിന്റെ ഇൻസ്റ്റാളേഷൻ

കേർണൽ കംപൈൽ ചെയ്തതിന് ശേഷം, നിങ്ങൾക്ക് രണ്ട് ഔട്ട്‌പുട്ട് ഫയലുകൾ ലഭിച്ചു: linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb, linux-headers-2.6.27.18-mykernel7.01818018018018018000000000180000180000000. Custom_i386.deb. ഞങ്ങൾ dpkg -i കമാൻഡ് ഉപയോഗിക്കും, അത് കേർണൽ യാന്ത്രികമായി ഇൻസ്റ്റാൾ ചെയ്യുകയും നിങ്ങളുടെ GRUB ബൂട്ട് ലോഡറിലേക്ക് എഴുതുകയും ചെയ്യും (ഫയലിൽ  /boot/grub/menu.lst). കേർണൽ ഡിഫോൾട്ട് കേർണലായി ഇൻസ്റ്റാൾ ചെയ്യപ്പെടുമെന്ന് ഞാൻ ശ്രദ്ധിക്കുന്നു, അതിനാൽ ഇത് നിങ്ങൾക്കായി ബൂട്ട് ചെയ്യുന്നില്ലെങ്കിൽ, നിങ്ങളുടെ മുൻ കേർണൽ ഉപയോഗിച്ച് ബൂട്ട് ചെയ്യേണ്ടതുണ്ട് (നിങ്ങൾ കമ്പ്യൂട്ടർ ബൂട്ട് ചെയ്യുമ്പോൾ അത് GRUB മെനു ലിസ്റ്റിലായിരിക്കണം) കൂടാതെ സ്വമേധയാ മാറ്റുക. menu.lst ഫയൽ. അതിനാൽ, കേർണൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കുക:

Dpkg -i linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.27.18-mykernel_2.60.27.

ഒരു പുതിയ കേർണൽ ഉപയോഗിച്ച് ഒരു സിസ്റ്റം ആരംഭിക്കുന്നു

പുതിയ കേർണൽ ഉപയോഗിച്ച് സിസ്റ്റത്തിന്റെ പ്രവർത്തനക്ഷമത പരിശോധിക്കാം. നിങ്ങളുടെ കമ്പ്യൂട്ടർ പുനരാരംഭിക്കുക. GRUB ബൂട്ട്ലോഡർ മെനുവിൽ, നിങ്ങളുടെ പുതിയ കേർണലുമായി ബന്ധപ്പെട്ട ഒരു പുതിയ എൻട്രി നിങ്ങൾ കാണും, അത് സ്ഥിരസ്ഥിതിയായി ബൂട്ട് ചെയ്യണം. എല്ലാം ശരിയാണെങ്കിൽ, പുതിയ കേർണലിൽ സിസ്റ്റം ആരംഭിക്കും.

ലിനക്സ് കേർണലിൽ 13 ദശലക്ഷത്തിലധികം കോഡുകൾ അടങ്ങിയിരിക്കുന്നു, ലോകത്തിലെ ഏറ്റവും വലിയ ഓപ്പൺ സോഴ്‌സ് പ്രോജക്റ്റുകളിൽ ഒന്നാണിത്. അപ്പോൾ എന്താണ് ലിനക്സ് കേർണൽ, അത് എന്തിനുവേണ്ടിയാണ് ഉപയോഗിക്കുന്നത്?

കമ്പ്യൂട്ടർ ഹാർഡ്‌വെയറുമായി സംവദിക്കുന്ന സോഫ്റ്റ്‌വെയറിന്റെ ഏറ്റവും താഴ്ന്ന നിലയാണ് കേർണൽ. ഫിസിക്കൽ ഹാർഡ്‌വെയർ വരെ ഉപയോക്തൃ സ്ഥലത്ത് പ്രവർത്തിക്കുന്ന എല്ലാ ആപ്ലിക്കേഷനുകളുടെയും ഇടപെടലിന് ഇത് ഉത്തരവാദിയാണ്. കൂടാതെ IPC സിസ്റ്റം ഉപയോഗിച്ച് പരസ്പരം വിവരങ്ങൾ സ്വീകരിക്കാൻ സേവനങ്ങൾ എന്നറിയപ്പെടുന്ന പ്രക്രിയകളെ അനുവദിക്കുന്നു.

കെർണലിന്റെ തരങ്ങളും പതിപ്പുകളും

ലിനക്സ് കേർണൽ എന്താണെന്ന് നിങ്ങൾക്ക് ഇതിനകം അറിയാം, എന്നാൽ ഏതൊക്കെ തരം കേർണലുകൾ ഉണ്ട്? സ്ക്രാച്ചിൽ നിന്ന് കേർണലുകൾ സൃഷ്ടിക്കുമ്പോൾ വിവിധ രീതികളും വാസ്തുവിദ്യാ പരിഗണനകളും ഉണ്ട്. മിക്ക കേർണലുകളും മൂന്ന് തരങ്ങളിൽ ഒന്നായിരിക്കാം: മോണോലിത്തിക്ക് കേർണൽ, മൈക്രോകെർണൽ, ഹൈബ്രിഡ്. ലിനക്സ് കേർണൽ ഒരു മോണോലിത്തിക്ക് കേർണലാണ്, വിൻഡോസ്, ഒഎസ് എക്സ് കേർണലുകൾ ഹൈബ്രിഡ് ആണ്. ഈ മൂന്ന് തരം കേർണലുകളുടെ ഒരു അവലോകനം നോക്കാം.

മൈക്രോകെർണൽ

മൈക്രോകെർണലുകൾ ഒരു സമീപനം നടപ്പിലാക്കുന്നു, അതിൽ അവർ ചെയ്യേണ്ടത് മാത്രം കൈകാര്യം ചെയ്യുന്നു: സിപിയു, മെമ്മറി, ഐപിസി. കമ്പ്യൂട്ടറിലെ മറ്റെല്ലാ കാര്യങ്ങളും ഒരു ആക്സസറിയായി കണക്കാക്കുകയും ഉപയോക്തൃ മോഡിൽ കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു. മൈക്രോകെർണലുകൾക്ക് പോർട്ടബിലിറ്റിയുടെ പ്രയോജനമുണ്ട്; OS അനുയോജ്യമായ രീതിയിൽ ഹാർഡ്‌വെയർ ആക്‌സസ് ചെയ്യാൻ ശ്രമിക്കുന്നിടത്തോളം കാലം മറ്റ് ഹാർഡ്‌വെയറുകളിലും മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിലും അവ ഉപയോഗിക്കാനാകും.

മൈക്രോകെർണലുകളുടെ വലിപ്പം വളരെ ചെറുതും കൂടുതൽ സുരക്ഷിതവുമാണ്, കാരണം മിക്ക പ്രോസസ്സുകളും കുറഞ്ഞ പ്രത്യേകാവകാശങ്ങളോടെ യൂസർ മോഡിൽ പ്രവർത്തിക്കുന്നു.

പ്രോസ്

  • പോർട്ടബിലിറ്റി
  • ചെറിയ വലിപ്പം
  • കുറഞ്ഞ മെമ്മറി ഉപഭോഗം
  • സുരക്ഷ

കുറവുകൾ

  • ഡ്രൈവറുകൾ വഴി ഹാർഡ്‌വെയർ ആക്‌സസ് ചെയ്യാം
  • ഡ്രൈവറുകൾ യൂസർ മോഡിൽ പ്രവർത്തിക്കുന്നതിനാൽ ഹാർഡ്‌വെയർ വേഗത കുറവാണ്
  • വിവരങ്ങൾ ലഭിക്കുന്നതിന് പ്രക്രിയകൾ അവരുടെ ഊഴം കാത്തിരിക്കണം
  • കാത്തിരിക്കാതെ പ്രക്രിയകൾക്ക് മറ്റ് പ്രക്രിയകൾ ആക്സസ് ചെയ്യാൻ കഴിയില്ല

മോണോലിത്തിക്ക് കോർ

മോണോലിത്തിക്ക് കേർണലുകൾ മൈക്രോകെർണലുകളുടെ വിപരീതമാണ്, കാരണം അവ പ്രോസസ്സർ, മെമ്മറി, ഐപിസി എന്നിവ മാത്രമല്ല, ഡിവൈസ് ഡ്രൈവറുകൾ, ഫയൽ സിസ്റ്റം മാനേജ്മെന്റ്, I/O സിസ്റ്റം എന്നിവയും ഉൾക്കൊള്ളുന്നു. മോണോലിത്തിക്ക് കേർണലുകൾ ഹാർഡ്‌വെയറിലേക്ക് മികച്ച ആക്‌സസ് നൽകുകയും മികച്ച മൾട്ടിടാസ്‌കിംഗ് പ്രവർത്തനക്ഷമമാക്കുകയും ചെയ്യുന്നു, കാരണം ഒരു പ്രോഗ്രാമിന് മെമ്മറിയിൽ നിന്നോ മറ്റൊരു പ്രക്രിയയിൽ നിന്നോ വിവരങ്ങൾ ലഭിക്കണമെങ്കിൽ, അത് ക്യൂവിൽ കാത്തിരിക്കേണ്ടതില്ല. എന്നാൽ ഇത് ചില പ്രശ്നങ്ങൾ ഉണ്ടാക്കാം, കാരണം പല കാര്യങ്ങളും സൂപ്പർ യൂസർ മോഡിൽ നടപ്പിലാക്കുന്നു. തെറ്റായി ചെയ്താൽ ഇത് സിസ്റ്റത്തെ ദോഷകരമായി ബാധിക്കും.

പ്രോസ്:

  • ഹാർഡ്‌വെയറിലേക്ക് കൂടുതൽ നേരിട്ടുള്ള പ്രവേശനം
  • പ്രക്രിയകൾക്കിടയിൽ ഡാറ്റയുടെ എളുപ്പത്തിലുള്ള കൈമാറ്റം
  • പ്രക്രിയകൾ വേഗത്തിൽ പ്രതികരിക്കുന്നു

കുറവുകൾ:

  • വലിയ വലിപ്പം
  • ധാരാളം റാം എടുക്കുന്നു
  • കുറവ് സുരക്ഷിതം

ഹൈബ്രിഡ് കോർ

ഹൈബ്രിഡ് കേർണലുകൾക്ക് ഉപയോക്തൃ മോഡിൽ എന്താണ് പ്രവർത്തിക്കേണ്ടതെന്നും കേർണൽ സ്‌പെയ്‌സിൽ എന്താണെന്നും തിരഞ്ഞെടുക്കാനാകും. മിക്കപ്പോഴും ഡിവൈസ്, ഫയൽ സിസ്റ്റം ഡ്രൈവറുകൾ ഉപയോക്തൃ സ്ഥലത്താണ്, ഐപിസിയും സിസ്റ്റം കോളുകളും കേർണൽ സ്പേസിലായിരിക്കും. ഈ പരിഹാരം രണ്ട് ലോകങ്ങളിലും ഏറ്റവും മികച്ചത് എടുക്കുന്നു, എന്നാൽ OEM-കളിൽ നിന്ന് കൂടുതൽ ജോലി ആവശ്യമാണ്. കാരണം ഡ്രൈവർമാരുടെ എല്ലാ ഉത്തരവാദിത്തവും ഇപ്പോൾ അവർക്കാണ്.

പ്രോസ്

  • കേർണലിലും യൂസർ സ്‌പെയ്‌സിലും എന്താണ് പ്രവർത്തിക്കേണ്ടതെന്ന് തിരഞ്ഞെടുക്കാനുള്ള കഴിവ്
  • മോണോലിത്തിക്ക് കോറിനേക്കാൾ വലിപ്പം കുറവാണ്
  • കൂടുതൽ വഴക്കമുള്ളത്

കുറവുകൾ

  • സാവധാനത്തിൽ പ്രവർത്തിക്കാം
  • ഉപകരണ ഡ്രൈവറുകൾ നിർമ്മാതാക്കൾ പുറത്തിറക്കുന്നു

കേർണൽ ഫയലുകൾ എവിടെയാണ് സംഭരിച്ചിരിക്കുന്നത്?

ലിനക്സ് കേർണൽ എവിടെയാണ് സ്ഥിതി ചെയ്യുന്നത്? ഉബുണ്ടു അല്ലെങ്കിൽ മറ്റേതെങ്കിലും ലിനക്സ് വിതരണത്തിന്റെ കേർണൽ ഫയലുകൾ /boot ഫോൾഡറിലാണ് സ്ഥിതി ചെയ്യുന്നത്, അവയെ vmlinuz പതിപ്പ് എന്ന് വിളിക്കുന്നു. യുണിക്സ് കാലഘട്ടത്തിൽ നിന്നാണ് vmlinuz എന്ന പേര് വന്നത്. അറുപതുകളിൽ, കേർണലുകളെ സാധാരണയായി യുണിക്സ് എന്ന് വിളിച്ചിരുന്നു; 90 കളിൽ, ലിനക്സ് കേർണലുകളെ ലിനക്സ് എന്നും വിളിച്ചിരുന്നു.

മൾട്ടിടാസ്‌കിംഗ് സുഗമമാക്കുന്നതിനായി വെർച്വൽ മെമ്മറി വികസിപ്പിച്ചപ്പോൾ, കെർണൽ ഈ സാങ്കേതികവിദ്യയെ പിന്തുണയ്ക്കുന്നുവെന്ന് സൂചിപ്പിക്കുന്നതിന് ഫയലിന്റെ പേരിന് മുന്നിൽ vm അക്ഷരങ്ങൾ പ്രത്യക്ഷപ്പെട്ടു. കുറച്ച് സമയത്തേക്ക് കേർണലിനെ vmlinux എന്ന് വിളിച്ചിരുന്നു, എന്നാൽ പിന്നീട് ചിത്രം ബൂട്ട് മെമ്മറിയിൽ ചേരാതെ കംപ്രസ് ചെയ്തു. ഇതിനുശേഷം, zlib കംപ്രഷൻ ഉപയോഗിച്ചതായി സൂചിപ്പിക്കാൻ x എന്ന അവസാന അക്ഷരം z ആയി മാറ്റി. ഈ പ്രത്യേക കംപ്രഷൻ എപ്പോഴും ഉപയോഗിക്കാറില്ല; ചിലപ്പോൾ നിങ്ങൾക്ക് LZMA അല്ലെങ്കിൽ BZIP2 കണ്ടെത്താം, അതിനാൽ ചില കേർണലുകളെ zImage എന്ന് വിളിക്കുന്നു.

പതിപ്പ് നമ്പറിൽ മൂന്ന് അക്കങ്ങൾ, ലിനക്സ് കെർണലിന്റെ പതിപ്പ് നമ്പർ, നിങ്ങളുടെ പതിപ്പ് നമ്പർ, പാച്ചുകൾ അല്ലെങ്കിൽ പരിഹാരങ്ങൾ എന്നിവ അടങ്ങിയിരിക്കുന്നു.

/boot പാക്കേജിൽ Linux കേർണൽ മാത്രമല്ല, initrd.img, system.map തുടങ്ങിയ ഫയലുകളും അടങ്ങിയിരിക്കുന്നു. യഥാർത്ഥ കേർണൽ ഫയൽ ലഭ്യമാക്കുകയും പ്രവർത്തിപ്പിക്കുകയും ചെയ്യുന്ന ഒരു ചെറിയ വെർച്വൽ ഡിസ്കായി Initrd ഉപയോഗിക്കുന്നു. കേർണൽ ഇതുവരെ ലോഡ് ചെയ്തിട്ടില്ലാത്ത സമയത്ത് മെമ്മറി മാനേജ് ചെയ്യാൻ System.map ഫയൽ ഉപയോഗിക്കുന്നു, കൂടാതെ കെർണൽ ഇമേജിൽ ഏത് കേർണൽ മൊഡ്യൂളുകളാണ് ഉൾപ്പെടുത്തിയിട്ടുള്ളതെന്ന് കോൺഫിഗറേഷൻ ഫയലുകൾക്ക് വ്യക്തമാക്കാൻ കഴിയും.

ലിനക്സ് കേർണൽ ആർക്കിടെക്ചർ

ലിനക്സ് കേർണൽ ഒരു മോണോലിത്തിക്ക് ഘടനയായതിനാൽ, ഇത് മറ്റ് തരത്തിലുള്ള കേർണലുകളേക്കാൾ വലുതും സങ്കീർണ്ണവുമാണ്. ലിനക്‌സിന്റെ ആദ്യ നാളുകളിൽ ഈ ഡിസൈൻ സവിശേഷത വളരെയധികം വിവാദങ്ങൾ സൃഷ്ടിച്ചിരുന്നു, ഇപ്പോഴും മോണോലിത്തിക്ക് കേർണലുകളിൽ അന്തർലീനമായ ചില ഡിസൈൻ പിഴവുകൾ ഉണ്ട്.

എന്നാൽ ഈ പോരായ്മകൾ പരിഹരിക്കുന്നതിന്, ലിനക്സ് കേർണൽ ഡെവലപ്പർമാർ ഒരു കാര്യം ചെയ്തു - റൺടൈമിൽ ലോഡ് ചെയ്യാൻ കഴിയുന്ന കേർണൽ മൊഡ്യൂളുകൾ. ഇതിനർത്ഥം നിങ്ങൾക്ക് ഈച്ചയിൽ കേർണൽ ഘടകങ്ങൾ ചേർക്കാനും നീക്കംചെയ്യാനും കഴിയും. ഇത് ഹാർഡ്‌വെയർ ഫംഗ്‌ഷണാലിറ്റി ചേർക്കുന്നതിനപ്പുറം പോകാം, നിങ്ങൾക്ക് സെർവർ പ്രോസസ്സുകൾ പ്രവർത്തിപ്പിക്കാനും വിർച്ച്വലൈസേഷൻ പ്രവർത്തനക്ഷമമാക്കാനും റീബൂട്ട് ചെയ്യാതെ കേർണൽ പൂർണ്ണമായും മാറ്റിസ്ഥാപിക്കാനും കഴിയും.

നിരന്തരം റീബൂട്ട് ചെയ്യാതെ തന്നെ ഒരു വിൻഡോസ് അപ്‌ഡേറ്റ് പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയുമെന്ന് സങ്കൽപ്പിക്കുക.

കേർണൽ മൊഡ്യൂളുകൾ

വിൻഡോസിന് ഡിഫോൾട്ടായി നിങ്ങൾക്ക് ആവശ്യമായ എല്ലാ ഡ്രൈവറുകളും ഇതിനകം തന്നെ ഉണ്ടെങ്കിൽ, നിങ്ങൾക്ക് ആവശ്യമുള്ളവ മാത്രമേ പ്രവർത്തനക്ഷമമാക്കാൻ കഴിയൂ? ലിനക്സ് കേർണൽ മൊഡ്യൂളുകൾ നടപ്പിലാക്കുന്ന തത്വം ഇതാണ്. ലോഡബിൾ മൊഡ്യൂളുകൾ (LKMs) എന്നും അറിയപ്പെടുന്ന കേർണൽ മൊഡ്യൂളുകൾ, എല്ലാ റാമും ഉപയോഗിക്കാതെ എല്ലാ ഹാർഡ്‌വെയറുകളിലും കേർണൽ പ്രവർത്തിപ്പിക്കുന്നതിന് അത്യന്താപേക്ഷിതമാണ്.

ഡിവൈസുകൾ, ഫയൽ സിസ്റ്റങ്ങൾ, സിസ്റ്റം കോളുകൾ എന്നിവയ്ക്കായുള്ള അടിസ്ഥാന കേർണലിന്റെ പ്രവർത്തനക്ഷമത മൊഡ്യൂൾ വിപുലീകരിക്കുന്നു. ലോഡ് ചെയ്യാവുന്ന മൊഡ്യൂളുകൾക്ക് ഒരു .ko എക്സ്റ്റൻഷൻ ഉണ്ട്, അവ സാധാരണയായി /lib/modules/ ഡയറക്ടറിയിൽ സൂക്ഷിക്കുന്നു. അതിന്റെ മോഡുലാർ സ്വഭാവത്തിന് നന്ദി, മൊഡ്യൂളുകൾ ഇൻസ്റ്റാൾ ചെയ്ത് ലോഡുചെയ്യുന്നതിലൂടെ നിങ്ങൾക്ക് കേർണൽ വളരെ എളുപ്പത്തിൽ ഇഷ്ടാനുസൃതമാക്കാൻ കഴിയും. മൊഡ്യൂളുകളുടെ ഓട്ടോമാറ്റിക് ലോഡിംഗ് അല്ലെങ്കിൽ അൺലോഡിംഗ് കോൺഫിഗറേഷൻ ഫയലുകളിൽ കോൺഫിഗർ ചെയ്യാം അല്ലെങ്കിൽ പ്രത്യേക കമാൻഡുകൾ ഉപയോഗിച്ച് ഫ്ലൈയിൽ അൺലോഡ് ചെയ്ത് ലോഡ് ചെയ്യാം.

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

ലിനക്സ് കേർണൽ എന്താണ് എന്ന ചോദ്യത്തിന് ഉത്തരം നൽകാൻ നിങ്ങൾ ഇപ്പോൾ അടുത്തു. കാതൽ മാന്ത്രികമല്ല. ഏതൊരു കമ്പ്യൂട്ടറിന്റെയും പ്രവർത്തനത്തിന് ഇത് വളരെ ആവശ്യമാണ്. ലിനക്സ് കേർണൽ OS X, Windows എന്നിവയിൽ നിന്ന് വ്യത്യസ്തമാണ്, കാരണം അതിൽ എല്ലാ ഡ്രൈവറുകളും ഉൾപ്പെടുന്നു, കൂടാതെ ബോക്‌സിന് പുറത്ത് പിന്തുണയ്‌ക്കുന്ന ധാരാളം കാര്യങ്ങൾ ചെയ്യുന്നു. നിങ്ങളുടെ സോഫ്‌റ്റ്‌വെയർ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്നും അത് ചെയ്യാൻ ഉപയോഗിക്കുന്ന ഫയലുകളെക്കുറിച്ചും ഇപ്പോൾ നിങ്ങൾക്ക് കുറച്ചുകൂടി അറിയാം.

ചിലപ്പോൾ നിങ്ങൾ സ്വന്തമായി നിർമ്മിക്കേണ്ടി വന്നേക്കാം ലിനക്സ് കേർണൽ. ഇതിനുള്ള കാരണങ്ങൾ ഇനിപ്പറയുന്നവയാകാം:

  • വിതരണ പാച്ചുകൾ ഇല്ലാതെ നിങ്ങൾക്ക് ഒരു വൃത്തിയുള്ള കേർണൽ ആവശ്യമാണ്;
  • നിങ്ങളുടെ സ്വന്തം പാച്ചുകൾ പ്രയോഗിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു (അതിൽ ധാരാളം ഉണ്ട്);
  • നിങ്ങളുടെ ഹാർഡ്‌വെയർ കോൺഫിഗറേഷന് അനുയോജ്യമായ ഒരു കേർണൽ കൂട്ടിച്ചേർക്കാനും അതിൽ നിന്ന് അനാവശ്യമായ കാര്യങ്ങൾ വലിച്ചെറിയാനും കൂടാതെ/അല്ലെങ്കിൽ നിർദ്ദിഷ്ട ജോലികൾക്കായി അത് ക്രമീകരിക്കാനും നിങ്ങൾ ആഗ്രഹിക്കുന്നു;
  • കേർണലിൽ ഉൾപ്പെടുത്താത്ത ഒരു പരീക്ഷണാത്മക ഡ്രൈവറോ ഫയൽ സിസ്റ്റമോ ഉൾപ്പെടുത്താൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു "വാനില"കേർണൽ (ഉദാഹരണത്തിന് ZFSഅഥവാ റൈസർ 4);
കേർണൽ കൂട്ടിച്ചേർക്കുന്നതിൽ സങ്കീർണ്ണമായ ഒന്നും തന്നെയില്ല. എന്തുകൊണ്ടാണ് ഇത് ചെയ്യുന്നതെന്ന് മനസിലാക്കേണ്ടത് പ്രധാനമാണ്, കൂടാതെ നിങ്ങൾക്ക് മനസ്സിലാകാത്ത പാരാമീറ്ററുകൾ സ്പർശിക്കരുത്. ഈ കുറിപ്പിൽ ഒരു കേർണൽ നിർമ്മിക്കുന്നതിനുള്ള രണ്ട് ഉദാഹരണങ്ങൾ ഞാൻ വിവരിക്കും ഡെബിയൻ അടിസ്ഥാനമാക്കിയുള്ളത്വിതരണങ്ങൾ. ആദ്യ ഉദാഹരണത്തിൽ, "വാനില" എന്ന് വിളിക്കപ്പെടുന്ന ഒരു ശുദ്ധമായ കേർണൽ (അത് പുറത്തിറക്കിയിരിക്കുന്നത് പോലെ) കൂട്ടിച്ചേർക്കുന്നത് എത്ര എളുപ്പമാണെന്ന് ഞാൻ കാണിക്കും. ലിനസ് ടോർവാൾഡ്സ്), രണ്ടാമത്തേതിൽ - നിങ്ങളുടെ സ്വന്തം പാച്ചുകൾ എങ്ങനെ പ്രയോഗിക്കാം, കേർണൽ ഒപ്റ്റിമൈസ് ചെയ്യാം. ഞാൻ ഉടനെ രണ്ട് മുന്നറിയിപ്പുകൾ എഴുതും:
  • കേർണൽ അപ്‌ഡേറ്റ് ചെയ്യുമ്പോഴെല്ലാം നിങ്ങൾ അത് പുനർനിർമ്മിക്കേണ്ടതുണ്ട് ("അപ്‌ഡേറ്റ് പാച്ച്" ഡൗൺലോഡ് ചെയ്യുക, അത് പ്രയോഗിച്ച് കേർണൽ കൂട്ടിച്ചേർക്കുക);
  • ഈ അല്ലെങ്കിൽ ആ ഉപകരണത്തിന്റെ പ്രവർത്തനക്ഷമത ഉറപ്പാക്കാൻ നിങ്ങളുടെ സിസ്റ്റം ചില ഹാക്കുകൾ ഉപയോഗിക്കുകയാണെങ്കിൽ പുനർനിർമ്മിച്ച കേർണൽ പ്രവർത്തിച്ചേക്കില്ല;
  • കേർണൽ തെറ്റായി ക്രമീകരിച്ചിട്ടുണ്ടെങ്കിൽ, പ്രത്യേകിച്ച് നിരക്ഷരരോ ചിന്താശൂന്യമായതോ ആയ പാച്ചുകളുടെ കാര്യത്തിൽ, നിങ്ങൾക്ക് ഒന്നുകിൽ വളരെ മന്ദഗതിയിലുള്ള ഒരു സിസ്റ്റത്തിൽ അവസാനിക്കാം, അല്ലെങ്കിൽ അത് പൂർണ്ണമായും നഷ്‌ടപ്പെടാം.
നിങ്ങളുടെ സ്വന്തം ഉത്തരവാദിത്തത്തിൽ നിങ്ങൾ എല്ലാ പ്രവർത്തനങ്ങളും ചെയ്യുന്നു!

പാച്ചുകളില്ലാത്ത ലളിതമായ കേർണൽ അസംബ്ലി.

ലിനക്സ് കേർണൽ സോഴ്സ് കോഡ് kernel.org ൽ ലഭ്യമാണ്. അത് കൂടാതെ "പാച്ചുകൾ അപ്ഡേറ്റ് ചെയ്യുക". നമുക്ക് എന്താണ് വേണ്ടത്? സൈറ്റിൽ നിന്ന് ഡൗൺലോഡ് ചെയ്യുക ടാർബോൾ(ആർക്കൈവ്) കേർണലിന്റെ ഏറ്റവും പുതിയ സ്ഥിരതയുള്ള പതിപ്പിനൊപ്പം (എഴുതുമ്പോൾ, ഇതാണ് പതിപ്പ് 4.3 ). സൗകര്യപ്രദമായ രീതിയിൽ ഡൗൺലോഡ് ചെയ്യുക. അടുത്തതായി, അസംബ്ലിക്ക് ആവശ്യമായ ഉപകരണങ്ങൾ:

sudo apt ബിൽഡ്-എസൻഷ്യൽ ജിസിസി കേർണൽ-പാക്കേജ് പാച്ച് ഇൻസ്റ്റാൾ ചെയ്യുക
sudo apt-get build-dep linux

ആവശ്യമായ എല്ലാ ഉപകരണങ്ങളും ഇൻസ്റ്റാൾ ചെയ്ത ശേഷം, കേർണൽ കോഡ് ഉപയോഗിച്ച് ആർക്കൈവ് ഏതെങ്കിലും സൗകര്യപ്രദമായ ഡയറക്ടറിയിലേക്ക് അൺപാക്ക് ചെയ്യുക. അങ്ങനെ സംഭവിക്കട്ടെ /home/user/KERNEL, എവിടെ "ഉപയോക്താവ്"- സിസ്റ്റം ഉപയോക്തൃനാമം. അടുത്തതായി, ഒരു ടെർമിനൽ തുറന്ന് അവിടെ പോകുക:

cd /home/user/KERNEL

കേർണൽ കൂട്ടിച്ചേർക്കുക മാത്രമാണ് അവശേഷിക്കുന്നത്:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-custom kernel_image kernel_headers #-j 3

ശേഷം നമ്പർ 3 ജെ- ഇതാണ് നിങ്ങളുടെ പ്രോസസറിന്റെ + 1 കോറുകളുടെ എണ്ണം. അതായത്, ഡ്യുവൽ കോർ പ്രോസസറിന് ഇത് 3 ആണ്, 4-കോർ പ്രോസസറിന് ഇത് 5 ആണ്.
-ഇഷ്ടം- ഡിസ്ട്രിബ്യൂഷനിൽ നിന്ന് വേർതിരിച്ചറിയുന്നത് എളുപ്പമാക്കുന്നതിന്, കേർണലിനായി നിങ്ങൾക്ക് സൗകര്യപ്രദമായ ഒരു പേര് ഇവിടെ നൽകാം.
kernel_imageഒപ്പം കേർണൽ_ഹെഡറുകൾ- ഇത് യഥാക്രമം കേർണലും അതിന്റെ ഹെഡർ ഫയലുകളും ആണ്. തലക്കെട്ടുകൾഡ്രൈവറുകളും കേർണൽ മൊഡ്യൂളുകളും കൂട്ടിച്ചേർക്കുന്നതിനും മറ്റ് ചില ആവശ്യങ്ങൾക്കും ആവശ്യമാണ്. ഈ കമാൻഡ് പ്രവർത്തിപ്പിച്ചതിനുശേഷം, നിരവധി കേർണൽ കോൺഫിഗറേഷൻ ചോദ്യങ്ങൾ പ്രത്യക്ഷപ്പെടാൻ തുടങ്ങും. ഞങ്ങൾ എല്ലാം ഡിഫോൾട്ടായി ഉപേക്ഷിക്കുന്നതിനാൽ, ബിൽഡ് ആരംഭിക്കുന്നത് വരെ എന്റർ അമർത്തുക. നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ ശക്തിയെ ആശ്രയിച്ച്, അസംബ്ലി 15-20 മിനിറ്റ് മുതൽ നിരവധി മണിക്കൂർ വരെ എടുത്തേക്കാം. അസംബ്ലിക്ക് ശേഷം, ഡയറക്ടറിയിൽ /വീട്/ഉപയോക്താവ്രണ്ട് ദൃശ്യമാകും deb പാക്കേജ്: കോർ, ഹെഡ്ഡറുകൾ. കമാൻഡ് ഉപയോഗിച്ച് അവ ഇൻസ്റ്റാൾ ചെയ്യുക:

sudo dpkg -i linux-image-4.3*deb linux-headers-4.3*deb
സുഡോ അപ്ഡേറ്റ്-ഗ്രബ്

ഒപ്പം റീബൂട്ട് ചെയ്യുക. GRUB മെനുവിൽ നിങ്ങൾക്ക് സിസ്റ്റം ബൂട്ട് ചെയ്യുന്നതിനായി മറ്റൊരു കേർണൽ തിരഞ്ഞെടുക്കാം.

പാച്ചുകളും അധിക കോൺഫിഗറേഷനും ഉപയോഗിച്ച് കേർണൽ നിർമ്മിക്കുന്നു.

ഈ സമയം ഞങ്ങൾ ശബ്ദവും വീഡിയോയും ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നതിനും കൂടുതൽ സിസ്റ്റം റെസ്പോൺസിവിറ്റിക്കുമായി ഒപ്റ്റിമൈസ് ചെയ്ത ഒരു കേർണൽ കൂട്ടിച്ചേർക്കും. ഇത് ചെയ്യുന്നതിന്, ഞങ്ങൾ രണ്ട് പാച്ചുകൾ പ്രയോഗിക്കും: തൽസമയ പാച്ച് എന്ന് വിളിക്കപ്പെടുന്ന ( മുൻകൂർ RT) കൂടാതെ കമ്പൈലറിനുള്ള ഒരു പാച്ച് ജി.സി.സിപ്രോസസർ ഒപ്റ്റിമൈസേഷനുകൾക്കായി അധിക ഓപ്ഷനുകൾ ചേർക്കാൻ. ആദ്യം, എന്താണ് ഒരു പാച്ച്? പ്രോഗ്രാം സൃഷ്ടിച്ച ഒരു ടെക്സ്റ്റ് ഫയലാണ് പാച്ച് വ്യത്യാസം, ചില ഭാഗങ്ങളിൽ കോഡ് മാറ്റങ്ങൾ അടങ്ങിയിരിക്കുന്നു, അത് പാച്ച് പ്രയോഗിക്കുമ്പോൾ, ശരിയായ സ്ഥലങ്ങളിൽ നൽകിയിട്ടുണ്ട്. കാരണം RT പാച്ച്വലിയ കാലതാമസത്തോടെ പുറത്തിറങ്ങുന്നു, അതിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് അതിനുള്ളതാണ് കേർണൽ 4.1. എന്നിരുന്നാലും, ഇത് അത്ര പ്രധാനമല്ല. ഇതേ സ്കീം ഉപയോഗിച്ച്, kernel.org-ൽ നിന്ന് കേർണൽ 4.1 ഡൗൺലോഡ് ചെയ്ത് ഒരു ഡയറക്ടറിയിലേക്ക് അൺപാക്ക് ചെയ്യുക /home/user/KERNEL-CUSTOM. ഇപ്പോൾ പാച്ചുകൾ ഡൗൺലോഡ് ചെയ്യുക. PREEMPT_RT, GCC പാച്ച്. ഡൌൺലോഡ് ചെയ്ത ആർക്കൈവുകളിൽ നിന്ന്, നമുക്ക് .patch എക്സ്റ്റൻഷനുള്ള ഫയലുകൾ ആവശ്യമാണ്, അത് കേർണൽ സോഴ്സ് കോഡ് ഉപയോഗിച്ച് ഡയറക്ടറിയിൽ സ്ഥാപിക്കണം. അതായത്, ഇൻ /home/user/KERNEL-CUSTOM. പാച്ചുകൾ പ്രയോഗിക്കുന്നതിന് മുമ്പ്, പിശകുകളൊന്നുമില്ലെന്ന് നിങ്ങൾ ഉറപ്പാക്കേണ്ടതുണ്ട്. ടെർമിനൽ തുറക്കുക:

cd /home/user/KERNEL-CUSTOM
patch -p1 -i പാച്ച്-4.1.13-rt15.patch --dry-run


ഓപ്ഷൻ --ഡ്രൈ-റൺഫയലുകളിൽ മാറ്റങ്ങൾ വരുത്താതെ ഒരു പാച്ചിന്റെ ആപ്ലിക്കേഷൻ അനുകരിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. പിശകുകളൊന്നും കണ്ടെത്തിയില്ലെങ്കിൽ (സ്ക്രീൻഷോട്ട് കാണുക) - ഓപ്ഷൻ ഇല്ലാതെ പാച്ച് സ്വീകരിക്കുക --ഡ്രൈ-റൺ. രണ്ടാമത്തെ പാച്ച് ഉപയോഗിച്ച് സമാനമായ പ്രവർത്തനങ്ങൾ നടത്തുക. ഒരു സമയം ഒന്നിൽ കൂടുതൽ പാച്ചുകൾ പ്രയോഗിക്കരുത്!ഇനി നമുക്ക് നമ്മുടെ കേർണൽ കോൺഫിഗർ ചെയ്യേണ്ടതുണ്ട്. ഞങ്ങൾക്ക് തിരഞ്ഞെടുക്കാൻ ഇനിപ്പറയുന്ന ഓപ്ഷനുകൾ ഉണ്ട്:

കോൺഫിഗറേഷൻ ഉണ്ടാക്കുക- ഒന്നോ അല്ലെങ്കിൽ മറ്റൊരു കേർണൽ സബ്സിസ്റ്റത്തിന്റെ കോൺഫിഗറേഷനെക്കുറിച്ചുള്ള ചോദ്യങ്ങൾ ഓരോന്നായി ടെർമിനലിൽ പ്രദർശിപ്പിക്കും. വളരെ നീണ്ടതും മടുപ്പിക്കുന്നതുമായ ഒരു പ്രക്രിയ. നമുക്ക് അത് മറക്കാം :)
പഴയ കോൺഫിഗറേഷൻ ഉണ്ടാക്കുക- നിലവിൽ പ്രവർത്തിക്കുന്ന കേർണലിന്റെ കോൺഫിഗറേഷൻ ഉപയോഗിക്കും. ഞങ്ങൾ ആദ്യം മുതൽ നമ്മുടേത് കൂട്ടിച്ചേർക്കുന്നതിനാൽ, ഈ രീതിയും ഉപയോഗശൂന്യമാണ്.
defconfig ഉണ്ടാക്കുക- മുമ്പത്തേതിന് സമാനമായി, മൂല്യങ്ങൾ മാത്രമേ സ്ഥിരസ്ഥിതിയായി ഉണ്ടാകൂ. കേർണൽ ഡെവലപ്പർമാർ അത് സജ്ജമാക്കിയ രീതി. ആദ്യ അസംബ്ലി രീതിക്ക് സമാനമാണ്.
menuconfig ഉണ്ടാക്കുക- ലൈബ്രറിയെ അടിസ്ഥാനമാക്കിയുള്ള കപട-ഗ്രാഫിക്കൽ ഇന്റർഫേസ് Ncurses. സൗകര്യപ്രദമായ ഒരു ഹൈറാർക്കിക്കൽ മെനു ഉള്ള ഒരു ഇന്റർഫേസ് സ്ക്രീനിൽ പ്രദർശിപ്പിക്കും. ദിശാസൂചന കീകൾ, സ്പേസ്ബാർ, TAB കീ എന്നിവ ഉപയോഗിച്ച് നിയന്ത്രിക്കുന്നു. ഗ്രാഫിക്കൽ ഷെൽ ഇല്ലാത്ത ഒരു സിസ്റ്റത്തിലാണ് നിങ്ങൾ കേർണൽ നിർമ്മിക്കുന്നതെങ്കിൽ അത് ശുപാർശ ചെയ്യുന്നു.
gconfig ഉണ്ടാക്കുക ജി.ടി.കെ, GNOME, Mate, Xfce, Cinnamon, Unity എന്നിവയിലും GTK ഉപയോഗിക്കുന്ന മറ്റുള്ളവയിലും ശുപാർശ ചെയ്യുന്നു.
xconfig ഉണ്ടാക്കുക- GUI അടിസ്ഥാനമാക്കിയുള്ളത് Qt. കെഡിഇയിൽ ശുപാർശ ചെയ്യുന്നു. എന്റെ സിസ്റ്റം കെഡിഇ ഉപയോഗിക്കുന്നതിനാൽ, ഞാൻ ഈ രീതി ഉപയോഗിക്കും. ഇതുകൂടാതെ, രണ്ട് രീതികൾ കൂടി ഉണ്ട്, എന്നാൽ അവരുടെ അപേക്ഷ വ്യത്യസ്തമല്ല. അതിനാൽ, പാച്ചുകൾ പ്രയോഗിച്ചതിന് ശേഷം ഞങ്ങൾ സമാരംഭിക്കുന്നു xconfig ഉണ്ടാക്കുകനമ്മുടെ മുമ്പിൽ ദൃശ്യമാകുന്നത് ഇതാണ്:


ഒന്നാമതായി, ഓഫ് ചെയ്യുക dynticks. ഇത് ചെയ്യുന്നതിന്, ഞങ്ങൾ പോകുന്നു ടൈമർ സബ്സിസ്റ്റംതിരഞ്ഞെടുക്കുക ആനുകാലിക ടൈമർ ടിക്കുകൾ


ഇപ്പോൾ മികച്ച ഭാഗം. നമുക്ക് പോകാം പ്രോസസ്സർ തരവും സവിശേഷതകളും, ഒരു ഇനം തിരയുന്നു പ്രോസസ്സർ കുടുംബംകൂടാതെ നിങ്ങളുടെ പ്രൊസസർ സീരീസ് സൂചിപ്പിക്കുക. ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് ഉണ്ടെങ്കിൽ ഇന്റൽ കോർ i5-4xxx, സൂചിപ്പിക്കുക ഹാസ്വെൽ(നാലാം തലമുറ പ്രോസസർ). നിങ്ങൾക്ക് കൃത്യമായി ഉറപ്പില്ലെങ്കിൽ, നിങ്ങൾക്ക് ഇനം തിരഞ്ഞെടുക്കാം ജിസിസി സ്വയമേവ കണ്ടെത്തിയ നേറ്റീവ് ഒപ്റ്റിമൈസേഷനുകൾ. ഈ സാഹചര്യത്തിൽ, അസംബ്ലി സമയത്ത്, നിങ്ങളുടെ പ്രോസസർ എന്താണ് പിന്തുണയ്ക്കുന്നതെന്ന് കംപൈലർ തന്നെ നിർണ്ണയിക്കുകയും അതിന്റെ എല്ലാ സവിശേഷതകളും ഉൾപ്പെടുത്തുകയും ചെയ്യും.


താഴെ പോയി പരാമീറ്റർ പ്രവർത്തനക്ഷമമാക്കുക പൂർണ്ണ പ്രീംപ്റ്റിബിൾ കേർണൽ (RT). ഹാർഡ് റിയൽ ടൈം മോഡ്.


താഴെയും ഖണ്ഡികയിലും സ്ക്രോൾ ചെയ്യുക ടൈമർ ആവൃത്തിസിസ്റ്റം ഇന്ററപ്റ്റ് ഫ്രീക്വൻസി ആയി സജ്ജമാക്കുക 1000 Hz


ഏതെങ്കിലും ഊർജ്ജ സംരക്ഷണം ഞങ്ങൾ പൂർണ്ണമായും ഓഫ് ചെയ്യുന്നു. അതു പ്രധാനമാണ്! ഇടതുവശത്ത് ഞങ്ങൾ ഒരു ഇനം തിരയുകയാണ് പവർ മാനേജ്മെന്റ്, എസിപിഐ ഓപ്ഷനുകൾകൂടാതെ ACPI അൺചെക്ക് ചെയ്യുക. സിപിയു പവർ സേവിംഗും ഓഫാക്കുക

അത്രയേയുള്ളൂ. നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ (ഡോക്യുമെന്റേഷൻ ശ്രദ്ധാപൂർവ്വം പഠിക്കുക), നിങ്ങൾക്ക് കോൺഫിഗറേഷനിൽ കൂടുതൽ മാറ്റങ്ങൾ വരുത്താം (അനാവശ്യ ഡ്രൈവറുകൾ പ്രവർത്തനരഹിതമാക്കുക, അധിക സബ്സിസ്റ്റങ്ങൾ ഉപയോഗിക്കുക തുടങ്ങിയവ). ഇപ്പോൾ ഞങ്ങൾ കോൺഫിഗറേഷൻ വഴി സംരക്ഷിക്കുന്നു ഫയൽ - സംരക്ഷിക്കുക, കോൺഫിഗറേറ്റർ അടച്ച് കേർണൽ കൂട്ടിച്ചേർക്കുക:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-rt-custom kernel_image kernel_headers #-j 3
സുഡോ അപ്ഡേറ്റ്-ഗ്രബ്

ഇന്റൽ കോർ i3-550 പ്രൊസസർ (3.2 GHz) ഉള്ള എന്റെ കമ്പ്യൂട്ടറിൽ, പ്രകടന വർദ്ധനവ് വളരെ ശ്രദ്ധേയമായിരുന്നു. എന്നാൽ ഏറ്റവും പ്രധാനപ്പെട്ട കാര്യം ജോലി ചെയ്യുമ്പോൾ എൽഎംഎംഎസ്ഒപ്പം കെഡൻലൈവ്, ആനുകാലിക മുരടിപ്പ്, ഓഡിയോ, വീഡിയോ ട്രാക്കുകളുടെ ഡീസിൻക്രൊണൈസേഷൻ, അതുപോലെ ഹാർഡ് ഡ്രൈവിലെ കനത്ത ലോഡിൽ ഫ്രീസുചെയ്യൽ എന്നിവ അപ്രത്യക്ഷമായി. ഉപസംഹാരം - ഇത് പ്രവർത്തിക്കുന്നു! അവസാനമായി, ലിനക്സ് സർക്കിളുകളിൽ വളരെ പ്രചാരമുള്ള രണ്ട് പരിഷ്കരിച്ച കേർണലുകളെ ഞാൻ വിവരിക്കും:

പിഎഫ്-കേർണൽ- ഉക്രേനിയൻ അലക്സാണ്ടർ നതാലെങ്കോയിൽ നിന്നുള്ള ഏറ്റവും ജനപ്രിയമായ പാച്ചുകൾ (പോസ്റ്റ്-ഫാക്ടം). ഇത് പ്രധാന കേർണലിൽ ഉൾപ്പെടുത്തിയിട്ടില്ലാത്ത ഒരു കൂട്ടം പാച്ചുകളാണ്, എന്നാൽ സിസ്റ്റം റെസ്പോൺസിവിറ്റി വർദ്ധിപ്പിക്കുന്നു, പ്രധാനത്തേതിനേക്കാൾ വേഗതയുള്ള ഒരു ബദൽ ഹൈബർനേഷൻ സബ്സിസ്റ്റം നൽകുന്നു, കൂടാതെ സമാന പേജുകൾ ലയിപ്പിക്കുന്ന സാങ്കേതികത ഉപയോഗിച്ച് മെമ്മറി ഉപയോഗം കുറയ്ക്കുകയും ചെയ്യുന്നു. സെറ്റിൽ ഉൾപ്പെടുന്നു:

  • ആൽഫ്രഡ് ചെനിന്റെ അധിക പരിഹാരങ്ങളോടെ കോൺ കോളിവാസിന്റെ BFS പ്രോസസ് ഷെഡ്യൂളർ;
  • പൗലോ വാലന്റെ, അരിയാന അവൻസിനി, മൗറോ മറിനോനി എന്നിവരുടെ BFQ I/O ഷെഡ്യൂളർ;
  • നൈജൽ കണ്ണിംഗ്ഹാമിൽ നിന്നുള്ള ഹൈബർനേഷൻ സബ്സിസ്റ്റം TuxOnIce;
  • നയ് സിയയിൽ നിന്ന് യുകെഎസ്എം മെമ്മറിയിൽ സമാന പേജുകൾ ലയിപ്പിക്കുന്നതിനുള്ള സാങ്കേതികത നടപ്പിലാക്കൽ;
  • ഗ്രേസ്‌കിയിൽ നിന്നുള്ള പാച്ച്, കേർണൽ ഒപ്റ്റിമൈസേഷനുള്ള പ്രോസസറുകളുടെ ലിസ്റ്റ് കംപൈലർ വിപുലീകരിക്കുന്നു (ഞങ്ങൾ മുകളിൽ പ്രയോഗിച്ചത്)
പരിഷ്കരിച്ച കേർണൽ ശേഖരം. ഔദ്യോഗിക സൈറ്റ്.

സെൻ-കേർണൽ- രണ്ടാമത്തെ ഏറ്റവും ജനപ്രിയമായ സെറ്റ്, എന്നാൽ പാച്ചുകളുടെ എണ്ണത്തിൽ ആദ്യത്തേത്. സെൻ കേർണൽ നിരവധി പ്രോജക്‌റ്റുകളുടെ സംയോജനമാണ് ഉപയോഗിക്കുന്നത്, ഒരു ജിറ്റ് റിപ്പോസിറ്ററി വഴി കോഡ് അപ്‌ഡേറ്റ് ചെയ്യുന്നു, കൂടാതെ ഒരു കേർണലിൽ മിക്ക ഉപയോക്തൃ ആവശ്യങ്ങളും നിറവേറ്റാൻ ലക്ഷ്യമിടുന്ന നിരവധി സെൻ-നിർദ്ദിഷ്ട കാര്യങ്ങളും ഉണ്ട്. പാച്ചിന്റെ ചില സവിശേഷതകൾ: drm-next, വയർലെസ്സ്-ടെസ്റ്റിംഗ്, CPU ഷെഡ്യൂളറുകളുടെ തിരഞ്ഞെടുപ്പ് (CFS/BFS), BFQ I/O ഷെഡ്യൂളർ, aufs, Unionfs, reiser4, tuxonice, PHC എന്നിവയും ഡെസ്‌ക്‌ടോപ്പ് സിസ്റ്റങ്ങൾ ഒപ്റ്റിമൈസ് ചെയ്യുന്നതിന് മികച്ച മറ്റു പലതും. അല്ലെങ്കിൽ ലാപ്ടോപ്പുകൾ. ഇതെല്ലാം വാനില കേർണലിലേക്ക് ഒരു പാച്ച് രൂപത്തിൽ ലഭ്യമാണ്. ഔദ്യോഗിക സൈറ്റ്. GIT ശേഖരം. ഡെബിയൻ/ഉബുണ്ടുവിനുള്ള പാക്കേജുകൾ.

ഇന്നത്തെ ദിവസം അത്രയേയുള്ളൂ. കൂടുതൽ വിവരങ്ങൾ ലേഖനത്തിലേക്കുള്ള ലിങ്കുകളിൽ കാണാം. ലേഖനത്തിൽ വിവരിച്ചിരിക്കുന്നതെല്ലാം ഞാൻ പല കോൺഫിഗറേഷനുകളിലും പരീക്ഷിച്ചു.