با سلام و خسته نباشید.
۱- قبلا وقتیکه پشت سیستمی می نشستم که حاوی سیستم عامل ویندوز xp بود ، با حرکت دادن یکی از پنجره ها متوجه می شدم که درایور کارت گرافیک نصب شده است یانه.
اگر پنجره بصورت مواج حرکت می کرد ، می فهمیدم که درایور کارت گرافیک نصب نیست.
اگر پشت یک سیستمی که حاوی سیستم عامل گنو/لینوکس باشد، بنشینم از کجا بفهم که درایور کارت گرافیک نصب است؟
حتما بایستی دستوری بنویسم ، همینجوری نمی شود ، فهمید؟
اگر هم بخواهید از دستوری استفاده کنید، از کدام دستور معمولا استفاده می نمایید؟
۲-از کجا بدانیم در سیستم گنو/لینوکسی که با آن روبرو هستیم ، درایور مرتبط با کارت گرافیک بدرستی نصب شده است؟
۳-الان در سیستمم یک کارت گرافیک بصورت آنبورد است و دیگری کارت گرافیک مجزا (Discrete) .
آیا می توانید روشی را بگویید تا عملکرد و کیفیت اینها را نسبت بهم بسنجم؟
می خواهم این را بفهم آیا کاری است که از دست این کارت گرافیکی مجزایم برمی آید که از دست کارت گرافیکی آنبردم بر نمی آید.
۴-ایا کرنل لینوکس معمولا حاوی اکثریت درایورها می باشد؟ یعنی اکثریت دریوارها چه سخت افزارشان را داشته باشیم چه نداشته باشیم، در زمان نصب ،بدون توجه به سخت افزارمان بصورت اتوماتیک بر روی سیستممان نصب می شود.
یا روال کار بدین صورت می باشد که در هنگام نصب سیستم با توجه به شناسایی سخت افزارمان ، دریوارها نصب می شود و درایور اضافی ای در سیستممان نصب نمی شود.
۱- این راهی که توی ویندوز xp میرفتید، زیاد مناسب نیست. ممکنه اتفاقی که گفتید، بیوفته ولی دلیلش درایورها نباشند.
ولی هنوز هم روش بالا تا حدودی برای گرافیکهای انویدیا کار میده. معمولا گرافیکهای انویدیا با درایورهای آزاد مشکل دارند و مجبورتون میکنند تا درایورهای انحصاری رو نصب کنید تا درست کار کنند. بعضی مواقع که درایورهای انحصاری نصب نیستند، ممکنه رفتارهای عجیب ببینید. پس اگه گرافیک انویدیا دارید، این راه ممکنه هنوز کار بده.
البته بعضی وقتا حتی بعد از نصب درایورهای انحصاری، باز هم مشکلات عجیب به خاطر گرافیک میبینید. کلا گرافیکهای انویدیا روی هر جا غیر از ویندوز، یکم اذیت میکنند.
راه اصولی این هست که dmesg رو بررسی کنید. یا ببینید چه ماژولهایی بارگذاری شده. دستور lspci هم تقریبا همیشه اکثر اطلاعات رو میده. دستورات دیگهای هم مثل lshw یا inxi هم وجود دارند. اونها مختص دستگاههای متصل به درگاههای pci نیستند، بلکه میتونند کل سختافزارهای سیستم رو گزارش کنند.
از اونجایی که گرافیک معمولا از طریق خطوط pci یا pcie وصل میشه، lspci میتونه مناسبتر باشه.
برنامههای گرافیکی هم هستند که سختافزارهای سیستم رو نشون بدند، ولی نمیدونم درباره درایورها هم چیزی میگن یا نه.
۲- lspci میتونه خیلی کمک کننده باشه.
کرنل لینوکس، برای اکثر سختافزارها، درایور داره. اگه گرافیک اینتل یا amd داشته باشید، درایورهای آزاد اونها همراه کرنل وجود داره. پس معمولا لازم نیست چیز خاصی برای اونها نصب کنید. البته اگه از کرنل لینوکس لیبره استفاده کنید، باید firmware های مورد نیاز رو از یه جا نصب کنید. این firmware ها حجم زیادی ندارند. فکر نکنم به 50Mib برسند.
البته amd درایورهای انحصاری هم داره ولی معمولا به اونها نیاز نمیشه. اون درایورها تا جایی که یادمه، برای اوبونتو 20.04، rhel 8 و sle 15 بسته بندی شدند.
در مورد انویدیا، درایورهای آزاد nouveau همراه کرنل وجود دارند. این درایورها، برای گرافیکهای قدیمی انویدیا بهتر از درایورهای انحصاری کار میکنند ولی عملکردشون برای گرافیکهای جدید، خیلی ضعیفتر هست نسبت به درایورهای انحصاری.
اگه بخواهید از همین درایورهای آزاد استفاده کنید، باز هم لازم نیست چیز خاصی نصب کنید. مثل بالا اگه از کرنل لینوکس لیبره استفاده کنید، باید firmware ها رو از یه جا بگیرید.
اگه بخواهید از درایورهای انحصاری استفاده کنید، قضیه فرق داره. توی این حالت، اون درایورها همراه کرنل نیستند. درایورهای انویدیا، باید با توجه به کرنل، کامپایل بشن. در نتیجه شما به header های کرنل برای اینکار نیاز دارید. برای نصب درایورهای انحصاری انودیا، دو راه دارید:
الف) کد کرنل رو بگیرید و درایورهای انحصاری رو همراه کرنل قرار بدید و بعد کرنل رو کامپایل کنید. اینجوری درایورها همراه کرنل قرار میگیرن. برای اینکار لازمه که Makefile هایی رو اضافه کنید تا اینکار درست انجام بشه. این راه برای کسی که زیاد درباره کامپایل و اینجور چیزها اطلاعات نداره، میتونه سخت باشه.
ب) ماژولها رو برای یه کرنل آماده، کامپایل کنید. این روشی هست که اکثر توزیعها انجام میدن. توزیعی نمیشناسم که از راه بالا بره. برای اینکار به header های کرنل نیازه، معمولا توی مخازن توزیعها، به ازاری هر بستای که شامل کرنل هست، یه بسته هم وجود داره که header های اون کرنل رو همراه خودش داره. header های کرنل، قسمتهایی از کد کرنل هستند. نوع اونها، فایل header زبان برنامه نویسی c هست. اگه c یا ++c کار کرده باشید، احتمالا میدونید چیه.
از اونجایی که مدیریت مازولهایی که همراه کرنل نیستند میتونه مشکل باشه، برنامهای هست به اسم dkms تا با اون ماژولهایی که همراه کرنل نیستند رو مدیریت کنید. این برنامه توسط شرکت dell توسعه داده میشه.
اکثر توزیعها برای نصب ماژولهایی که همراه کرنل نیستند (مثل درایورهای انحصاری انودیا و zfs) از dkms استفاده میکنند.
موقعی که درایورهای انحصاری انویدیا رو از نصب میکنید، معمولا روال اینجوری هست که همراهش header های کرنل، dkms، کامپایلر و ابزارهای دیگه که برای کامپایل لازمه، دریافت میشن. بعد از اینکه header ها، ابزارها، dkms و کامپایلرها نصب شدند، کد درایورها، توی /usr/src/ قرار میگیره، اون فایلها به پایگاه داده dkms اضافه میشن و بعد dkms کامپایل رو شروع میکنه. بعد از کامپایل، ماژولهای بدست اومده توی جای درست قرار میگیرن، یه depmod اجرا میشن تا cache مربوط به ماژولها آپدیت بشه، معمولا initramfs دوباره ساخته میشه و بعد از اون، باقی کارها انجام میشه. مثل blacklist کردن ماژولهای nouveau، نصب بقیه چیزهای مربوطه و اینجور کارها.
(نصب کامپایلر میتونه نقص امنیتی به حساب بیاد، حواستون بهش باشه. البته چیزی نیست که به همین راحتی استفاده بشه)
۳- بالاتر گفتند، بنچمارک بگیرید. فکر کنم blender یه بنچمارک هم داشته باشه.
۴- کرنلی که توی مخازن توزیعها هست، معمولا شامل ماژولهای خیلی زیادیه تا بتونه روی اکثر سختافزارها کار کنه.
موقع کامپایل کرنل، میشه مشخص کرد که چه ماژولهایی کامپایل بشن و کدومها نه.
اینجور نیست که همه ماژولها مستقیم توی خود کرنل باشند، توی اکثر توزیعها، تعداد کمی شاید حدود ۱۶۰ تا از ماژولها داخل خود کرنل قرار میگرن. بقیه ماژولها توی فایلها جدا قرار دارند. موقع کامپایل، میشه تعیین کرد که یه ماژول اصلا کامپایل نشه یا کامپایل بشه و داخل خود کرنل قرار بگیره یا اینکه کامپایل بشه ولی جدا از کرنل قرار بگیره و بر حسب شرایط، بشه بارگذاریش کرد یا نه.
معمولا ماژولهای کرنل، توی زیر دایرکتوریها، توی دایرکتوری زیر قرار دارند. عموما زیر دایرکتوری kernel
/lib/modules/KERNEL-RELEASE
به جای KERNEL-RELEASE، اسم انتشار کرنل قرار میگیره. این اسم موقع کامایل تنطیم میشه. مثلا توی دبیان، اسم انتشار نسخه 5.10.84 به صورت زیر هست.
5.10.0-10-amd64
در نتیجه ماژولهای اون توی دایرکتوری زیر پیدا میشن.
/lib/modules/5.10.0-10-amd64
کرنل اول سختافزارها رو میشناسه و بعد با توجه به تنظیمات و چیزهایی که در دسترس داره، سعی میکنه بهترین درایور رو انتخاب کنه. بعد از اون، ماژول(ها) درست رو بارگذاری میکنه تا اون سختافزار به کار بیوفته.