GKI এর জন্য ION হিপস মডুলারাইজ করা

অনেক অ্যান্ড্রয়েড OEM বিভিন্ন কারণে ION কার্নেল ড্রাইভারকে পরিবর্তন করে, যেমন ভেন্ডর হিপস যোগ করা এবং ক্যাশে ম্যানেজমেন্ট কাস্টমাইজ করা (এই পরিবর্তনগুলির বিশদ বিবরণের জন্য, ION মেমরি বরাদ্দকারীকে একীভূত করা দেখুন)। জেনেরিক কার্নেল ইমেজ (GKI) ব্যবহার করার সময় OEM-গুলিকে এই ধরনের পরিবর্তনগুলি ধরে রাখতে সক্ষম করতে, Android Common Kernel v5.4 কোর ION ড্রাইভারকে অন্তর্নির্মিত রেখে বিক্রেতা-নির্দিষ্ট ION হিপগুলিকে মডুলারাইজ করার জন্য একটি কাঠামো প্রবর্তন করে৷ নিম্নলিখিত চিত্রটি কার্নেল চিত্রের বিন্যাস দেখায় .

মডুলার আইওন হিপস

চিত্র 1. মডুলারাইজড ION কার্নেল ড্রাইভার

মডুলার আইওন হিপগুলির নিম্নলিখিত সুবিধা রয়েছে।

  • ION কোর ড্রাইভারটি GKI চিত্রের অংশ হতে পারে, সমস্ত ডিভাইস-স্বাধীন কর্মক্ষমতা অপ্টিমাইজেশান এবং বাগ সংশোধনগুলি সমস্ত ডিভাইসে পৌঁছানোর জন্য সক্ষম করে৷
  • সাধারণ কার্নেলের ION কোর ড্রাইভার হিপ রেজিস্ট্রেশন পরিচালনা করতে পারে এবং ইউজারস্পেস এবং কার্নেল ক্লায়েন্টদের ইন্টারফেস পরিচালনা করতে পারে। ভেন্ডর হিপ মডিউল শুধুমাত্র কাস্টম হিপ অপারেশন বাস্তবায়নের জন্য প্রয়োজন।
  • ION কোর ড্রাইভার (GKI-এর অংশ হিসাবে) সহজে মেমরি ব্যবহার ট্র্যাকিংয়ের জন্য হুকগুলি অন্তর্ভুক্ত করতে পারে, যা সম্ভব ছিল না যখন প্রতিটি OEM-এর ION ড্রাইভারের নিজস্ব সংস্করণ ছিল।
  • মডুলার বিক্রেতা ION হিপগুলিকে dmabuf heaps-এ যেকোন ভবিষ্যত রূপান্তর সহজ করে তুলতে হবে৷

বাস্তবায়ন করছে

ION হিপ মডিউলগুলি তাদের নিজস্ব dmabuf ক্রিয়াকলাপগুলিকে মূল ION ড্রাইভার দ্বারা নিবন্ধিতগুলিকে ওভাররাইড করতে নিবন্ধন করতে পারে৷ একটি dmabuf অপারেশন (যেমন get_flags() ) যা মূল ION ড্রাইভার দ্বারা সমর্থিত নয় -EOPNOTSUPP যদি হিপ বাস্তবায়নে প্রয়োজনীয় ওভাররাইডের অভাব থাকে।

কর্মক্ষমতা উন্নত করতে, dmabuf ড্রাইভার আংশিক ক্যাশে রক্ষণাবেক্ষণ করতে পারে ( চেঞ্জলিস্ট দেখুন)। কার্নেল ক্লায়েন্ট আংশিক ক্যাশে রক্ষণাবেক্ষণ করতে dma_buf_begin_cpu_access_partial এবং dma_buf_end_cpu_access_partial ফাংশন ব্যবহার করতে পারে।

অ্যান্ড্রয়েড কমন কার্নেলে সিস্টেমের মডুলার ইমপ্লিমেন্টেশন এবং হিপ মডুলারাইজেশনের রেফারেন্স হিসাবে ব্যবহারের জন্য সংলগ্ন মেমরি অ্যালোকেটর (CMA) হিপ রয়েছে।

ION UAPI হেডারে পরিবর্তন

ION ইউজার স্পেস API (UAPI) শিরোনামে একটি ion_heap_id enum রয়েছে যা বিক্রেতা হিপস দ্বারা ব্যবহারের জন্য হিপ আইডিগুলির একটি পরিসীমা সংজ্ঞায়িত করার জন্য ব্যবহার করা হয়৷

 /**
 * ion_heap_id - list of heap IDs that Android can use
 *
 * @ION_HEAP_SYSTEM        ID for the ION_HEAP_TYPE_SYSTEM
 * @ION_HEAP_DMA_START     Start of reserved ID range for heaps of type ION_HEAP_TYPE_DMA
 * @ION_HEAP_DMA_END       End of reserved ID range for heaps of type ION_HEAP_TYPE_DMA
 * @ION_HEAP_CUSTOM_START  Start of reserved ID range for heaps of custom type
 * @ION_HEAP_CUSTOM_END    End of reserved ID range for heaps of custom type
 */

enum ion_heap_id {

   ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM),

   ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1),

   ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7),
   ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1),

   ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22),
};

উপরন্তু, একটি নতুন IOCTL ( ION_IOC_ABI_VERSION ) ব্যবহারকারী স্থান ক্লায়েন্টদের মডুলার হিপ ব্যবহার করা হচ্ছে কিনা তা নির্ধারণ করতে সাহায্য করতে পারে।

জেনেরিক সিস্টেম হিপ ওভাররাইডিং

ION সিস্টেম হিপ তৈরি করা হয়েছে এবং এটি নিশ্চিত করার জন্য GKI চিত্রের অংশ যা জেনেরিক/ডিভাইস-স্বতন্ত্র হিপে অ্যাক্সেসের প্রয়োজন তার অস্তিত্বের উপর নির্ভর করতে পারে। যেমন, আপনি ION_HEAP_SYSTEM এর হিপ আইডি ওভাররাইড করতে পারবেন না। একটি কাস্টমাইজড সিস্টেম হিপ তৈরি করতে, বরাদ্দ সম্পাদন করতে কাস্টম পরিসরে একটি হিপ আইডি ব্যবহার করুন ( ION_HEAP_CUSTOM_START থেকে ION_HEAP_CUSTOM_END )৷