বিক্রেতা মডিউলগুলির জন্য একটি স্থিতিশীল কার্নেল মডিউল ইন্টারফেস (KMI) বজায় রাখা গুরুত্বপূর্ণ। GKI কার্নেল বাইনারি আকারে তৈরি এবং পাঠানো হয় এবং বিক্রেতা-লোডযোগ্য মডিউলগুলি একটি পৃথক গাছে তৈরি করা হয়। ফলস্বরূপ GKI কার্নেল এবং বিক্রেতা মডিউলগুলিকে অবশ্যই কাজ করতে হবে যেন তারা একসাথে তৈরি করা হয়েছিল।
সাধারণত, লিনাক্স সম্প্রদায় মেইনলাইন কার্নেলের জন্য ইন-কার্নেল ABI স্থায়িত্বের ধারণাকে ভ্রুক্ষেপ করেছে । বিভিন্ন টুলচেইন, কনফিগারেশন এবং একটি চির-বিকশিত লিনাক্স মেইনলাইন কার্নেলের মুখে, মেইনলাইনে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব নয়। যাইহোক, এই সীমাবদ্ধতার সাথে অত্যন্ত সীমাবদ্ধ GKI পরিবেশে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব:
শুধুমাত্র একটি কনফিগারেশন,
gki_defconfig
, কার্নেল তৈরি করতে ব্যবহার করা যেতে পারে।KMI শুধুমাত্র একটি কার্নেলের একই LTS এবং Android সংস্করণের মধ্যে স্থিতিশীল, যেমন
android13-5.10
,android12-5.10
বাandroid13-5.15
।-
android-mainline
জন্য কোন KMI স্থিতিশীলতা বজায় রাখা হয় না।
-
শুধুমাত্র AOSP-এ সরবরাহ করা এবং সংশ্লিষ্ট শাখার জন্য সংজ্ঞায়িত নির্দিষ্ট ক্ল্যাং টুলচেন কার্নেল এবং মডিউল তৈরির জন্য ব্যবহৃত হয়।
শুধুমাত্র প্রতীক তালিকায় নির্দিষ্ট করা মডিউল দ্বারা ব্যবহৃত চিহ্নগুলিকে স্থায়িত্বের জন্য পর্যবেক্ষণ করা হয় এবং কেএমআই প্রতীক হিসাবে বিবেচনা করা হয়।
- ফলাফল হল যে বিক্রেতা মডিউল শুধুমাত্র KMI চিহ্ন ব্যবহার করতে হবে। অ-KMI-প্রতীক প্রয়োজন হলে এই সীমাবদ্ধতা মডিউল লোড ব্যর্থ করে প্রয়োগ করা হয়।
KMI শাখা হিমায়িত হওয়ার পরে, পরিবর্তনগুলি অনুমোদিত কিন্তু KMI ভাঙতে পারে না৷ এই পরিবর্তনগুলি নিম্নলিখিত অন্তর্ভুক্ত:
- কনফিগার পরিবর্তন
- কার্নেল কোড পরিবর্তন
- টুলচেইন পরিবর্তন (আপডেট সহ)
হারমেটিক বিল্ড প্রক্রিয়া এবং LLVM টুলচেন ব্যবহার করুন
হারমেটিক বিল্ড প্রক্রিয়া kernel/manifest
repo
ম্যানিফেস্টের মাধ্যমে একটি স্থিতিশীল KMI নিশ্চিত করে যা বিল্ড এনভায়রনমেন্ট সম্পূর্ণভাবে বর্ণনা করে। উদাহরণস্বরূপ, android13-5.15
এর ম্যানিফেস্টে টুলচেন, বিল্ড স্ক্রিপ্ট এবং জেনেরিক কার্নেল ইমেজ (GKI) কার্নেল তৈরির জন্য প্রয়োজনীয় সবকিছু অন্তর্ভুক্ত রয়েছে। সংশ্লিষ্ট build.config
কনফিগারেশন ফাইলগুলি, যেমন GKI build config build.config.gki.aarch64
, নিশ্চিত করে যে অন্তর্ভুক্ত টুলগুলি সামঞ্জস্যপূর্ণ বিল্ড ফলাফল তৈরি করতে সঠিকভাবে ব্যবহার করা হয়েছে।
একটি হারমেটিক বিল্ড প্রক্রিয়া ব্যবহার করে এটিও নিশ্চিত করে যে গাছের জন্য ABI বিবরণটি Google দ্বারা তৈরি করা হোক না কেন (উদাহরণস্বরূপ, android13-5.15
এর জন্য abi_gki_aarch64.xml
) বা বিক্রেতা মডিউলগুলি অন্তর্ভুক্ত স্থানীয় গাছে তৈরি করা হোক না কেন। কার্নেল মডিউল ইন্টারফেস (KMI) এর জন্য ABI বিবরণ তৈরি এবং তুলনা করার সরঞ্জামগুলিও ম্যানিফেস্ট দ্বারা বর্ণিত রেপোর অংশ হিসাবে সরবরাহ করা হয়েছে।
GKI কার্নেল তৈরি করতে ব্যবহৃত টুলচেন অবশ্যই ভেন্ডর মডিউল তৈরি করতে ব্যবহৃত টুলচেনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হতে হবে। অ্যান্ড্রয়েড 10 অনুসারে, সমস্ত অ্যান্ড্রয়েড কার্নেল অবশ্যই একটি LLVM টুলচেন দিয়ে তৈরি করা উচিত। GKI এর সাথে, পণ্য কার্নেল এবং বিক্রেতা মডিউলগুলি তৈরি করতে ব্যবহৃত LLVM টুলচেনকে অবশ্যই AOSP থেকে LLVM টুলচেনের মতো একই ABI তৈরি করতে হবে এবং অংশীদারদের অবশ্যই নিশ্চিত করতে হবে যে KMI GKI কার্নেলের সাথে সামঞ্জস্যপূর্ণ। প্রদত্ত বিল্ড সরঞ্জামগুলিকে দৃঢ়ভাবে উত্সাহিত করা হয় কারণ তারা সর্বোত্তম সামঞ্জস্য প্রদান করে।
এরপর কি?
হারমেটিক বিল্ড প্রক্রিয়া এবং LLVM টুলচেন ব্যবহার করে কার্নেল তৈরির নির্দেশাবলীর জন্য, বিল্ড কার্নেল পড়ুন।
কীভাবে ABI নিরীক্ষণ করবেন এবং সমস্যাগুলি সমাধান করবেন তার নির্দেশাবলীর জন্য, Android Kernel ABI মনিটরিং দেখুন
বিক্রেতা মডিউলগুলির জন্য একটি স্থিতিশীল কার্নেল মডিউল ইন্টারফেস (KMI) বজায় রাখা গুরুত্বপূর্ণ। GKI কার্নেল বাইনারি আকারে তৈরি এবং পাঠানো হয় এবং বিক্রেতা-লোডযোগ্য মডিউলগুলি একটি পৃথক গাছে তৈরি করা হয়। ফলস্বরূপ GKI কার্নেল এবং বিক্রেতা মডিউলগুলিকে অবশ্যই কাজ করতে হবে যেন তারা একসাথে তৈরি করা হয়েছিল।
সাধারণত, লিনাক্স সম্প্রদায় মেইনলাইন কার্নেলের জন্য ইন-কার্নেল ABI স্থায়িত্বের ধারণাকে ভ্রুক্ষেপ করেছে । বিভিন্ন টুলচেইন, কনফিগারেশন এবং একটি চির-বিকশিত লিনাক্স মেইনলাইন কার্নেলের মুখে, মেইনলাইনে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব নয়। যাইহোক, এই সীমাবদ্ধতার সাথে অত্যন্ত সীমাবদ্ধ GKI পরিবেশে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব:
শুধুমাত্র একটি কনফিগারেশন,
gki_defconfig
, কার্নেল তৈরি করতে ব্যবহার করা যেতে পারে।KMI শুধুমাত্র একটি কার্নেলের একই LTS এবং Android সংস্করণের মধ্যে স্থিতিশীল, যেমন
android13-5.10
,android12-5.10
বাandroid13-5.15
।-
android-mainline
জন্য কোন KMI স্থিতিশীলতা বজায় রাখা হয় না।
-
শুধুমাত্র AOSP-এ সরবরাহ করা এবং সংশ্লিষ্ট শাখার জন্য সংজ্ঞায়িত নির্দিষ্ট ক্ল্যাং টুলচেন কার্নেল এবং মডিউল তৈরির জন্য ব্যবহৃত হয়।
শুধুমাত্র প্রতীক তালিকায় নির্দিষ্ট করা মডিউল দ্বারা ব্যবহৃত চিহ্নগুলিকে স্থায়িত্বের জন্য পর্যবেক্ষণ করা হয় এবং কেএমআই প্রতীক হিসাবে বিবেচনা করা হয়।
- ফলাফল হল যে বিক্রেতা মডিউল শুধুমাত্র KMI চিহ্ন ব্যবহার করতে হবে। অ-KMI-প্রতীক প্রয়োজন হলে এই সীমাবদ্ধতা মডিউল লোড ব্যর্থ করে প্রয়োগ করা হয়।
KMI শাখা হিমায়িত হওয়ার পরে, পরিবর্তনগুলি অনুমোদিত কিন্তু KMI ভাঙতে পারে না৷ এই পরিবর্তনগুলি নিম্নলিখিত অন্তর্ভুক্ত:
- কনফিগার পরিবর্তন
- কার্নেল কোড পরিবর্তন
- টুলচেইন পরিবর্তন (আপডেট সহ)
হারমেটিক বিল্ড প্রক্রিয়া এবং LLVM টুলচেন ব্যবহার করুন
হারমেটিক বিল্ড প্রক্রিয়া kernel/manifest
repo
ম্যানিফেস্টের মাধ্যমে একটি স্থিতিশীল KMI নিশ্চিত করে যা বিল্ড এনভায়রনমেন্ট সম্পূর্ণভাবে বর্ণনা করে। উদাহরণস্বরূপ, android13-5.15
এর ম্যানিফেস্টে টুলচেন, বিল্ড স্ক্রিপ্ট এবং জেনেরিক কার্নেল ইমেজ (GKI) কার্নেল তৈরির জন্য প্রয়োজনীয় সবকিছু অন্তর্ভুক্ত রয়েছে। সংশ্লিষ্ট build.config
কনফিগারেশন ফাইলগুলি, যেমন GKI build config build.config.gki.aarch64
, নিশ্চিত করে যে অন্তর্ভুক্ত টুলগুলি সামঞ্জস্যপূর্ণ বিল্ড ফলাফল তৈরি করতে সঠিকভাবে ব্যবহার করা হয়েছে।
একটি হারমেটিক বিল্ড প্রক্রিয়া ব্যবহার করে এটিও নিশ্চিত করে যে গাছের জন্য ABI বিবরণটি Google দ্বারা তৈরি করা হোক না কেন (উদাহরণস্বরূপ, android13-5.15
এর জন্য abi_gki_aarch64.xml
) বা বিক্রেতা মডিউলগুলি অন্তর্ভুক্ত স্থানীয় গাছে তৈরি করা হোক না কেন। কার্নেল মডিউল ইন্টারফেস (KMI) এর জন্য ABI বিবরণ তৈরি এবং তুলনা করার সরঞ্জামগুলিও ম্যানিফেস্ট দ্বারা বর্ণিত রেপোর অংশ হিসাবে সরবরাহ করা হয়েছে।
GKI কার্নেল তৈরি করতে ব্যবহৃত টুলচেন অবশ্যই ভেন্ডর মডিউল তৈরি করতে ব্যবহৃত টুলচেনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হতে হবে। অ্যান্ড্রয়েড 10 অনুসারে, সমস্ত অ্যান্ড্রয়েড কার্নেল অবশ্যই একটি LLVM টুলচেন দিয়ে তৈরি করা উচিত। GKI এর সাথে, পণ্য কার্নেল এবং বিক্রেতা মডিউলগুলি তৈরি করতে ব্যবহৃত LLVM টুলচেনকে অবশ্যই AOSP থেকে LLVM টুলচেনের মতো একই ABI তৈরি করতে হবে এবং অংশীদারদের অবশ্যই নিশ্চিত করতে হবে যে KMI GKI কার্নেলের সাথে সামঞ্জস্যপূর্ণ। প্রদত্ত বিল্ড সরঞ্জামগুলিকে দৃঢ়ভাবে উত্সাহিত করা হয় কারণ তারা সর্বোত্তম সামঞ্জস্য প্রদান করে।
এরপর কি?
হারমেটিক বিল্ড প্রক্রিয়া এবং LLVM টুলচেন ব্যবহার করে কার্নেল তৈরির নির্দেশাবলীর জন্য, বিল্ড কার্নেল পড়ুন।
কীভাবে ABI নিরীক্ষণ করবেন এবং সমস্যাগুলি সমাধান করবেন তার নির্দেশাবলীর জন্য, Android Kernel ABI মনিটরিং দেখুন
বিক্রেতা মডিউলগুলির জন্য একটি স্থিতিশীল কার্নেল মডিউল ইন্টারফেস (KMI) বজায় রাখা গুরুত্বপূর্ণ। GKI কার্নেল বাইনারি আকারে তৈরি এবং পাঠানো হয় এবং বিক্রেতা-লোডযোগ্য মডিউলগুলি একটি পৃথক গাছে তৈরি করা হয়। ফলস্বরূপ GKI কার্নেল এবং বিক্রেতা মডিউলগুলিকে অবশ্যই কাজ করতে হবে যেন তারা একসাথে তৈরি করা হয়েছিল।
সাধারণত, লিনাক্স সম্প্রদায় মেইনলাইন কার্নেলের জন্য ইন-কার্নেল ABI স্থায়িত্বের ধারণাকে ভ্রুক্ষেপ করেছে । বিভিন্ন টুলচেইন, কনফিগারেশন এবং একটি চির-বিকশিত লিনাক্স মেইনলাইন কার্নেলের মুখে, মেইনলাইনে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব নয়। যাইহোক, এই সীমাবদ্ধতার সাথে অত্যন্ত সীমাবদ্ধ GKI পরিবেশে একটি স্থিতিশীল KMI বজায় রাখা সম্ভব:
শুধুমাত্র একটি কনফিগারেশন,
gki_defconfig
, কার্নেল তৈরি করতে ব্যবহার করা যেতে পারে।KMI শুধুমাত্র একটি কার্নেলের একই LTS এবং Android সংস্করণের মধ্যে স্থিতিশীল, যেমন
android13-5.10
,android12-5.10
বাandroid13-5.15
।-
android-mainline
জন্য কোন KMI স্থিতিশীলতা বজায় রাখা হয় না।
-
শুধুমাত্র AOSP-এ সরবরাহ করা এবং সংশ্লিষ্ট শাখার জন্য সংজ্ঞায়িত নির্দিষ্ট ক্ল্যাং টুলচেন কার্নেল এবং মডিউল তৈরির জন্য ব্যবহৃত হয়।
শুধুমাত্র প্রতীক তালিকায় নির্দিষ্ট করা মডিউল দ্বারা ব্যবহৃত চিহ্নগুলিকে স্থায়িত্বের জন্য পর্যবেক্ষণ করা হয় এবং কেএমআই প্রতীক হিসাবে বিবেচনা করা হয়।
- ফলাফল হল যে বিক্রেতা মডিউল শুধুমাত্র KMI চিহ্ন ব্যবহার করতে হবে। অ-KMI-প্রতীক প্রয়োজন হলে এই সীমাবদ্ধতা মডিউল লোড ব্যর্থ করে প্রয়োগ করা হয়।
KMI শাখা হিমায়িত হওয়ার পরে, পরিবর্তনগুলি অনুমোদিত কিন্তু KMI ভাঙতে পারে না৷ এই পরিবর্তনগুলি নিম্নলিখিত অন্তর্ভুক্ত:
- কনফিগার পরিবর্তন
- কার্নেল কোড পরিবর্তন
- টুলচেইন পরিবর্তন (আপডেট সহ)
হারমেটিক বিল্ড প্রক্রিয়া এবং LLVM টুলচেন ব্যবহার করুন
হারমেটিক বিল্ড প্রক্রিয়া kernel/manifest
repo
ম্যানিফেস্টের মাধ্যমে একটি স্থিতিশীল KMI নিশ্চিত করে যা বিল্ড এনভায়রনমেন্ট সম্পূর্ণভাবে বর্ণনা করে। উদাহরণস্বরূপ, android13-5.15
এর ম্যানিফেস্টে টুলচেন, বিল্ড স্ক্রিপ্ট এবং জেনেরিক কার্নেল ইমেজ (GKI) কার্নেল তৈরির জন্য প্রয়োজনীয় সবকিছু অন্তর্ভুক্ত রয়েছে। সংশ্লিষ্ট build.config
কনফিগারেশন ফাইলগুলি, যেমন GKI build config build.config.gki.aarch64
, নিশ্চিত করে যে অন্তর্ভুক্ত টুলগুলি সামঞ্জস্যপূর্ণ বিল্ড ফলাফল তৈরি করতে সঠিকভাবে ব্যবহার করা হয়েছে।
একটি হারমেটিক বিল্ড প্রক্রিয়া ব্যবহার করে এটিও নিশ্চিত করে যে গাছের জন্য ABI বিবরণটি Google দ্বারা তৈরি করা হোক না কেন (উদাহরণস্বরূপ, android13-5.15
এর জন্য abi_gki_aarch64.xml
) বা বিক্রেতা মডিউলগুলি অন্তর্ভুক্ত স্থানীয় গাছে তৈরি করা হোক না কেন। কার্নেল মডিউল ইন্টারফেস (KMI) এর জন্য ABI বিবরণ তৈরি এবং তুলনা করার সরঞ্জামগুলিও ম্যানিফেস্ট দ্বারা বর্ণিত রেপোর অংশ হিসাবে সরবরাহ করা হয়েছে।
GKI কার্নেল তৈরি করতে ব্যবহৃত টুলচেন অবশ্যই ভেন্ডর মডিউল তৈরি করতে ব্যবহৃত টুলচেনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হতে হবে। অ্যান্ড্রয়েড 10 অনুসারে, সমস্ত অ্যান্ড্রয়েড কার্নেল অবশ্যই একটি LLVM টুলচেন দিয়ে তৈরি করা উচিত। GKI এর সাথে, পণ্য কার্নেল এবং বিক্রেতা মডিউলগুলি তৈরি করতে ব্যবহৃত LLVM টুলচেনকে অবশ্যই AOSP থেকে LLVM টুলচেনের মতো একই ABI তৈরি করতে হবে এবং অংশীদারদের অবশ্যই নিশ্চিত করতে হবে যে KMI GKI কার্নেলের সাথে সামঞ্জস্যপূর্ণ। প্রদত্ত বিল্ড সরঞ্জামগুলিকে দৃঢ়ভাবে উত্সাহিত করা হয় কারণ তারা সর্বোত্তম সামঞ্জস্য প্রদান করে।
এরপর কি?
হারমেটিক বিল্ড প্রক্রিয়া এবং LLVM টুলচেন ব্যবহার করে কার্নেল তৈরির নির্দেশাবলীর জন্য, বিল্ড কার্নেল পড়ুন।
কীভাবে ABI নিরীক্ষণ করবেন এবং সমস্যাগুলি সমাধান করবেন তার নির্দেশাবলীর জন্য, Android Kernel ABI মনিটরিং দেখুন