প্রতীক তালিকা নিয়ে কাজ করা

স্টেবল হিসেবে বজায় রাখতে হবে এমন প্রতীক ও প্রকারের সারফেস কমাতে, 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 ফ্রিজ হয়ে গেলে তা আর করা যায় না।

    এছাড়াও, আপনি একাধিক ডিভাইসের জন্য একই চিহ্নের তালিকা ব্যবহার করলে এটি কাজে লাগে। এইভাবে, এটি ডিভাইস 'ক' ব্যবহার করে এমন প্রতীক সরিয়ে দেবে না, তবে ডিভাইস 'খ' সরিয়ে দেবে।

  • 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 মডিউল অন্তর্ভুক্ত করবেন না।

এইসব মডিউলকে স্বাক্ষরিত নয় হিসেবে কনফিগার করুন, অন্যথায় চিহ্নের তালিকা খালি থাকতে পারে। এটি করতে, আপনার কার্নেল কনফিগারেশন ফ্র্যাগমেন্টে এই লাইনটি যোগ করুন:

# CONFIG_MODULE_SIG_ALL is not set

যেমন, common-modules/virtual-device/virtual_device_core.fragment দেখুন।

ডিভাইস কার্নেল বিল্ডে ডিভাইস সিম্বল লিস্ট যোগ করুন

kernel_build টার্গেটে kmi_symbol_list অ্যাট্রিবিউট যোগ করুন যা ডিভাইস BUILD.bazel-এ সংজ্ঞায়িত করা হয়েছে। প্রতীক তালিকার নাম //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-কে aarch64_additional_kmi_symbol_lists ফাইলগ্রুপে যোগ করা হয়েছে, যা common/BUILD.bazel-এ ঘোষণা করা হয়েছে।

নতুন সিম্বল তালিকা পূরণ করতে ডিভাইস সিম্বল তালিকা আপডেট করুন এবং এটি Android Common Kernel রিপোজিটরিতে পাঠান।

ডিভাইস সিম্বলের তালিকা আপডেট করুন

kernel_build-এর module_outs এবং kernel_abi-এর kernel_modules-এ মডিউল দ্বারা ব্যবহৃত সব কোর কার্নেল সিম্বল সিম্বল তালিকায় অন্তর্ভুক্ত থাকতে হবে। এটি _update_symbol_list প্রত্যয় সহ kernel_abi টার্গেট রান করে করা যেতে পারে। যেমন, নিম্নলিখিত কমান্ড //common-modules/virtual-device:virtual_device_aarch64-এর জন্য সিম্বল লিস্ট আপডেট করে:

tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list

ACK-তে সিম্বল তালিকার আপডেট পাঠান

KMI-এর অংশ হিসেবে নতুন প্রতীক যোগ করতে, প্রতীক তালিকার পরিবর্তন সহ একটি প্যাচ Android Common Kernel gerrit-এ পাঠান।

কমিট মেসেজে যোগ করা বা সরানো চিহ্নগুলির একটি তালিকা থাকতে হবে। আপনি ছোট প্রতীক তালিকার আপডেটের জন্য এই তালিকাটি ম্যানুয়ালি লিখতে পারেন অথবা রেফারেন্স ABI প্রতিনিধিত্ব আপডেট করার পরে $DIST_DIR/abi_stgdiff/abi.report.short রিপোর্ট ব্যবহার করতে পারেন।

সিম্বল লিস্ট আপডেট পাঠানোর আগে রেফারেন্স ABI প্রতিনিধিত্ব আপডেট করার প্রয়োজন না থাকলেও, এটি অতিরিক্ত প্রি-সাবমিট ধাপগুলি বাদ দিতে পারে এবং পরিবর্তনটি দ্রুত জমা দেওয়ার জন্য প্রস্তুত করতে পারে। যাই হোক, এটি প্রিসাবমিট করার সময় চেক করা হয় এবং প্রয়োজন হলে আপডেট করা হয়।

প্রতীক তালিকা নিয়ে কাজ করা (Android 13)

Android 13, Kleaf ও পুরনো বিল্ড স্ক্রিপ্ট, দু'টিই সাপোর্ট করে, তাই আপনি আগের বিভাগে যেভাবে বর্ণনা করা হয়েছে অথবা নিচের বিভাগে যেভাবে বর্ণনা করা হয়েছে, সেইভাবে প্রতীক তালিকা ম্যানেজ করতে পারবেন।

প্রতীক তালিকা নিয়ে কাজ করা (Android 12 ও তার আগের যেকোনও ভার্সন)

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> অন্তর্ভুক্ত আছে কিনা তা চেক করুন।

  • ACK-এ সিম্বল তালিকার আপডেট পাঠান।