Monday, September 08, 2014

ക്രോസ്സ് കമ്പൈലേഷൻ, ക്രോസ്സ് ഡെവലപ്പ്‌‌മെന്റ്‌‌

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

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

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

ഉപയോഗിക്കുന്ന പ്ലാറ്റ്ഫോമിനനുസരിച്ച് ജിസിസി അധിഷ്ഠിതമായ സൗജന്യ ടൂൾ ചെയിനുകൾ വിവിധ ഇടങ്ങളിൽ നിന്നും ലഭ്യമാണ്. ലിനാരോ, മെന്റർ ഗ്രാഫിക്സ് തുടങ്ങിയവർ ARM പ്രോസസ്സറിനാവശ്യമായ ബൈനറികൾ നിർമ്മിക്കാൻ സാധിക്കുന്ന x86 അധിഷ്ഠിത കമ്പ്യൂട്ടറുകളിൽ പ്രവർത്തിക്കുന്ന ടൂൾ‌ ചെയിനുകൾ ലഭ്യമാക്കുന്നുണ്ട്. 

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

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

x86 ആർക്കിട്ടെക്ചർ ഇമുലേറ്റ് ചെയ്യാൻ (പ്രധാനമായും IA32) ഉപയോഗിക്കാവുന്ന മറ്റൊരു ഇമുലേറ്ററാണ് Bochs. x86 ആർക്കിട്ടെക്ചർ അധിഷ്ഠിതമായ ഒരു കമ്പ്യൂട്ടർ മുഴുവനും ഉൾക്കൊള്ളിച്ചിരിക്കുന്ന ഒരു സോഫ്റ്റ്‌വെയർ ആണ് ഇത് എന്ന് പറയാം. ബയോസും എല്ലാം ഇതിൽ ഉൾക്കൊള്ളിച്ചിട്ടുണ്ട്. ഡോസ്, വിൻഡോസ്, ലിനക്സ് ഒക്കെ ഇതിൽ പ്രവർത്തിപ്പിക്കാം. 

VMWare, VirtualBox തുടങ്ങിയ വിർച്ച്വലൈസേഷൻ സോഫ്റ്റ്‌വെയറുകളുമായി ഇവയെ താരതമ്യം ചെയ്ത് ആശയക്കുഴപ്പമുണ്ടാവരുത്. ഇമുലേഷനിൽ പൂർണ്ണമായും എല്ലാ ഉപകരണങ്ങളും സോഫ്റ്റ്‌വെയർ ഉപയോഗിച്ച് ലഭ്യമാക്കിയിരിക്കും. അവ ശരിക്കും നിലവിലില്ലാത്തവയായിരിക്കും. എന്നാൽ ഈ സോഫ്റ്റ്‌വെയറുകളുടെ പ്രവർത്തനം മൂലം ഇമുലേറ്ററിൽ പ്രവർത്തിക്കുന്ന പ്രോഗ്രാമുകൾക്ക് അവ ഉണ്ട് എന്ന തോന്നൽ ഉണ്ടാവും. വിർച്ച്വലൈസേഷൻ പലവിധത്തിൽ ഉണ്ട്. പലപ്പോഴും ഒരു പരിധി വരെ ഇമുലേഷനും അതിൽ ഉൾപ്പെടും. എന്നാലും വിർച്ച്വലൈസർ പ്രവർത്തിക്കുന്ന കമ്പ്യൂട്ടറിലെ ഉപകരണങ്ങളെ നേരിട്ട് പ്രവർത്തിപ്പിക്കാൻ ചിലപ്പോളോക്കെ വിർച്ച്വലൈസറിൽ പ്രവർത്തിക്കുന്ന പ്രോഗ്രാമുകൾക്ക് സാധിക്കും. 

QEMU പാക്കേജിലെ qemu-system-arm കമാന്റ് ഉപയോഗിച്ച് അതിൽ നിർവ്വചിക്കപെട്ടിട്ടുള്ള നിരവധി ആം അധിഷ്ഠിത ഡെവലപ്പ്മെന്റ് പ്ലാറ്റ്ഫോമുകൾ ഹാർഡ്‌വെയർ ഇല്ലാതെ തന്നെ ഉപയോഗിക്കാൻ സാധിക്കും. വേർസാറ്റൈൽ എക്സ്പ്രസ്സ്, ബീഗിൾ ബോർഡ്, നോകിയ എൻ800, എൻ810 ടാബ്ലറ്റുകൾ, ക്യൂബി ബോർഡ് തുടങ്ങി നിരവധി മെഷീനുകൾ ഇതിന്റെ പുതിയ പതിപ്പിൽ ലഭ്യമാണ്. ഇതിലൊന്നിൽ ഒരു മുഴുവൻ ലിനക്സ് സിസ്റ്റം സജ്ജമാക്കി പ്രവർത്തിപ്പിക്കുന്നത് എങ്ങനെയെന്ന് നമുക്ക് അടുത്ത ഭാഗത്തിൽ പരിശോധിക്കാം. ക്രോസ്സ് കമ്പൈലേഷൻ, റൂട്ട് ഫയൽ സിസ്റ്റം തയ്യാറാക്കൽ, കമാന്റ് ലൈൻ പരാമീറ്ററുകൾ, ബൂട്ടിങ്ങ്, കൺസോൾ ഒക്കെ വിശദമായി മനസ്സിലാക്കാൻ ഇത് സഹായകമായിരിക്കും.

1 comment:

  1. ഈ സീരീസ് കണ്ടെത്താൻ വളരെ വൈകിപ്പോയി. എങ്കിലും ഇപ്പോളെങ്കിലും കണ്ടതിൽ അതിഭയങ്കര സന്തോഷം! കുറേ ആളുകൾക്കു് എളുപ്പം ചൂണ്ടിക്കാണിച്ചുകൊടുക്കാൻ പറ്റിയ താളുകൾ.
    നന്ദി.
    :)

    ReplyDelete