Android কার্নেল ABI রেপ্রেজেন্টেশন কীভাবে তৈরি করতে হয় এবং ABI মনিটরিং কীভাবে রান করাতে হয় তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে। এটি Android 16 ও তার পরবর্তী যেকোনও ভার্সনে প্রযোজ্য। নিচের ভার্সনের জন্য, ABI মনিটর আগের কার্নেল ভার্সন দেখুন।
এছাড়াও, Kleaf-এর রেফারেন্স ডকুমেন্টেশন দেখুন: ABI মনিটরিং কাজ করে (GKI) এবং ABI মনিটরিং কাজ করে (ডিভাইস)।
কার্নেল ও তার ABI রিপ্রেজেন্টেশন তৈরি করা
GKI সোর্স ডাউনলোড করার পরে GKI কার্নেল ও ABI আর্টিফ্যাক্ট তৈরি করতে নিচে উল্লেখ করা কমান্ড রান করুন:
tools/bazel run //common:kernel_aarch64_abi_distএই কমান্ড বর্তমান ABI উপস্থাপনা তৈরি করে এবং তৈরি করা কার্নেল ও মডিউল সহ এটিকে
$DIST_DIR/abi.stg-এ কপি করে। $DIST_DIR
ডিফল্ট হিসেবে out_abi/kernel_aarch64_abi_dist/dist থাকে।
---এর পরে কমান্ডের শেষে ABI টুলের জন্য অতিরিক্ত আর্গুমেন্ট নির্দিষ্ট করতে পারেন।
যেমন, ABI-এর গন্তব্য পরিবর্তন করতে এবং আর্টিফ্যাক্ট তৈরি করতে,
আপনি --destdir বিকল্প ব্যবহার করতে পারেন:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/distবিল্ড ও রেফারেন্স উপস্থাপনার মধ্যে ABI পার্থক্য বিশ্লেষণ করুন
আগের কমান্ডে এক্সিকিউট করা //common:kernel_aarch64_abi_dist টার্গেট, common/gki/aarch64/abi.stg-এ (BUILD.bazel-এ
সংজ্ঞায়িত) থাকা বিল্ড ও রেফারেন্সের মধ্যে পাওয়া যেকোনও ABI পার্থক্য বিশ্লেষণ করে ও রিপোর্ট করে।
এইসব পার্থক্য বিল্ডের শেষে প্রিন্ট করা হয়, যেমনটি
নিচের উদাহরণে দেখানো হয়েছে:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
প্রিন্ট করা রিপোর্টটি
$DIST_DIR/abi_stgdiff/abi.report.short-এ অবস্থিত বিল্ড আর্টিফ্যাক্ট থেকে আসে এবং অন্যান্য ফর্ম্যাটের রিপোর্টও থাকে।
অটোমেশনের ক্ষেত্রে বিল্ড কমান্ডের এক্সিট কোড ব্যবহার করা উচিত, যা পার্থক্য খুঁজে পাওয়া গেলে নন-জিরো হয়।
মনে রাখবেন যে
ডেভেলপমেন্ট ফেজ
শাখা, যার মধ্যে android-mainline অন্তর্ভুক্ত, সেগুলির কোনও রেফারেন্স ABI উপস্থাপনা নেই।
এটি ছাড়া, //common:kernel_aarch64_abi_dist কোনও পার্থক্য শনাক্ত করতে পারবে না।
রেফারেন্স ABI উপস্থাপনা আপডেট করা
কার্নেল ABI-কে প্রভাবিত করে এমন যেকোনও পরিবর্তন, যেমন, একটি
প্রতীক তালিকা আপডেট,
রেফারেন্স ABI উপস্থাপনে প্রতিফলিত হতে হবে
(common/gki/aarch64/abi.stg, যা
BUILD.bazel-এ সংজ্ঞায়িত করা হয়েছে)।
এটি করতে, আপনাকে নিম্নলিখিত কমান্ড রান করতে হবে:
tools/bazel run //common:kernel_aarch64_abi_updateএই কমান্ডটি
ABI পার্থক্য বিশ্লেষণ করুন ধাপের সবকিছু সম্পাদন করে এবং অতিরিক্তভাবে সোর্সে রেফারেন্স রিপ্রেজেন্টেশন আপডেট করে। পরিবর্তনের সাথে একই কমিটে আপডেট করা ABI আপলোড করা
যাবে। কমিট মেসেজে $DIST_DIR/abi_stgdiff/abi.report.short-এ দেওয়া রিপোর্ট থেকে ABI-এর পার্থক্য
যোগ করুন।
ABI মনিটরিং ও ডিভাইস টার্গেট
ABI মনিটরিং শুধুমাত্র মূল কার্নেল বিল্ড টার্গেটের জন্য কনফিগার করতে হবে। মিক্সড
বিল্ড কনফিগারেশন (যেগুলি base_kernel সংজ্ঞায়িত করে) যা সরাসরি GKI কার্নেলের সাথে
কম্পাইল করে সেগুলির ক্ষেত্রে শুধু ডিভাইস সিম্বল লিস্ট ট্র্যাক করার জন্য
সহায়তা যোগ করতে হবে।
GKI বিল্ড ব্যবহার করে ABI সংজ্ঞা আপডেট করা উচিত।
এছাড়াও, Kleaf-এর রেফারেন্স ডকুমেন্টেশন দেখুন: ABI মনিটরিং কাজ করে (ডিভাইস)।
আগের কার্নেল ভার্সন (Android 15 ও এর আগের যেকোনও ভার্সন) ABI মনিটর করে
আগের কার্নেল ভার্সনের জন্য, ABI বিল্ড ও মনিটরিং সংক্রান্ত নির্দেশাবলী নিচে দেওয়া নির্দেশাবলী থেকে আলাদা হয়।
Android 15 ও 14
নির্দেশাবলী বেশিরভাগই Android 16-এর মতো,
তবে রেফারেন্স ABI উপস্থাপনা হল
common/android/abi_gki_aarch64.stg এবং $DIST_DIR
ডিফল্ট হিসেবে out_abi/kernel_aarch64/dist।
Android 13
Android 13, Kleaf বা পুরনো বিল্ড স্ক্রিপ্ট দিয়ে তৈরি করা হতে পারে।
Kleaf-এর ক্ষেত্রে, Android 14-এর মতো একই নির্দেশাবলী অনুসরণ করতে হবে, তবে ABI
ফর্ম্যাট হল XML এবং রেফারেন্স ABI উপস্থাপনা হল
common/android/abi_gki_aarch64.xml।
পুরনো বিল্ড স্ক্রিপ্টের জন্য, Android 12-এর মতো একই নির্দেশাবলী অনুসরণ করতে হবে।
Android 12 ও তার আগের যেকোনও ভার্সন
ABI ফর্ম্যাট হল XML এবং রেফারেন্স ABI উপস্থাপনা হল
common/android/abi_gki_aarch64.xml
এইসব কার্নেল Kleaf-এর পরিবর্তে build.sh ব্যবহার করে। ABI মনিটরিংয়ের জন্য আপনাকে
build_abi.sh ব্যবহার করতে হবে, যা build.sh-এর মতো একই এনভায়রনমেন্ট ভেরিয়েবল গ্রহণ করে
বিল্ড কাস্টমাইজ করে। যেমন:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.shএটি কার্নেল তৈরি করে এবং OUT_DIR
(যা ডিফল্ট হিসেবে out_abi) সাবডিরেক্টরিতে ABI উপস্থাপনা এক্সট্র্যাক্ট করে এবং এটি Kleaf-এর
//common:kernel_aarch64_abi_dist টার্গেটের সমতুল্য (দেখুন
কার্নেল ও ABI আর্টিফ্যাক্ট তৈরি করা)।
রেফারেন্স ABI উপস্থাপনা android/abi_gki_aarch64.xml-এ
common/build.config.gki.aarch64-এ ABI_DEFINITION ভেরিয়েবল দ্বারা সংজ্ঞায়িত করা হিসেবে স্টোর করা হয়।
আপনাকে যদি কার্নেল ABI উপস্থাপনা আপডেট করতে হয়, তাহলে সবচেয়ে সুবিধাজনক উপায় হল
--update এবং --print-report বিকল্প ব্যবহার করা:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report--print-report, ফাইল যেমন আছে তেমন এবং নতুন তৈরি করা ABI-এর মধ্যে
ABI-এর পার্থক্য প্রিন্ট করে।
--update বিকল্পটি রেফারেন্স ABI উপস্থাপনাকে ওভাররাইট করে। এছাড়াও, KMI_SYMBOL_LIST কনফিগার করা আছে এমন ডিভাইসের জন্য BUILD_CONFIG ব্যবহার করার সময় এটি
প্রতীক তালিকা আপডেট
করে।