স্থিতিশীল রাখার জন্য প্রয়োজনীয় সিম্বল এবং টাইপের সংখ্যা কমাতে, GKI কার্নেলের এমন ক্ষমতা রয়েছে যা এক্সপোর্ট করা সিম্বলগুলোকে শুধুমাত্র মডিউলগুলোর জন্য প্রয়োজনীয় সিম্বলগুলোর মধ্যে সীমাবদ্ধ রাখতে পারে। বাহ্যিকভাবে কম্পাইল করা মডিউলগুলোর ক্ষেত্রে, GKI কার্নেল দ্বারা সেগুলোকে এক্সপোর্ট করার অনুমতি দেওয়ার জন্য ব্যবহৃত সিম্বলগুলোর একটি তালিকা থাকা প্রয়োজন। উদাহরণস্বরূপ, Cuttlefish- এর মডিউলগুলো দ্বারা ব্যবহৃত সিম্বলগুলো gki/aarch64/symbols/virtual_device এ সংরক্ষিত থাকে।
প্রতীক তালিকা তৈরির জন্য একটি লক্ষ্য যোগ করুন
kernel_abi টার্গেটের মাধ্যমে সিম্বল লিস্ট তৈরি করা হয়। নিম্নলিখিত অপশনগুলো সহ এই টার্গেটটি ডিভাইস BUILD.bazel এ যোগ করুন:
name<kernel_build>_abiফরম্যাটে হওয়া উচিত।kernel_buildএতে ডিভাইস
kernel_buildটার্গেটের নামটি থাকা উচিত।
আপনি নিম্নলিখিত বিকল্পগুলিও ব্যবহার করতে পারেন:
kernel_modulesআউট-অফ-ট্রি মডিউলগুলোর টার্গেটের তালিকা। ইন-ট্রি মডিউলগুলো এখানে অন্তর্ভুক্ত করা উচিত নয়। সিম্বল এক্সট্র্যাকশনের জন্য ইন-ট্রি মডিউল প্রস্তুতকরণ অংশটি দেখুন।
kmi_symbol_list_add_onlyএই বিকল্পটি অব্যবহৃত প্রতীক অপসারণ প্রতিরোধ করে। KMI স্থিতিশীলকরণের সময় শুধুমাত্র নির্দিষ্ট সময়ে প্রতীক অপসারণের অনুমতি রয়েছে এবং KMI একবার স্থির হয়ে গেলে তা আর করা যায় না।
একাধিক ভিন্ন ডিভাইসের জন্য একই প্রতীক তালিকা ব্যবহার করার ক্ষেত্রেও এটি কার্যকর। এর ফলে, এটি ডিভাইস A দ্বারা ব্যবহৃত কিন্তু ডিভাইস B দ্বারা ব্যবহৃত নয় এমন প্রতীকগুলো মুছে ফেলবে না।
module_groupingযদি
Trueবা অনির্দিষ্ট থাকে, তাহলে প্রতীক তালিকাটি সেইসব কার্নেল মডিউলের উপর ভিত্তি করে প্রতীকগুলিকে দলবদ্ধ করে যেগুলি প্রতীকটিকে উল্লেখ করে। অন্যথায় প্রতীক তালিকাটি সমস্ত কার্নেল মডিউল দ্বারা ব্যবহৃত প্রতীকগুলির একটি সাজানো তালিকা হয়।
উদাহরণস্বরূপ common-modules/virtual-device/BUILD.bazel দেখুন:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [":virtual_device_aarch64_external_modules"],
kmi_symbol_list_add_only = True,
)
Kleaf-এ kernel_abi টার্গেট সম্পর্কিত রেফারেন্স ডকুমেন্টেশনও দেখুন।
প্রতীক নিষ্কাশনের জন্য ইন-ট্রি মডিউল প্রস্তুত করুন
সিম্বল এক্সট্র্যাকশনের জন্য ইন-ট্রি মডিউল প্রস্তুত করতে, kernel_build টার্গেটের module_outs অ্যাট্রিবিউটে ভেন্ডর-নির্দিষ্ট ইন-ট্রি মডিউলগুলোর তালিকা করুন। একটি উদাহরণের জন্য _VIRT_COMMON_MODULES এবং এর ব্যবহার দেখুন। এই তালিকায় GKI মডিউল অন্তর্ভুক্ত করবেন না।
এই মডিউলগুলোকে আনসাইনড (unsigned) হিসেবে কনফিগার করুন, অন্যথায় সিম্বল লিস্টটি খালি থাকতে পারে। এটি করার জন্য, আপনার কার্নেল কনফিগ ফ্র্যাগমেন্টে এই লাইনটি যোগ করুন:
# CONFIG_MODULE_SIG_ALL is not set
উদাহরণের জন্য common-modules/virtual-device/virtual_device_core.fragment দেখুন।
ডিভাইস কার্নেল বিল্ডে একটি ডিভাইস প্রতীক তালিকা যোগ করুন
ডিভাইস BUILD.bazel এ সংজ্ঞায়িত kernel_build টার্গেটে kmi_symbol_list অ্যাট্রিবিউটটি যোগ করুন। সিম্বল লিস্টের নামটি //common:gki/<arch>/symbols/<device> ফরম্যাটে হতে হবে।
উদাহরণস্বরূপ, common-modules/virtual-device/BUILD.bazel দেখুন:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:gki/aarch64/symbols/virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
একটি প্রাথমিক প্রতীক তালিকা তৈরি করুন এবং জমা দিন
common/gki/<arch>/symbols/<device> -এ একটি খালি সিম্বল লিস্ট তৈরি করুন। উপরের উদাহরণটির জন্য কমান্ডটি হবে:
touch common/gki/aarch64/symbols/virtual_device এই ফাইলটি বেস GKI কার্নেল বিল্ডের additional_kmi_symbol_lists এ যোগ করুন। উদাহরণস্বরূপ, //common:gki/aarch64/symbols/virtual_device ফাইলটি common/BUILD.bazel এ ঘোষিত aarch64_additional_kmi_symbol_lists ফাইলগ্রুপে যোগ করা হয়।
নতুন সিম্বল লিস্টটি পূরণ করতে ডিভাইস সিম্বল লিস্টটি আপডেট করুন এবং এটি অ্যান্ড্রয়েড কমন কার্নেল রিপোজিটরিতে পাঠান।
ডিভাইসের প্রতীক তালিকা আপডেট করুন
kernel_abi এর kernel_build এবং kernel_modules এর module_outs এর মডিউলগুলো দ্বারা ব্যবহৃত সমস্ত কোর কার্নেল সিম্বল সিম্বল লিস্টে অন্তর্ভুক্ত করা উচিত। এটি করার জন্য kernel_abi টার্গেটটিকে _update_symbol_list সাফিক্স সহ রান করতে হবে। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি //common-modules/virtual-device:virtual_device_aarch64 এর জন্য সিম্বল লিস্ট আপডেট করে:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_listACK-তে একটি প্রতীক তালিকা হালনাগাদ পাঠান
নতুন সিম্বলগুলোকে KMI-এর অংশ করার জন্য, সিম্বল তালিকার পরিবর্তনসহ একটি প্যাচ অ্যান্ড্রয়েড কমন কার্নেল গ্যারিটে পাঠান।
কমিট মেসেজে যোগ করা বা সরানো সিম্বলগুলোর একটি তালিকা অন্তর্ভুক্ত থাকা উচিত। আপনি ছোট সিম্বল তালিকা আপডেটের জন্য এই তালিকাটি ম্যানুয়ালি লিখতে পারেন অথবা রেফারেন্স ABI রিপ্রেজেন্টেশন আপডেট করার পরে $DIST_DIR/abi_stgdiff/abi.report.short রিপোর্টটি ব্যবহার করতে পারেন।
সিম্বল লিস্ট আপডেট পাঠানোর আগে রেফারেন্স ABI রিপ্রেজেন্টেশন আপডেট করা বাধ্যতামূলক না হলেও, এটি করলে প্রি-সাবমিটের অতিরিক্ত ধাপগুলো বাদ দেওয়া যেতে পারে এবং পরিবর্তনটি দ্রুত জমা দেওয়ার জন্য প্রস্তুত করা যায়। যাই হোক, প্রি-সাবমিটের সময় এটি যাচাই করা হয় এবং প্রয়োজনে আপডেট করা হয়।
প্রতীক তালিকা নিয়ে কাজ করুন (অ্যান্ড্রয়েড ১৩)
অ্যান্ড্রয়েড ১৩ ক্লিফ (Kleaf) এবং লিগ্যাসি (legacy) উভয় বিল্ড স্ক্রিপ্টই সমর্থন করে, তাই আপনি পূর্ববর্তী বিভাগগুলিতে বর্ণিত পদ্ধতি অনুসারে অথবা পরবর্তী বিভাগে বর্ণিত পদ্ধতি অনুসারে সিম্বল তালিকা পরিচালনা করতে পারেন।
প্রতীক তালিকা নিয়ে কাজ করুন (অ্যান্ড্রয়েড ১২ এবং তার নিচের সংস্করণ)
build_abi.sh টুলটি নিম্নরূপভাবে ব্যবহার করুন:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list এই উদাহরণে, build.config.device এ অবশ্যই এই কনফিগারেশন অপশনগুলো অন্তর্ভুক্ত থাকতে হবে:
vmlinuxঅবশ্যই
FILESতালিকার অংশ হতে হবে।build.config.aarch64অন্তর্ভুক্ত করার মাধ্যমে এটি করা যায়।KMI_SYMBOL_LISTআপডেট করার জন্য অবশ্যই KMI প্রতীক তালিকাটি সেট করে সেদিকে নির্দেশ করতে হবে।
ডিভাইস সিম্বল লিস্ট আপডেট করার পর আপনাকে GKI বিল্ডেও ( common/build.config.gki.aarch64 ) এই পরিবর্তনগুলো প্রতিফলিত করতে হবে:
আপডেট করা সিম্বল লিস্টটি
common/android/abi_gki_aarch64_<device>-এ কপি করুন।common/build.config.gki.aarch64এ থাকাADDITIONAL_KMI_SYMBOL_LISTSএর মধ্যেandroid/abi_gki_aarch64_<device>অন্তর্ভুক্ত আছে কিনা তা যাচাই করুন।