Soru Bir dizüstü bilgisayarda CPU fanına programlı olarak erişebilir misiniz? (Windows)


C / C ++ 'dan "fan başlatmak", "hızı düşür" veya benzeri şeyler yapmak için Windows standart bir yolu var mı?

ACPI olabileceğine dair bir şüphem var ama ben bir fani ölümcülüm ve bu tür belgeleri okuyamıyorum.

Düzenle: ör. Windows 7, "pasif soğutma" gibi güç planı seçeneklerinizi (yalnızca işler ısınırken) vs. "etkin soğutma" (CPU'yu proaktif olarak serinletir?) Gibi seçeneklerden seçmenizi sağlar. İşletim sistemi, fanı genel olarak denetlemek için bir yol var gibi görünüyor.


18
2018-01-27 21:49


Menşei




Cevaplar:


Şu anda, diğer şeylerin yanı sıra bilgisayar hayranlarını kontrol eden bir proje üzerinde çalışıyorum. Temel olarak, fanlar bilgisayarınızın süperIO çipi tarafından kontrol edilir. Çipin port haritalı IO'yu kullanarak doğrudan erişir ve buradan mantıksal fan cihazına ulaşabiliriz. Bağlantı noktası eşlemeli IO kullanmak, kodun çekirdek modunda çalışmasını gerektirir, ancak Windows genel bağlantı noktası IO için herhangi bir sürücü sağlamaz (iyi bir nedene sahiptir, çünkü çok güçlü bir araçtır), bu yüzden kendi sürücümüzü yazdık ve bunu kullandık.

Bu rotayı aşmak isterseniz, temel olarak iki alanda bilgiye gereksinim duyarsınız: sürücü geliştirme ve superIO çip bilgilerine erişim ve yorumlama. Projeye başladığımızda, bu alanlardan herhangi birinde bir şey bilmiyorduk, bu yüzden tarama, okuma ve nihayet yaparak öğreniyor. Bilgiyi kazanmak için, özellikle şu linklere bakılarak yardımcı olduk:

  1. WDK, Windows Sürücü Seti. Windows için yazdığınız herhangi bir sürücüyü derlemek için buna ihtiyacınız var. Portio adı verilen genel port eşlemeli IO için bir sürücü de dahil olmak üzere, örneğin sürücülerin bir çok kaynağı geliyor.
  2. WinIO C'deki bir sürücü için kaynak kodu, C sürücüsünde programlı olarak yükleyen ve yükleyen bir dll ve bir GUI için bazı C # kodları, dll'yi yükler ve bağlantı noktalarını okur / yazar. Sürücü portiodakine çok benziyor.
  3. lm-sensörleri diğer şeylerin yanı sıra superIO çipinizi de algılayan bir linux projesidir. / prog / detect / algılayıcı-algılaması, algılamayı yapan perl programıdır ve bir superIO yongası ile nasıl arabirim kurulacağını görmek için bir süre koddan geçtik.
  4. Lm-sensörler kodundan geçerken, benzeri araçlara sahip olmak çok güzeldi. RapidDriver ve RW-herşeyçünkü bir algılayıcı algılamayı simüle etmemize izin verdiler. İkincisi, daha güçlüdür ve IO alanını görselleştirmede çok yardımcı olurken, birincisi, algılayıcı algılayıcısındakilerle daha iyi eşleştiren bazı işlemlere daha kolay erişim sağlar (bağlantıya okuma / yazma baytı)
  5. Son olarak, süperIO yonganızın veri sayfasını bulmanız gerekir. Gördüğüm örneklerden, her çipin çevre denetleyicileri benzer işlevler sağlıyor (r / w fan hızı, okuma sıcaklığı, çip voltajı okuyor), ancak bu işlevselliğe ulaşmak için yazmanız gereken kayıtlara göre değişiyor. . Bu yer, tüm veri sayfalarına sahipti, şu ana kadar ihtiyacımız vardı.

21
2018-06-02 22:44



ACPI burada nerede devreye giriyor? Teorik olarak, DSDT'yi yatırabilir, ASL Derleyicisiyle derleme yapabilir, yamalı tabloyu yükleyebilir ve daha sonra fan hızı bu yamalı mantık tarafından kontrol edilebilir. Başka bir seçenek, bir geliştiricinin ACPI tarafından yönetilen nesneleri denetlemek için kod yazmasına izin veren bir eklenti modeline sahip nhc.exe'yi kullanmaktır. - Cheeso


Hayranları bir şeyin aşırı ısınmayacağı bir seviyeye düşürmek için gerçekten hızlı bir şey istiyorsanız, bunu yapmak için speedfan programı var. Bilgisayar açılışı sırasında hayranları otomatik olarak% 50'ye düşürmek için ilk sürümlerde nasıl yapılandırılacağını anlamak, ilk yaklaşımımın daha düşük hızda sahip olduğum tek superio yönetimli fanı başlatmak için sadece byte-patch yapmak olduğu kadar acı vericiydi. Yeni sürümler hala biraz zor ama yapılabilir - x ekseninin temp olması ve y fan hızı olması dışında ses ekolayzır gibi görünen bir grafik kaydırma sistemi var. Onları tek tek aşağı doğru sürüklersin. İstediğiniz fan için manuel kontrol nasıl elde edeceğinizi öğrendikten sonra, bu bir sonraki adımdır.

C # ile donanımı (fanlar gibi) izlemek için bir proje var: http://code.google.com/p/open-hardware-monitor/

Kapsamlı bir şekilde bakmadım, ama kaynak kodu ve WinRing0.sys atleast kullanımı, hangi fan denetleyicisine sahip olduğunuzu ve veri sayfasına sahip olduğunuzu biliyorsanız, yalnızca bunları almak yerine değerleri de ayarlayabilmeniz gerektiği izlenimini verir. . Speedfan'ın neye baktığına bakmak için hangi aracın uygun olduğunu (çekirdek hata ayıklayıcısının yanında) bilmiyorum, veri sayfalarına bakmak ve işleri denemek yerine hız kesmeyi ve taklit etmeyi tercih ederseniz.


3
2018-01-21 21:53





Evet, ACPI olurdu ve bilgi pencerelerimde kullanıcı alanından çok fazla kontrol / denetim sağlamadı. Bu yüzden, windows'larda neredeyse imkansız olan sürücülerle uğraşmaya başlamak zorunda kalacaksınız.

Bahsedilen, google ortaya koymaktadır Belirli bir donanım için bunun için birkaç açık kaynak pencere kütüphanesi var ... bu yüzden donanımınıza bağlı olarak bir şeyler bulabiliyorsunuz.


2
2018-01-27 21:52





ACPI, fan ayarlarını ayarlamanıza izin verebilir veya vermeyebilir. Bazı BIOS uygulamaları bu kontrole izin vermeyebilir - BIOS / CMOS ayarlarına bağlı olarak kontrolü zorlayabilirler. Biri için zor basılmış olabilir iyi BIOS kontrolünün (hatta özelleştirilmiş) yetersiz olduğu durumlarda kullanın. BIOS kontrolünün yetersiz olduğu durumlarla karşılaştım, ancak tüm olası anakart platformları için değil.


0
2018-01-27 22:47





WIndows Management Instrumentation kütüphanesi (WMI) bir Win32_Fan Sınıfı ve hatta SetSpeed ​​yöntemi. Ne yazık ki, doktorlar bunun uygulanmadığını söylüyor, bu yüzden çok yararlı olmadığını düşünüyorum. Ancak, güç durumunu ayarlayarak işleri kontrol edebilirsiniz.


0
2018-01-27 23:01