paint-brush
ফার্মওয়্যারের লুকানো জগত: আপনার কম্পিউটারের বুট-আপ প্রক্রিয়া অন্বেষণ করাদ্বারা@tristejoursoir
3,131 পড়া
3,131 পড়া

ফার্মওয়্যারের লুকানো জগত: আপনার কম্পিউটারের বুট-আপ প্রক্রিয়া অন্বেষণ করা

দ্বারা Aleksandr Goncharov15m2023/04/21
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

এই নিবন্ধে, আমরা বুট প্রক্রিয়ার একটি সংক্ষিপ্ত বিবরণ গ্রহণ করি, এর বিভিন্ন পর্যায়, জড়িত মূল উপাদানগুলি এবং প্রক্রিয়া চলাকালীন সম্মুখীন হওয়া চ্যালেঞ্জগুলি সহ। যদিও আমাদের প্রাথমিক ফোকাস হবে **x86 আর্কিটেকচার** (সবচেয়ে বেশি ব্যবহৃত), অন্যান্য আর্কিটেকচারের বুট প্রক্রিয়ায় অনেক মিল থাকবে।
featured image - ফার্মওয়্যারের লুকানো জগত: আপনার কম্পিউটারের বুট-আপ প্রক্রিয়া অন্বেষণ করা
Aleksandr Goncharov HackerNoon profile picture


কম্পিউটার কীভাবে শুরু হয় তা নিয়ে অনেক লোক আগ্রহী। এখানেই ম্যাজিক শুরু হয় এবং যতক্ষণ পর্যন্ত ডিভাইস চালু থাকে ততক্ষণ চলতে থাকে। এই নিবন্ধে, আমরা বুট প্রক্রিয়ার একটি ওভারভিউ নেব, এর বিভিন্ন পর্যায়, জড়িত মূল উপাদানগুলি এবং প্রক্রিয়া চলাকালীন সম্মুখীন হওয়া চ্যালেঞ্জগুলি সহ।


যদিও আমাদের প্রাথমিক ফোকাস হবে x86 আর্কিটেকচারে (সবচেয়ে বেশি ব্যবহৃত), অন্যান্য আর্কিটেকচারে তাদের বুট প্রক্রিয়ার অনেক মিল থাকবে। আমি আশা করি এই নিবন্ধটি যে কেউ এই ক্ষেত্রে তাদের জ্ঞান গভীর করতে চাই তাদের জন্য একটি মূল্যবান সম্পদ হবে। এখানে আমরা যেতে!

সুচিপত্র:

  • বুট রম
    • অনুদ্বায়ী মেমরি
      • ওয়ান টাইম প্রোগ্রামেবল
      • ক্ষেত্র প্রোগ্রামেবল
    • কার্যকরী স্থানে (XIP)
      • ক্যাশে-আস-রাম (CAR)
    • লেআউট এবং মেমরি ম্যাপিং
      • নন-ডেস্ক্রিপ্টর মোড
      • ইন্টেল ফ্ল্যাশ বর্ণনাকারী / বর্ণনাকারী মোড
      • ইন্টেল ফার্মওয়্যার ইন্টারফেস টেবিল (এফআইটি)
      • এএমডি এমবেডেড ফার্মওয়্যার স্ট্রাকচার
  • সিলিকন ইনিশিয়ালাইজেশন
    • ইন্টেল ফার্মওয়্যার সাপোর্ট প্যাকেজ (FSP)
    • AMD জেনেরিক এনক্যাপসুলেটেড সফটওয়্যার আর্কিটেকচার (AGESA)
  • স্বায়ত্তশাসিত সাবসিস্টেম
    • ইন্টেল ME
    • এএমডি পিএসপি
  • হার্ডওয়্যার পাওয়ার সিকোয়েন্স

বুট রম

একটি ইন্টিগ্রেটেড সার্কিট (চিপ) যা মাদারবোর্ডে অবস্থিত এবং কম্পিউটার বুট করার জন্য দায়ী ফার্মওয়্যার কোড সংরক্ষণ করে তাকে বুট রম বলা হয়। এই নামটি প্রমিত নয়, তাই অন্যান্য বিকাশকারীরা প্রায়ই এটিকে ফ্ল্যাশ রম , বায়োস ফ্ল্যাশ , বুট ফ্ল্যাশ , এসপিআই ফ্ল্যাশ , ইত্যাদি বলে থাকে (প্রযুক্তি, ইন্টারফেস এবং উদ্দেশ্যের নামের কারণে এই নামগুলি তাদের দেওয়া হয়)। চিন্তা করবেন না, এই শর্তাবলী বিনিময়যোগ্য। কম্পিউটার চালু হলে বুট রমের ফার্মওয়্যার কোডটি প্রথমে কার্যকর করা হয়। এটি প্রাথমিক পরীক্ষা করে, হার্ডওয়্যার শুরু করে এবং তারপরে একটি বুটযোগ্য ডিভাইস, যেমন হার্ড ড্রাইভ বা USB ড্রাইভ থেকে মেমরিতে OS লোডার লোড করে। এই চিপটি নন-ভোলাটাইল মেমরি (NVM) থেকে তৈরি।

অনুদ্বায়ী মেমরি

নন-ভোলাটাইল মেমরি হল এক ধরনের কম্পিউটার মেমরি যা পাওয়ার বন্ধ থাকা অবস্থায়ও এর বিষয়বস্তু ধরে রাখে । এটি গুরুত্বপূর্ণ ডেটা সংরক্ষণের জন্য এই ধরনের মেমরিকে আদর্শ করে তোলে যা কম্পিউটার বন্ধ থাকা অবস্থায়ও ধরে রাখতে হবে। উপরন্তু, আলোচনা শুধুমাত্র ফার্মওয়্যার কোড ধারণ করে যে মেমরির উপর ফোকাস করা হবে। আমরা হার্ড ডিস্ক ড্রাইভ (HDD), সলিড স্টেট ড্রাইভ (SSD), ফ্লপি ডিস্ক ইত্যাদির মতো স্টোরেজ সম্পর্কে কথা বলব না।


মূলত, আমরা এই ধরনের মেমরিকে নিম্নলিখিত গ্রুপে শ্রেণীবদ্ধ করতে পারি।

ওয়ান টাইম প্রোগ্রামেবল

  • মুখোশযুক্ত রম: সামগ্রীগুলি উত্পাদনের সময় নির্ধারিত হয় এবং এর পরে পরিবর্তন করা যায় না।
  • প্রোগ্রামেবল রম (প্রোম): মুখোশযুক্ত রমের বিপরীতে, এই ধরণের মেমরি তৈরির পরে প্রোগ্রাম করা যেতে পারে। কিন্তু এখনও মাত্র একবার।

ক্ষেত্র প্রোগ্রামেবল

  • ইরেজেবল প্রোগ্রামেবল রম (EPROM): একাধিকবার প্রোগ্রাম করা যায়, কিন্তু এর বিষয়বস্তু মুছে ফেলা যায় এবং অতিবেগুনী আলো ব্যবহার করে পুনরায় প্রোগ্রাম করা যায়।


  • বৈদ্যুতিকভাবে ইরেজেবল প্রোগ্রামেবল (EEPROM): বৈদ্যুতিক সংকেত ব্যবহার করে একাধিকবার পুনরায় প্রোগ্রাম করা যেতে পারে।


    • বা ফ্ল্যাশ মেমরি : স্থাপত্যগতভাবে ব্লকগুলিতে সাজানো যেখানে ব্লক স্তরে ডেটা মুছে ফেলা হয় এবং বাইট স্তরে পড়া বা লেখা যায়। বাইট সমান্তরাল, I2C, বা SPI এর মতো স্ট্যান্ডার্ড ইন্টারফেস ব্যবহার করে বা মেমরি সরাসরি অ্যাক্সেসযোগ্য।


      শিল্পে, ব্লক-ওয়াইজ ইরেজেবল ফ্ল্যাশ মেমোরির তুলনায় বাইট-ওয়াইজ ইরেজেবল মেমোরিতে EEPROM শব্দটি রিজার্ভ করার একটা কনভেনশন আছে।


প্রোগ্রামেবল মেমরি একটি নিয়মের সাথে আসে - লেখার আগে মুছে ফেলুন । এই ধরনের মেমরিতে, নতুন ডেটা লেখা আরও জটিল কারণ ডেটা একটি ভাসমান গেটে চার্জ হিসাবে সংরক্ষণ করা হয় (কারণ এর বেশিরভাগই মেমরি কোষের পদার্থবিজ্ঞানে থাকে)। গেটে চার্জের পরিমাণ নির্ধারণ করে যে সেলটি "0" বা "1" সঞ্চয় করে।


যখন আপনি একটি ফ্ল্যাশ মেমরি চিপ মুছে ফেলেন, আপনি এটিতে সংরক্ষিত ডেটার সমস্ত বিট একটি পরিচিত (ডিফল্ট) অবস্থায় সেট করেন, সাধারণত একটি যুক্তি "1"৷ এটি আপনাকে একটি পরিষ্কার স্লেট দিয়ে শুরু করতে দেয়, তাই কথা বলতে, এবং এটিতে পুরানো ডেটার কোনও অবশিষ্টাংশ না রেখে চিপে নতুন ডেটা প্রোগ্রাম করতে দেয়। যখন নতুন ডেটা চিপে লেখা হয়, তখন পৃথক বিটের অবস্থা "1" থেকে "0" তে পরিবর্তন করে নতুন ডেটা উপস্থাপন করা হয়।


আপনি যদি প্রথমে মুছে না দিয়ে চিপে নতুন ডেটা লেখেন, তাহলে নতুন ডেটা পুরানো ডেটার সাথে মিলিত হবে, ফলে অপ্রত্যাশিত ফলাফল পাওয়া যাবে। উদাহরণস্বরূপ, একটি ফ্ল্যাশ মেমরি চিপ বিবেচনা করুন যেখানে 8 বিট মেমরি রয়েছে যা "0110 0010" মান সংরক্ষণ করে। আপনি যদি প্রথমে মুছে না দিয়ে চিপে নতুন ডেটা "1100 1001" লেখেন, তাহলে চিপের ফলস্বরূপ অবস্থা হবে "0100 0000", যা আপনি যা চেয়েছিলেন তা নাও হতে পারে৷


মূল বিভ্রান্তিটি রম শব্দের সাথে সম্পর্কিত যার অর্থ কেবলমাত্র পাঠ্য মেমরি । "শুধুমাত্র পাঠযোগ্য মেমরি" শব্দটি ঐতিহাসিকভাবে মেমরি বোঝাতে ব্যবহৃত হয়েছে যা স্থায়ী এবং ব্যবহারকারী দ্বারা পরিবর্তন করা যায় না। যাইহোক, প্রযুক্তির উন্নতির সাথে সাথে রমের সংজ্ঞা পরিবর্তিত হয়েছে, এবং এখন এটি প্রায়শই ফ্যাক্টরিতে প্রাক-প্রোগ্রাম করা মেমরির উল্লেখ করতে ব্যবহৃত হয় এবং শেষ ব্যবহারকারী দ্বারা সহজেই পরিবর্তন করা যায় না। কিন্তু যদি ব্যবহারকারীর পছন্দসই দক্ষতা এবং বিশেষ সরঞ্জাম থাকে (উদাহরণস্বরূপ, একজন প্রোগ্রামার), তাহলে ব্যক্তি চিপটিকে পুনরায় প্রোগ্রাম করতে পারেন। স্মৃতির মূল উদ্দেশ্যের ঐতিহাসিক রেফারেন্স হিসাবে সংজ্ঞা পরিবর্তিত হলেও ROM নামটি রয়ে গেছে।


লেখার সুরক্ষা প্রয়োগ করে, কিছু ধরণের রিপ্রোগ্রামেবল রম অস্থায়ীভাবে কেবল-পঠন মেমরিতে পরিণত হতে পারে।


এগুলি সমস্ত বিদ্যমান ধরণের অ-উদ্বায়ী মেমরি নয়, তবে বেশিরভাগ জনপ্রিয় যেগুলি সম্পর্কে আপনি কেবল ঘটনাক্রমে শুনতে পারেন। আজকাল, বেশিরভাগ মাদারবোর্ডে, এই চিপগুলি NOR ফ্ল্যাশ প্রযুক্তি ব্যবহার করে তৈরি করা হয়।

কার্যকরী স্থানে (XIP)

এক্সিকিউট ইন প্লেস (XIP) হল এমন একটি পদ্ধতি যা প্রসেসরকে প্রথমে উদ্বায়ী মেমরিতে (যেমন RAM ) কপি না করে সরাসরি ফ্ল্যাশ মেমরি থেকে কোড এক্সিকিউট করতে দেয়। এটি প্রসেসরের ঠিকানা স্থানের মধ্যে ফ্ল্যাশ মেমরি ম্যাপ করার মাধ্যমে অর্জন করা হয়, যাতে ফ্ল্যাশ থেকে সরাসরি কোড এক্সিকিউশন করা যায়। সুতরাং, সিস্টেমটি যত তাড়াতাড়ি সম্ভব কোড এক্সিকিউট করা শুরু করতে সক্ষম, প্রথমে RAM শুরু হওয়ার জন্য অপেক্ষা না করে।


অপেক্ষা করুন... CPU SPI/Parallel/etc প্রোটোকলের মাধ্যমে বুট রমের সাথে যোগাযোগ করতে পারে? অবশ্যই না, এটি কেবল সিস্টেম মেমরি থেকে নির্দেশনা আনছে, এই মেমরি অঞ্চলের অনুরোধগুলি ইন্টেল ডাইরেক্ট মিডিয়া ইন্টারফেস (ডিএমআই ) বা এএমডি ইনফিনিটি ফ্যাব্রিক (আইএফ) / ইউনিফাইড মিডিয়া ইন্টারফেস (ইউএমআই) (পূর্বসূরী) এ পুনঃনির্দেশিত হয়৷ এটি মাদারবোর্ডের সিপিইউ এবং চিপসেটের মধ্যে লিঙ্ক। এই মুহুর্তে, ঠিকানাটির ডিকোডিং চিপসেটে অবস্থিত ডিকোডারগুলির মাধ্যমে সঞ্চালিত হয় এবং চিপ থেকে ডেটা প্রসেসরে ফেরত দেওয়া হয়।


যখন চিপটি NOR ফ্ল্যাশ মেমরি থেকে তৈরি করা হয়, যা র্যান্ডম অ্যাক্সেস রিড সমর্থন করে, কিন্তু র্যান্ডম অ্যাক্সেস রাইট না করে একটি সমস্যা এসেছিল। যতদূর লেখার মেমরি পাওয়া যায় না, সমস্ত গণনা প্রসেসর রেজিস্টারের মধ্যে সঞ্চালিত করতে হবে। এই মুহুর্তে, কোডটি শুধুমাত্র সমাবেশের ভাষায় লেখা যেতে পারে এবং এটি উচ্চ-স্তরের ভাষার (সাধারণত, C ভাষার জন্য) পরিবেশ সেট আপ করতে থাকে। এর কারণ হ'ল মেমরি ইনিশিয়ালাইজেশন এত জটিল হয়ে উঠেছে যে সমাবেশে বিশুদ্ধভাবে লেখা কঠিন হবে। যেহেতু এই ধরনের ভাষাগুলিতে কমপক্ষে একটি গাদা এবং স্ট্যাকের প্রয়োজন, তাই আমাদের লিখনযোগ্য মেমরি প্রয়োজন। কিছু প্রসেসরের চিপেই SRAM এম্বেড করা থাকে, কিন্তু একটি আরও আধুনিক পদ্ধতি হল অনবোর্ড ক্যাশে মেমরিকে RAM (CAR) হিসাবে ব্যবহার করা।


ক্যাশে-আস-রাম (CAR)

CPU ক্যাশে একটি উচ্চ-গতির মেমরি যা প্রধান মেমরি থেকে প্রায়শই ব্যবহৃত ডেটা এবং নির্দেশাবলীর একটি অনুলিপি সংরক্ষণ করে। একটি ক্যাশে প্রসেসরের কাছাকাছি অবস্থিত এবং একাধিক স্তরে সংগঠিত (L1, L2, L3, ...), প্রতিটি স্তর আগেরটির চেয়ে বড় এবং ধীর।


ডেটা ক্যাশে থাকলে, CPU ক্যাশে থেকে অনুরোধ করা ডেটা পুনরুদ্ধার করতে পারে (এটিকে ক্যাশে হিট বলা হয়)। যখন CPU ক্যাশে প্রয়োজনীয় ডেটা খুঁজে পেতে অক্ষম হয়, তখন এটি একটি ক্যাশে মিস করে। এটি ঘটতে পারে কারণ ডেটা কখনই ক্যাশে সংরক্ষিত ছিল না, অথবা কারণ ডেটা আগে সংরক্ষিত ছিল কিন্তু ক্যাশে থেকে উচ্ছেদ করা হয়েছে৷ যাইহোক, প্রসেসরকে ডাটা অ্যাক্সেস করতে এবং ক্যাশে কপি করতে প্রধান মেমরিতে যেতে হবে।


ক্যাশে উচ্ছেদ হল নতুন ডেটার জন্য স্থান খালি করার জন্য ক্যাশে থেকে ডেটা সরানোর প্রক্রিয়া। ডেটা উচ্ছেদ হয় ক্যাশিং সিস্টেমের মাধ্যমে শুরু করা যেতে পারে (সাধারণত যখন একটি ক্যাশে পূর্ণ থাকে এবং নতুন ডেটা সংরক্ষণ করার প্রয়োজন হয়, বা যখন ডেটার টাইম-টু-লাইভ নীতির মেয়াদ শেষ হয়ে যায়) বা স্পষ্ট অনুরোধের মাধ্যমে।


যাইহোক, যদি আমরা CPU ক্যাশেকে RAM হিসাবে ব্যবহার করতে চাই, তাহলে আমাদের নন-ইভিকশন মোডে কাজ করার জন্য ক্যাশে সেট আপ করতে হবে, যাকে নো-ফিল মোডও বলা হয়। এই কৌশলটি ক্যাশে মিস হওয়ার কারণে উচ্ছেদ প্রতিরোধ করে। পরিবর্তে, ক্যাশেকে একটি নিয়মিত SRAM হিসাবে বিবেচনা করা হয়, এবং সমস্ত অ্যাক্সেস (পড়া/লেখা) ক্যাশে আঘাত করবে এবং মূল মেমরিতে আঘাত করবে না । মোডটি বিক্রেতা-নির্দিষ্ট CPU নির্দেশাবলী ব্যবহার করে সক্রিয় করা যেতে পারে।

লেআউট এবং মেমরি ম্যাপিং

বাস্তবে, বুট রমে বিভিন্ন ধরণের ফার্মওয়্যার রয়েছে। একবার বুট রমে একগুচ্ছ ফার্মওয়্যার সংরক্ষণ করা হলে, তাদের মধ্যে পার্থক্য করার জন্য এটিকে কোনোভাবে সংগঠিত করতে হবে। চলুন জেনে নেওয়া যাক কিভাবে এটি করা হয়।

নন-ডেস্ক্রিপ্টর মোড

মূলত, চিপসেট পুরো বুট রমের বিষয়বস্তু মেমরিতে সরাসরি ম্যাপিং করে (4GB থেকে 4GB - 16MB)। সাধারণত, যদি বুট রম 16 MB এর কম হয়, তাহলে বিষয়বস্তু বারবার ম্যাপ করা হয়। CPU এবং ফার্মওয়্যার কোনো সীমাবদ্ধতা ছাড়াই ফ্ল্যাশে পড়তে/লিখতে পারে।





নন-ডেস্ক্রিপ্টর মোড নতুন চিপসেটে আর সমর্থিত নয়।

ইন্টেল ফ্ল্যাশ বর্ণনাকারী / বর্ণনাকারী মোড

অবশেষে, ICH8-এ, ইন্টেল বুট রমের জন্য একটি বিশেষ বিন্যাস প্রবর্তন করে। ফ্ল্যাশ নিম্নলিখিত অঞ্চলে বিভক্ত:


  • ফ্ল্যাশ বর্ণনাকারী (FD) - এই ডেটা কাঠামোটি অবশ্যই 0x10 অফসেট সহ ডিভাইসের শুরুতে অবস্থিত হওয়া উচিত। নীচের চিত্রে দেখানো হিসাবে এটি এগারোটি বিভাগ নিয়ে গঠিত:



বর্ণনাকারী MAP-এ অন্যান্য অঞ্চলের নির্দেশক রয়েছে এবং প্রতিটির আকারও রয়েছে।


কম্পোনেন্ট বিভাগে সিস্টেমের ফ্ল্যাশ(গুলি) সম্পর্কে তথ্য রয়েছে (উপাদানের সংখ্যা, প্রতিটির ঘনত্ব, অবৈধ নির্দেশাবলী ইত্যাদি)।


মাস্টার্স বিভাগটি অঞ্চলগুলির জন্য পঠন/লেখার অনুমতি নির্ধারণ করে। যতদূর পঠন/লেখার বিষয়ে, অনুমতিগুলিকে কেবলমাত্র পঠন-এ সেট করতে হবে, এই অঞ্চলে সংরক্ষিত তথ্য শুধুমাত্র উত্পাদন প্রক্রিয়া চলাকালীন লেখা যেতে পারে।


  • BIOS - শুধুমাত্র এই অঞ্চলটি মেমরিতে ম্যাপ করা হয়েছে।





  • ইন্টেল কনভার্জড সিকিউরিটি অ্যান্ড ম্যানেজমেন্ট ইঞ্জিন (CSME/ME) - বিভিন্ন ইন্টেল প্রযুক্তি এবং ME সমর্থন করার জন্য ফার্মওয়্যার।
  • গিগাবিট ইথারনেট (GbE) - শুধুমাত্র গিগাবিট ইথারনেট কন্ট্রোলার দ্বারা সরাসরি অ্যাক্সেস করা যেতে পারে।
  • প্ল্যাটফর্ম ডেটা
  • এমবেডেড কন্ট্রোলার (ইসি)


ফ্ল্যাশ বর্ণনাকারী এবং ইন্টেল এমই একমাত্র প্রয়োজনীয় অঞ্চল।

ইন্টেল ফার্মওয়্যার ইন্টারফেস টেবিল (এফআইটি)

FIT হল BIOS অঞ্চলের মধ্যে একটি ডেটা স্ট্রাকচার এবং এতে বিভিন্ন এন্ট্রি রয়েছে যা প্ল্যাটফর্ম কনফিগারেশন বর্ণনা করে। টেবিলের প্রতিটি এন্ট্রির আকার 16 বাইট। প্রথমটিকে FIT শিরোনাম বলা হয়, অন্যটিকে FIT এন্ট্রি বলা হয়। এটি একটি FIT পয়েন্টার দ্বারা একটি শারীরিক ঠিকানা 0xFFFFFFC0 (4GB - 0x40) এ অবস্থিত।


রিসেট ভেক্টর থেকে প্রথম CPU নির্দেশ কার্যকর করার আগে এই উপাদানগুলি অবশ্যই প্রক্রিয়া করা উচিত। এন্ট্রিগুলির মধ্যে রয়েছে CPU মাইক্রোকোড আপডেট, স্টার্টআপ ACM, প্ল্যাটফর্ম বুট/TPM/BIOS/TXT নীতি এবং অন্যান্য জিনিস। কিন্তু অন্তত এফআইটিতে এফআইটি হেডার এবং মাইক্রোকোড আপডেট এন্ট্রি অন্তর্ভুক্ত করা উচিত। সুতরাং, FIT-এর সাধারণ ব্যবহার হল রিসেট ভেক্টর কার্যকর করার আগে মাইক্রোকোড আপডেট করা।


মেমরি ম্যাপ দেখতে কেমন তা এখানে:






এএমডি এমবেডেড ফার্মওয়্যার স্ট্রাকচার

দুর্ভাগ্যবশত, অনেক কম তথ্য আছে, আমি তাদের লেআউট সম্পর্কে বিশদ সহ কোন ফাঁস হওয়া AMD চিপসেট ডকুমেন্টেশন খুঁজে পাইনি। তাই আমি আপনাকে কোরবুট ডকুমেন্টেশনের চেয়ে ভাল বলতে পারি না। এটি AMD ডকুমেন্টেশনের উপর ভিত্তি করে লেখা হয়েছে যা শুধুমাত্র NDA-এর অধীনে উপলব্ধ।


প্রকৃতপক্ষে, এটি জানা যথেষ্ট হবে যে ফ্ল্যাশ বর্ণনাকারীর এএমডি অ্যানালগটি এমবেডেড ফার্মওয়্যার স্ট্রাকচার এবং এতে PSP ডিরেক্টরি টেবিল , BIOS ডিরেক্টরি টেবিল এবং অন্যান্য ফার্মওয়্যারের পয়েন্টার রয়েছে৷


সিলিকন ইনিশিয়ালাইজেশন

আপনি যদি আধুনিক মেমরি এবং সিপিইউকে ঠিক কীভাবে আরম্ভ করা হয় তা দেখতে চান, তাহলে আমাকে আপনাকে বিরক্ত করতে হবে। ইন্টেল এবং এএমডি সম্প্রদায়ের কাছে সিলিকন ইনিশিয়ালাইজেশন কোড প্রকাশ করতে তাড়াহুড়ো করছে না। যতদূর এই ধরনের তথ্য সর্বজনীনভাবে উপলব্ধ নয়, তারা প্রয়োজনীয় সিলিকন ইনিশিয়ালাইজেশন কোডের বাইনারি বিতরণের প্রস্তাব দেয়। এটিকে ফার্মওয়্যার ডেভেলপারদের জন্য একটি লাইব্রেরি হিসেবে বিবেচনা করা হয় এবং এতে মেমরি কন্ট্রোলার, চিপসেট, সিপিইউ এবং সিস্টেমের অন্যান্য বিভিন্ন অংশ শুরু করার জন্য বাইনারি কোড থাকে।

ইন্টেল ফার্মওয়্যার সাপোর্ট প্যাকেজ (FSP)

সেই বাইনারিটিকে 4টি উপাদানে বিভক্ত করা যেতে পারে:


  • FSP-T: প্রারম্ভিক এক্সিকিউশন এনভায়রনমেন্ট ("টেম্পোরারি RAM") সেট আপ করা হচ্ছে যেখানে C কোড এক্সিকিউট করা যেতে পারে। অনুশীলনে, এই বাইনারিটি CAR সেট আপ করে, তবে PCIe মেমরি-ম্যাপ করা কনফিগারেশন স্পেস সেট আপ করার মতো কিছু প্রাথমিক হার্ডওয়্যার ইনিশিয়ালাইজেশনও করে।
  • FSP-M: স্থায়ী মেমরি চালু করা (যেমন DRAM)।
  • FSP-S: সিপিইউ এবং আইও কন্ট্রোলার ইনিশিয়ালাইজেশন সহ সিলিকন ইনিশিয়ালাইজেশন সম্পূর্ণ করা।
  • FSP-O: ঐচ্ছিক উপাদান যা OEM ডিভাইসের প্রাথমিককরণ প্রদান করে।


এখানে Intel দ্বারা পোস্ট করা Intel FSP বাইনারিগুলির একটি সংগ্রহস্থল রয়েছে যা আপনি তাদের GitHub-এ খুঁজে পেতে পারেন। FSP স্পেসিফিকেশন v2.1 Intel ওয়েবসাইট থেকে পাওয়া যেতে পারে।

AMD জেনেরিক এনক্যাপসুলেটেড সফটওয়্যার আর্কিটেকচার (AGESA)

ফ্যামিলি 17h এর আগের পণ্যগুলির জন্য AGESA v5 বা Arch2008 নামে পরিচিত৷ সেই সময়ে, AGESA ওপেন সোর্সড ছিল এবং কোডটি কোরবুট রিপোজিটরিতে উপলব্ধ ছিল (এটি রিলিজ 4.18 এর পরে বাতিল করা হয়েছিল)। Arch2008 এর স্পেসিফিকেশন AMD ওয়েবসাইটে পাওয়া যাবে।


ফ্যামিলি 17h (জেন মাইক্রোআর্কিটেকচার) পণ্যের প্রবর্তনের সাথে, AMD AGESA সোর্স কোড প্রকাশ করেনি, শুধুমাত্র পূর্বনির্মাণ করা বাইনারি সমাধান। এই ধরনের উত্তরসূরীকে AGESA v9 বলা হয় এবং 17h এবং পরবর্তীতে পরিবারকে সমর্থন করে।

openSIL

কোন বিস্তারিত তথ্য পাওয়া যায় না, শুধুমাত্র খবর .

স্বায়ত্তশাসিত সাবসিস্টেম

আধুনিক x86 বুট প্রক্রিয়ার একটি অবিচ্ছেদ্য অংশ, যা ছাড়া x86 কোরগুলি কখনই সক্রিয় হবে না। তাই তাদের সম্পূর্ণরূপে নিষ্ক্রিয় করা অসম্ভব । এই প্রযুক্তিগুলি হার্ডওয়্যারের প্রাথমিককরণ, সিস্টেমের অখণ্ডতা যাচাইকরণ, পাওয়ার ম্যানেজমেন্ট এবং CPU চালু করার জন্য দায়ী। এই সাবসিস্টেমগুলির জন্য ফার্মওয়্যারটি লোড করা হয় এবং মূল প্রসেসরের নিজস্ব ফার্মওয়্যার চালানো শুরু করার আগে কার্যকর করা হয়। এই ধরনের সিস্টেমে একটি কোড প্ল্যাটফর্মের CPU কোর থেকে স্বাধীনভাবে চলে।


যতক্ষণ না অনেক হার্ডওয়্যার কোম্পানি অস্পষ্টতার মাধ্যমে নিরাপত্তার নীতিকে অন্তর্ভুক্ত করেছে, ততক্ষণ সোর্স কোড বা এই সাবসিস্টেমগুলির জন্য ডকুমেন্টেশন পাওয়া যায় না। সৌভাগ্যবশত, আমরা জানি কিভাবে এটি বুট প্রক্রিয়াকে প্রভাবিত করে - হার্ডওয়্যার পাওয়ার সিকোয়েন্স দেখুন।


আমরা বিস্তারিতভাবে যাব না, কারণ ইন্টারনেটে ইতিমধ্যেই সারা বিশ্বের গবেষকদের কাছ থেকে বিস্তৃত নিবন্ধ রয়েছে। তবে আমি আপনাকে এটি কী তার একটি সংক্ষিপ্ত বিবরণ দেব।

ইন্টেল ম্যানেজমেন্ট ইঞ্জিন (ME)

Intel ME হল একটি পৃথক i486/80486 মাইক্রোপ্রসেসর যা 2008 সাল থেকে ইন্টেল চিপসেটে (PCH) একত্রিত করা হয়েছে। এটির নিজস্ব RAM, অন্তর্নির্মিত রম, চিপসেটের ভিতরে থাকা সমস্ত বাসের জন্য বাস ব্রিজ রয়েছে (ফলে, এটি নেটওয়ার্ক অ্যাক্সেস করতে পারে) এমনকি সিপিইউতে প্রধান র‌্যাম, ইত্যাদি। MINIX-এর উপর ভিত্তি করে একটি কাস্টম ওএস চালায়।

AMD প্ল্যাটফর্ম সিকিউরিটি প্রসেসর (PSP)

এএমডি পিএসপি হল একটি এআরএম কোর যা ট্রাস্টজোন এক্সটেনশনের উপর নির্ভর করে, যা একটি কপ্রসেসর হিসাবে সিপিইউ ডাইতে ঢোকানো হয়। এই চিপটি 2013 সাল থেকে বেশিরভাগ AMD প্ল্যাটফর্মে একত্রিত হয়েছে৷ একটি অনথিভুক্ত এবং মালিকানাধীন OS চালায়৷

হার্ডওয়্যার পাওয়ার সিকোয়েন্স

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


  • আপনি পাওয়ার বোতাম টিপুন। কিন্তু অপেক্ষা করুন... এই বোতামটি কম্পিউটারের ক্ষেত্রে রয়েছে যা একটি কম্পিউটারের প্রয়োজনীয় অংশ নয়৷ সাধারণত, পাওয়ার বোতামটি একটি তারের। আমাদের একপাশে একটি বোতাম রয়েছে এবং একটি সুইচ রয়েছে যা আমরা মাদারবোর্ডে দুটি ধাতব প্রংগুলিতে রাখি। যখন আমরা বোতাম টিপুন তখন এই প্রংগুলি সংযুক্ত থাকে যাতে তাদের মাধ্যমে বিদ্যুৎ যেতে পারে। আপনি যদি আগ্রহী হন তবে পাওয়ার বোতাম ছাড়া কীভাবে কম্পিউটার চালু করবেন তা নীচের ভিডিওটি দেখুন।


  • মাদারবোর্ড পাওয়ার সাপ্লাই ইউনিটে (PSU) একটি সংকেত পাঠায়।


  • পাওয়ার সাপ্লাই সিগন্যাল গ্রহণ করে, সঠিক পরিমাণে বিদ্যুৎ সরবরাহ করে এবং মাদারবোর্ডে একটি সংকেত ফেরত পাঠায়।
  • একবার মাদারবোর্ড পাওয়ার গুড সিগন্যাল পেয়ে গেলে, এটি প্ল্যাটফর্মের উপাদান যেমন কোর, ঘড়ি, চিপসেট, মেমরি, বিভিন্ন কন্ট্রোলার এবং আরও অনেক কিছুকে পাওয়ার আপ করে।
  • স্বায়ত্তশাসিত সাবসিস্টেম সহ বিভিন্ন ধরনের সাবসিস্টেম (উপরে আলোচনা করা হয়েছে), মূল প্রসেসরের আগে শুরু হতে পারে।


  • AMD-ভিত্তিক সিস্টেম (পরিবারের জন্য 17h এবং তার পরে)


    • পিএসপি-চিপ বুট রমে কার্যকর করে।

    • পিএসপি অফ -চিপ বুট রমে এমবেডেড ফার্মওয়্যার টেবিলটি সনাক্ত করে এবং পিএসপি ফার্মওয়্যার চালায়।

    • পিএসপি ABL পর্যায়গুলি খুঁজে বের করার জন্য PSP ডিরেক্টরি সারণি পার্স করে এবং সেগুলি সম্পাদন করে।

    • ABL পর্যায়গুলি প্রধান মেমরি শুরু করে, BOOT ROM-এ BIOS চিত্রটি সনাক্ত করে এবং এটি DRAM এ লোড করে (ছবিটি সংকুচিত হলে ডিকম্প্রেস করে)।


      এই প্ল্যাটফর্মে CAR ব্যবহার করার কোন কারণ নেই কারণ DRAM ইতিমধ্যেই উপলব্ধ এবং PSP এতে ফার্মওয়্যার ইমেজ লোড করে।


  • ইন্টেল-ভিত্তিক সিস্টেম
    • চিপসেট (ICH/PCH) বুট রমে ইন্টেল ফ্ল্যাশ বর্ণনাকারী খুঁজে পায়।
    • চিপসেট CSME ফার্মওয়্যারকে অভ্যন্তরীণ মেমরিতে কপি করে যেখানে Intel ME এটি অ্যাক্সেস করতে পারে এবং শেষটি এটি কার্যকর করা শুরু করে।
    • চিপসেট মেমরিতে BIOS অঞ্চলকে ম্যাপ করে।
    • ফার্মওয়্যার ইন্টারফেস টেবিলে অবস্থিত মাইক্রোকোড আপডেটগুলি CPU-তে লোড করা হয়। এগুলি প্রতিটি সিস্টেম বুটে প্রয়োগ করতে হবে।
    • (ঐচ্ছিক) যদি প্রমাণীকৃত কোড মডিউল (ACM) পাওয়া যায়, তাহলে সেই এন্ট্রিটি কার্যকর করা হয়।


  • এই সমস্ত সময়ে, সিস্টেমের অন্যান্য অংশগুলি প্রস্তুত হওয়ার আগে CPU-কে শুরু হতে বাধা দেওয়ার জন্য CPU রিসেট সংকেত জোরদার করা হয়। প্ল্যাটফর্ম প্রস্তুত হলে, সিপিইউ রিসেট লাইন ডি-জার্স্ট করা হয়। একটি মাল্টি-প্রসেসর বা মাল্টি-কোর সিস্টেমে একটি সিপিইউকে গতিশীলভাবে বুটস্ট্র্যাপ প্রসেসর (BSP) হিসাবে বেছে নেওয়া হয় যা সমস্ত ফার্মওয়্যার ইনিশিয়ালাইজেশন কোড চালায়। অবশিষ্ট প্রসেসর, যাকে এপ্লিকেশন প্রসেসর (AP) বলা হয়, পরবর্তীতে ফার্মওয়্যার/কার্নেল দ্বারা স্পষ্টভাবে সক্রিয় না হওয়া পর্যন্ত স্থগিত থাকে।


  • CPU প্রথম চালিত হওয়ার পরে, এটি বাস্তব মোডে কাজ করে। বেশিরভাগ রেজিস্টারের সু-সংজ্ঞায়িত মান রয়েছে, যার মধ্যে রয়েছে ইনস্ট্রাকশন পয়েন্টার (আইপি), কোড সেগমেন্ট (সিএস), এবং বর্ণনাকারী ক্যাশে , যা প্রসেসরের মধ্যে প্রতিটি সেগমেন্ট বর্ণনাকারীর একটি অনুলিপি যাতে সেগমেন্ট মেমরিতে দ্রুত অ্যাক্সেস দেওয়া যায়।


    সেগমেন্ট বর্ণনাকারী হল গ্লোবাল ডিসক্রিপ্টর টেবিলের (GDT) একটি এন্ট্রি এবং এতে বেস অ্যাড্রেস, সেগমেন্ট সীমা এবং অ্যাক্সেসের তথ্য রয়েছে (এই অংশটি উপেক্ষা করা হয়েছে কারণ রিয়েল মোডে সুরক্ষিত মোডের মতো অ্যাক্সেস নিয়ন্ত্রণ নেই)। প্রতিটি মেমরি অ্যাক্সেসের জন্য জিডিটি (যা মেমরিতে অবস্থিত) অ্যাক্সেস করার পরিবর্তে, তথ্য একটি বর্ণনাকারী ক্যাশে সংরক্ষণ করা হয়।


    যাইহোক, GDT বাস্তব মোডে জড়িত নয়, তাই প্রসেসর অভ্যন্তরীণভাবে এন্ট্রি তৈরি করে। CS নির্বাচক রেজিস্টার, সেগমেন্ট বর্ণনাকারী অ্যাক্সেস করতে ব্যবহৃত, 0xF000 দিয়ে লোড করা হয়। CS বেস ঠিকানা 0xFFFF_0000 এ আরম্ভ করা হয়েছে। আইপি 0xFFF0 এ আরম্ভ করা হয়েছে।


    অতএব, প্রসেসর শারীরিক-ঠিকানা 0xFFFF_FFF0 ( 0xFFFF_0000 + 0x0000_FFF0 ) এ অবস্থিত মেমরি থেকে নির্দেশাবলী আনা শুরু করে। সেই ঠিকানায় সম্পাদিত প্রথম নির্দেশটিকে রিসেট ভেক্টর বলা হয়।


    দ্রষ্টব্য: এই কৌশলটি আপনাকে উচ্চ ঠিকানার স্থানে অ্যাক্সেস দেয়, তবে, আপনি 0xFFFF_0000 ঠিকানার নীচের কোডটি অ্যাক্সেস করতে পারবেন না। ফার্মওয়্যার দ্বারা CS সিলেক্টর রেজিস্টার লোড না হওয়া পর্যন্ত CS বেস অ্যাড্রেস এই প্রাথমিক মানতেই থাকে। এটি একটি দূর লাফ নির্বাহ দ্বারা করা যেতে পারে.


    এই মুহুর্তে, সর্বোত্তম সিদ্ধান্ত হল 4 জিবি অ্যাড্রেসবিলিটি সহ সুরক্ষিত মোডে স্যুইচ করা। যদি ফার্মওয়্যার এটি না করে, তাহলে বাস্তব মোড কাজ করার জন্য, চিপসেটটিকে অবশ্যই 1 MB এর নিচের মেমরির পরিসর থেকে 4 GB এর নিচের সমতুল্য পরিসরের নাম দিতে হবে। কিছু চিপসেটের এই অ্যালিয়াসিং নেই এবং প্রথম লং জাম্প করার আগে অন্য অপারেটিং মোডে স্যুইচ করার প্রয়োজন হতে পারে।


  • ঠিকানাটি অ-উদ্বায়ী মেমরির একটি বিভাগে রয়েছে, তাই CPU এক্সিকিউট ইন প্লেস (XIP) পদ্ধতি ব্যবহার করে। যদিও এটি একটি AMD-ভিত্তিক সিস্টেম, আপনি সম্ভবত প্রধান মেমরি থেকে পড়ছেন।


  • CPU একটি ফার্মওয়্যার কোড নির্বাহ করে।


আমি সুপারিশ করছি যে আপনি পাওয়ার-অন সিকোয়েন্স সম্পর্কে নীচের ভিডিওটি দেখুন, যা একটি উদাহরণ হিসাবে ASUS P9X79 মাদারবোর্ড ব্যবহার করে প্রক্রিয়াটি ব্যাখ্যা করে। এটি রাশিয়ান ভাষায় হওয়া সত্ত্বেও, আপনি যদি স্বয়ংক্রিয়ভাবে তৈরি ইংরেজি সাবটাইটেল চালু করেন তবে আপনি সবকিছু বুঝতে সক্ষম হবেন।




এই নিবন্ধটি বুটিং কিভাবে কাজ করে তার সাথে সম্পর্কিত অনেক তাত্ত্বিক তথ্য প্রদান করেছে। যাইহোক, এই প্রক্রিয়াটিকে সত্যিকার অর্থে বোঝার জন্য, আমাদের সোর্স কোড এবং বিদ্যমান ফার্মওয়্যারের আর্কিটেকচারটি ঘনিষ্ঠভাবে দেখতে হবে।


পরের প্রবন্ধে, আমরা BIOS , UEFI এবং কোরবুট সম্পর্কে বিস্তারিতভাবে পরীক্ষা করব।

সম্পদ