Low power linux

2.498 Aufrufe

Veröffentlicht am

Server: Performance ist wichtiger als Energieverbrauch.
Low Power primär aus
Kostengründen
Desktop: Performance ist oft wichtiger als Low Power
Laptops: Low Power primär zur Verlängerung der
Batterielaufzeit
Mobile: Batterielaufzeit
Embedded: Oft nur wenig Energie vorhanden.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.498
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
894
Aktionen
Geteilt
0
Downloads
10
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Low power linux

  1. 1. Low-Power Linux Wolfram LuithardtHochschule für Technik und Architektur, Fribourg, Schweiz DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 1
  2. 2. Warum Low Power Linux?Server: Performance ist wichtiger als Energie- verbrauch. Low Power primär aus KostengründenDesktop: Performance ist oft wichtiger als Low PowerLaptops: Low Power primär zur Verlängerung der BatterielaufzeitMobile: BatterielaufzeitEmbedded: Oft nur wenig Energie vorhanden. DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 2
  3. 3. Embedded SystemsDIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 3
  4. 4. Warum Low-Power Systeme ? - Weniger Wärme - Weniger bewegliche Teile Low - Weniger Lärm Power System Lebensdauer und Wirkungs- grad der elektronischen Komponenten Weniger Kosten (Energie ist teuer!!)Low Power Systeme sind im wahrsten Sinne des Wortes: cool ! DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 4
  5. 5. Motivation Embedded System Roadmap 2002: ″Power is considered as the most important constraint in embedded systems″Energy-Harvesting:- Photovoltaik Leistungsabgaben- Thermoelektrik an ein System ca:- Vibrationsgeneratoren 100 uW – 10mW- Mikro-Luftgeneratoren Langfristiges Ziel: Ein Linuxrechner, der mit einer Energyharvesting- Versorgung gespeist wird. DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 5
  6. 6. Neue Low Power Komponenten- Display: bistabiles LCD: hält sein Bild auch im stromlosen Zustand- Ram: PASR (Partitial Array Self Refresh): dynamisches Ram, das nur teilweise refreshed wird. 15- Ram: NVRam (Nichtflüchtiges Ram): >10 Schreib-Löschzyklen- Energiespeicher: Supercaps DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 6
  7. 7. Leistung einzelner PC-Komponenten* Mainboard: 25 Watt* Gehäuselüfter: 5 Watt* Prozessorlüfter: 3 Watt* Speichermodul: 10 Watt* PCI Soundkarte/Netzwerkkarte/Modem: 5 Watt* Festplatte: 30 Watt* CD/DVD Laufwerk/Brenner: 30 Watt* Diskettenlaufwerk: 4 Watt* Tastatur/Maus/andere USB-Geräte: 3 Watt/Stück* Grafikkarte: ca. 50-100 Watt je nach Hersteller* Prozessor: Duron: 27Watt /600MHz - 80Watt /1,6 GHz Athlon XP: 60Watt /1500+ - 110Watt / 3200+ Intel P4: 50Watt / 1,6GHz - 100 Watt / 3,2 GHz DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 7
  8. 8. Vergleich verschiedener Linux- fähiger ProzessorfamilienIntel Pentium: 120 WattIntel Duo 2 Core (z.B. E8600): 65 WattIntel Atom: 2-6 WattTransmeta Crusoe: 1 WattARM: z.B. AT91SAM9260: 200 mWAtmel AVR32: 80mW. DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 8
  9. 9. Bekannte Energiespar-Methoden - Screen off-mode - Suspend to Ram - Suspend to disk (Hibernation mode) DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 9
  10. 10. Die grundlegende Gleichungen P gesamt =P statisch P dynamisch P statisch =∑ U⋅I LeakU: CorespannungIL e a k : Leckstrom 1 2 P dynamisch = ⋅⋅C⋅U ⋅f 2α: AktivitätsfaktorC: Parasitäre Kapazität (Transistoren und Leitungen)U: Corespannungf: Frequenz DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 10
  11. 11. Technologische EntwicklungenVon Generation zu Generation:- Parasitäre Kapazität/Transistor: ↓- Corespannungen: ↓- Taktfrequenz: ↑- Anzahl-Transistoren pro Chip: ↑ Dynamische Leistung: =/↑ Statische Leistung: ↑ DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 11
  12. 12. Technologische Entwicklungen zur Reduktion statischer Verluste: P statisch =∑ U⋅I Leak- Neue Dielektrika- DVTCMOS (Dual Voltage Threshold-CMOS): Man benützt je nach Aufgabe 2 verschiedene Arten von Transistoren (schnell mit hohem IL e a k oder langsam mit niedrigem IL e a k- STI (Sleep Transistor Insertion): Transistoren, die für eine gewisse Funktionalität nicht benötigt werden, werden stromlos geschaltet. DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 12
  13. 13. Technologische Entwicklungen zur Reduktion dynamischer Verluste: 1 2 P dynamisch = ⋅⋅C⋅U ⋅f 2- ULV-Prozessoren- Clock-Gating: Optimierung der Anzahl der Transistoren, die bei einer gewissen Operation getaktet werden müssen.- Cross Talk Avoidance: z. B. durch Vertau- schen von Leitungen etc. DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 13
  14. 14. Sparmöglichkeiten - Abschaltung von nicht benötigter Peripherie Verbrauch ARM Cortex M3- STM32F103x8- Reduktion der Taktfrequenz 40 Run, Peri on 35 Run, Peri off Sleep, Peri on 30- Reduktion der Stromverbaruch [mA] 25 Sleep, Peri off Stop Versorgungs- 20 spannung 15 10 5- Kombination 0 von Allem !!!! 0 10 20 30 40 50 Taktfrequenz [MHz] 60 70 80 DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 14
  15. 15. The real world Verbrauch UNC90, AT91RM9200DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 15
  16. 16. Abhängigkeit von Spannung und Frequenz XScale, Quelle Intel DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 16
  17. 17. X86 Sleep-modes P-States: Verringerung der Frequenz und der Corespannung C-States:Beispiel: Intel® Core™2 DuoC-State max LeistungC0 Running Mode 35.0 WattC1 Idle Mode 13.5 WattC2 Ohne Datenbus 12.9 WattC3 Deaktivierung PLL 7.7 WattC4 Enhanced Deeper Sleep 1.2 Watt http://www.lesswatts.org/documentation/silicon-power-mgmnt/ DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 17
  18. 18. Warum verschiedene Sleep-Modes?Leistungsaufnahme Beispiel: Intel® C0 Mode Core™2 Duo 35.0 Watt 10 ns C1 Mode 100 ns 250 us 13.5 Watt 50 us C2 Mode 12.9 Watt C3 Mode 7.7 Watt C4 Mode 1.2 Watt DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 18
  19. 19. Beispiel Sleep-Modes: ARMStrongarm SA1100 Active 400 mW 10μs 160ms 10μs 90μs Idle Sleep 50 mW 90μs 160 μW Woher weiss der Prozessor, in welchen Zustand er gehen kann ? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 19
  20. 20. Grundlegende Prinzipien Grundzustand aktiv, schlafen nur, Wartendes wenn nichts zu tun ist BetriebssystemGrundzustand schlafend, aktiv nur, Ereignisgesteuertes wenn etwas zu tun ist Betriebssystem Grundzustand aus, aktiv nur, Energiegesteuertes wenn genügend Energie Betriebssystem vorhanden ist DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 20
  21. 21. Unix- Prozessmodelexternes Problematik beiGerät Polling energiegesteuertem Betriebssystem: Aktiv BootzeitInterrupt Blockiert Wartend DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 21
  22. 22. Reduktion der AufstartzeitKaro TX-25 66 Sek 8 Sek Quelle: D. Doninelli: TX25-Fast Boot, EIA-FR 2011 DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 22
  23. 23. Wie sieht dies in der Praxis aus ? - Dynamische Reduktion der Taktfrequenz - Prozessor schlafen legen- Abschaltung von nicht benötigter Peripherie - Reduktion der Versorgungs- spannung DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 23
  24. 24. Plattform UNC90 http://www.digi.com/pdf/prd_em_unc90.pdf - Prozessor: AT91RM9200 (ARM 920EJ) - Maximale Frequenz: 180 MHz - 32 MB Ram, 16 MB Flash - Linux Kernel 2.6.12 Um Spannungs- regler 0.1 Ω UNC90- ModulAusgang 3.3 V I = Um / 0.1Ω P = U·I = Um2 / R DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 24
  25. 25. Crosscompiling PC mit Ubuntu + UNC90-Crosscompiling UNC90 Umgebung TFTP TFTP-Server mit Kernel Kernel für UNC90 NFS Filesystem aufFilesystem NFS-Partition seriell Terminalprogramm Terminal (minicom) DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 25
  26. 26. Frequencyscaling Power Management Controller PMC ProzessorfrequenzFrequenzverhältnis zur Peripherie DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 26
  27. 27. Manuelles FrequencyscalingsaveCurrent(){ PMC_ MCKR |= PRES_DIV2; // Master Clock register auf /2 stellen US_BRGR = US_BRGR /2; // USART Baudrate Divider Register}normalCurrent(){ PMC_ MCKR &= ~PRES_DIV2; // Master Clock register auf /1 stellen US_BRGR = US_BRGR *2; // USART Baudrate Divider Register} Wie kann dieses automatisiert werden ? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 27
  28. 28. Unix- ProzessmodelexternesGerät Polling Laufend Aktive ProzesseInterrupt Blockiert Wartend DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 28
  29. 29. Die runqueue runqueue-Struktur im Kernel geblockte Prozesse:run Idle- Proc Procqueue Task 1 2 Ein Feld dieser Struktur: nr_running enthält die Anzahl der aktiven Prozesse (inklusive des Idle-Tasks) DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 29
  30. 30. Ein einfacher Patch in sched.cDie Funktion schedule() wird bei jedem Kontextwechsel(preemptiv oder gewünscht) aufgerufen:if(unlikely(rq -> nr_running == 1)){ if(saveMode == 0){ saveCurrent(); saveMode = 1; }} else { if(saveMode != 0){ normalCurrent(); saveMode = 0; }} DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 30
  31. 31. Die RoutinensaveCurrent() { local_irq_disable(); waitForTXReady(); waitForTXReady(){ saveCurrent(); do { local_irq_enable(); /* wait until TX_Ready} Bit in USART Channel Status Register setnormalCurrent() { */ local_irq_disable(); } waitForTXReady(); while((US_ CSR & TXRDY)==0) normalCurrent(); } local_irq_enable();} DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 31
  32. 32. Ein etwas besserer Patchif(unlikely(rq -> nr_running == 1)){ if((saveMode == 0)&&(saveCounter > SAVEWAIT)){ saveCurrent(); saveMode = 1; } else { saveCounter++; }} else { if(saveMode != 0){ normalCurrent(); saveMode = 0; } saveCounter = 0;} DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 32
  33. 33. Ergebnisse ohne SAVEWAIT SAVEWAIT SAVEWAIT SAVEWAIT Patch =1 =2 =3 =5 Active 232 mA 232 mA 232 mA 232 mA 232 mA Idle 232 mA 170 mA 170 mA 170 mA 170 mATime [ms] 15810 16700 16200 16000 15830Stabilität 80 200 170 130 100 [ms]Die Zeit wird mit einem Programm gemessen, das eine einfache mathe-matische Funktion ausführt. Warum nicht die Frequenz noch weiter senken? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 33
  34. 34. Sleep-Modein linux/include/asm-arm/arch-at91rm9200/system.hstatic inline void arch_cpu_idle(){ AT91_SYS -> PMC_SCDR = AT91C_PMC_PCK;}Ergebnisse: sleepmode: 232 mA → 130 mAmit Frequenzscaling: 170 mA → 112 mAWie lange kann ein System im Sleep-Mode bleiben? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 34
  35. 35. PowerTop PowerTOP version 1.9 (C) 2007 Intel Corporation Cn Verweildauer P-States (Frequenzen) C0 0,3% 2,00 GHz 0% C1 0,0% 1,60 GHz 0% C2 99,7% 1,20 GHz 100 %Aufwachen pro Sekunde : 52,1 Intervall: 15,0sHäufigste Ursachen für das Aufwachen:32,5% (20,0) beagled : futex_wait (hrtimer_wakeup)16,3% (10,0) <kernel core> : ehci_work (ehci_watchdog)11,1% ( 6,8) <interrupt> : ahci 6,9% ( 4,3) <interrupt> : acpi 6,5% ( 4,0) <kernel module> : usb_hcd_poll_rh_status (rh_timer_func) 5,2% ( 3,2) <interrupt> : extra timer interrupt 4,9% ( 3,0) kicker : schedule_timeout (process_timeout) 2,2% ( 1,3) klipper : schedule_timeout (process_timeout) DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 35
  36. 36. Nach allen Tipps Cn Verweildauer P-States (Frequenzen) C0 0,1% 2,00 GHz 0,0% C1 0,0% 1,60 GHz 0,0% C2 99,9% 1200 MHz 100,0%Aufwachen pro Sekunde : 21,8 Intervall: 20,0sHäufigste Ursachen für das Aufwachen:42,6% ( 10,0) <kernel core> : ehci_work (ehci_watchdog)17,3% ( 4,0) <kernel module> : usb_hcd_poll_rh_status (rh_timer_func) 8,7% ( 2,0) kicker : schedule_timeout (process_timeout) 7,9% ( 1,9) kwin : schedule_timeout (process_timeout) 5,3% ( 1,2) klipper : schedule_timeout (process_timeout) 4,3% ( 1,0) kwrapper : do_nanosleep (hrtimer_wakeup) 4,3% ( 1,0) <kernel core> : queue_delayed_work_on 1,7% ( 0,4) kdesktop : schedule_timeout (process_timeout) DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 36
  37. 37. Linux Kernel vor 2.6.21 Erhöhung der jiffies-VariableTimer-Ticks(alle 1, 4 oder Process Accounting: Wieviel Zeit10 ms) hat jeder Prozess verbraucht ? Scheduler: Muss ein Kontext- wechsel durchgeführt werden ? Sind SW-Timer abgelaufen ? Nur benötigt, wenn ein Programm aktiv ist Wird auch im Idle-Modus benötigt DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 37
  38. 38. Linux Kernel nach 2.6.21 Thomas Gleixner, Ingo Molnár et al.: Tickless KernelHPET (High Precission Jiffies-Variable wird nur Event Timer) erhöht, wenn ein Prozess aktiv ist Process Accounting Scheduler Kontextwechsel Abgelaufene Timer werden vom HPET gemanaged Interrupts Wenn kein Prozess aktiv ist kann der Prozessor im Schlaf-Mode bleiben! DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 38
  39. 39. Linux Kernel nach 2.6.21Grouping: 1 Sekunde 1 SekundeSystemaufrufe:unsigned long round_jiffies(unsigned long j);unsigned long __round_jiffies_relative(unsigned long j, int cpu); Neue Applikationen immer mit Power-Top oder ähnlichem testen ! Alle gezeigten Messungen waren mit einem alten Kernel. Wie sieht es mit einem aktuelleren System aus? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 39
  40. 40. Armadeus: APF-27www.armadeus.org- Prozessor Freescale i.mx27- Takt bis 400MHz- 64 MB RAM- 16 MB Flash- Ethernet, USB etc...- FPGA- Kernel: 2.6.29.4 DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 40
  41. 41. On demand Governor make linux26-menuconfigDIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 41
  42. 42. Messungen unterschiedlicher FrequenzscalingmethodenFrequenzscaling Methode Strom Idle [mA] Strom aktiv [mA]Perfomance Governor 512 (400 MHz) 723 (400 MHz)Powersave Governor 494 (133 MHz) 494 (133 MHz)Ondemand Governor 494 (133 MHz) 723 (400 MHz)Scheduler Patch 371 (200 MHz) 723 (400 MHz)Scheduler Patch 348 (133 MHz) 723 (400 MHz) Die aktuelle Frequenz kann über das sysfs bestimmt werden: /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freqInteressantes Paper zum Thema:http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/doc/OLS2006-ondemand-paper.pdf DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 42
  43. 43. Sleep Mode auf APF-27 Im File:/linux-2.6.29.4/arch/arm/mm/proc-arm926.SENTRY(cpu_arm926_do_idle) mov r0, #0 mrc p15, 0, r1, c1, c0, 0 @ Read control register mcr p15, 0, r0, c7, c10, 4 @ Drain write buffer bic r2, r1, #1 << 12 mrs r3, cpsr @ Disable FIQs while Icache orr ip, r3, #PSR_F_BIT @ is disabled msr cpsr_c, ip mcr p15, 0, r2, c1, c0, 0 @ Disable I cache mcr p15, 0, r0, c7, c0, 4 @ Wait for interrupt mcr p15, 0, r1, c1, c0, 0 @ Restore ICache enable msr cpsr_c, r3 @ Restore FIQ state mov pc, lr Ausschaltbar über Kernelboot-Parameter: no-hlt oder über Systemfunktion: disable_hlt(); Strom: 512 mA → 725 mA DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 43
  44. 44. Was bringt Tickless ?ohne Tickless: I = 535 mATickless: I = 515 mA DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 44
  45. 45. Was bringt Tickless ?http://www.phoronix.com/scan.php?page=article&item=651&num=1 DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 45
  46. 46. Ausschalten von Peripherie Bisher wurden die Messungen ohne USB-Support durchgeführt ! DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 46
  47. 47. Eingeschaltetes USB512 mA → 725 mA (+ ~30%)Wird dies durch SW oder HW verursacht ? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 47
  48. 48. Konfiguration des USB- Über 100 Register !- Peripheral Clock Control Register des Clockmoduls: Durch Ausschalten des Bits USB AHB Clock Enable, (Advanced High-performance Bus) wird der Strom reduziert (Clock-Gating ??? --> !!!)- Der AHB Clock wird aber nur zum Erkennen eines neuen USB-Gerätes benötigt. Dies ermöglicht, durch ein einfaches Programm, welches periodisch den USB AHB Clock ein- schaltet, den Stromverbrauch massgeblich zu reduzieren.... DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 48
  49. 49. Userspace-dynamisches USBUser Space Kernel Space Procedure loop{ - AHB einschalten - Status Register lesen Zugriff auf Register - AHB ausschalten - sleep(1); } Einsparung bei APF-27: 30%Lassen sich solche Lösungen generalisieren ? DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 49
  50. 50. Neue Plattform FRIARM- Komplettes ereignisgesteuertes System (Interrupt-Handling)- Dynamische Frequenz- und Corespannungs-Anpassung- Dual-Ram zur Reduktion der Zugriffsfrequenz und damit Reduktion der Versorgungsspannung- Ram/Flash wird durch NV-Ram ersetzt: Ausschalten des Stromes in Ruhephasen, Live-Daten im Ram, um schnelles Booten zu ermöglichen- Display mit bistabilem LCD DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 50
  51. 51. LiteraturDaniel P. Bovet, Marco Cesati: Understanding theLinux Kernel, OReilly, ISBN: 978-0-596-00565-8http://www.mjmwired.net/kernel/Documentation/cpu-freq/governors.txthttp://www.carlthompson.net/software/cpuspeed/www.lesswatts.orgManuals der Prozessoren DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 51
  52. 52. Dank an die beteiligten PersonenVielen Dank an:Silvain Décastel, Xavier Menoud, Andéol Demierreund Igor Zanetti für die interessanten Analysen desLinux-Systems.Guy Morand und Davide Doninelli für Ihre tollenArbeiten zum Fastboot an verschiedenen Systemen.Sowie an Daniel Gachet und Nicolas Schroeter fürdie vielen interessante Diskussionen zu diesemThema.... DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 52
  53. 53. und natürlich....Vielen Dank auch für Ihre Aufmerksamkeit ! Weitere Infos: wolfram.luithardt@hefr.ch DIGICOMP Open Tuesday, Wolfram Luithardt HTA-Freiburg, 05.04.2011 53

×