Seite 1 von 1

ACPI Werte lesen und schreiben...

Verfasst: Freitag 19. Februar 2010, 16:09
von jens
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?

Verfasst: Freitag 19. Februar 2010, 16:56
von lunar
Naja, das ist ein Kernelmodul … so ohne weiteres kann man das nicht mit Python aus dem Userspace ersetzen.

Verfasst: Freitag 19. Februar 2010, 17:19
von jens
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?

Verfasst: Samstag 20. Februar 2010, 09:49
von 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.

Verfasst: Montag 22. Februar 2010, 15:25
von mkesper
Ist eher off-topic, aber meist wird sowas mit einem BIOS-Update bzw. einem neuen Kernel möglich.