یکی از مشکلاتی که برخی کاربران در استفاده از سیستمعامل ویندوز ۱۰ بر روی MacBook Pro 13 تولید سال ۲۰۱۱ دارند، عدم راهاندازی چیپ صوتی است. این درحالی است که درایور چیپ صوتی نصب بوده اما هیچ صدایی پخش نمیشود. در این مطلب به شما نحوهی راهاندازی چیپ صوتی و رفع این مشکل را آموزش خواهم داد، پس در ادامه با من همراه باشید.
در سیستمعامل ویندوز تعیین DSDT Root Table Bridge معمولاً به یک فضای ۳۲ بیتی (کمتر از ۴ گیگابایت) رزرو شده محدود میشود تا به اندازهی کافی بزرگ باشد که بتواند دستگاههای PCIe در لپتاپها را میزبانی کند. در ادامه یک مقدار TOLUD (مخفف سرنام Top of Low Usable DRAM) تعریف و قفل میشود و درنهایت سیستمعامل ویندوز با توجه به محدودیتهای Root Bridge دستگاههای PCIe را در آن تخصیص میدهد.
جالب است بدانید که محدودیت Root Bridge در سیستمعامل macOS نادیده گرفته میشود، همانگونه که در گنو/لینوکس در هنگام بوت با پارامتر pci=noCRS میتوان آن را نادیده گرفت. هیچکدام از این سیستمعاملها نیازی به لغو جداول DSDT ندارند و میتوانند آزادانه در یک فضای عظیم ۶۴ بیتی دستگاههای PCIe را آدرس دهی کنند.
مشکل از جایی شروع میشود که فضای آدرس دهی ۳۲ بیتی کافی برای میزبانی در دسترس نیست و دستگاه نمیتواند منابع کافی را برای استفاده پیدا کند و بخش مدیریت دستگاههای سیستمعامل ویندوز (Windows device manager) آن را غیرقابل اجرا میکند.
در نهایت باید با استفاده از اصلاح جداول ACPI موجود در DSDT، مقدار ۳۲ بیتی مربوطه را به مقدار جدیدی در فضای ۶۴ بیتی تغییر دهیم تا دستگاه (در اینجا چیپ صوتی) بتواند فضای کافی را برای عملکرد صحیح بهدست بیاورد.
قبل از هرچیز به چند ابزار برای این کار نیاز داریم:
ابزار کامپایل و دیکامپایل فایلهای DSDT/SSDT.aml: دانلود
ابزار Windows Driver Kit یا به اختصار WDK: دانلود
یک ویرایشگر متنی مانند VScode/Atom/Sublime و ...
ابتدا ابزار iASL (ابزار کامپایل و دیکامپایل فایلهای DSDT/SSDT.aml) را دانلود و در درایور C در یک پوشه با نام dsdt ذخیره کنید. سپس ابزار WDK را دانلود و نصب کنید. ابزار WDK حجمی تقریبا نزدیک به ۱ گیگابایت دارد که از سایت مایکروسافت دانلود میشود پس حتما به این موضوع توجه کنید.
بعد از دانلود و نصب WDK یک Command Prompt در حالت Administrator با استفاده از گزینهی Run as administrator باز کنید و دستورات زیر را خط به خط در آن وارد کنید.
mkdir c:\dsdt
c: & cd \dsdt
set 64bit_OS_asl="C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify\asl.exe"
set 32bit_OS_asl="C:\Program Files (x86)\Windows Kits\10\Tools\x86\ACPIVerify\asl.exe"
copy /y %32bit_OS_asl% c:\dsdt > nul & copy /y %64bit_OS_asl% c:\dsdt > nul
if not exist c:\dsdt\asl.exe echo ERROR: Failed to copy asl.exe to c:\dsdt
در محیط Command Prompt مطمئن شوید که در مسیر C:\dsdt و در حالت Administrator قرار دارید و سپس دستورات زیر را وارد کنید:
اگر در مسیر پوشهی C:\dsdt نبودید با این دستور به این مسیر بروید:
c: & cd \dsdt
سپس دستورات زیر را خط به خط اجرا کنید:
acpidump -b -z
asl /u dsdt.dat
copy dsdt.asl dsdt-modified.asl
حال فایل refs.txt را دانلود کنید و در مسیر C:\dsdt کپی کنید. این فایل سعی میکند که آرگومانهای تعریف نشده را تصحیح کند. همچنین نیاز داریم تا فایل DSDT دیکامپایل شود تا بتوانیم آن را در یک نرمافزار ویرایش متن مانند VScode/Atom/Sublime و ... ویرایش کنیم.
توجه: در محیط Command Prompt مطمئن شوید که در مسیر C:\dsdt و در حالت Administrator قرار دارید و سپس دستورات زیر را وارد کنید:
iasl -da -dl -fe refs.txt dsdt.dat
copy dsdt.dsl dsdt-modified.dsl
حال کافیست تا فایل dsdt-modified.dsl که در مسیر c:\dsdt قرار دارد را در یک ویرایشگر متنی باز کنید.
در ادامه کلمهی "DWordMemory" را جستجو کنید و سپس آخرین ورودی "DWordMemory" را پیدا کنید. معمولاً بالای متد CSR_ قرار دارد.
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000A0000, // Range Minimum
0x000BFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00020000, // Length
,, , AddressRangeMemory, TypeStatic)
})
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
حال باید مقدار ۳۲ بیتی (DWordMemory) موجود به ۶۴ بیتی (QWordMemory) تغییر پیدا کند. لازم به ذکر است که محدودهی انتخاب شده در بازهی ۳۶ بیتی قرار دارد تا با نسخههای ۳۲ بیت ویندوز با قابلیت PAE سازگاری داشته باشد. در واقع محدودهای بالاتر از ۴۸ گیگابایت Ram (در این Patch چیزی بین ۴۸.۵ تا ۵۶.۲۵ گیگابایت) برای کاهش مسائل با کامپیوترهایی با ۳۲ گیگابایت Ram انتخاب شده است.
کافیست مقدار زیر را به جای مقدار DWordMemory جایگزین کرده و فایل را ذخیره کنید:
QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x0000000000000000, // Granularity
0x0000000C20000000, // Range Minimum, set it to 48.5GB
0x0000000E0FFFFFFF, // Range Maximum, set it to 56.25GB
0x0000000000000000, // Translation Offset
0x00000001F0000000, // Length calculated by Range Max - Range Min.
,, , AddressRangeMemory, TypeStatic)
})
در ادامه باید فایل dsdt-modified.dsl را کامپایل کنید. برای این کار Command Prompt را در حالت Administrator اجرا کنید و سپس به مسیر C:\dsdt رفته و دستورات زیر را وارد کنید:
رفتن به مسیر C:\dsdt
c: & cd \dsdt
کامپایل فایل dsdt-modified.dsl و تبدیل آن به dsdt-modified.aml
iasl -ve dsdt-modified.dsl
در این مرحله کار Patch کردن فایل DSDT و جداول ACPI مربوطه به اتمام رسیده است و باید این تغییرات در هنگام بوت اعمال شده و جایگزین جداول واقعی شوند.
متاسفانه باید توجه داشته باشید که اعمال چنین جداولی به دلیل نامعتبر بودن باعث بروز مشکلاتی مانند عدم بوت و یا صفحهی مرگ ویندوز (BOSD) خواهند شد. برای جلوگیری از بروز چنین مشکلاتی از دستورات زیر استفاده کنید تا ویندوز بدون مشکل بوت شود.
توجه: در محیط Command Prompt مطمئن شوید که در مسیر C:\dsdt و در حالت Administrator قرار دارید و سپس دستورات زیر را وارد کنید.
این دستور فایل DSDT اصلاح شده را در هر Boot به جای جداول اصلی بارگذاری میکند:
asl /loadtable dsdt-modified.aml
همچنین این دستور ویندوز ۱۰ را در حالت Test Signing اجرا میکند تا جداول نامعتبر قابل اجرا باشند:
bcdedit -set TESTSIGNING ON
کار تمام شده و با Restart کردن کامپیوتر خواهید دید که چیپ صوتی فعال شده است. توجه داشته باشید که در گوشهی سمت راست و پایین Desktop اعلانی مبنی بر اجرای ویندوز در حالت Test Mode نمایش داده میشود که میتوانید با استفاده از این برنامه آن را مخفی کنید.
امیدوارم که این آموزش برای شما مفید بوده باشد. همچنین با حمایت از من باعث خواهید شد تا انگیزهی بیشتری برای آموزشهای بیشتر داشته باشم.