ไดรเวอร์แพลตฟอร์ม Linux พิเศษของ Samsung Galaxy Book series
สถานะปัจจุบัน:
จุดประสงค์คือการทำซ้ำใน Linux สิ่งที่ Samsung ทำใน Windows ด้วยสิ่งที่ฉันคิดว่าส่วนประกอบต่อไปนี้กำลังทำอยู่:
SCAI
ACPI เพื่อควบคุมการตั้งค่าเหล่านี้จำนวนมากSamsungSystemSupportEngine.exe
ซึ่งดูเหมือนว่าจะจัดการสิ่งต่าง ๆ มากมายในด้านพื้นที่ผู้ใช้ / แอปพลิเคชัน ได้แก่ : นี่เป็นไดรเวอร์แพลตฟอร์มเคอร์เนลใหม่และ (ปัจจุบัน) ที่ไม่อยู่ในแผนผังโดยสมบูรณ์ซึ่งมีจุดประสงค์เพื่อเลียนแบบสิ่งที่ไดรเวอร์อุปกรณ์ระบบ Windows ของ Samsung System Event Controller ดูเหมือนว่าจะทำ (กล่าวคือ สื่อสารกับอุปกรณ์ SCAI
ACPI เพื่อควบคุมคุณสมบัติพิเศษเหล่านี้ ). เมื่อมีการเพิ่มคุณสมบัติเพิ่มเติมและได้รับการทดสอบแล้ว ความตั้งใจของฉันคือลองส่งไดรเวอร์ที่จะเพิ่มลงในเคอร์เนล
ปัจจุบันมีการใช้งานคุณสมบัติต่อไปนี้:
fan_speed_rpm
พร้อมด้วยอุปกรณ์ 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
คุณจะต้องลงนามในโมดูลตามกระบวนการใดก็ตามที่เป็นปกติสำหรับการแจกจ่ายของคุณ สำหรับการกระจายแบบ Debian (รวมถึง 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
ของเคอร์เนลปัจจุบันของคุณเปิดใช้งานอยู่ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้คุณลักษณะนี้มีอยู่ในเอกสารประกอบเคอร์เนล: ดีบักแบบไดนามิก
นี่คือตัวอย่างบางส่วน:
# 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 เกี่ยวกับเรื่องนี้จริงๆ!
Samsung ได้ตัดสินใจใช้อุปกรณ์คีย์บอร์ดหลักเพื่อส่งเหตุการณ์ปุ่มลัดส่วนใหญ่ด้วย หากผู้ขับขี่ต้องการจับภาพและดำเนินการกับปุ่มลัดเหล่านี้ เราจะต้องทำบางอย่าง เช่น การใช้ตัวกรอง i8402 เพื่อ "จับ" เหตุการณ์สำคัญ
ฉันยังพบว่าเหตุการณ์ปุ่มลัดบางเหตุการณ์มีข้อขัดแย้ง ดังนั้นจึงค่อนข้างยุ่งยากเล็กน้อย
ฮอตคีย์ไฟแบ็คไลท์ของคีย์บอร์ดจะวนไปตามระดับความสว่างของแบ็คไลท์ที่มีอยู่ทั้งหมดในลักษณะวนเวียน โดยเริ่มต้นอีกครั้งที่ 0 เมื่อถึงค่าสูงสุด (เช่น 0, 1, 2, 3, 0, 1, ...)
การดำเนินการนี้จะถูกกระตุ้นเมื่อกดปุ่มลัด เนื่องจากเหตุการณ์ที่รายงานโดยการกดแป้นพิมพ์ดูเหมือนจะเป็นเหตุการณ์เดียวกันสำหรับความคืบหน้าในการชาร์จแบตเตอรี่ (และด้วยเหตุนี้ สิ่งต่างๆ จะดูเพี้ยนไปเล็กน้อยเมื่อคุณเริ่มชาร์จ!)
ปุ่มลัดควรทริกเกอร์เหตุการณ์การเปลี่ยนแปลงฮาร์ดแวร์สำหรับ LED ซึ่งใน GNOME (และมีแนวโน้มอื่น ๆ ) จะแสดงป๊อปอัป OSD ที่ดีโดยอัตโนมัติพร้อมแสดงระดับแบคไลท์ที่ถูกต้อง
ปุ่มลัดการบันทึกแบบบล็อกจะสลับคุณสมบัติ allow_recording
ซึ่งจะบล็อกการเข้าถึงกล้องและไมโครโฟนในตัว
ปุ่มลัดโหมดประสิทธิภาพจะวนไปตามโปรไฟล์แพลตฟอร์มที่มีอยู่ทั้งหมดในลักษณะวนซ้ำ (พลังงานต่ำ, เงียบ, สมดุล, ประสิทธิภาพ, พลังงานต่ำ, เงียบ, ...)
ขณะนี้ไม่มีป๊อปอัป OSD แต่สามารถบันทึกเหตุการณ์ได้จากอุปกรณ์อินพุต "ปุ่มพิเศษ Samsung Galaxy Book" หากต้องการ
มีอุปกรณ์อินพุตใหม่ที่สร้างขึ้น "ปุ่มพิเศษ 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 ไม่ใช่โดยไดรเวอร์อุปกรณ์เอง มีคุณลักษณะที่คล้ายกันใน GNOME (และอีกครั้ง อาจเป็นอย่างอื่น) โดยจะสลับไปที่ระดับต่ำสุดหลังจากช่วงว่างช่วงหนึ่ง (เช่น จาก 3 เป็น 1 เมื่อคุณไม่ได้ใช้งาน และกลับมาเป็น 3 เมื่อคุณกลับมาทำงานต่อ) แต่ไม่ว่าสิ่งนี้จะเป็นอย่างไร คุณสมบัติน่าจะได้รับการควบคุมในพื้นที่ผู้ใช้อย่างใดและไม่ใช่โดยไดรเวอร์เคอร์เนล
โปรดทราบว่าอุปกรณ์เหล่านี้ส่วนใหญ่มีเซ็นเซอร์วัดแสงโดยรอบ ซึ่งส่งผลต่อไฟแบ็คไลท์ของคีย์บอร์ดด้วย พฤติกรรมนี้ไม่สามารถควบคุมได้ใน Windows และฉันยังไม่พบสิ่งใดใน ACPI ที่ดูเหมือนว่าจะสามารถปิดการใช้งานคุณสมบัตินี้ได้ ความหมายก็คือ บางครั้งคุณอาจคิดว่าไฟแบ็คไลท์ของคีย์บอร์ดปิดแบบสุ่มหรือหยุดทำงาน แต่ความจริงก็คือไฟดับลงเนื่องจากเซ็นเซอร์วัดแสงโดยรอบนี้ วิธีหนึ่งในการทดสอบเมื่อสิ่งนี้เกิดขึ้น (เพื่อให้แน่ใจว่าเซ็นเซอร์วัดแสงโดยรอบจริงๆ ซึ่งทำให้ไฟแบ็คไลท์ของแป้นพิมพ์ปิด) คือเพียงปิดเซ็นเซอร์ด้วยวิธีใดวิธีหนึ่ง (เช่น ใช้นิ้วของคุณ) และดูว่า ไฟกลับมาเปิดอีกครั้ง
ไดรเวอร์แพลตฟอร์มนี้จะเพิ่มการตั้งค่าเกณฑ์สิ้นสุดการควบคุมการชาร์จแบตเตอรี่ แต่ไม่มีสิทธิ์ในการเข้าถึงเพื่อกำหนดเกณฑ์เริ่มต้น โดยทั่วไปคุณสมบัตินี้เรียกว่า "ประหยัดแบตเตอรี่" โดยแอปพลิเคชัน Samsung ต่างๆ ใน Windows แต่ใน Linux เราจะใช้คุณลักษณะมาตรฐานที่เพิ่มลงในอุปกรณ์แบตเตอรี่ที่ UPower รู้จัก
หากผู้ใช้ต้องการรักษาความสามารถในการทำงานร่วมกันกับ Windows ควรตั้งค่าเป็น 80 เพื่อแสดง "เปิด" หรือ 0 เพื่อแสดง "ปิด" เนื่องจากค่าเหล่านี้เป็นค่าที่แอปพลิเคชันและบริการต่างๆ ของ 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" (อนุญาตให้พอร์ต 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
ให้เป็นช่องอินพุตพัดลมให้กับอุปกรณ์ hwmonFANS
(ระดับความเร็วพัดลม) บนตัวควบคุมแบบฝัง และมีตาราง 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 จริง (ดูเหมือนว่าจะสมเหตุสมผลอยู่แล้ว) แต่ไม่สามารถมั่นใจได้ร้อยเปอร์เซ็นต์ว่าสมมติฐานนี้ถูกต้อง คงจะน่าสนใจหากได้รับการยืนยันจาก Samsung หรือถ้าใครมีวิธีวัดความเร็วจริงของพัดลมได้
พัดลมสามารถปิดสนิท (0) หรือระดับใดระดับหนึ่งที่แสดงด้วยความเร็วใน FANT
ไดรเวอร์นี้จะอ่านค่าจาก FANT
แทนที่จะฮาร์ดโค้ดระดับต่างๆ โดยสันนิษฐานว่าอาจเป็นค่าที่แตกต่างกันและจำนวนระดับที่แตกต่างกันสำหรับอุปกรณ์ที่แตกต่างกัน สำหรับการอ้างอิง ค่าที่ฉันเห็นใน Galaxy Book2 Pro ของฉันคือ:
ยิ่งไปกว่านั้น ในวิธี _FST
ของ Samsung ดูเหมือนว่าจะเพิ่ม 0x0a
(10) ให้กับแต่ละค่าก่อนที่จะพยายามรายงาน และระดับ 3 และ 4 นั้นควรมีค่าเท่ากัน ในขณะที่ระดับ 5 ควรเป็นค่าที่ 4 จาก FANT
อย่างไรก็ตาม การสังเกตในชีวิตจริงชี้ให้เห็นว่าแท้จริงแล้วระดับ 3 และ 4 นั้นแตกต่างกัน และระดับ 5 นั้นดูเหมือนจะดังกว่าระดับ 4 อย่างมาก ด้วยเหตุนี้ คนขับรถคนนี้จะ "เดา" ว่าระดับ 3 และ 4 นั้นเป็นจริงดังที่เป็นอยู่ ระบุไว้ใน FANT
และระดับสุดท้ายอาจจะเร็วกว่าระดับ 4 ถึง 1,000 RPM (เว้นแต่จะมีใครพบสิ่งที่ดีกว่านี้!)
มีการทดสอบ 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
เนื่องจากสิ่งเหล่านี้ดูเหมือนจะเป็นโปรไฟล์ทั่วไปที่ใช้ (และบางครั้งก็จำเป็นด้วยซ้ำ) โดยเครื่องมือพื้นที่ผู้ใช้ต่างๆ
ผลลัพธ์ของการแมปจะถูกพิมพ์ลงในบันทึกเคอร์เนลเมื่อโมดูลกำลังโหลด โปรไฟล์ที่รองรับสามารถดึงข้อมูลจาก /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) เนื่องจากจำนวนผลลัพธ์ของการดำเนินการที่เสร็จสมบูรณ์ในการทดสอบความเครียดนั้นลดลงอย่างมีนัยสำคัญเมื่อใช้โหมด "เงียบ" (เกือบ ครึ่ง).
โดยส่วนตัวแล้ว ฉันรู้สึกว่าระดับเสียงของพัดลมลดลงเล็กน้อยในโหมด "เงียบ" เมื่อเทียบกับอีกสองโหมด แต่ฉันไม่ได้สังเกตเห็นความแตกต่างที่สำคัญใดๆ ในจำนวนการทำงานที่เสร็จสมบูรณ์จากการทดสอบความเครียด ประสิทธิภาพสูงและปรับให้เหมาะสมดูเหมือนเกือบจะเหมือนกันสำหรับฉัน ฉันยังสังเกตเห็นด้วยว่าอาจมีการควบคุมปริมาณเกิดขึ้นเมื่อคอร์มีอุณหภูมิใกล้ 100C ดังนั้นนั่นอาจเป็นส่วนหนึ่งของปัญหาว่าทำไมฉันจึงไม่สามารถบอกความแตกต่างได้ (ไม่แน่ใจว่าจะปรับค่าใดได้อย่างปลอดภัย) นี่อาจเป็นเพียงกลไกการทดสอบที่มีข้อบกพร่องเช่นกัน!
ไฟล์ 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