هل تريد تشغيل Windows 10 على آلة حاسبة؟ جيد


HP Prime G2 تحت نظام التشغيل Windows 10 إنترنت الأشياء

يمكن للمرء أن يحلم فقط بتشغيل Windows على آلة حاسبة قياسية قبل ظهور HP Prime G2. لم تدخل السوق آلة حاسبة على مثل هذه الأجهزة القوية. والأهم من ذلك أن HP اختارت معالج ARMv7-A! تتناول هذه المقالة كيفية تثبيت UEFI و ACPI على جهاز.


مواصفات شركة نفط الجنوب على HP Prime G2. يحتوي SoC NXP i.MX 6ULL ​​(Ultra Lite) على معالج Cortex A7 أحادي النواة

العمل السابق


قام صديقي Wenqin Zhang (Zephray) بالعمل الأساسي للهندسة العكسية على مواصفات GPIO والحاسبة. بالإضافة إلى ذلك ، تمكن من تشغيل منفذ U-Boot و Linux إلى الآلة الحاسبة.

وفقًا لـ TI-Planet ، توفر الآلة الحاسبة عددًا كبيرًا من دبابيس الاختبار ، بما في ذلك SD / MMC و JTAG و UART.

درست سارة (winocm) إمكانية تشغيل Windows RT على نظام Qemu . بحلول عام 2019 ، تغير شيء ما ، لكن المقالة لم تفقد قيمتها.

أبرمت Microsoft اتفاقية NXP لتوفير الدعم لنظام التشغيل Windows 10 IoT على رقائق iMX SoC. وبالتالي ، من الناحية الفنية ، يجب أن يعمل Windows 10 IoT على هذه الحاسبة (وكذلك Windows على ARM).

تحسين متطلبات نظام ويندوز


يتم سرد متطلبات النظام لتشغيل عائلة أنظمة التشغيل Windows 10 على موقع Microsoft Docs على الويب . حتى الحد الأدنى من المتطلبات هو أكثر من نظام Linux: يحتاج النظام إلى معالج x86 / x64 / ARMv7 / AArch64 ، على الأقل 256 ميجابايت من الذاكرة و 2 جيجابايت من مساحة القرص. مطلوبة البرامج الثابتة UEFI الوظيفية ، وجداول ACPI و SMBIOS كاملة.

في حالتنا ، لا توجد مساحة كافية على الجهاز (كما أن Windows لا يدعم Raw SLC NAND) ، ولكن يمكنك توصيل جهاز التمهيد عبر USB بالحاسبة.

تسرد سارة المتطلبات المعمارية لـ ARMv7 لتشغيل Windows. على مر السنين ، تغيرت المتطلبات قليلاً ، إليك ما تبدو عليه في الوقت الحالي:

  معالج النظام: معالج متوافق ARMv7-A مع VFPv3 + VFP HalfPrec ، VFPv4 مناسب أيضًا
 الذاكرة: 256 ميغابايت على الأقل من ذاكرة الوصول العشوائي (ربما أقل)
 الأجهزة الطرفية:
     - توقيت النظام (إما عن طريق الهندسة المعمارية أو عن طريق البائع)
     - وحدة تحكم مقاطعة ARM العامة (GIC) أو وحدة تحكم مقاطعة Broadcom على BCM2835 / 2836/2837 ووحدة المعالجة المركزية وواجهة الموزع.  في حالة وجود GIC والإعلان عنها في النظام ، تكون GICv2 وما فوق مطلوبة.
     - framebuffer
     - دعم UART أو NS16550 أو BCM283x أو من البائع (في حالة Qualcomm و NXP)
     - البرامج الثابتة: UEFI 2.3 أو أعلى 

لدينا آلة حاسبة تلبي هذه المتطلبات الصارمة. ومع ذلك ، يعمل SoC الافتراضي عند 396 MHz ، وهو أقل من المستوى الأساسي البالغ 400 MHz / 1 GHz. يتم أيضًا الإبلاغ عن 250 ميغابايت من ذاكرة النظام ، في حين أن الحد الأدنى لمتطلبات النظام ذي واجهة المستخدم هو 512 ميجابايت. ولكن يتم التحميل!


وفقًا لـ cpuinfo من WinDbg ، تعمل شركة نفط الجنوب عند 396 ميجاهرتز

أعتقد أنه يمكنك تقليل المتطلبات بشكل أكبر. إذا كنت أتذكر بشكل صحيح ، فإن Windows Server Nano لديه حوالي 150 ميغابايت من الذاكرة للتمهيد على أنظمة amd64.

UEFI و ACPI


لقد كتبت عدة مرات عن تطبيقات UEFI ، لذلك لا يوجد شيء جديد هنا. بشكل أساسي ، تتكون UEFI من مجموعة من برامج تشغيل الأجهزة ومكونات TianoCore kernel. يتم نسخ جداول ACPI من مستودع Windows IoT iMX Project Mu ويتم قطعها .

UEFI بالتمهيد من U-Boot . لا يسمح iMX افتراضيًا بالوصول إلى ذاكرة غير محاذاة ، وهذا يسبب الكثير من المشاكل في مرحلتي UEFI DXE و BDS ، لذلك يجب تمكينه في أقرب وقت ممكن.

  mrc p15، 0، r0، c1، c0، 0
  bic r0، r0، # 2
  mcr p15، 0، r0، c1، c0، 0 

يقوم المحول البرمجي المزود بدعم الأجهزة من أجل التعويم بزيادة سرعة أداة تحميل التشغيل من حوالي 30 إلى 4 ثوانٍ. في الأنظمة الأساسية ARMv7 ، يدعي Windows دعم VFPv3 +.

تتم تهيئة الشاشة ، وكذلك بعض مهام إدخال / إخراج mux ، في U-Boot. الآن لا يدعم U-Boot واجهة Serial RGB LCD 24 / 32bpp ، لذا أضفت دعم Serial RGB من خلال تطبيق نظام إطارات iMX في نواة Linux. الكود ليس في المعالج حتى الآن ، لكنني سأنقله لاحقًا.



يبدو LCD للعمل. الإجراء كله:

  1. تشغيل uboot.
  2. العثور على دبوس للإضاءة الخلفية الشاشة.
  3. البحث عن دبوس لتسلسل التهيئة SPI و LCD.
  4. العثور على دبوس I2C وتكوين PMIC عبر I2C للجهد الصحيح.


المسلسل RGB LCD واجهة مظاهرة في U- الحذاء

تأخذ UEFI ببساطة أداة إزالة الإطارات التي يخصصها U-Boot وتسجل بروتوكول إخراج الرسومات. لسوء الحظ ، لا تفي دقة الشاشة بالحد الأدنى لمتطلبات وحدة التحكم 80 * 25 ، لذلك قمت بتغيير مكونات Console DXE عن طريق إضافة وضع 40 * 12 جديد.


يدعي مكون EDK2 أن دقة الشاشة لا تفي بالمتطلبات الدنيا لوحدة التحكم 80 * 25

قبل اختراق مكونات وحدة التحكم ، قمت بخدعة صغيرة ، حيث حددت دقة 640 * 480 في بروتوكول UEFI GOP. ساعدت الخدعة أيضًا في الحصول على معلومات تشخيصية من Windows Boot Manager ، لأن دقة 320 * 240 ليست كافية لعرض رمز الخطأ. أقوم بشكل دوري بتشغيل نقل الكتلة (BLT) من أداة إزالة الإطارات إلى نظام الملفات وحفظ ملفات BMP على محرك أقراص USB.


يوفر Hack وضع 80 * 25 متاحًا مع بعض التحف الرسومية

بعد توصيل وضع جديد ، يتم تحسين جودة الصورة بشكل كبير.


40 * 12 الوضع


40 * 12 الوضع

إليك ما تبدو عليه رسالة إدارة تمهيد Windows بدقة 320 * 240:



فشلت المحاولة الأولى في مرحلة خدمات التمهيد UEFI. رمز الخطأ غير مرئي بسبب الشاشة الصغيرة.


يسمح لك نقل الحظر (BLT) من أداة إزالة الإطارات بحفظ الرسالة في ملف صورة وقراءتها

فيما يتعلق بدعم USB. لحسن الحظ ، USB في iMX6 متوافق تمامًا ، ويتم تضمين الدعم في الإصدارات الأخيرة من Windows. لذلك ، بمجرد تكوين وحدة التحكم OTG في وضع المضيف ونقل منطقة MMIO إلى UEFI و Windows ، يعمل بطريقة سحرية دون مشاكل. لكننا لم نجد VBus على منفذ OTG (نفترض أن هناك نوعًا من دوائر DC-DC يتم التحكم فيها بواسطة SoC أو PMIC ، لكن هذه مجرد فرضية لم يتم التحقق منها) ، لذلك ، من أجل التشغيل الصحيح ، يجب تشغيل المنفذ من خلال مصدر خارجي.

SMBIOS


تأكد من إبلاغك بشكل صحيح بحجم الذاكرة ومساحات العناوين في SMBIOS ، أو سيبدأ Windows في القيام بأشياء غريبة بشكل لا يصدق (tm).


لا يمكن قراءة مصحح أخطاء Windows الذاكرة بسبب تكوين SMBIOS غير صحيح

الموقت وتمديدات هال


يبدو أننا قادرون على التعامل مع تكوين الذاكرة (LPAE) ، ولكن ربما ستكون هناك بعض المشاكل الأخرى. أوه نعم ...



لذا ، فإن تحميل Windows حتى الآن لا يصل إلى هذه المرحلة.


إذا لم يتم العثور على مؤقت نظام مناسب ، يشير Windows إلى بعض عنوان الذاكرة المفترض وغير صالح

لن يتم تشغيل Windows إذا لم يتم العثور على جهاز تحكم المقاطعة أو مؤقت النظام. يمكن تسجيل وقت النظام باستخدام جدول GTDT (جدول هندسة ARM) أو ملحقات HAL من خلال جدول CSRT.

يأتي iMX6ULL مزودًا بثلاثة أجهزة توقيت: iMX GPT (مؤقت الغرض العام) و EPIT (مؤقت دوري محسن) وموقت ARM المعماري. ظهر الأخير فقط في iMX6UL / ULL ، في حين أن أنظمة iMX6 SoC السابقة عملت على حبات قديمة مثل Cortex A15 دون دعم جهاز توقيت معماري. قامت Microsoft بتطبيق امتداد EPIT HAL لجهاز توقيت النظام ، لكنها لم يتم تحميله في البداية بسبب عدم تطابق بين معرف الجهاز في جدول CSRT وصورة النظام (قمت بتنزيل FFU السابقة لـ iMX6 Solo). لذلك ، عندما يكون جهاز ضبط الوقت غير متاح ، سيحاول Windows بشكل يائس تهيئة الموقت المقصود ، وسوف يتعطل النظام بسبب وصول غير صالح للذاكرة.

تشير وثائق iMX6ULL إلى جهاز توقيت معماري ، ولكن بدون تفاصيل حول إجراء التهيئة. يمكن تهيئة عداد المؤقت باستخدام EDK2 ، لكن مؤشر أسعار المنتج (GIC PPI) (لكل معالج مقاطعة) لن يعمل بشكل صحيح. ومع ذلك ، يقوم Windows بتهيئة واستخدام مؤقت مؤقت من خلال جدول GTDT.

يستخدم UEFI حاليًا جهاز ضبط الوقت EPIT ويقوم بتعطيله عند النقل إلى Windows. بدوره ، يقوم Windows بتهيئة مؤقت GPT. في مرحلة لاحقة ، يمكن لـ UEFI التبديل أيضًا إلى GPT باستخدام إجراء التهيئة المناسب.

تتطلب بعض الأجهزة الطرفية ملحق HAL لوحدة تحكم Smart DMA (SDMA) ؛ وليس من الصعب للغاية تنزيلها.

أرني كيف يعمل!


  [الأمان] يمكن تحميل صورة الجهة الخارجية [0] بعد EndOfDxe: VenHw (0D51905B-B77E-452A-A2C0-ECA0CC8D514A ، 004118020000000000) / USB (0x0.0x0) / USB (0x2.0x0) / HD (1 ، GPT ، F9ADAEA9-E8DE-4291-B191-5DABA6DC1215.0x800.0x100000) / \ efi \ boot \ bootarm.efi.
  InstallProtocolInterface: 5B1B31A1-9562-11D2-8E3F-00A0C969723B 8F257028
  ConvertPages: فشل في العثور على النطاق 10000000 - 100EEFFF
  تحميل برنامج التشغيل عند 0x0008E9D6000 EntryPoint = 0x0008E9E7511 bootmgfw.efi
  InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF 8F28EB10
  ProtectUefiImageCommon - 0x8F257028
  0x000000008E9D6000 - 0x00000000000EF000
  InstallProtocolInterface: 752F3136-4E16-4FDC-A22A-E5F46812F4CA 8FBFF88C
  ConvertPages: فشل في العثور على النطاق 102000 - 102FFF
  تعطيل مؤقت EPIT على ExitBootServicesEventSetUefiImageMemoryAttributes - 0x000000008F78A000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F787000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F784000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F77F000 - 0x0000000000005000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F77C000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F779000 - 0x0000000000003000 (0x0000000000000008) 

إذا كنت تتساءل كيف يتم تحميل ببطء ، ثم حوالي ثلاث دقائق ونصف.

الفيديو بسرعة 2x المتسارعة:


أين هو Secure Boot و TPM؟


هذا هو في الواقع اختياري. ولكن بما أن OP-TEE تدعم iMX6 / 7/8 ، يمكنك تشغيل Secure Monitor في TrustZone (TZ) وتنفيذ هذه الخدمات من خلال المكالمات (مكالمات المراقبة الآمنة) من EL1 / PL1.

في الواقع ، يأتي التطبيق الرسمي لـ iMX Windows IoT مزودًا ب OP-TEE ، لكنني تجاهله من أجل توفير الذاكرة.

ماذا عن السائقين؟


يحتوي مستودع Windows 10 IoT BSP على العديد من برامج تشغيل iMX6 / 7/8. يعمل برنامج تشغيل USB خارج الصندوق ، كما ذكر بالفعل. بالنسبة إلى الآلة الحاسبة ، ستحتاج أيضًا إلى برامج تشغيل ولوحات مفاتيح تعمل باللمس.

إنها متوفرة في شجرة Linux kernel ، لذلك يجب ألا يكون من الصعب للغاية نقلها إلى Windows.

هل يمكنني تنزيل Windows RT 8.1؟


ربما . تحديث: لن يتم تشغيل Windows RT 8.1 ، الإصدارات الأحدث فقط. لن يتم تمهيد Windows PE في وضع ramdisk لأن 256 ميغابايت من الذاكرة ليست كافية. لم أتمكن من بدء تشغيل وضع التمهيد المسطح ، بعد إدراج الأجهزة (بما في ذلك محرك أقراص USB) ، فإنه يدخل في نوع من الدورات دون مزيد من التهيئة.


HP Prime G2 محمّل Windows ، الذي أطلق تطبيق آلة حاسبة


المفكرة على آلة حاسبة


المفكرة على آلة حاسبة تحاول إرسال النص إلى الطباعة.

لكنني أريد أن أقوم بتمهيد Linux أيضًا!


هناك خياران:

  • فقط استخدم U-Boot للتمهيد zImage وشجرة الجهاز و initrd.
  • انقل مناطق الذاكرة FD و MpPark و FrameBuffer إلى أعلى ذاكرة النظام ، وترك 128 ميجابايت مجانًا في منطقة الذاكرة السفلية.

قم بتنزيل Linux عبر GRUB أو مباشرة من EFISTUB. كل شيء يتم تحميله بشكل طبيعي ، إليك جزء من السجل:

  أداة EFI stub: إنهاء خدمات التمهيد وتثبيت خريطة العنوان الافتراضية ...
  تعطيل مؤقت EPIT على ExitBootServicesEventSetUefiImageMemoryAttributes - 0x000000008F97B000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F978000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F973000 - 0x0000000000005000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F970000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F96D000 - 0x0000000000003000 (0x0000000000000008)
  SetUefiImageMemoryAttributes - 0x000000008F96A000 - 0x0000000000003000 (0x0000000000000008)
  تمهيد Linux على وحدة المعالجة المركزية الفعلية 0x0
  إصدار Linux 4.14.98-g371433a62906-dirty (imbushuo @ bc-macbookpro) (إصدار gcc 7.4.1 20181213 [linaro-7.4-2019.02 مراجعة 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02): # 2 PREM 29 EST 2019
  وحدة المعالجة المركزية: ARMv7 Processor [410fc075] المراجعة 5 (ARMv7) ، cr = 10c53c7d
  وحدة المعالجة المركزية: تعليمات div المتاحة: كود تقسيم التصحيح
  وحدة المعالجة المركزية: PIPT / VIPT ذاكرة التخزين المؤقت للبيانات nonaliasing ، VIPT مستعارة تعليمات التخزين المؤقت
  من: fdt: نموذج الجهاز: حاسبة HP Prime G2
  سياسة الذاكرة: كتابة ذاكرة التخزين المؤقت للبيانات
  efi: الحصول على معلمات EFI من FDT:
  efi: EFI v2.70 بواسطة EDK II
  efi: ACPI 2.0 = 0x8f49b000 SMBIOS = 0x8f9a8000 SMBIOS 3.0 = 0x8f9a6000
  OF: محفوظة mem: فشل في تخصيص الذاكرة للعقدة 'linux، cma'
  وحدة المعالجة المركزية (CPU): بدأت جميع وحدات المعالجة المركزية (CPU) في وضع SVC.
  بنيت 1 علماء الحيوان ، وتجمع التنقل على.  مجموع الصفحات: 64516
  سطر أوامر Kernel: zImage.efi root = / dev / ram0 rw initrd = / rootfs.cpio.gz dtb = / imx6ull-14x14-prime.dtb 

إذا كنت تستخدم تكوين Linux NXP ، فسيؤدي ذلك إلى تعطل النواة لأنه يقرأ عنوان ذاكرة initrd من شجرة الجهاز أو بعض معلمات التكوين المحددة مسبقًا ، وبطبيعة الحال ، يتم تحميل initrd في مكان آخر في UEFI. من الضروري إزالة هذه المعلمات وجعل التكوين أكثر عالمية.

لكن لماذا؟


يتحدث الناس عن تشغيل Windows على أجهزة مختلفة ، لذلك أريد أن أتحرك لهم قبل نهاية العام.

ماذا عن المشاريع الأخرى؟ ما التالي؟


سيستمر العمل. تحتاج أيضًا إلى تنفيذ بعض برامج التشغيل ، وتحقيق تحميل UEFI باستخدام NAND مضمن ، وتطبيق واجهة سهلة الاستخدام لتحميل UEFI للحاسبة ، ودراسة إمكانية تحميل نظام تشغيل مخزون HP PPL من UEFI.

Source: https://habr.com/ru/post/ar477250/


All Articles