<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
  <channel>
    <title>Wolfgangs Weblog</title>
    <link>http://wolfgang-rolke.de/system-cgi/blog/</link>
    <description>Persönliches Knowledge Blog von Wolfgang Rolke</description>
    <!-- optional tags -->
    <language>en-us</language>           <!-- valid langugae goes here -->
    <generator>Nucleus CMS v3.21</generator>
    <copyright>©</copyright>             <!-- Copyright notice -->
    <category>Weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    <image>
      <url>http://wolfgang-rolke.de/system-cgi/blog//nucleus/nucleus2.gif</url>
      <title>Wolfgangs Weblog</title>
      <link>http://wolfgang-rolke.de/system-cgi/blog/</link>
    </image>
    <item>
 <title><![CDATA[Integration des Windows SDK für Windows 7 in Visual Studio 2005]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1410</link>
<description><![CDATA[Das <a href="http://www.microsoft.com/downloads/details.aspx?familyid=C17BA869-9671-4330-A63E-1FD44E0E2505&displaylang=en">Microsoft Windows SDK für Windows 7</a> kann mit Hilfe des <i>Windows SDK Configuration Tools</i> in <i>Microsoft Visual Studio 2005</i> integriert werden.<br />
Unter einer deutschen Version von Microsoft Windows XP kann jedoch folgende Fehlermeldung angezeigt werden:<br />
<b>"Your system does not have Visual Studio 2005 or Visual Studio 2008 installed."</b><br />
<br />
In dem Artikel <a href="http://blogs.msdn.com/windowssdk/archive/2009/08/21/windows-sdk-configuration-tool-may-report-an-error-when-os-display-format-is-not-english.aspx">Windows SDK Configuration Tool May Report an Error When OS Display Format is not English</a> aus dem <i>Microsoft Windows SDK Blog</i> werden zwei Lösungen für dieses Problem beschrieben.<br />
Bei mir war lediglich die zweite Methode erfolgreich. Erst nachdem ich in den <i>Regions- und Sprachoptionen</i> die <i>Regionalen Einstellungen</i> auf "Englisch (USA)" geändert hatte, konnte das Windows SDK Configuration Tool fehlerfrei ausgeführt werden. Danach sind die C++-Verzeichnisse des neuen SDK's im Visual Studio eingetragen.<br />
<br />
Mit dem <a href="ms-help://MS.VSCC.v80/dv_vscccommon/local/CollectionManager.htm">Manager für die kombinierte Visual Studio 2005 Hilfe</a> bindet man die neue Windows SDK-Dokumentation in die Visual Studio 2005-Hilfe ein.<br />
Verursacht der Manager einen Skriptfehler, hilft evtl. der Knowledge Base-Artikel <a href="http://support.microsoft.com/kb/919755/de">KB919755</a> weiter. Nach Aktualisierung der Datei <i>dv_vscccommon.hxs</i> listet der Collection Manager alle kompatiblen Dokumentationen zur Integration auf.]]></description>
 <category>Software</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1410</comments>
 <pubDate>Mon, 24 Aug 2009 20:31:18 +0200</pubDate>
</item><item>
 <title><![CDATA[Neues VIA x86 Board Support Package, Version 3.44]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1388</link>
<description><![CDATA[VIA Technologies, Inc. hat das <b><a href="http://www.viaarena.com/displaydrivers.aspx?PageID=1&OSID=41&CatID=3020">x86 BSP für Windows Embedded CE 6.0</a></b> aktualisiert, auf das auch das Board Support Package der <b>ICOP eBox-4300</b> basiert.<br />
<br />
Im neuen BSP wurde jetzt die Version 6.0.0.33 des <a href="http://www.viaarena.com/displaydrivers.aspx?PageID=1&OSID=41&CatID=3010&SubCatID=184">Grafiktreibers</a> übernommen, welcher schon seit längerem einzeln zur Verfügung stand. Ganz frisch ist hingegen die Version 1.3a des <a href="http://www.viaarena.com/displaydrivers.aspx?PageID=1&OSID=41&CatID=3260&SubCatID=195">HD Audiotreibers</a>. Darüber hinaus wurde auch der VIA Gigabit Ethernet Treiber aktualisiert. Dieser NE2000-basierte Treiber ist für Nutzer der eBox4300 jedoch uninteressant, da die eBox ein Realtek-Chipsatz enthält.<br />
<br />
Die Bibliothek <a href="http://www.viaarena.com/displaydownload.aspx?PageID=1&DSCat=43&DCatType=3">HDDRegSave</a> (VIA WCE X86 Managing System Registry With IDE ATA Storage Device) wurde hingegen aus dem BSP entfernt.<br />
<br />
Am Quellcode wurde nicht viel geändert. <i>OEMInit()</i> ruft eine neue Funktion <i>DisableSataIrq()</i> auf und die Datei <i>HALSCI.c</i> wurde zur Unterstützung des VX855-Chipsatzes erweitert. Die Fehler mit den nicht initialisierten Variablen in dieser Datei wurden allerdings nicht beseitigt...]]></description>
 <category>Embedded</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1388</comments>
 <pubDate>Sat, 20 Jun 2009 18:12:19 +0200</pubDate>
</item><item>
 <title><![CDATA[Installation der Windows 7 Beta mit Virtual PC 2007 SP1]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1332</link>
<description><![CDATA[Wer das Betriebssystem <b>Microsoft Windows 7 Beta</b> testen möchte, dafür aber keinen passenden Rechner zur Verfügung hat, kann es als Gast in einen von <b>Microsoft Virtual PC 2007 SP1</b> bereitgestellten virtuellen Computer einrichten und ausführen.<br />
<br />
Hat man Virtual PC 2007 bereits installiert, muss man sicherstellen, dass man auch die Version mit <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=28c97d22-6eb8-4a09-a7f7-f6c7a1f000b5">Service Pack 1</a> nutzt. Andernfalls ist das Gastbetriebssystem nach Installation der <i>Virtual Machine Additions</i> nicht mehr nutzbar (Blue Screen).<br />
Microsoft Virtual PC 2007 mit Service Pack 1 hat die Versionsnummer <b>6.0.192.0</b>.<br />
<br />
Brian Keller, Technical Evangelist for Team System, hat in einem <a href="http://blogs.msdn.com/briankel/archive/2009/01/10/installing-the-windows-7-beta-with-virtual-pc-2007-sp1.aspx">Blog-Artikel</a> die Einrichtung der Windows 7 Beta mit Virtual PC 2007 SP1 beschrieben, so dass ich hier nicht weiter darauf eingehe.<br />
<br />
Die Installation der Windows 7 Beta hat bei mir recht lange gedauert, lief aber ohne Fehler durch. Allerdings konnte ich mich mit dem von mir vergebenen Kennwort nicht anmelden (Benutzername oder Kennwort ungültig). Nach einem Neustart des Systems wurde mir dann kein Konto mehr zur Anmeldung angeboten.<br />
<br />
Möglicherweise lag dies am von mir gewählten Kontonamen "Benutzer". Dieser wurde zwar vom System akzeptiert, kollidiert aber möglicherweise mit einem Standardkonto oder einem Ordnernamen...<br />
<br />
Erst über den abgesicherten Modus und die Anmeldung über das dann verfügbare Administrator-Konto konnte ich mit der Benutzerkontensteuerung ein Benutzerkonto anlegen und nutzen.]]></description>
 <category>Software</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1332</comments>
 <pubDate>Sun, 01 Mar 2009 18:13:10 +0100</pubDate>
</item><item>
 <title><![CDATA[TrackMania Tracks]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1266</link>
<description><![CDATA[Ich bin ein großer Fan von Adventures (<i>Black Mirror</i>, <i>The Moment of Silence</i>, <i>The Longest Journey</i>, usw.) und Action-Adventures (u.a. <i>Tomb Raider</i>, <i>LEGO Star Wars</i>, <i>Psychonauts</i>). Logikfehler und unfaire Bosskämpfe sorgen dabei hin und wieder für Frust.<br />
Dem Fun-Racer <b>TrackMania</b> von Nadeo sagt man unendlichen Spielspaß nach. Jetzt bin ich endlich einmal dazu gekommen, das Rennspiel auszuprobieren. Und es macht wirklich süchtig! Da man mit dem enthaltenen Editor sehr einfach eigene Strecken erstellen kann, stehen unzählige davon online zur Verfügung. <br />
<br />
Auch ich habe inzwischen ein paar "Tracks" gebaut. Diese möchte ich Euch nicht vorenthalten:<br />
<br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=2307511#auto">Fire on Ice</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=3033748#auto">Khardung La</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=1496932#auto">SandBoxRally SE</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=1955282#auto">LeavingGreenVillage</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=770363#auto">DirtAutoCross</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=438698#auto">TickTrickTrack</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=471110#auto">TickTrickTrack 2</a><br />
<a href="http://tmnforever.tm-exchange.com/main.aspx?action=trackshow&id=495895#auto">TickTrickTrack III</a><br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20081026-track.jpg" alt="TickTrickTrack III" width="400" height="276" /><br />
<br />
Das Spiel in der Variante <b>TrackMania Nations Forever</b> mit Beschränkung auf die Umgebung <i>Stadion</i> ist gratis! Man kann es sich <a href="http://link.trackmania.com/?login=electronx">hier</a> herunterladen.]]></description>
 <category>Games</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1266</comments>
 <pubDate>Sun, 26 Oct 2008 16:13:35 +0100</pubDate>
</item><item>
 <title><![CDATA[WR-Tools CPULoad in neuer Version 0.7]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1232</link>
<description><![CDATA[Das Tool <b>CpuLoad</b> für das Betriebssystem Microsoft Windows CE wurde aktualisiert. Es zeigt die Auslastung der CPU als Balken im Infobereich der Taskleiste an. Der Verlauf der Prozessorauslastung wird in einem Diagramm dargestellt.<br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20080916-cpuload.gif" alt="CpuLoad" width="226" height="193" /><br />
<br />
Über den Eintrag <i>TopMost</i> in der Registry kann jetzt vorgegeben werden, ob das Dialogfenster von CpuLoad immer <b>im Vordergrund</b> angezeigt werden soll.<br />
Weist man dem Eintrag <i>MemLoad</i> einen Wert ungleich 0 zu, wird im Diagramm zusätzlich die <b>Speicherauslastung</b> in Prozent angezeigt.<br />
<br />
<code>[HKEY_CURRENT_USER\SOFTWARE\WR-Tools\CpuLoad]<br />
"TopMost"=dword:1 ; 1 = Dialogfenster immer im Vordergrund<br />
"MemLoad"=dword:0 ; 0 = Speicherauslastung wird nicht angezeigt</code><br />
<br />
Das Programm steht <a href="http://www.wolfgang-rolke.de/wince/#cpuload">hier</a> zum Download zur Verfügung.]]></description>
 <category>Software</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1232</comments>
 <pubDate>Sun, 07 Sep 2008 18:51:56 +0200</pubDate>
</item><item>
 <title><![CDATA[Das Windows Embedded CE 6.0 Test Kit (CETK)]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1225</link>
<description><![CDATA[Beim Durchstöbern der Quelldateien von Windows CE fallen einem an vielen Stellen die Namen <i>KITL</i>, <i>Tux</i> und <i>Kato</i> auf. Den <b>K</b>ernel <b>I</b>ndependent <b>T</b>ransport <b>L</b>ayer lernt man schon sehr schnell als Debugging Service kennen. <b>Tux</b> Test Harness und die <b>Kato</b> Logging Engine gehören hingegen zum <b>Windows Embedded CE Test Kit</b> (CETK).<br />
<br />
Das CETK besteht hauptsächlich aus vielen einzelnen Kommandozeilen-Tools, die von einer Desktop-Anwendung aus gesteuert werden können. Dieser CETK-Server nimmt auch die Testergebnisse entgegen. Darüber hinaus werden noch weitere Testprogramme bereitgestellt (u.a. <i>Application Verifier</i>, <i>Windows Embedded CE Stress Tool</i>, <i>Resource Consumer</i>, <i>CPU Monitor</i>).<br />
<br />
Das Windows Embedded CE Test Kit kann unabhängig vom Platform Builder über das Startmenü von Windows aufgerufen werden. Über den Platform Manager kann auch sofort eine Verbindung zum Gerät hergestellt werden. Alle notwendigen Client-Dateien werden, sobald benötigt, automatisch auf das Gerät übertragen. Es ist nicht notwendig, daß das Run-Time Image mit dem Katalogelement des CETK (SYSGEN_WCETK) erstellt wurde. Mir ist noch nicht ganz klar, was beim Einbinden dieses Moduls erfolgt. Eine <i>wcetk.dll</i> gemäß Doku wird nicht erstellt. Ich konnte lediglich die <i>wcetk.txt</i> mit den Server-Parameter für das Tool <i>clientside.exe</i> im Ordner <i>%_FLATRELEASEDIR%</i> finden. Der CETK Client selbst wird aber nicht mit in das Image aufgenommen.<br />
<br />
Nach dem die Verbindung steht, wird auf dem Zielgerät ein Fenster angezeigt, in dem Statusmeldungen durchlaufen (ClientSide). Im CETK-Fenster auf dem Desktop wird ein zur Plattform passender Testkatalog als Baumstruktur angezeigt. Wird im Symbol einer Kategorie ein Rufzeichen auf gelben Grund dargestellt, konnte auf dem Zielgerät kein entsprechendes Peripheriegerät ermittelt werden.<br />
<br />
Über das Kontextmenü kann jeder Test einzeln konfiguriert <i>(Edit Command Line)</i> und gestartet werden <i>(Quick Start)</i>. Im Kontextmenü sind immer nur die Ergebnisse der zuletzt ausgeführten Tests abrufbar <i>(View Results)</i>. Der Ordner, in dem alle Testergebnisse gespeichert werden, kann über den Menüpunkt <i>Server: Server Settings...</i> festgelegt werden.<br />
<br />
Wer jetzt willkürlich drauflostestet, ohne sich vorher in der Onlinehilfe genau über jeden einzelnen Test zu informieren, wird nicht weit kommen. Denn einzelne Tests verlangen Benutzereingaben am Zielgerät, erfordern zusätzliches Equipment (z.B. Lautsprecher und Mikrofon) oder benötigen mehrere Stunden Laufzeit.<br />
<br />
Für den ungeduldigen <i>SPARK Your Imagination Hobby-Entwickler</i>, an den sich dieses Weblog ja richtet, sind dennoch einzelne Test nützlich und schnell durchgeführt. Am Besten man fängt mit folgenden Tests an: <i>OAL IOCTL Tests</i>, <i>Serial Port Tests</i>, <i>NLED Tests</i> und ggf. <i>Battery API Test</i>.<br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20080823-cetk.gif" alt="Windows Embedded CE Test Kit" width="495" height="641" /><br />
<br />
Die Zusatztools mit grafischer Oberfläche verstecken sich in einem Kontextmenü, das man per Rechtsklick auf das Zielgerät öffnen kann.<br />
<br />
Der <b>Application Verifier</b> ist wie das CETK selbst auch einzeln erhältlich und wird hoffentlich von jedem Anwendungsentwickler verwendet, bevor er ein Programm veröffentlicht. Das Tool überprüft ein Programm zur Laufzeit und hilft bei der Ermittlung von Speicherlecks. Für die erzeugten Protokolldateien gibt es einen separaten Viewer. Es ist zu beachten, daß das Tool hin und wieder falsch positive Ergebnisse liefert. Es meldet auch einen Fehler, falls eine Ressource erst beim Terminieren des Programms durch das System freigegeben wird (z.B. bei <i>LoadImage</i>).<br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20080823-appverif.gif" alt="Application Verifier" width="647" height="398" /><br />
<br />
Damit der <b>CPU Monitor</b> funktioniert, muß auf dem Zielgerät manuell das Programm <i>cetkperf.exe</i> mit dem Hostnamen bzw. der IP-Adresse des Entwicklungsrechners als Parameter gestartet werden. Das Tool zeigt die Prozessor- und Speicherauslastung graphisch an und protokolliert deren Werte.<br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20080823-cpumon.gif" alt="CPU Monitor" width="538" height="564" /><br />
<br />
Mit dem <b>Resource Consumer</b> kann man die Systemressourcen <i>Objektspeicher</i>, <i>Programmspeicher</i>, <i>Anzahl Prozesse</i> und <i>CPU-Auslastung</i> bis zu deren Erschöpfung vereinnahmen.<br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20080823-consumer.gif" alt="Resource Consumer" width="504" height="327" /><br />
<br />
Das <b>Windows Embedded CE Stress Tool</b> sorgt 14 Stunden lang für eine Dauerbelastung des Zielgerätes...<br />
<br />
<img src="http://wolfgang-rolke.de/system-cgi/blog/media/114005//20080823-cestress.gif" alt="Windows Embedded CE Stress" width="647" height="498" /><br />
<br />
Im Programmordner des CETK findet man noch ein Kommandozeilentool, mit dem man lokal auf dem Gerät Bildschirmfotos anfertigen kann (<i>prt_scrn.exe</i>). Das in der Dokumentation beschriebene <i>Scripting Host Tool</i> liegt dem CETK jedoch nicht (mehr?) bei.]]></description>
 <category>Embedded</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1225</comments>
 <pubDate>Sat, 23 Aug 2008 15:00:24 +0200</pubDate>
</item><item>
 <title><![CDATA[Hintergrundthread für das Zurückschreiben der Registry]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1219</link>
<description><![CDATA[Das BSP der ICOP eBox-4300 wurde so konfiguriert, daß eine Hive-basierte Registry jedesmal vollständig auf den Datenträger zurückgeschrieben wird, sobald eine Änderung in ihr vorgenommen wurde (flush-on-close, aggressive flushing). Dadurch entsteht ein Verlust an Performance. So schließen sich einige Fenster erst nach kurzer Verzögerung.<br />
<br />
Das automatische Zurückschreiben der Registry auf Disk läßt sich zwar abschalten. Dann muß eine Anwendung aber selber dafür sorgen, daß die Registry nach umfangreichen oder wichtigen Änderungen gesichert wird (was in der Regel nicht geschieht). Zudem muß der Neustart bzw. das Herunterfahren des Systems vom Power-Management veranlaßt werden, damit spätestens dann die Registry auf das Laufwerk zurückgeschrieben wird. Trennt man das Gerät vorher von der Stromversorgung, gehen Daten verloren.<br />
<br />
Der folgende Registrierungsschlüssel steuert das Zurückschreiben einer Hive-basierten Registry:<br />
<br />
<code>[HKEY_LOCAL_MACHINE\init\BootVars]<br />
"RegistryFlags"=dword:0</code><br />
<br />
Der Wert 0 schreibt die Registry <i>nicht deterministisch</i> zurück. Der Wert 1 sorgt für <i>aggressives</i> Zurückschreiben und der Wert 2 <i>deaktiviert</i> das Sichern im Hintergrund. Durch Zuweisung des Wertes 0 und durch Setzen der Umgebungsvariablen <b>PRJ_ENABLE_REGFLUSH_THREAD</b> im OS Design wird ein Hintergrundthread aktiviert, der für das periodische Zurückschreiben der Registry auf den Datenträger sorgt.<br />
<br />
Durchsucht man die <i>common.reg</i> nach PRJ_ENABLE_REGFLUSH_THREAD, findet man dort die Parameter zum Hintergrundthread (u.a. Priorität des Programmfadens, Anzahl der Änderungen und Zeitraum bis zum Zurückschreiben der Daten). Diese können bei Bedarf in der <i>platform.reg</i> oder <i>project.reg</i> überschrieben werden.<br />
<br />
Die Funktion des Hintergrundthreads kann mit Hilfe der Datenträger-LED gut überprüft werden. Spätestens zwei Minuten nach einer Änderung in der Registry flackert sie für kurze Zeit auf und signalisiert so das Zurückschreiben der Daten auf Disk.<br />
<br />
Auch für das Zurückschreiben der Datenbanken kann analog ein Hintergrundthread eingerichtet werden. Die Umgebungsvariable dafür lautet <b>PRJ_ENABLE_DBFLUSH_THREAD</b>.]]></description>
 <category>Embedded</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1219</comments>
 <pubDate>Sun, 17 Aug 2008 14:54:06 +0200</pubDate>
</item><item>
 <title><![CDATA[Unterstützung für Dateisynchronisierung auf externen Datenträgern]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1218</link>
<description><![CDATA[Befindet sich das Dateisystem nicht im Object Store, schlägt die Synchronisation von Dateien per ActiveSync (SYSGEN_AS_FILE) fehl, da auf einem externen FAT-Dateisystem die dazu notwendigen OID's nicht gespeichert werden. Erst nach Installation eines Dateisystemfilters werden die "Object identifier file mappings" in einer Datenbank (Replication Store) hinterlegt.<br />
<br />
Mit den Variablen <b>PRJ_ENABLE_FSEXTREPL</b> und <b>SYSGEN_FSREPLXFILT</b> fügt man den Filter dem OS Design hinzu.<br />
Zur Konfiguration steht folgender Registrierungsschlüssel zur Verfügung:<br />
<br />
<code>; HIVE BOOT SECTION<br />
; @CESYSGEN IF CE_MODULES_FSREPLXFILT<br />
[HKEY_LOCAL_MACHINE\System\StorageManager\Filters\fsreplxfilt]<br />
  "ReplStoreHostVolume"=""<br />
  "ReplStorePath"="\\Documents and Settings\\ReplStorVol"<br />
  "ReplStoreName"="ReplStor"<br />
  "ReplStoreDoImmaculate"=dword:0<br />
  "ReplStoreCacheSize"=dword:0<br />
  "NumDirsToExclude"=dword:6<br />
  "DirsToExclude"=multi_sz:"\\Windows\\",\<br />
  "\\Programme\\","\\Documents and Settings\\",\<br />
  "\\Anwendungsdaten\\","\\Temp\\","\\Systemsteuerung.lnk"<br />
; @CESYSGEN ENDIF CE_MODULES_FSREPLXFILT<br />
; END HIVE BOOT SECTION</code><br />
<br />
Mit dem Eintrag <i>ReplStorePath</i> wird der Dateipfad zum Replikationsspeicher festgelegt. Unter Windows CE kann nicht darauf zugegriffen werden. Über den Eintrag <i>DirsToExclude</i> soll man laut Doku einzelne Ordner oder Dateien von der Replikation ausschließen können. Im Beispiel oben werden z.B. alle Ordner bis auf "My Documents" ausgeschlossen, um die Größe des Replikationsspeichers klein und den Zugriff auf das Dateisystem kurz zu halten. Der Eintrag <i>NumDirsToExclude</i> gibt die Anzahl der per <i>DirsToExclude</i> ausgeschlossenen Ordner/Dateien an. In dieser Form werden bei mir dennoch alle Dateien und Ordner in den Replikationsspeicher aufgenommen.<br />
<br />
Die Dateisynchronisierung funktioniert bei mir in beiden Richtungen. Lediglich bei aktiver ActiveSync-Verbindung werden Dateien auf dem Gerät nicht korrekt zum Desktop-Rechner übertragen. Dies wird dadurch gekennzeichnet, daß dem Dateinamen der erste Buchstabe fehlt. Erst nach Trennung der ActiveSync-Verbindung und erneuter Synchronisierung werden die Dateien korrekt aktualisiert.]]></description>
 <category>Embedded</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1218</comments>
 <pubDate>Sat, 16 Aug 2008 23:55:00 +0200</pubDate>
</item><item>
 <title><![CDATA[Ein kurzer Blick auf das Speicherabbild der ICOP eBox-4300]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1214</link>
<description><![CDATA[Mit Hilfe der Dateien <i>config.bib</i>, <i>boot.bib</i> und <i>startup.asm</i> kann man sich einen Überblick über das Speicherabbild einer Plattform verschaffen.<br />
<br />
<code>%_TARGETPLATROOT%\FILES\config.bib<br />
%_TARGETPLATROOT%\SRC\BOOTLOADER\EBOOT\boot.bib<br />
%_TARGETPLATROOT%\SRC\X86\COMMON\STARTUP\startup.asm</code><br />
<br />
In der Binary Image Builder-Datei config.bib werden die Speicherbereiche des Kernels konfiguriert. In der boot.bib werden die Speicherbereiche des Bootloaders definiert. Und in der startup.asm wird festgelegt, wie physikalische Adressen auf virtuelle Adressen abgebildet werden.<br />
<br />
<br />
Bei den MIPS- und SHx-Prozessoren erfolgt das Mapping zwischen physikalischen und virtuellen Adressen durch die CPU und den Kernel, bei den x86- und ARM-Prozessoren durch Einträge in die Tabelle <b>OEMAddressTable</b>:<br />
<br />
<code>_OEMAddressTable:<br />
&nbsp;&nbsp;dd&nbsp;&nbsp;80000000h,&nbsp;&nbsp;0&nbsp;&nbsp;; Mapping from 0x80000000 -> 0x00000000<br />
&nbsp;&nbsp;dd&nbsp;&nbsp;20000000h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Size 512 MB<br />
&nbsp;&nbsp;dd&nbsp;&nbsp;0,&nbsp;&nbsp;0,&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; Last entry, all zeros</code><br />
<br />
Für jeden Eintrag erzeugt der Kernel zwei virtuelle Adressbereiche. Im Falle des ICOP eBox4300 BSP wird der physikalische Adressbereich 0x00000000 bis 0x1FFFFFFF (512 MB) jeweils auf die virtuellen Kernel-Adressbereiche 0x80000000 bis 0x9FFFFFFF (cached) und 0xA0000000 bis 0xBFFFFFFF (non-cached) abgebildet. Achtung: Bei einer x86 CPU wird die Größe des Adressbereichs in Byte angegeben, bei einer ARM CPU hingegen in MB.<br />
<br />
<br />
Die Datei <b>config.bib</b> definiert den Verwendungszweck der verschiedenen Speicherregionen einer Plattform. So kann man bestimmen, wie viel Speicher für das Betriebssystem verfügbar ist (<i>RAMIMAGE</i>), wieviel Speicher als Hauptspeicher zur Verfügung gestellt wird (<i>RAM</i>) und welche Speicherbereiche für spezielle Anwendungen reserviert werden (<i>RESERVED</i>).<br />
<br />
<code>MEMORY<br />
; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start&nbsp;&nbsp;&nbsp;&nbsp;Größe&nbsp;&nbsp;&nbsp;&nbsp;Typ<br />
; -------&nbsp;&nbsp;&nbsp;-------- -------- --------<br />
&nbsp;&nbsp;RAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80C00000  1B000000  RAM       ; Hauptspeicher<br />
&nbsp;&nbsp;NK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80220000  009E0000  RAMIMAGE  ; Betriebssystemabbild<br />
&nbsp;&nbsp;EDBG_DMA&nbsp;&nbsp;80200000  00020000  RESERVED  ; Ethernet DMA-Puffer<br />
&nbsp;&nbsp;BOOTARGS&nbsp;&nbsp;801FFF00  00000100  RESERVED  ; Bootparameter<br />
&nbsp;&nbsp;REGRW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80150000  00012000  RESERVED  ; HDDREGSAVE<br />
&nbsp;&nbsp;DMA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80100000  00030000  RESERVED  ; Native DMA<br />
<br />
CONFIG<br />
&nbsp;&nbsp;AUTOSIZE=ON</code><br />
<br />
Hier wurde ab virtueller Adresse 0x80220000 (bzw. physikalischer Adresse 0x220000) 9,875 MB Speicher für das Betriebssystemabbild (nk.bin) festgelegt und diese Region als "NK" benannt. Der frei verfügbare Hauptspeicher "RAM" folgt ohne Lücke ab 0x80C00000 und ist 432 MB groß.<br />
Um Flexibilität zu erhalten und den freien Speicher zu maximieren, kann die Grenze zwischen <i>RAMIMAGE</i> und <i>RAM</i> mit Hilfe des Schalters <i>AUTOSIZE=ON</i> automatisch  an die Größe des Betriebssystemabbilds angepaßt werden. Der Hauptspeicher verringert sich dann bei größerem Betriebssystemabbild und umgekehrt.<br />
<br />
Falls man die Größe des Hauptspeichers (hier 0x1B000000 = 432 MB) zu klein gewählt hat, könnte dennoch freies RAM ungenutzt bleiben. Diese Lücke nach oben ermittelt jedoch eine Funktion in der Datei <i>%_TARGETPLATROOT%\SRC\X86\COMMON\MEMORY\memory.c</i> und paßt die obere Speichergrenze entsprechend an. In der Debugausgabe wird dies wie folgt angezeigt:<br />
<br />
<code>OEM Extra DRAM Detected @ base = xBBC00000, size=4 MB<br />
MainMemoryEndAddress = 0x9c000000</code><br />
<br />
Auf die Speicherbereiche außerhalb von <i>RAMIMAGE</i> und <i>RAM</i> greift der Kernel nicht zu. Dennoch steht das Schlüsselwort <i>RESERVED</i> zur Verfügung, mit dem man zusätzliche Speicherbereiche definieren und somit organisieren kann. So kann z.B. vermieden werden, daß der gleiche Adressbereich für zwei verschiedene Anwendungen verwendet wird.<br />
Im Beispiel oben werden für <i>Native DMA</i> 192 KB, für die Anwendung <i>HDDRegSave</i> 72 KB, für die <i>Boot-Parameter</i> 256 Byte und für den <i>Ethernet DMA-Puffer</i> 128 KB Speicher reserviert.<br />
<br />
<br />
Für den Bootloader gibt es eine eigene Datei <b>boot.bib</b>.<br />
<br />
<code>MEMORY<br />
; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start&nbsp;&nbsp;&nbsp;&nbsp;Größe&nbsp;&nbsp;&nbsp;&nbsp;Typ<br />
; -------&nbsp;&nbsp;&nbsp;-------- -------- --------<br />
&nbsp;&nbsp;ETHDMA&nbsp;&nbsp;&nbsp;&nbsp;00200000  00020000  RESERVED  ; Ethernet-Controller<br />
&nbsp;&nbsp;RAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00150000  00070000  RAM       ; Bootloader RAM<br />
&nbsp;&nbsp;EBOOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00130000  00020000  RAMIMAGE  ; Bootloaderabbild<br />
<br />
; Total reserved area, which equals offset of the NK region in RAM<br />
&nbsp;&nbsp;dwReservedArea  00000000  00220000  FIXUPVAR</code><br />
<br />
Da der Bootloader beim x86-Prozessor im Realmodus startet, werden hier physikalische Adressen verwendet. Der Aufbau und die Funktion der Datei ist darüber hinaus identisch mit der config.bib.<br />
<br />
<br />
Um einen Gesamtüberblick zu erhalten, habe ich beide Speicherabbilder zusammengefügt:<br />
<br />
<code>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start&nbsp;&nbsp;&nbsp;&nbsp;Größe&nbsp;&nbsp;&nbsp;&nbsp;Typ<br />
-------&nbsp;&nbsp;&nbsp;-------- -------- --------<br />
RAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80C00000  1B000000  RAM       ; Hauptspeicher<br />
NK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80220000  009E0000  RAMIMAGE  ; Betriebssystemabbild<br />
EDBG_DMA&nbsp;&nbsp;80200000  00020000  RESERVED  ; Ethernet DMA-Puffer<br />
ETHDMA&nbsp;&nbsp;&nbsp;&nbsp;80200000  00020000  RESERVED  ; Ethernet-Controller<br />
BOOTARGS&nbsp;&nbsp;801FFF00  00000100  RESERVED  ; Bootparameter<br />
REGRW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80150000  00012000  RESERVED  ; HDDREGSAVE<br />
RAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80150000  00070000  RAM       ; Bootloader RAM<br />
EBOOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80130000  00020000  RAMIMAGE  ; Bootloaderabbild<br />
DMA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80100000  00030000  RESERVED  ; Native DMA</code><br />
<br />
Wie man sieht, wurde der DMA-Puffer für den Ethernet-Controller in beiden BIB-Dateien an gleicher Adresse und mit gleicher Größe reserviert.<br />
Die BOOTARGS-Region ist ein Speicherbereich, der für die Datenübertragung zwischen Bootloader und Kernel dient. Daher hätte ich ihn nicht nur in der config.bib eingetragen, sondern auch in der boot.bib.<br />
Als nächstes fällt auf, daß sich der Speicherbereich für das VIA-Tool HddRegSave mit dem Bootloader RAM überschneidet. Würde man diese Komponente mit in das OS Design aufnehmen, müßte man prüfen, ob diese Überlappung wirklich so gewollt ist, unkritisch oder problematisch ist.<br />
Die ersten 1024 KB von 0x80000000 bis 0x80100000 wurden nicht verplant.<br />
<br />
Graphisch sieht die Memory Map so aus:<br />
<br />
<code>9BC0.0000 -+- 444 MB<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Hauptspeicher (432 MB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
80C0.0000 -+  *auto-size*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Betriebssystemabbild (10 MB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
8022.0000 -+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Ethernet DMA-Puffer (128 KB)<br />
8020.0000 -+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Bootparameter (256 B)<br />
801F.FF00 -+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Bootloader RAM (448 KB)<br />
8015.0000 -+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Bootloaderabbild (128 KB)<br />
8013.0000 -+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Native DMA (192 KB)<br />
8010.0000 -+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
8000.0000 -+- 0 MB</code><br />
<br />
<br />
Mit diesen Informationen kann man das Speicherabbild optimieren, ein BSP von VIA portieren oder auch den in der Systemsteuerung angezeigten freien Hauptspeicher nachrechnen.<br />
<br />
Beispiel: Zieht man von den 512 MB DDR2 RAM auf der Hauptplatine die 64 MB Bildschirmspeicher ab, erhält man die 448 MB Systemspeicher gemäß BIOS. Subtrahiert man davon die 2,125 MB (0x00000000-0x0021FFFF) für den Bootloader und den reservierten Speicherbereichen, verbleiben 445,875 MB für das Betriebssystemabbild und den freien Hauptspeicher. Bei einer <i>nk.bin</i> von z.B. 29,875 MB Größe würden dann 416 MB Hauptspeicher zur Aufteilung in Programm- und Objektspeicher mittels <i>FSRAMPERCENT</i> zur Verfügung stehen.]]></description>
 <category>Embedded</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1214</comments>
 <pubDate>Fri, 08 Aug 2008 21:01:05 +0200</pubDate>
</item><item>
 <title><![CDATA[Erstellung eines plattformspezifischen Software Development Kits]]></title>
 <link>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1192</link>
<description><![CDATA[Mit Hilfe eines <b>Software Development Kits (SDK)</b> können Drittentwickler Software passend für die jeweilige Plattform entwickeln. Ein solches SDK enthält genau nur die API-Funktionen, die auch im dazugehörigen Runtime Image des Gerätes implementiert wurden.<br />
Das SDK ermöglicht es zudem, selbst erstellte Programme auf das Gerät zu übertragen und zu testen. Steht die Hardware noch nicht zur Verfügung, kann man seine Programme innerhalb eines bereitgestellten Emulator Images ausführen.<br />
<br />
Damit ein SDK angelegt und erstellt werden kann, muß ein fehlerfreies Release Build der Plattform vorliegen. Um dem SDK auch ein Runtime Image für den Geräteemulator beizufügen, ist eine zusätzliche Konfiguration im OS Design erforderlich.<br />
<br />
Dazu fügt man dem OS Design das <b>Board Support Package</b> des <b>Geräteemulators</b> hinzu ("Catalog Items View", Option "Device Emulator: ARMV4I"). Dieses BSP steht nur bei installierter Ziel-CPU <i>ARMV4I</i> zur Verfügung. Es wird aber erst einmal vom OS Design ausgeschlossen (rotes Kreuz), da pro Konfiguration nur ein BSP aktiv sein kann. Jetzt darf man aber nicht den Fehler machen, das aktive BSP zu deaktivieren. Damit aktiviert man zwar das Emulator-BSP, löscht aber die Konfigurationseigenschaften des Geräte-BSP. Über die <i>Projektmappenkonfiguration</i> kann man hingegen bequem auf die Konfiguration "Device Emulator ARMV4I Release" umschalten. Jetzt erscheint beim Emulator-BSP das grüne Häkchen, während beim Geräte-BSP das rote Kreuz angezeigt wird.<br />
<br />
Nun kann man die Konfigurationseigenschaften des Geräteemulators bearbeiten (<i>Locale</i>, <i>Build Options</i>, <i>Environment</i>, <i>Custom Build Actions</i>, usw.) und die "Parameter Files" editieren (<i>project.bib</i>, <i>project.reg</i>, usw.).<br />
Der Geräteemulator erfordert keine speziellen Environment-Variablen. Bei den "Build Options" reicht die Option "Enable Ship Build". Im Falle der eBox4300-Plattform muß jedoch die <i>ConMan_x86</i> Komponente vom Build ausgeschlossen werden. Dazu wählt man nicht etwa den entsprechenden Katalogeintrag ab. Denn dann würde man die Komponente auch aus der x86-Konfiguration des Gerätes herausnehmen. Statt dessen gibt es in der Kategorie <i>OS Design Property Pages: Subproject Image Settings</i> die Möglichkeit, ein Subproject von der Erstellung und der Aufnahme ins Image auszuschließen.<br />
<br />
Das Geräteemulator-BSP enthält leider zwei Fehler, die das Autostartprogramm betreffen, welches die PC-Verbindung auf "Serial over DMA" konfiguriert. So wird die Verknüpfung zu diesem Programm nur dann im Autostartordner angelegt, wenn man eine Plattform für SmartPhone (IMGTPC) oder Pocket PC (IMGPPC) erstellt. Damit dies für alle Plattformen erfolgt, ändert man die Datei <i>%_TARGETPLATROOT%\FILES\platform.dat</i> wie folgt:<br />
<br />
<code>IF IMGPPC<br />
{BEGIN MULTILANG}<br />
Directory(LOC_%LANGID%_DIRWINDOWSSTARTUP):-File("DMAcnect.lnk","\Windows\DMAcnect.lnk")<br />
{END MULTILANG}<br />
ELSE<br />
Directory(LOC_DIRWINDOWSSTARTUP):-File("DMAcnect.lnk","\Windows\DMAcnect.lnk")<br />
ENDIF ; IMGPPC</code><br />
<br />
Sobald das Programm gestartet wurde, wird die Verknüpfung wieder gelöscht. Damit dies auch in einem deutschsprachigen Emulator Image funktioniert, muß in der Datei <i>%_TARGETPLATROOT%\SRC\APPS\DMACNCT\dmacnect.rc</i> das in englischer Sprache hart kodierte Autostartverzeichnis entsprechend angepaßt werden.<br />
<br />
Nach dem das Emulator Image erzeugt und getestet wurde, kann das SDK erstellt werden. Dies erfolgt in zwei Schritten. Über "Project: Add New SDK..." wird ein SDK dem OS Design hinzugefügt und konfiguriert und über "Build: Build All SDKs..." wird es schließlich erstellt.<br />
<br />
<br />
Nachfolgend ein paar Hinweise zum Ausfüllen der SDK-Eigenschaftsseiten:<br />
<br />
<b>General</b><br />
<br />
Der SDK-Name wird zur Anzeige des SDKs im Geräteemulator-Manager und in diversen Konfigurationsdialogfenstern verwendet. Auch der Installationsordner des SDKs wird so benannt. Der Produktname beschreibt das SDK bei der Installation, Deinstallation und erscheint in der EULA zum SDK. Die Produktversion und die Daten zum Unternehmen werden ebenfalls mit in die EULA übernommen.<br />
<br />
<b>Install</b><br />
<br />
Hier kann man den Zielordner und den Dateinamen des SDK-Installationspaketes nach eigenen Wünschen festlegen.<br />
<br />
<b>CPU Families</b><br />
<br />
Hier wählt man die CPU der Gerätekonfiguration und <i>ARMV4I</i> für die Geräteemulatorkonfiguration aus. Beim Übernehmen der Einstellungen kann es zu einer Fehlermeldung kommen, falls die Konfiguration einer CPU nicht genau spezifiziert wurde. In diesem Fall markiert man die entsprechende CPU und wählt nach Betätigen der Schaltfläche "Edit" die gewünschte Release-Konfiguration aus.<br />
<br />
<b>Development Languages</b><br />
<br />
Hier wählt man beide Optionen aus (Native/Managed development support).<br />
<br />
<b>Emulation</b><br />
<br />
Um das Emulator Image dem SDK hinzuzufügen, wählt man hier als Konfiguration "Device Emulator ARMV4I Release" aus. Dem Geräteemulator sollte mindestens 128 MB, besser 192 MB, Speicher zugeordnet werden. Die Bildschirmauflösung darf maximal 800x600x16 BPP betragen.<br />
<br />
<br />
Schließt man das SDK-Eigenschaftsfenster mit OK, erscheint die Konfigurationsdatei im Projektmappen-Explorer unterhalb des Ordners "SDKs". Über das Kontextmenü kann das Software Development Kit jetzt erstellt werden.<br />
<br />
Nach der Installation des SDKs steht die Plattform in Microsoft Visual Studio 2005, im Connectivity Manager und im Geräteemulator-Manager zur Verfügung.<br />
<br />
Jedes Emulator-Image von Windows Embedded CE 6.0 läuft auf meinem Rechner übrigens mindestens um die Hälfte langsamer als ein Image, welches mit dem Device Emulator ARMV4I BSP unter Windows CE 5.0 erstellt wurde.]]></description>
 <category>Embedded</category>
<comments>http://wolfgang-rolke.de/system-cgi/blog/index.php?itemid=1192</comments>
 <pubDate>Sun, 20 Jul 2008 19:58:08 +0200</pubDate>
</item>
  </channel>
</rss>
