تضيف سلسلة Samsung Galaxy Book برنامج تشغيل نظام التشغيل Linux.
الوضع الحالي:
الهدف هو تكرار ما فعلته Samsung في Windows إلى حد ما في Linux مع ما أعتقد أن المكونات التالية تفعله:
SCAI
ACPI الخاص به من أجل التحكم في الكثير من هذه الإعدادات.SamsungSystemSupportEngine.exe
والذي يبدو أنه يتعامل مع الكثير من الأشياء على جانب مساحة المستخدم/التطبيق، بما في ذلك: هذا هو برنامج تشغيل نظام أساسي جديد و(حاليًا) خارج الشجرة تمامًا يهدف إلى محاكاة ما يبدو أن برنامج تشغيل جهاز نظام Windows System Event Controller يقوم به (أي، التواصل مع جهاز SCAI
ACPI من أجل التحكم في هذه الميزات الإضافية ). بمجرد إضافة المزيد من الميزات واختبارها، فإنني أعتزم محاولة إرسال برنامج التشغيل لإضافته إلى النواة.
يتم تنفيذ الميزات التالية حاليًا:
fan_speed_rpm
sysfs بالإضافة إلى جهاز hwmon جديدقد يكون من الممكن تنفيذ الميزات التالية ولكنها تتطلب المزيد من التصحيح والتطوير:
SAM0427
يجب أن تكون الأجهزة التي يدعمها برنامج تشغيل النظام الأساسي هذا أي جهاز حيث تقارير sudo dmidecode --type 3
Manufacturer: SAMSUNG ELECTRONICS CO., LTD.
Type: Notebook
، بالإضافة إلى أن جهاز ACPI SCAI
موجود بمعرفات جهاز ACPI المطابقة للقائمة الواردة في برنامج التشغيل ( SAM0427
و SAM0428
و SAM0429
و SAM0430
في وقت كتابة هذه السطور). يغطي هذا معظم أجهزة الكمبيوتر المحمولة المتوفرة حاليًا من سلسلة "Samsung Galaxy Book"، ولكنه قد يشمل أجهزة أخرى أيضًا.
والقصد من ذلك هو أن تحاول كل ميزة ضمن برنامج تشغيل النظام الأساسي اختبار ما إذا كانت مدعومة أم لا بطريقة ما قبل تمكين الميزة. تحتوي بعض الأجهزة على أجهزة مختلفة قليلاً و/أو تعمل بطريقة مختلفة قليلاً؛ إذا كان لديك جهاز يقوم برنامج التشغيل بتعطيل ميزة معينة تعتقد أنه يجب دعمه، فيرجى إنشاء مشكلة!
لقد رأيت أيضًا أن Windows يستخدم نفس برنامج التشغيل لـ SAM0426
(المستخدم بواسطة أجهزة مثل Notebook 9 Pro 15" و/أو ما شابه ذلك)، لذلك أشك في أن أجزاء كبيرة من برنامج التشغيل هذا ربما تعمل أيضًا مع هذه الأجهزة. إذا كان لديك واحد من هذه الأجهزة، وتريد اختبار برنامج التشغيل هذا معه، يرجى إنشاء مشكلة للحصول على المساعدة ومشاركة النتائج التي توصلت إليها.
يدعم برنامج تشغيل النظام الأساسي معلمات الوحدة التالية:
kbd_backlight
: تمكين التحكم في الإضاءة الخلفية للوحة المفاتيح (التشغيل الافتراضي) (منطقي)battery_threshold
: تمكين التحكم في حد شحن البطارية (التشغيل الافتراضي) (منطقي)performance_mode
: تمكين التحكم في وضع الأداء (التشغيل الافتراضي) (منطقي)allow_recording
: تمكين التحكم للسماح أو منع الوصول إلى الكاميرا والميكروفون (تشغيل افتراضي) (منطقي)fan_speed
: تمكين سرعة المروحة (التشغيل الافتراضي) (منطقي)i8042_filter
: تمكين التقاط أحداث مفتاح التشغيل السريع للوحة المفاتيح (التشغيل الافتراضي) (منطقي) بشكل عام، الهدف من هذه المعلمات هو السماح بتمكين أو تعطيل الميزات المختلفة التي يوفرها برنامج التشغيل، خاصة في الحالات التي تظهر فيها ميزة معينة تسبب مشاكل في جهازك. سيتم دائمًا تمكين توفر سمات منصة "الإعدادات" المتنوعة ( usb_charge
و start_on_lid_open
وما إلى ذلك) إذا بدا أنها مدعومة، ولا يمكن تعطيلها في الوقت الحالي.
ملاحظة: يرجى إثارة مشكلة إذا وجدت أنك بحاجة إلى تعطيل ميزة معينة لتجنب المشكلة التي تسببها في جهازك!
قم بتجميع الوحدة خارج الشجرة ولكن مقابل وحدات النواة المحملة حاليًا:
make -C /lib/modules/ ` uname -r ` /build M= $PWD
قم بتثبيت هذه الوحدة في وحدات النواة المحملة حاليًا:
sudo make -C /lib/modules/ ` uname -r ` /build M= $PWD modules_install
sudo depmod
ملاحظة: إذا كنت ترغب في تمكين رسائل التصحيح، فيمكنك إضافة
samsung_galaxybook.dyndbg=+p
أو ما يشبه معلمات التمهيد الخاصة بك.
قم بتحميل الوحدة (بما في ذلك تمكين رسائل تصحيح الأخطاء):
sudo modprobe samsung-galaxybook dyndbg=+p
تفريغ الوحدة:
sudo rmmod samsung-galaxybook
إلغاء تثبيت الوحدة:
sudo rm /lib/modules/ ` uname -r ` /updates/samsung-galaxybook.ko *
يمكن تثبيت هذه الوحدة باستخدام dkms وتوفر التثبيت التلقائي لكل نواة جديدة.
إضافة وحدة نمطية إلى شجرة dkms:
sudo dkms add /path/to/module/directory/samsung-galaxybook-extras
وحدة البناء:
sudo dkms build samsung-galaxybook/extras
تثبيت الوحدة:
sudo dkms install samsung-galaxybook/extras
وحدة إلغاء التثبيت:
sudo dkms uninstall samsung-galaxybook/extras
إذا كنت تريد تسجيل برنامج التشغيل لتجنب ظهور الرسالة samsung_galaxybook: module verification failed: signature and/or required key missing - tainting kernel
، فستحتاج إلى التوقيع على الوحدة باتباع أي عملية نموذجية لتوزيعك. بالنسبة للتوزيعات المبنية على دبيان (بما في ذلك Ubunutu)، يمكنك تثبيت حزمة linux-source
للنواة الحالية لديك واستخدام المفاتيح والبرامج النصية المضمنة لتوقيع الوحدة كما يلي:
sudo rmmod samsung-galaxybook
/usr/src/ ` uname -r ` /debian/scripts/sign-module sha512 /usr/src/ ` uname -r ` /debian/certs/signing_key.pem /usr/src/ ` uname -r ` /debian/certs/signing_key.x509 samsung-galaxybook.ko
sudo cp samsung-galaxybook.ko /lib/modules/ ` uname -r ` /updates/samsung-galaxybook.ko
sudo modprobe samsung-galaxybook dyndbg=+p
تتوفر رسائل أكثر تفصيلاً إذا قمت بتمكين طباعة رسائل تصحيح الأخطاء. يمكن القيام بذلك باستخدام التصحيح الديناميكي بشرط تمكين CONFIG_DYNAMIC_DEBUG
للنواة الحالية. يتوفر المزيد من المعلومات حول كيفية استخدام هذه الميزة في وثائق Kernel: التصحيح الديناميكي
فيما يلي بعض الأمثلة:
# enable printing all messages from the module when loading it
sudo modprobe samsung-galaxybook dyndbg=+p
# enable printing all messages from the module after it has been loaded
echo " module samsung_galaxybook +p " | sudo tee /sys/kernel/debug/dynamic_debug/control
يمكنك أيضًا إضافة المعلمة samsung_galaxyboo.dyndbg
بأي قيمة مطلوبة (على سبيل المثال +p
) إلى معلمات سطر أوامر التمهيد أو إلى ملف تكوين modprobe.d
إذا كنت ترغب في تمكينه تلقائيًا.
يمكن استخدام معلمات الوحدة لتمكين أو تعطيل معظم الميزات. على سبيل المثال، سيؤدي ما يلي إلى إعادة تحميل الوحدة باستخدام إشارات الإعدادات الأساسية فقط ( usb_charge
و start_on_lid_open
وما إلى ذلك) وفئة kbd_backlight LED، وسيتم تعطيل جميع الميزات الأخرى:
sudo rmmod samsung-galaxybook
sudo modprobe samsung-galaxybook dyndbg=+p kbd_backlight=on battery_threshold=off performance_mode=off allow_recording=off fan_speed=off i8042_filter=off
لاحظ أنه يمكن أيضًا إضافة هذه العناصر إلى معلمات التمهيد (على سبيل المثال، samsung_galaxybook.fan_speed=off
).
إحدى الملاحظات العامة التي قمت بها هي أن هناك في الواقع الكثير من الأخطاء في البرامج الثابتة الخاصة بشركة Samsung لهذه الأجهزة، على سبيل المثال:
سيكون أمرًا رائعًا لو تمكنا بالفعل من الحصول على بعض المساعدة من سامسونج بخصوص هذا الأمر!
قررت شركة Samsung استخدام جهاز لوحة المفاتيح الرئيسي لإرسال معظم أحداث مفتاح التشغيل السريع أيضًا. إذا كان برنامج التشغيل يرغب في التقاط مفاتيح التشغيل السريع هذه والتعامل معها، فسيتعين علينا القيام بشيء مثل استخدام مرشح i8402 "لالتقاط" الأحداث الرئيسية.
لقد وجدت أيضًا أن بعض أحداث مفتاح التشغيل السريع بها تعارضات، لذا فهي منطقة صعبة بعض الشيء.
سيتنقل مفتاح التشغيل السريع للإضاءة الخلفية للوحة المفاتيح عبر جميع مستويات سطوع الإضاءة الخلفية المتاحة بطريقة دائرية، ويبدأ مرة أخرى عند 0 عند الوصول إلى الحد الأقصى (أي 0، 1، 2، 3، 0، 1، ...).
سيتم تشغيل الإجراء عند تشغيل مفتاح التشغيل السريع حيث يبدو أن الحدث الذي تم الإبلاغ عنه بواسطة مفتاح التشغيل السريع هو نفس الحدث الخاص بتقدم شحن البطارية (وبالتالي تصبح الأمور مجنونة بعض الشيء عندما تبدأ الشحن!).
يجب أن يؤدي مفتاح التشغيل السريع أيضًا إلى تشغيل حدث تغيير الأجهزة لمؤشر LED، والذي يعرض في GNOME (وغيره على الأرجح) تلقائيًا نافذة منبثقة لطيفة على OSD مع عرض مستوى الإضاءة الخلفية الصحيح.
سيقوم مفتاح التشغيل السريع الخاص بحظر التسجيل بتبديل ميزة allow_recording
، التي تمنع الوصول إلى الكاميرا والميكروفون المدمجين.
سيتنقل مفتاح التشغيل السريع لوضع الأداء أيضًا عبر كافة ملفات تعريف النظام الأساسي المتاحة بطريقة دائرية (منخفضة الطاقة، هادئة، متوازنة، أداء، منخفضة الطاقة، هادئة، ...).
لا توجد حاليًا نافذة OSD منبثقة ولكن يمكن التقاط الحدث من جهاز الإدخال "Samsung Galaxy Book extra Buttons" إذا رغبت في ذلك.
يوجد جهاز إدخال جديد تم إنشاؤه "أزرار Samsung Galaxy Book الإضافية" والذي سيرسل أحداث إدخال لبعض الإشعارات من جهاز ACPI:
SAM0428
فقط)SAM0428
فقط) تم إنشاء فئة LED جديدة تسمى samsung-galaxybook::kbd_backlight
والتي يمكن التحكم فيها عبر sysfs
في /sys/class/leds/samsung-galaxybook::kbd_backlight/brightness
(القيم من 0 إلى 3) أو عن طريق العديد من الأدوات المساعدة القياسية مثل brightnessctl
light
وما إلى ذلك.
ويبدو أيضًا أنه يتم التقاطه تلقائيًا في GNOME 45.x في اللوحة، حيث يمكنك النقر فوق السهم الموجود بجوار Keyboard
وضبط شريط التمرير.
لاحظ أن الإعداد "إيقاف تشغيل الإضاءة الخلفية للوحة المفاتيح تلقائيًا بعد X ثانية" في Windows يتم التحكم فيه فعليًا بواسطة خدمة تطبيقات Samsung وليس بواسطة برنامج تشغيل الجهاز نفسه؛ هناك ميزة مشابهة في جنوم (ومرة أخرى، من المحتمل أخرى) حيث يتم التبديل إلى المستوى الأدنى بعد فترة خمول معينة (على سبيل المثال، من 3 إلى 1 عندما تكون خاملاً، ثم العودة إلى 3 عند الاستئناف)، ولكن بغض النظر عن هذا من المحتمل أن يتم التحكم في الميزة في مساحة المستخدم بطريقة ما وليس بواسطة برنامج تشغيل kernel.
لاحظ أيضًا أن معظم هذه الأجهزة تحتوي على مستشعر للإضاءة المحيطة والذي يؤثر أيضًا على الإضاءة الخلفية للوحة المفاتيح. لا يمكن التحكم في هذا السلوك في Windows ولم أجد حتى الآن أي شيء في ACPI يبدو أنه قادر على تعطيل هذه الميزة. ما يعنيه هذا هو أنه في بعض الأحيان قد تعتقد أن الإضاءة الخلفية للوحة المفاتيح يتم إيقاف تشغيلها بشكل عشوائي أو توقفت عن العمل، ولكن الحقيقة هي أنها تنطفئ بسبب مستشعر الإضاءة المحيطة هذا. إحدى الطرق لاختبار حدوث ذلك (للتأكد من أن مستشعر الإضاءة المحيطة هو في الواقع هو الذي تسبب في إيقاف تشغيل الإضاءة الخلفية للوحة المفاتيح) هو تغطية المستشعر بطريقة ما (بإصبعك، على سبيل المثال)، ومعرفة ما إذا كان الأضواء تعود مرة أخرى.
سيضيف برنامج تشغيل النظام الأساسي هذا إعداد عتبة نهاية التحكم في شحن البطارية، ولكن ليس لديه إمكانية الوصول لتعيين عتبة البداية. يُطلق على هذه الميزة عادةً اسم "موفر البطارية" من خلال تطبيقات Samsung المختلفة في نظام التشغيل Windows، ولكن في Linux، سنقوم بتنفيذ السمات القياسية المضافة إلى جهاز البطارية والتي يتعرف عليها UPower.
إذا كان المستخدم يرغب في الحفاظ على إمكانية التشغيل البيني مع Windows، فيجب عليه تعيين القيمة إلى 80 لتمثيل "on"، أو 0 لتمثيل "off"، حيث أن هذه هي القيم التي تتعرف عليها تطبيقات وخدمات Samsung المختلفة المستندة إلى Windows على أنها " تشغيل" أو "إيقاف". وبخلاف ذلك، سيقبل الجهاز أي قيمة بين 0 (إيقاف) و99 كنسبة مئوية تريد أن تتوقف البطارية عن الشحن عندها. إذا حاولت تعيين قيمة 100، فسيقبل برنامج التشغيل أيضًا هذا الإدخال، ولكن فقط قم بتعيين قيمة السمة على 0 (أي يتم تفسير 100% على أنها "إيقاف تشغيل موفر البطارية").
تم إنشاء سمة جهاز جديدة على /sys/class/power_supply/BAT1/charge_control_end_threshold
والتي يمكن القراءة منها أو الكتابة إليها.
# read current value (percentage the battery will stop charging)
cat /sys/class/power_supply/BAT1/charge_control_end_threshold
# turn on and set to 80%
echo 80 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold
# turn off charge control threshold so that charging will not be stopped before 100%
echo 0 | sudo tee /sys/class/power_supply/BAT1/charge_control_end_threshold
ملحوظة: لقد لاحظت أنه إذا كنت متصلاً حاليًا بينما تكون البطارية موجودة بالفعل عند مستوى
charge_control_end_threshold
المطلوب، فقم بإيقاف تشغيل هذه الميزة (أي أنك ترغب في الشحن بالكامل إلى 100% لذا قمت بتعيين القيمة على 0)، لا يبدو الشحن للبدء تلقائيا. قد يكون من الضروري فصل كابل الشحن وإعادة توصيله في هذه الحالة. يبدو أن برنامج تشغيل Windows يقوم ببعض الخدع مع جهاز بطارية ACPI الذي لم أقم بفرزه تمامًا بعد؛ أفترض أن هذه هي الطريقة التي جعلوها تعمل بسلاسة أكبر في Windows؟
يوجد أيضًا حدث إدخال يتم إرساله إلى لوحة المفاتيح القياسية وجهاز ACPI والذي يتم إنشاؤه عند تمكين التحكم في الشحن ووصول الشحن إلى مستوى charge_control_end_threshold
المطلوب؛ تم تعيين الحدث إلى حدث BATTERY
بحيث يمكن عرض الإشعارات (انظر أدناه في قسم إعادة تعيين لوحة المفاتيح للحصول على معلومات إضافية حول هذا).
لتشغيل أو إيقاف تشغيل إعداد "البدء عند فتح الغطاء" (سيتم تشغيل الكمبيوتر المحمول تلقائيًا عند فتح الغطاء)، توجد سمة جهاز جديدة تم إنشاؤها على /sys/devices/platform/samsung-galaxybook/start_on_lid_open
والتي يمكن قراءتها من أو مكتوبة إلى. القيمة 0 تعني "إيقاف" بينما القيمة 1 تعني "تشغيل".
# read current value (0 for disabled, 1 for enabled)
cat /sys/devices/platform/samsung-galaxybook/start_on_lid_open
# turn on (supports values such as: 1, on, true, yes, etc)
echo true | sudo tee /sys/devices/platform/samsung-galaxybook/start_on_lid_open
# turn off (supports values such as: 0, off, false, no, etc)
echo 0 | sudo tee /sys/devices/platform/samsung-galaxybook/start_on_lid_open
لتشغيل أو إيقاف تشغيل وضع "USB Charge" (يسمح لمنافذ USB بتوفير الطاقة حتى عند إيقاف تشغيل الكمبيوتر المحمول)، توجد سمة جهاز جديدة تم إنشاؤها على /sys/devices/platform/samsung-galaxybook/usb_charge
والتي يمكن القراءة من أو الكتابة إلى. القيمة 0 تعني "إيقاف" بينما القيمة 1 تعني "تشغيل".
# read current value (0 for disabled, 1 for enabled)
cat /sys/devices/platform/samsung-galaxybook/usb_charge
# turn on (supports values such as: 1, on, true, yes, etc)
echo true | sudo tee /sys/devices/platform/samsung-galaxybook/usb_charge
# turn off (supports values such as: 0, off, false, no, etc)
echo 0 | sudo tee /sys/devices/platform/samsung-galaxybook/usb_charge
ملاحظاتي الخاصة حول كيفية عمل هذه الميزة (والتي ليس لها علاقة ببرنامج التشغيل نفسه، في الواقع):
لتشغيل أو إيقاف تشغيل إعداد "السماح بالتسجيل" (يسمح باستخدام الكاميرا والميكروفون المدمجين أو يمنعهما)، توجد سمة جهاز جديدة تم إنشاؤها على /sys/devices/platform/samsung-galaxybook/allow_recording
والتي يمكن قراءتها من أو مكتوبة إلى. القيمة 0 تعني "إيقاف" بينما القيمة 1 تعني "تشغيل".
يطلق دليل مستخدم Samsung على هذا الإعداد "وضع حظر التسجيل"، ولكن نظرًا لأن القيمة المطلوبة هي 1 لـ "غير محظور" و0 لـ "محظور" (أي أن قيمة 1 مقابل 0 تبدو "متخلفة" مقارنة بالاسم)، فإنه شعرت وكأنها تسمية خاطئة لهذا السائق. يبدو من المنطقي أكثر أن 1 يعني "مسموح به" و0 يعني "غير مسموح به"؛ بهذه الطريقة، نأمل أن يكون أكثر وضوحًا لمستخدم برنامج التشغيل هذا ما سيحدث بالفعل عند تغيير هذه القيمة.
# read current value (0 for disabled, 1 for enabled)
cat /sys/devices/platform/samsung-galaxybook/allow_recording
# turn on (supports values such as: 1, on, true, yes, etc)
echo true | sudo tee /sys/devices/platform/samsung-galaxybook/allow_recording
# turn off (supports values such as: 0, off, false, no, etc)
echo 0 | sudo tee /sys/devices/platform/samsung-galaxybook/allow_recording
تحتوي الأجهزة المختلفة على عدد مختلف من المراوح، وطرق مختلفة لتتمكن من قراءة حالتها بنجاح. يبدو أن Samsung قد طبقت طريقة جهاز المروحة القياسية ACPI _FST
لمعظم التطبيقات المتنوعة، ولكن ليس الطرق الاختيارية الأخرى في مواصفات ACPI التي قد تتسبب في إضافة النواة تلقائيًا للسمة fan_speed_rpm
. علاوة على ذلك، يبدو أن هناك بعض الأخطاء في البرامج الثابتة التي غالبًا ما تؤدي إلى استثناء عند محاولة تنفيذ طريقة ACPI هذه. يظهر هذا السلوك أيضًا في نظام التشغيل Windows (حيث يتم طرح استثناء ACPI عند محاولة التحقق من سرعة المروحة)، ولم أتمكن من رؤية سرعات المروحة باستخدام تطبيقات مراقبة الأجهزة المختلفة أثناء استخدام Windows مع هذا الجهاز.
يحاول برنامج تشغيل النظام الأساسي هذا حل جميع مراوح PNP المتوفرة في ACPI وإضافة دعم لقراءة سرعتها باستخدام منطق القرار التالي:
_FST
موجودة ويبدو أنها تعمل (ترجع قيمة سرعة أكبر من 0)؟ إذا كانت الإجابة بنعم، أضف السمة fan_speed_rpm
إليها وكقناة إدخال للمروحة إلى جهاز hwmon.FANS
(مستوى سرعة المروحة) على وحدة التحكم المضمنة، ويوجد جدول FANT
(جدول مستوى سرعة المروحة) على المروحة؟ إذا كان الأمر كذلك، أضف fan_speed_rpm
إلى جهاز المروحة هذا، بالإضافة إلى قناة إدخال المروحة إلى جهاز hwmon، وقم بإنشاء قائمة بسرعات المروحة المخصصة بناءً على المنطق أدناه (المشتق من قراءة DSDT ومحاولة تفسير الغرض من كيفية يبدو أن _FST
الأصلي يريد العمل). يمكن مراقبة سرعة المروحة باستخدام مستشعرات hwmon أو من خلال قراءة السمة fan_speed_rpm
sysfs.
# read current fan speed rpm from sysfs attribute
cat /sys/bus/acpi/devices/PNP0C0B : 00/fan_speed_rpm
# read current fan speed rpm from hwmon device
sensors
بالنسبة للأجهزة التي لا تعمل فيها طريقة _FST
بشكل صحيح، يتم استخدام المنطق أدناه لاشتقاق السرعات المحتملة لكل مستوى متاح يتم الإبلاغ عنه بواسطة حقل FANS
.
FANT
("جدول المروحة"؟) والتي يبدو أنها نوع من قائمة سرعات RPM المحتملة التي يمكن للمروحة العمل بها لكل "مستوى" مختلف (من 0 إلى 5).FANS
("سرعة المروحة"؟) والذي يبدو أنه يعطي "المستوى" الحالي الذي تعمل به المروحة. لقد افترضت أن القيم من FANT
هي أعداد صحيحة تمثل قيم RPM الفعلية (تبدو معقولة، على أي حال)، ولكن لا يمكن التأكد بنسبة مائة بالمائة من صحة هذا الافتراض. سيكون من المثير للاهتمام الحصول على تأكيد من سامسونج أو إذا كان لدى شخص ما طريقة لقياس السرعة الفعلية للمروحة.
يمكن أن تكون المروحة متوقفة تمامًا (0) أو أحد المستويات التي تمثلها السرعات في FANT
. يقرأ برنامج التشغيل هذا القيم من FANT
بدلاً من ترميز المستويات بشكل ثابت مع افتراض أنها قد تكون قيمًا مختلفة وعددًا مختلفًا من المستويات لأجهزة مختلفة. كمرجع، القيم التي أراها مع جهاز Galaxy Book2 Pro هي:
علاوة على ذلك، في طريقة _FST
الخاصة بشركة Samsung، يبدو أنها تضيف 0x0a
(10) إلى كل قيمة قبل محاولة الإبلاغ عنها، ويجب أن يكون لهذا المستوى 3 و4 نفس القيمة، بينما يجب أن يكون المستوى 5 هو القيمة الرابعة من FANT
. ومع ذلك، تشير ملاحظة الحياة الواقعية إلى أن المستوى 3 و4 مختلفان في الواقع، وأن المستوى 5 يبدو أعلى بكثير من المستوى 4. ونتيجة لهذا، "سيخمن" هذا السائق أن المستويين 3 و4 هما في الواقع كما هما. مدرج في FANT
، وأن المستوى الأخير ربما يكون أسرع بمقدار 1000 دورة في الدقيقة من المستوى 4 (ما لم يتمكن أي شخص من العثور على شيء أفضل من هذا!).
يتوفر اختبار SSDT في الملف gb_test_fans_ssdt.dsl والذي يتضمن مجموعة من أجهزة مراوح PNP ACPI "المزيفة" التي يمكن استخدامها لاختبار كيفية عمل برنامج التشغيل مع سيناريوهات مختلفة. يمكن إنشاء هذا وتحميله ديناميكيًا ولكنك ستحتاج أيضًا إلى إزالة وحدة برنامج تشغيل النظام الأساسي وإعادة تحميلها من أجل اختبار كيفية التعامل معها.
# create fake device table
sudo modprobe acpi_configfs
sudo mkdir /sys/kernel/config/acpi/table/gb_test_fans_ssdt
# build and load the aml
iasl gb_test_fans_ssdt.dsl
cat gb_test_fans_ssdt.aml | sudo tee /sys/kernel/config/acpi/table/gb_test_fans_ssdt/aml
# remove and reload the module (via insmod or modprobe)
sudo rmmod samsung-galaxybook
sudo insmod samsung-galaxybook.ko dyndbg=+p
ملاحظة: ستحتاج إلى إعادة التشغيل لإزالة هذه الأجهزة المزيفة.
لتعديل "وضع الأداء"، يقوم برنامج التشغيل بتطبيق واجهة platform_profile
. يتم تعيين "أوضاع الأداء" الخاصة بشركة Samsung لملف تعريف النظام الأساسي الخاص بها ديناميكيًا استنادًا إلى التعيين في رمز برنامج التشغيل الذي يقرأ الأوضاع التي تم الإبلاغ عنها على أنها مدعومة من قبل ACPI. يتم إعطاء الأفضلية لمحاولة تعيين ملفات تعريف low-power
balanced
performance
، حيث يبدو أن هذه هي ملفات التعريف الأكثر شيوعًا المستخدمة (وحتى في بعض الأحيان مطلوبة) بواسطة أدوات مساحة المستخدم المختلفة.
ستتم طباعة نتيجة التعيين في سجل Kernel عند تحميل الوحدة. يمكن بعد ذلك استرداد ملفات التعريف المدعومة من /sys/firmware/acpi/platform_profile_choices
، بينما يمكن استخدام /sys/firmware/acpi/platform_profile
لقراءة ملف التعريف المطلوب أو كتابته.
أمثلة:
# Get supported platform profiles
cat /sys/firmware/acpi/platform_profile_choices
# set platform profile to low-power
echo low-power | sudo tee /sys/firmware/acpi/platform_profile
# get current platform profile
cat /sys/firmware/acpi/platform_profile
ملاحظة: لمطابقة المنطق الموجود في برنامج تشغيل Windows، وكذلك تجنب التسبب في مشكلات مع الميزات الأخرى، سيقوم برنامج التشغيل حاليًا دائمًا بتعيين وضع الأداء على "الأمثل" في كل مرة أثناء التهيئة (على سبيل المثال، عند بدء التشغيل).
من المفترض أن يكون من الممكن ضبط وضع أداء بدء التشغيل المطلوب أو حفظ الوضع واستعادته عبر عمليات إعادة التشغيل، ويمكنك إما استخدام برنامج نصي لبدء التشغيل أو تثبيت TLP أو power-profiles-daemon أو ما شابه.
كان اختبار ذلك صعبًا بعض الشيء، لكنني حاولت معرفة ما إذا كانت هذه الأوضاع المختلفة قد أحدثت تغييرًا قابلاً للقياس بالفعل من خلال تعيين كل وضع مختلف ثم إجراء اختبار ضغط سريع باستخدام ما يلي:
sudo stress-ng --cpu 0 --cpu-load 100 --metrics-brief --perf -t 20
لاحظ أنه يبدو أن الأمر يستغرق بضع ثوانٍ على الأقل قبل أن يبدأ الإعداد بالفعل.
في النهاية ما وجدته هو أنه يمكنني بالتأكيد معرفة الفرق في النتيجة عند استخدام الوضع "الصامت" (0)، لأن العدد الناتج من العمليات المكتملة في اختبار التحمل كان أقل بشكل ملحوظ عند استخدام الوضع "الصامت" (تقريبًا نصف).
بشكل شخصي، أشعر أنني شعرت بأن حجم المروحة كان أقل قليلاً في الوضع "الصامت" مقارنةً بالوضعين الآخرين، لكنني لم ألاحظ حقًا أي اختلاف كبير في عدد العمليات المكتملة من اختبار التحمل. بدا الأداء الأمثل والعالي متماثلين تقريبًا بالنسبة لي. لقد لاحظت أيضًا أنه قد يكون هناك بعض الاختناق عندما تصل درجة حرارة النوى إلى ما يقرب من 100 درجة مئوية، لذلك ربما يكون هذا جزءًا من المشكلة لماذا لا أستطيع معرفة الفرق (لست متأكدًا مما هو آمن لضبطه). قد يكون هذا أيضًا مجرد آلية اختبار معيبة أيضًا!
الملف المقدم 61-keyboard-samsung-galaxybook.hwdb هو نسخة من القسم ذي الصلة بهذه الأجهزة من أحدث 60-keyboard.hwdb والذي يمكن استخدامه مع الإصدارات الأقدم من systemd. راجع systemd/issues/34646 وsystemd/pull/34648 للحصول على معلومات إضافية.
ملاحظة: يأتي مفتاح "وضع الأداء" (Fn+F11) كإشعار ACPI ويتم التعامل معه بواسطة برنامج تشغيل النظام الأساسي
samsung-galaxybook
.
يمكنك تثبيت ملف التعيين هذا كما يلي:
sudo cp 61-keyboard-samsung-galaxybook.hwdb /etc/udev/hwdb.d/
sudo systemd-hwdb update
sudo udevadm trigger