ACPI Werte lesen und schreiben...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab ein kleines Problem. Bei meinem Asus A8J Notebook läuft der Lüfter unter Linux ständig und das nervt, siehe auch: http://forum.ubuntuusers.de/topic/lueft ... 8j-laptop/

Nun hab ich ein wenig gesucht. Das Problem ist wohl, das der Lüfter nicht direkt unterstützt wird. Aber ich hab das gefunden:
http://code.google.com/p/asusfan/
Es ist ein kleines Kernel Modul. Aber ich kann es nicht nutzten, weil es zu diesem Fehler kommt: "asus_fan: Unknown symbol __udivdi3"

In asus_fan.c habe ich das gefunden:

Code: Alles auswählen

static void set_fan_speed(int speed)
{
	struct acpi_object_list params;
	union acpi_object in_objs[2], in_obj;
	acpi_status status;

//Set temperature when manual control will be disabled
	params.count = 2;
	params.pointer = in_objs;
	in_objs[0].type = in_objs[1].type = ACPI_TYPE_INTEGER;
	in_objs[0].integer.value = zone[NUM_ZONES-1].tmp; //temp 
	in_objs[1].integer.value = 0;
	status = acpi_evaluate_object(NULL, "\\_TZ.WTML",
					&params, NULL);
	if (status != AE_OK)
		printk("_TZ.WTML error\n");

//Set fan speed	
	params.count = 1;
	params.pointer = &in_obj;
	in_obj.type = ACPI_TYPE_INTEGER;
	in_obj.integer.value = ((0x84 << 16)
				+ (speed << 8) + (0xc4));
	status = acpi_evaluate_object(NULL, "\\_SB.ATKD.ECRW",
					&params, NULL);
	if (status != AE_OK) printk("_SB.ATKD.ECRW error\n");
}
Nun Frage ich mich, ob ich nicht auch mit Python die Werte lesen und setzten kann?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Naja, das ist ein Kernelmodul … so ohne weiteres kann man das nicht mit Python aus dem Userspace ersetzen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, aber wird da nicht einfach eine Zahl an \\_SB.ATKD.ECRW gesendet?

Kann man nicht per Python an einer "ACPI Adresse" bzw. dem System Control Interrupt (SCI) Daten senden und lesen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Man kann ganz allgemein nicht einfach so aus dem Userspace direkte Hardwarezugriffe durchführen. Das ist nun mal dem Kernel vorbehalten. Und wenn der Kernel dafür keine API an den Userspace exportiert, kann man mit keiner Sprache solche Zugriffe durchführen.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ist eher off-topic, aber meist wird sowas mit einem BIOS-Update bzw. einem neuen Kernel möglich.
Antworten