অন্য প্ল্যাটফর্মের প্রয়োজনীয়তায় লিনাক্সকে বন্দর করা [বন্ধ]


28

আমি জানি যে লিনাক্স উপলভ্য এবং এটি X86, এআরএম, পাওয়ারপিসি ইত্যাদির মতো বিভিন্ন প্ল্যাটফর্মের জন্য পোর্ট করা হয়েছে

তবে পোর্টিংয়ের ক্ষেত্রে ঠিক কী দরকার?

আমার বোধগম্যতা হল লিনাক্স সি-তে লিখিত সফ্টওয়্যার তাই লিনাক্সটি মূলত X86 থেকে এআরএম বা অন্যের কাছে উদাহরণস্বরূপ পোর্ট করার সময়, নির্দিষ্ট টার্গেট আর্কিটেকচারের জন্য সংকলকটির সাথে কোডটি পুনরায় সংকলনের বিষয়টি কী নয়?

নতুন পেরিফেরিয়ালের জন্য ডিভাইস ড্রাইভারদের একপাশে রেখে, নতুন আর্কিটেকচারে লিনাক্স পোর্ট করার সময় আর কী করা উচিত। সংকলকটি কি আমাদের জন্য সমস্ত কিছুর যত্ন নেয় না?


11
আমরা কি ধরে নিতে পারি যে আপনি স্থাপত্য-নির্দিষ্ট কার্নেল উত্সগুলি দেখেছেন? git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/…
কুসালানন্দ

উত্তর:


57

লিনাক্স কার্নেলের বেশিরভাগ কোড সি-তে লেখা থাকলেও এখনও সেই কোডটির অনেকগুলি অংশ প্ল্যাটফর্মের সাথে চলে যেখানে এটি চলছে এবং এর জন্য অ্যাকাউন্ট নেওয়া দরকার to

এর একটি বিশেষ উদাহরণ ভার্চুয়াল মেমরি যা বেশিরভাগ আর্কিটেকচারে (পৃষ্ঠার সারণির শ্রেণিবিন্যাস) একই ধরণের কাজ করে তবে প্রতিটি স্থাপত্যের জন্য নির্দিষ্ট বিশদ রয়েছে (যেমন প্রতিটি আর্কিটেকচারের স্তরের সংখ্যা, এবং এটি এমনকি এক্স ৮86 এর সাথে বাড়ছে) নতুন বৃহত্তর চিপগুলির পরিচিতি।) লিনাক্স কার্নেল কোডটি এই শ্রেণিবিন্যাসের ট্র্যাভারিং পরিচালনা করতে ম্যাক্রোগুলি প্রবর্তন করে যা পৃষ্ঠাগুলির কম স্তর রয়েছে এমন আর্কিটেকচারের সংকলক দ্বারা পৃথক করা যেতে পারে (যাতে কোডটি সিটিতে লেখা থাকে তবে আর্কিটেকচারের বিশদ গ্রহণ করে) বিবেচনা।)

অন্যান্য অনেকগুলি ক্ষেত্র প্রতিটি আর্কিটেকচারের জন্য খুব সুনির্দিষ্ট এবং খিলান-নির্দিষ্ট কোড দিয়ে পরিচালনা করা প্রয়োজন। এর মধ্যে বেশিরভাগই কোড ভাষা সংসদীয় ভাষায় জড়িত। উদাহরণগুলি হ'ল:

  • প্রসঙ্গে স্যুইচিং : প্রসঙ্গটি স্যুইচ করাতে প্রক্রিয়াটি স্যুইচ করা হওয়ার জন্য সমস্ত নিবন্ধকের মান সংরক্ষণ করা এবং সিপিইউ-তে নির্ধারিত প্রক্রিয়াটির সেভ করা সেট থেকে নিবন্ধগুলি পুনরুদ্ধার করা। এমনকি নিবন্ধের সংখ্যা এবং সেট প্রতিটি স্থাপত্যের জন্য খুব নির্দিষ্ট very রেজিস্টারগুলিতে সম্পূর্ণ অ্যাক্সেসের অনুমতি দেওয়ার জন্য এবং এটি যথাসম্ভব দ্রুত চালিত হয় তা নিশ্চিত করার জন্য এই কোডটি সাধারণত সমাবেশে প্রয়োগ করা হয়, যেহেতু প্রসঙ্গের স্যুইচিংয়ের কার্যকারিতা সিস্টেমের পক্ষে গুরুত্বপূর্ণ হতে পারে।

  • সিস্টেম কল : যে ব্যবস্থার সাহায্যে ইউজারস্পেস কোড একটি সিস্টেম কল ট্রিগার করতে পারে তা সাধারণত আর্কিটেকচারের জন্য নির্দিষ্ট (এবং কখনও কখনও এমনকি নির্দিষ্ট সিপিইউ মডেলের ক্ষেত্রেও থাকে, উদাহরণস্বরূপ ইনটেল এবং এএমডি এর জন্য বিভিন্ন নির্দেশনা প্রবর্তন করে, পুরানো সিপিইউগুলিতে সেই নির্দেশাবলীর অভাব থাকতে পারে, সুতরাং বিশদগুলি তাদের জন্য এখনও অনন্য হবে।)

  • বিঘ্নিত হ্যান্ডলারগুলি : কীভাবে বিঘ্নগুলি (হার্ডওয়্যার বিঘ্নগুলি) পরিচালনা করতে হয় তার বিশদটি সাধারণত প্ল্যাটফর্ম-নির্দিষ্ট থাকে এবং প্ল্যাটফর্মের জন্য ব্যবহৃত নির্দিষ্ট কলিং কনভেনশনগুলি পরিচালনা করতে সাধারণত কিছু সমাবেশ-স্তরের আঠার প্রয়োজন হয়। এছাড়াও, বাধা সক্ষম / নিষ্ক্রিয় করার জন্য আদিমগুলি সাধারণত প্ল্যাটফর্ম-নির্দিষ্ট থাকে এবং এ্যাসেম্বলি কোডও প্রয়োজন।

  • ইনিশিয়ালাইজেশন : কীভাবে প্রাথমিককরণ হওয়া উচিত তার বিবরণে সাধারণত এমন বিবরণ অন্তর্ভুক্ত থাকে যা প্ল্যাটফর্মের সাথে সুনির্দিষ্ট এবং কার্নেলের প্রবেশ পয়েন্টটি পরিচালনা করতে প্রায়শই কিছু অ্যাসেম্বলি কোড প্রয়োজন। প্ল্যাটফর্মগুলিতে যেগুলি একাধিক সিপিইউ (এসএমপি) রয়েছে, অন্যান্য সিপিইউগুলি অনলাইনে কীভাবে আনতে হবে তার বিবরণগুলি সাধারণত প্ল্যাটফর্ম-নির্দিষ্টও থাকে।

  • লকিং প্রিমিটিভস : লকিং আদিমগুলির প্রয়োগ (যেমন স্পিনলকস) সাধারণত প্ল্যাটফর্ম-নির্দিষ্ট বিশদও জড়িত, যেহেতু কিছু আর্কিটেকচারগুলি সেগুলি দক্ষতার সাথে বাস্তবায়নের জন্য বিভিন্ন সিপিইউ নির্দেশনা সরবরাহ করে (বা পছন্দ করে)। কেউ কেউ পারমাণবিক ক্রিয়াকলাপ বাস্তবায়ন করবে, কেউ একটি সিএমপিএক্সচজি সরবরাহ করবে যা পরমাণুভাবে পরীক্ষা / আপডেট করতে পারে (তবে অন্য লেখক যদি প্রথমে উপস্থিত হন তবে ব্যর্থ হন), অন্যরা সিপিইউ নির্দেশিকায় "লক" সংশোধক অন্তর্ভুক্ত করবেন। এগুলি প্রায়শই পাশাপাশি সমাবেশ কোড লিখতেও জড়িত।

সম্ভবত অন্যান্য ক্ষেত্রগুলি রয়েছে যেখানে কার্নেলটিতে প্ল্যাটফর্ম- বা আর্কিটেকচার-নির্দিষ্ট কোডের প্রয়োজন (বা, বিশেষত, লিনাক্স কার্নেলের মধ্যে।) কার্নেল উত্স গাছের দিকে তাকালে, আর্কিটেকচার-নির্দিষ্ট সাবট্রিজ রয়েছে যেখানে arch/নীচে include/arch/আপনি আরও সন্ধান করতে পারবেন এর উদাহরণ।

কিছু আসলে আশ্চর্যজনক, উদাহরণস্বরূপ আপনি দেখতে পাবেন যে প্রতিটি আর্কিটেকচারে উপলব্ধ সিস্টেম কলগুলির সংখ্যা পৃথক এবং কিছু সিস্টেম কলগুলি কিছু আর্কিটেকচারে উপস্থিত থাকবে এবং অন্যগুলি নয়। (এমনকি x86-তে, সিসকলের তালিকাটি 32-বিট এবং 64-বিট কার্নেলের মধ্যে পৃথক হয় fers)

সংক্ষেপে, কার্নেলের একটি প্ল্যাটফর্মের জন্য নির্দিষ্ট যা সচেতন হওয়া দরকার of লিনাক্স কার্নেল সেগুলির বেশিরভাগ বিমূর্ত করার চেষ্টা করে, তাই উচ্চ-স্তরের অ্যালগরিদম (যেমন মেমরি পরিচালনা এবং সময়সূচী কীভাবে কার্যকর হয়) সি তে প্রয়োগ করা যেতে পারে এবং সমস্ত আর্কিটেকচারে একই (বা বেশিরভাগ একই) কাজ করতে পারে।


7
খুব সুন্দর লেখা! সিস্কলের সংখ্যার পার্থক্য বেশিরভাগ ইতিহাসের সাথে সম্পর্কিত: নতুন বন্দরগুলির মধ্যে বন্দরের সময় বৈধ সিস্টেমে থাকা অন্তর্ভুক্ত থাকে, তারা পুরানো বন্দরগুলিতে উপস্থিত bagতিহাসিক ব্যাগগুলি নিয়ে মাথা ঘামায় না, তাই অবহেলিত সিস্টেমগুলি সাধারণত বন্দরগুলিতে উপস্থিত হয় না অবমূল্যায়নের চেয়ে নতুন (এটি সমস্ত পরিস্থিতিতে কভার করে না ...)
স্টিফেন কিট

10

লিনাক্স কার্নেলটি পোর্টিং করা ছাড়াও, আপনাকে "ব্যবহারকারী স্থান" প্রোগ্রামগুলির জন্য অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (এবিআই) সংজ্ঞায়িত করতে হবে এবং ব্যবহারকারীর স্পেস সফটওয়্যার স্ট্যাকের সর্বনিম্ন স্তরকে পোর্ট করতে হবে। লিনাক্স সাধারণত জিএনইউ প্রকল্পের নিম্ন স্তরের ব্যবহারকারী স্পেস উপাদানগুলির সাথে ব্যবহৃত হয়, যার মধ্যে সবচেয়ে গুরুত্বপূর্ণ:

  • সি সংকলক, সমাবেশকারী এবং লিঙ্কার: জিসিসি এবং জিএনইউ বিন্টিলস । সম্পূর্ণ নতুন সিপিইউ আর্কিটেকচারের জন্য, কার্নেলটি পোর্ট করা শুরু করার আগে আপনাকে এই সফ্টওয়্যারটি পোর্ট করতে হবে, কারণ কার্নেল নিজেই একটি সি প্রোগ্রাম এবং সংকলন করতে হবে। যদি আপনার প্ল্যাটফর্মের সিপিইউয়ের জন্য ইতিমধ্যে "ব্যাক এন্ড" সমর্থন রয়েছে তবে লিনাক্স ওএস কার্নেল হিসাবে নয়, আপনার কাজ করার যথেষ্ট পরিমাণ কম রয়েছে এবং কার্নেলটি শেষ না হওয়া অবধি আপনি বেশিরভাগ কাজ স্থগিত করে দিতে সক্ষম হতে পারেন এবং চলছে।
  • সি রানটাইম লাইব্রেরি: " জিএনইউ লিবিসি "। এই গ্রন্থাগার কোডটি অন্তর্ভুক্ত তোলে সিস্টেম কল এবং অন্যথায় কার্নেল সাথে সরাসরি মিথস্ক্রিয়া।
  • "বিদেশী ফাংশন ইন্টারফেস" গ্রন্থাগার, লিবিফি , যা অনেক উচ্চ-স্তরের ভাষার দোভাষীদের একটি প্রয়োজনীয় উপাদান, এবং হাতে কয়েকটি লিখিত সমাবেশের ভাষা প্রয়োজন এমন কয়েকটি অবশিষ্ট কাজগুলির মধ্যে একটি সম্পাদন করে।

অন্যান্য অনেকগুলি সফ্টওয়্যারের বিকল্প প্ল্যাটফর্ম-নির্ভর উপাদান রয়েছে; উদাহরণস্বরূপ, আপনি যদি নতুন নতুন সিপিইউ আর্কিটেকচারের জন্য এনএসএস এবং ওপেনএসএসএল-এর জন্য হ্যান্ড-অপ্টিমাইজড ক্রিপ্টোগ্রাফিক প্রিমিটিভস এবং আইওনকনকি এবং ভি 8 এর জন্য ইন-টাইম সংকলন ব্যাক- এন্ডগুলি লিখে থাকেন তবে ওয়েব ব্রাউজিং যথেষ্ট গতিযুক্ত হবে । তবে এগুলি নতুন প্ল্যাটফর্ম আনার জন্য প্রয়োজনীয় নয়।


1

আপনি যে হার্ডওয়্যারটিতে পোর্ট করছেন সে সম্পর্কে আপনাকে কার্নেলটি বলতে হবে। কার্নেলের কাজ হল হার্ডওয়্যারটির সাথে সরাসরি ইন্টারফেস করা, সুতরাং এটি সঠিকভাবে কাজ করার জন্য, কার্নেলকে বিভিন্ন ধরণের সিরিয়াল পোর্ট (এসপিআই, সিএন, আই 2 সি ইত্যাদি)।

পুরানো দিনগুলিতে, আপনি প্ল্যাটফর্ম নির্দিষ্ট কোড লিখে এটি করতেন যা ড্রাইভাররা তখন কাজ করতে ব্যবহার করবে। এই দিনগুলিতে, একটি ডিভাইস ট্রি সংজ্ঞা লিখে এটি করা হয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.