درایور گرافیک RaspberryPi KMS خروجی HDMI
کلفون
2020-2023 Raspberry Pi Ltd (قبلاً Raspberry Pi (Trading) Ltd.) این سند تحت مجوز Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) مجوز دارد. تاریخ ساخت: 2023-02-10 نسخه ساخت: githash: c65fe9c-clean
اعلامیه سلب مسئولیت حقوقی
دادههای فنی و قابلیت اطمینان برای محصولات RASPBERRY PI (شامل برگههای داده) همانطور که هر چند وقت یکبار تغییر میکند ("منابع") توسط Raspberry PI LTD ("RPL"TEHNIEDRANCE, ANYORLUTIUTESS، AS به، ضمانت های ضمنی خرید و فروش بودن و تناسب اندام برای یک هدف خاص سلب مسئولیت می شود. تا حداكثري كه توسط قانون قابل اجرا مجاز است، در هيچ موردي، RPL مسئول هيچ گونه خسارت مستقيم، غيرمستقيم، اتفاقي، خاص، مثالي، يا تبعي ايالات متحده نخواهد بود. , یا سود؛ یا وقفه تجاری از چنین آسیب. RPL این حق را برای خود محفوظ می دارد که در هر زمان و بدون اطلاع بعدی، هر گونه پیشرفت، بهبود، اصلاح یا هر گونه اصلاح دیگری را در منابع یا هر محصولی که در آنها توضیح داده شده است، انجام دهد. منابع برای کاربران ماهر با سطوح مناسب از دانش طراحی در نظر گرفته شده است. کاربران تنها مسئول انتخاب و استفاده از منابع و هرگونه استفاده از محصولات توضیح داده شده در آنها هستند. کاربر موافقت می کند که RPL را در برابر کلیه تعهدات، هزینه ها، خسارات یا سایر خسارات ناشی از استفاده از RESOURCES جبران کند و بی ضرر نگه دارد. RPL به کاربران اجازه می دهد تا از منابع صرفاً در ارتباط با محصولات Raspberry Pi استفاده کنند. هرگونه استفاده دیگر از منابع ممنوع است. هیچ مجوزی به RPL دیگر یا سایر حقوق مالکیت معنوی شخص ثالث اعطا نمی شود. فعالیت های پرخطر محصولات Raspberry Pi برای استفاده در محیطهای خطرناکی که نیاز به عملکرد ایمن دارند، از جمله در بهرهبرداری از تأسیسات هستهای، ناوبری یا سیستمهای ارتباطی هواپیما، کنترل ترافیک هوایی، سیستمهای تسلیحاتی یا کاربردهای حیاتی ایمنی (از جمله پشتیبانی از حیات) طراحی، تولید یا در نظر گرفته نشدهاند. سیستمها و سایر دستگاههای پزشکی)، که در آنها خرابی محصولات میتواند مستقیماً منجر به مرگ، آسیب شخصی یا آسیب شدید فیزیکی یا محیطی شود («فعالیتهای پرخطر»). RPL به طور خاص هرگونه ضمانت صریح یا ضمنی تناسب اندام برای فعالیت های پرخطر را رد می کند و هیچ مسئولیتی در قبال استفاده یا گنجاندن محصولات Raspberry Pi در فعالیت های پرخطر نمی پذیرد. محصولات Raspberry Pi تحت شرایط استاندارد RPL ارائه می شوند. ارائه منابع RPL، شرایط استاندارد RPL را شامل، اما نه محدود به سلب مسئولیت ها و ضمانت های بیان شده در آنها، گسترش یا تغییر نمی دهد.
تاریخچه نسخه سند
محدوده سند
این سند برای محصولات Raspberry Pi زیر اعمال می شود
مقدمه
با معرفی درایور گرافیکی KMS (تنظیم حالت هسته)، Raspberry Pi Ltd از کنترل سیستم عامل قدیمی سیستم خروجی ویدیو دور شده و به سمت یک سیستم گرافیکی متن بازتر حرکت می کند. با این حال، این با مجموعه ای از چالش های خود همراه است. این سند برای کمک به مشکلاتی که ممکن است هنگام انتقال به سیستم جدید ایجاد شود، در نظر گرفته شده است. این وایت پیپر فرض میکند که Raspberry Pi سیستم عامل Raspberry Pi را اجرا میکند و بهطور کامل با آخرین سیستمافزار و هستهها بهروز است.
اصطلاحات
DRM: Direct Rendering Manager، یک زیر سیستم از هسته لینوکس که برای ارتباط با واحدهای پردازش گرافیکی (GPU) استفاده می شود. با مشارکت FKMS و KMS استفاده می شود.
DVI: نسخه قبلی HDMI، اما بدون قابلیت صوتی. کابل ها و آداپتورهای HDMI به DVI برای اتصال دستگاه Raspberry Pi به یک نمایشگر مجهز به DVI در دسترس هستند.
EDID: داده های شناسایی نمایشگر توسعه یافته فرمت ابرداده برای دستگاههای نمایشگر برای توصیف قابلیتهای آنها در یک منبع ویدیویی. ساختار داده EDID شامل نام سازنده و شماره سریال، نوع محصول، اندازه نمایش فیزیکی، و زمانبندی پشتیبانی شده توسط نمایشگر، همراه با دادههای کمتر مفید است. برخی از نمایشگرها میتوانند بلوکهای EDID معیوب داشته باشند، که در صورت عدم رسیدگی به این نقصها توسط سیستم نمایش، میتواند مشکلاتی ایجاد کند.
FKMS (vc4-fkms-v3d): تنظیم حالت هسته جعلی. در حالی که سیستم عامل همچنان سخت افزار سطح پایین را کنترل می کند (مثلاًampدرگاههای رابط چندرسانهای با کیفیت بالا (HDMI)، رابط سریال نمایشگر (DSI) و غیره)، کتابخانههای استاندارد لینوکس در خود هسته استفاده میشوند. FKMS به طور پیش فرض در Buster استفاده می شود، اما اکنون به نفع KMS در Bullsye منسوخ شده است.
HDMI: رابط چند رسانه ای با وضوح بالا یک رابط صوتی/تصویری اختصاصی برای انتقال داده های ویدئویی فشرده نشده و داده های صوتی دیجیتال فشرده یا غیر فشرده است.
HPD: تشخیص Hotplug. یک سیم فیزیکی که توسط یک دستگاه نمایشگر متصل برای نشان دادن آن مشخص شده است وجود دارد.
KMS: تنظیم حالت هسته؛ دیدن https://www.kernel.org/doc/html/latest/gpu/drm-kms.html برای جزئیات بیشتر در Raspberry Pi، vc4-kms-v3d درایوری است که KMS را پیادهسازی میکند و اغلب به عنوان «درایور KMS» شناخته میشود. پشته گرافیک قدیمی: یک پشته گرافیکی که به طور کامل در حباب سفتافزار VideoCore پیادهسازی شده است که توسط یک درایور فریمبافر لینوکس در معرض دید قرار گرفته است. پشته گرافیکی قدیمی تا همین اواخر در اکثر دستگاه های Raspberry Pi Ltd استفاده شده است. اکنون به تدریج با (F)KMS/DRM جایگزین شده است.
سیستم HDMI و درایورهای گرافیک
دستگاه های Raspberry Pi از استاندارد HDMI که در نمایشگرها و تلویزیون های LCD مدرن بسیار رایج است برای خروجی ویدیو استفاده می کنند. Raspberry Pi 3 (از جمله Raspberry Pi 3B+) و دستگاه های قبلی دارای یک درگاه HDMI هستند که با استفاده از یک رابط HDMI با اندازه کامل قادر به خروجی 1920 × 1200 @60Hz است. Raspberry Pi 4 دارای دو پورت micro HDMI است و قابلیت خروجی 4K را در هر دو پورت دارد. بسته به تنظیمات، پورت HDMI 0 در Raspberry Pi 4 تا 4kp60 میتواند باشد، اما هنگام استفاده از دو دستگاه خروجی 4K، در هر دو دستگاه به p30 محدود میشوید. پشته نرم افزار گرافیکی، صرف نظر از نسخه، مسئول بازجویی دستگاه های HDMI متصل شده برای ویژگی های آنها، و راه اندازی مناسب سیستم HDMI است. پشته های Legacy و FKMS هر دو از سیستم عامل در پردازنده گرافیکی VideoCore برای بررسی وجود و ویژگی های HDMI استفاده می کنند. در مقابل، KMS از یک پیاده سازی کاملاً متن باز، سمت ARM استفاده می کند. این بدان معنی است که مبانی کد برای دو سیستم کاملاً متفاوت است و در برخی شرایط این می تواند منجر به رفتارهای متفاوت بین این دو رویکرد شود. دستگاه های HDMI و DVI با استفاده از قطعه ای از ابرداده به نام بلوک EDID خود را به دستگاه منبع شناسایی می کنند. این توسط دستگاه مبدأ از دستگاه نمایشگر از طریق اتصال I2C خوانده می شود، و این برای کاربر نهایی کاملاً شفاف است همانطور که توسط پشته گرافیکی انجام می شود. بلوک EDID حاوی مقدار زیادی اطلاعات است، اما در درجه اول برای مشخص کردن رزولوشنهایی که نمایشگر پشتیبانی میکند استفاده میشود، بنابراین Raspberry Pi میتواند برای خروجی وضوح مناسب تنظیم شود.
نحوه برخورد با HDMI در هنگام بوت شدن
هنگامی که برای اولین بار روشن می شود، Raspberry Pi از چندین ثانیه عبور می کندtages، معروف به boot stages:
- اولین هاtage، بوت لودر مبتنی بر ROM GPU VideoCore را راه اندازی می کند.
- ثانیه هاtage bootloader (این bootcode.bin در کارت SD در دستگاههای قبل از Raspberry Pi 4 و در SPI EEPROM در Raspberry Pi 4 است):
- در Raspberry Pi 4، نسخه دومtage bootloader سیستم HDMI را راه اندازی می کند، نمایشگر را برای حالت های احتمالی مورد بررسی قرار می دهد، سپس نمایشگر را به طور مناسب تنظیم می کند. در این مرحله از صفحه نمایش برای ارائه داده های تشخیصی اولیه استفاده می شود.
- صفحه نمایش تشخیصی بوت لودر (07 دسامبر 2022 به بعد) وضعیت هر نمایشگر متصل را نشان می دهد (اینکه آیا Hotplug Detect (HPD) وجود دارد و آیا یک بلوک EDID از صفحه نمایش بازیابی شده است یا خیر).
- سیستم عامل VideoCore (start.elf) بارگیری و اجرا می شود. این کار کنترل سیستم HDMI را به دست میگیرد، بلوک EDID را از هر نمایشگر متصل میخواند و صفحه رنگین کمان را روی آن نمایشگرها نشان میدهد.
- هسته لینوکس بوت می شود
- در طول بوت هسته، KMS کنترل سیستم HDMI را از میانافزار در اختیار خواهد گرفت. یک بار دیگر بلوک EDID از هر نمایشگر متصل خوانده می شود و از این اطلاعات برای راه اندازی کنسول لینوکس و دسکتاپ استفاده می شود.
مشکلات و علائم احتمالی
رایجترین علامت خرابی که هنگام انتقال به KMS تجربه میشود، یک بوت در ابتدا خوب است، با صفحه بوتلودر و سپس صفحه رنگین کمان ظاهر میشود و پس از چند ثانیه صفحه سیاه میشود و دوباره روشن نمیشود. نقطه ای که نمایشگر سیاه می شود در واقع نقطه ای در طول فرآیند بوت شدن هسته است که درایور KMS اجرای نمایشگر را از میان افزار بر عهده می گیرد. Raspberry Pi در حال حاضر از همه جهات به جز خروجی HDMI در حال اجرا است، بنابراین اگر SSH فعال باشد، باید بتوانید از آن مسیر وارد دستگاه شوید. LED دسترسی به کارت SD سبز معمولاً گاهی اوقات سوسو میزند. همچنین این امکان وجود دارد که شما اصلاً خروجی HDMI نبینید. بدون صفحه نمایش بوت لودر و بدون صفحه رنگین کمان. این معمولاً به دلیل نقص سخت افزاری است.
تشخیص عیب
خروجی HDMI اصلا وجود ندارد
ممکن است دستگاه اصلاً بوت نشده باشد، اما این خارج از صلاحیت این کاغذ سفید است. با فرض اینکه رفتار مشاهده شده یک مشکل نمایشگر است، فقدان خروجی HDMI در طول هر بخشی از فرآیند بوت کردن معمولاً به دلیل نقص سخت افزاری است. تعدادی گزینه ممکن وجود دارد:
- کابل HDMI معیوب
- یک کابل جدید را امتحان کنید. برخی از کابل ها، به خصوص کابل های بسیار ارزان، ممکن است حاوی تمام خطوط ارتباطی مورد نیاز (مثلاً هات پلاگ) برای Raspberry Pi برای تشخیص موفقیت آمیز نمایشگر نباشند.
- پورت HDMI معیوب در Raspberry Pi
- اگر از Raspberry Pi 4 استفاده می کنید، پورت HDMI دیگر را امتحان کنید.
- پورت HDMI معیوب روی مانیتور
- گاهی اوقات پورت HDMI روی مانیتور یا تلویزیون ممکن است فرسوده شود. اگر دستگاه دارای پورت دیگری است، پورت دیگری را امتحان کنید.
- به ندرت، یک دستگاه نمایشگر ممکن است تنها در صورت روشن بودن یا انتخاب پورت صحیح، داده EDID را ارائه دهد. برای بررسی، مطمئن شوید که دستگاه روشن است و پورت ورودی صحیح انتخاب شده است.
- نمایش دستگاه که خط تشخیص hotplug را تایید نمی کند
خروجی اولیه، سپس صفحه سیاه می شود
اگر هنگام بوت شدن هسته لینوکس صفحه نمایش بالا بیاید اما خاموش شود، دلایل احتمالی متعددی وجود دارد که معمولاً به مشکل خواندن EDID از دستگاه نمایشگر مربوط می شود. همانطور که از بخش بالا که به دنباله بوت میپردازد مشاهده میشود، EDID در چندین نقطه مختلف در طول فرآیند بوت خوانده میشود و هر یک از این خواندنها توسط نرمافزار متفاوتی انجام میشود. خواندن نهایی، زمانی که KMS کنترل میشود، توسط کد هسته بالادست لینوکس بدون تغییر انجام میشود، و این فرمتهای معیوب EDID و همچنین نرمافزار سیستمافزار قبلی را کنترل نمیکند. به همین دلیل است که وقتی KMS کنترل میشود، نمایشگر میتواند به درستی کار کند. چندین راه برای تأیید اینکه آیا KMS در خواندن EDID ناکام است یا خیر وجود دارد که دو مورد از آنها به شرح زیر است.
صفحه تشخیص بوت لودر را بررسی کنید (فقط Raspberry Pi 4)
توجه
تشخیص بوت لودر به یک بوت لودر جدید نیاز دارد. با استفاده از این دستورالعمل ها می توانید به آخرین نسخه ارتقا دهید: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader کارت SD را بردارید و Raspberry Pi را مجددا راه اندازی کنید. ESC را در صفحه Install OS فشار دهید و صفحه عیب یابی باید روی دستگاه نمایشگر ظاهر شود. باید یک خط روی صفحه نمایش وجود داشته باشد که با نمایش شروع می شود: - برای مثالampدر:
- نمایش: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=هیچ #0
این خروجی از Raspberry Pi 4 نشان می دهد که سیستم یک صفحه نمایش HDMI را در پورت HDMI 0 شناسایی کرده است، تشخیص hotplug ثابت شده است و EDID OK خوانده شده است. هیچ چیزی در پورت HDMI 1 یافت نشد.
بررسی کنید که آیا سیستم KMS یک EDID را شناسایی کرده است یا خیر
برای بررسی این موضوع باید از طریق SSH از رایانه دیگری وارد دستگاه Raspberry Pi شوید. SSH را می توان هنگام ایجاد تصویر کارت SD با Raspberry Pi Imager، با استفاده از گزینه های تنظیمات پیشرفته فعال کرد. فعال کردن SSH در کارت SD که قبلاً تصویربرداری شده است کمی پیچیدهتر است: برای افزودن یک کارت باید از رایانه دیگری استفاده کنید. file به نام ssh در پارتیشن بوت. کارت SD را در Raspberry Pi اصلی قرار دهید و آن را روشن کنید. این باید SSH را با یک آدرس IP اختصاص داده شده توسط DHCP فعال کند. پس از ورود به سیستم، عبارت زیر را در فرمان ترمینال تایپ کنید تا محتویات هر EDID شناسایی شده نمایش داده شود (ممکن است لازم باشد HDMI-A-1 را به HDMI-A-2 تغییر دهید، بسته به اینکه دستگاه نمایشگر به کدام پورت HDMI Raspberry Pi متصل است. به): cat /sys/class/drm/card؟-HDMI-A-1/edid اگر هیچ پوشه ای با نام کارت؟-HDMI-A-1 یا مشابه وجود نداشته باشد، احتمالاً هیچ EDID از صفحه نمایش خوانده نمی شود. دستگاه
توجه
در صورتی که EDID با موفقیت خوانده شود، یک مجازی مفید وجود دارد file در همان پوشه، به نام modes، که وقتی نمایش داده می شود، تمام حالت های ممکن را که EDID ادعا می کند دستگاه پشتیبانی می کند نشان می دهد.
اقدامات کاهشی
خرابی تشخیص Hotplug اگر هم سیستم عامل و هم KMS نتوانند یک مانیتور متصل را پیدا کنند، ممکن است مشکل تشخیص hotplug باشد - به عنوان مثال، Raspberry Pi نمی داند دستگاهی به برق وصل شده است، بنابراین EDID را بررسی نمی کند. این می تواند ناشی از کابل خراب یا دستگاه نمایشگر باشد که هات پلاگ را به درستی وارد نمی کند. می توانید با تغییر خط فرمان هسته، تشخیص هات پلاگ را مجبور کنید file (cmdline.txt) که در پارتیشن بوت کارت SD سیستم عامل Raspberry Pi ذخیره می شود. شما می توانید این را ویرایش کنید file در سیستم دیگری، با استفاده از هر ویرایشگری که ترجیح می دهید. موارد زیر را به انتهای cmdline.txt اضافه کنید file: video=HDMI-A-1:1280×720@60D اگر از پورت دوم HDMI استفاده می کنید، HDMI-A-1 را با HDMI-A-2 جایگزین کنید. همچنین میتوانید وضوح و نرخ فریم متفاوتی را تعیین کنید، اما مطمئن شوید که مواردی را انتخاب کنید که دستگاه نمایشگر از آن پشتیبانی میکند.
توجه
اسناد مربوط به تنظیمات خط فرمان هسته برای ویدیو را می توانید در اینجا پیدا کنید: https://www.kernel.org/doc/Documentation/fb/modedb.txt
هشدار
پشتههای گرافیکی قدیمیتر از استفاده از ورودی config.txt برای تنظیم تشخیص hotplug پشتیبانی میکردند، اما در زمان نوشتن این مورد با KMS کار نمیکند. ممکن است در نسخه های سفت افزار بعدی پشتیبانی شود. ورودی config.txt hdmi_force_hotplug است و میتوانید پورت HDMI خاصی را که hotplug برای آن اعمال میشود با استفاده از hdmi_force_hotplug:0=1 یا hdmi_force_hotplug:1=1 مشخص کنید. توجه داشته باشید که نام گذاری برای KMS به پورت های HDMI به عنوان 1 و 2 اشاره دارد، در حالی که Raspberry Pi از 0 و 1 استفاده می کند.
مشکلات EDID
تعداد کمی از دستگاه های نمایشگر در صورت خاموش بودن یا انتخاب ورودی اشتباه AV قادر به برگرداندن EDID نیستند. زمانی که Raspberry Pi و دستگاه های نمایشگر روی یک نوار تغذیه هستند و دستگاه Raspberry Pi سریعتر از نمایشگر بوت می شود، این مشکل می تواند باشد. با چنین دستگاه هایی، ممکن است لازم باشد EDID را به صورت دستی ارائه دهید. حتی غیرمعمولتر، برخی از دستگاههای نمایشگر دارای بلوکهای EDID هستند که فرمت بدی دارند و توسط سیستم KMS EDID قابل تجزیه نیستند. در این شرایط، ممکن است بتوان یک EDID را از دستگاهی با وضوح مشابه خواند و از آن استفاده کرد. در هر صورت، دستورالعملهای زیر نحوه خواندن یک EDID را از یک دستگاه نمایشگر و پیکربندی KMS برای استفاده از آن، به جای اینکه KMS تلاش کند مستقیماً از دستگاه بازجویی کند، توضیح میدهد.
کپی کردن یک EDID در a file
ایجاد یک file حاوی ابرداده EDID از ابتدا معمولاً امکان پذیر نیست و استفاده از یک موجود بسیار ساده تر است. به طور کلی می توان یک EDID را از یک دستگاه نمایشگر دریافت کرد و آن را روی کارت SD Raspberry Pi ذخیره کرد تا بتواند به جای دریافت EDID از دستگاه نمایشگر، توسط KMS استفاده شود. ساده ترین گزینه در اینجا این است که اطمینان حاصل کنید که دستگاه نمایشگر روشن و کار می کند و ورودی AV صحیح دارد و Raspberry Pi سیستم HDMI را به درستی راه اندازی کرده است. از ترمینال، اکنون می توانید EDID را در a کپی کنید file با دستور زیر: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat اگر به دلایلی EDID وجود نداشت، می توانید دستگاه را به صورت غیر بوت کنید. - حالت KMS که در بوت شدن روی دسکتاپ یا کنسول موفق می شود، سپس EDID را که سفت افزار (امیدواریم) با موفقیت بخواند، کپی کنید. file.
- بوت شدن به حالت گرافیکی قدیمی.
- config.txt را در پارتیشن بوت ویرایش کنید، مطمئن شوید که ویرایشگر خود را با استفاده از sudo اجرا میکنید و خطی را که میگوید dtoverlay=vc4-kms-v3d را به #dtoverlay=vc4-kms-v3d تغییر دهید.
- راه اندازی مجدد
- دسکتاپ یا کنسول ورود به سیستم اکنون باید ظاهر شود.
- با استفاده از ترمینال، EDID را از دستگاه نمایشگر متصل به a کپی کنید file با دستور زیر:
- tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/
با استفاده از a fileEDID مبتنی بر EDID به جای بازجویی از دستگاه نمایشگر، ویرایش /boot/cmdline.txt را ویرایش کنید، مطمئن شوید که ویرایشگر خود را با استفاده از sudo اجرا کنید، و موارد زیر را به خط فرمان هسته اضافه کنید: drm.edid_firmware=myedid.dat شما می توانید EDID را به یک پورت HDMI خاص به شرح زیر است: drm.edid_firmware=HDMI-A-1:myedid.dat در صورت لزوم، با انجام کارهای زیر دوباره به حالت KMS بوت شوید:
- config.txt را در پارتیشن بوت ویرایش کنید، مطمئن شوید که ویرایشگر خود را با استفاده از sudo اجرا میکنید و خطی که میگوید #dtoverlay=vc4-kms-v3d را به dtoverlay=vc4-kms-v3d تغییر دهید.
- راه اندازی مجدد
توجه
اگر از a استفاده می کنید fileمبتنی بر EDID، اما هنوز با hotplug مشکل دارید، میتوانید با اضافه کردن موارد زیر به خط فرمان هسته، تشخیص hotplug را مجبور کنید: video=HDMI-A-1:D.
اسناد / منابع
![]() |
درایور گرافیک RaspberryPi KMS خروجی HDMI [pdf] دفترچه راهنمای کاربر KMS، درایور گرافیک خروجی HDMI، درایور گرافیک خروجی KMS HDMI، درایور گرافیک خروجی KMS، درایور |