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

স্থিতিশীল হিসাবে রক্ষণাবেক্ষণ করা প্রয়োজন এমন প্রতীক এবং প্রকারের পৃষ্ঠকে কমাতে, GKI কার্নেলের রপ্তানিকৃত চিহ্নগুলিকে শুধুমাত্র মডিউলগুলির জন্য প্রয়োজনীয় সীমাবদ্ধ করার ক্ষমতা রয়েছে। বাহ্যিকভাবে সংকলিত মডিউলগুলির জন্য, আপনার ব্যবহৃত চিহ্নগুলির একটি তালিকা থাকতে হবে যাতে সেগুলিকে GKI কার্নেল দ্বারা রপ্তানি করা যায়। উদাহরণস্বরূপ, Cuttlefish-এর জন্য মডিউল দ্বারা ব্যবহৃত চিহ্নগুলি android/abi_gki_aarch64_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 মডিউল অন্তর্ভুক্ত করবেন না।

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

# CONFIG_MODULE_SIG_ALL is not set

উদাহরণের জন্য common-modules/virtual-device/virtual_device_core.fragment দেখুন।

ডিভাইস কার্নেল বিল্ডে একটি ডিভাইস প্রতীক তালিকা যোগ করুন

BUILD.bazel ডিভাইসে সংজ্ঞায়িত kernel_build লক্ষ্যে kmi_symbol_list এট্রিবিউট যোগ করুন। প্রতীক তালিকার নাম //common:android/abi_gki_<arch>_<device> এর বিন্যাসে হওয়া উচিত। Common-modules/virtual-device/BUILD.bazel দেখুন, উদাহরণস্বরূপ:

kernel_build(
    name = "virtual_device_aarch64",
    base_kernel = "//common:kernel_aarch64",
    kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
    ...
    module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)

একটি প্রাথমিক প্রতীক তালিকা তৈরি করুন এবং জমা দিন

common/android/abi_gki_<arch>_<device> এ একটি খালি প্রতীক তালিকা তৈরি করুন। উপরের উদাহরণের জন্য কমান্ডটি হবে:

touch common/android/abi_gki_aarch64_virtual_device

বেস GKI কার্নেল বিল্ডের additional_kmi_symbol_lists এ এই ফাইলটি যোগ করুন। উদাহরণস্বরূপ, //common:android/abi_gki_aarch64_virtual_device aarch64_additional_kmi_symbol_lists ফাইলগ্রুপে যোগ করা হয়েছে, সাধারণ/BUILD.bazel- এ ঘোষণা করা হয়েছে।

নতুন প্রতীক তালিকা পূরণ করতে ডিভাইস প্রতীক তালিকা আপডেট করুন এবং এটি অ্যান্ড্রয়েড কমন কার্নেল সংগ্রহস্থলে পাঠান।

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

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 এ একটি প্রতীক তালিকা আপডেট পাঠান

নতুন প্রতীকগুলিকে কেএমআই-এর অংশ করতে Android কমন কার্নেল গেরিটে প্রতীক তালিকা পরিবর্তন সহ একটি প্যাচ পাঠান।

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

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

পুরানো সংস্করণ (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> -এ কপি করুন।

  • চেক করুন যে android/abi_gki_aarch64_<device> ADDITIONAL_KMI_SYMBOL_LISTS in common/build.config.gki.aarch64 এ অন্তর্ভুক্ত রয়েছে।

  • ACK এ প্রতীক তালিকা আপডেট পাঠান

,

স্থিতিশীল হিসাবে রক্ষণাবেক্ষণ করা প্রয়োজন এমন প্রতীক এবং প্রকারের পৃষ্ঠকে কমাতে, GKI কার্নেলের রপ্তানিকৃত চিহ্নগুলিকে শুধুমাত্র মডিউলগুলির জন্য প্রয়োজনীয় সীমাবদ্ধ করার ক্ষমতা রয়েছে। বাহ্যিকভাবে সংকলিত মডিউলগুলির জন্য, আপনার ব্যবহৃত চিহ্নগুলির একটি তালিকা থাকতে হবে যাতে সেগুলিকে GKI কার্নেল দ্বারা রপ্তানি করা যায়। উদাহরণস্বরূপ, Cuttlefish-এর জন্য মডিউল দ্বারা ব্যবহৃত চিহ্নগুলি android/abi_gki_aarch64_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 মডিউল অন্তর্ভুক্ত করবেন না।

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

# CONFIG_MODULE_SIG_ALL is not set

উদাহরণের জন্য common-modules/virtual-device/virtual_device_core.fragment দেখুন।

ডিভাইস কার্নেল বিল্ডে একটি ডিভাইস প্রতীক তালিকা যোগ করুন

BUILD.bazel ডিভাইসে সংজ্ঞায়িত kernel_build লক্ষ্যে kmi_symbol_list এট্রিবিউট যোগ করুন। প্রতীক তালিকার নাম //common:android/abi_gki_<arch>_<device> এর বিন্যাসে হওয়া উচিত। Common-modules/virtual-device/BUILD.bazel দেখুন, উদাহরণস্বরূপ:

kernel_build(
    name = "virtual_device_aarch64",
    base_kernel = "//common:kernel_aarch64",
    kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
    ...
    module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)

একটি প্রাথমিক প্রতীক তালিকা তৈরি করুন এবং জমা দিন

common/android/abi_gki_<arch>_<device> এ একটি খালি প্রতীক তালিকা তৈরি করুন। উপরের উদাহরণের জন্য কমান্ডটি হবে:

touch common/android/abi_gki_aarch64_virtual_device

বেস GKI কার্নেল বিল্ডের additional_kmi_symbol_lists এ এই ফাইলটি যোগ করুন। উদাহরণস্বরূপ, //common:android/abi_gki_aarch64_virtual_device aarch64_additional_kmi_symbol_lists ফাইলগ্রুপে যোগ করা হয়েছে, সাধারণ/BUILD.bazel- এ ঘোষণা করা হয়েছে।

নতুন প্রতীক তালিকা পূরণ করতে ডিভাইস প্রতীক তালিকা আপডেট করুন এবং এটি অ্যান্ড্রয়েড কমন কার্নেল সংগ্রহস্থলে পাঠান।

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

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 এ একটি প্রতীক তালিকা আপডেট পাঠান

নতুন প্রতীকগুলিকে কেএমআই-এর অংশ করতে Android কমন কার্নেল গেরিটে প্রতীক তালিকা পরিবর্তন সহ একটি প্যাচ পাঠান।

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

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

পুরানো সংস্করণ (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> -এ কপি করুন।

  • চেক করুন যে android/abi_gki_aarch64_<device> ADDITIONAL_KMI_SYMBOL_LISTS in common/build.config.gki.aarch64 এ অন্তর্ভুক্ত রয়েছে।

  • ACK এ প্রতীক তালিকা আপডেট পাঠান