For months I have been trying to figure out why my cross-compiled kernel and rootfs won’t boot on the NSLU2 aka Slug. Since I didn’t want to solder pins for the serial I/O onto the board I tried a quite unique approach: Since the Slug has 4 LEDs that can be easily controlled through GPIO, I could hook up at some function and send all output through the LEDs. Sure this would be slow (~1 character per second, maybe 1.5) but that would be enough to at least read kernel panic messages while retaining full warranty on the hardware.
Finding out how LEDs were controlled took me about 1,5 hours, hooking up and testing first things another hour. I hooked up before the call of init (disk 2 on), right after init (disk 1 on) and on kernel panics (both disk leds on). So what happened: It got init and then crashed with a panic after a few seconds. I figured out I could hook up at uart_console_write() or panic() and then read any output by blinking a byte in 4 steps (one byte on each disk LED, signal indication by setting power to green and “clock” indication through power amber). Well it started blinking for hours and hours and hours… But all I could decode was just infinite rubbish, no matter what I tried. Even a comparison i
Nothing worked - until now....
For some reason I chose msleep() over mdelay(). That was the critical fault.
msleep() seems to suspend the currently running task, so it is non-blocking regarding the whole system.
mdelay() blocks the system (or at least the active CPU) if running single-threaded.
So why was that small change critical to my code? I don’t know exactly. But I know that panic() disables scheduling before any further action. So what happens if some code fragment used by panic() tries to relay on scheduling? Something seems to get corrupted very seriously, maybe some kind of heap or stack overflow happens. Maybe some process/scheduler data gets screwed up. I don’t know. But that seemingly tiny difference of blocking vs. non-blocking functions (what function does what isn’t always that clear if you’re new to Linux kernel programming) really makes a very big difference.
I finally recorded my kernel panic on dv tape and will decode it tomorrow using a simple tool I wrote. If it is finished I will make it available from this website.
Here’s a small excerpt from the ~20 minutes long message transmitting “BUG: sched[...]” (I did not decode more than that yet):
Edit: I decoded all 20 minutes. What was readable (the decoder was a quick and dirty solution since yet) led me to “BUG: scheduling while atomic:” in kernel source and was simply caused by a remaining msleep in my LED function. I got rid of it and now got a clean message “Attempted to kill init!”. Now, that’s where the debugging begins…
After I read about a quite inexpensive (about 65 to 75€) embedded system on a forum two weeks ago, I needed to get one of these myself. The system has two USB host ports and an ethernet interface, 32MB SD-RAM, 8MB flash memory and a 266MHz ARM (Intel XScale) CPU (underclocked @133 MHz until mid 2006 production dates). It’s running Linux with a modified RedBoot bootloader. It’s originally intended to be a NAS server for USB hard drives but can be flashed with different Linux kernels and images. Unfortunately it’s already getting old (first released in 2004) and was reported to be discontinued so I had to decide to buy it now or never. I bought it:
If that device is completely new to you, the article on Wikipedia (en/de) may provide a good starting point for more information on what is possible. If you get interested in it, nslu2-linux.org provides a great resource to answer almost all your questions.
My goal is to get Asterisk, DHCP, DNS, OpenVPN and maybe a small webserver to run on it. However I haven’t reached that yet. (Click the link below to read more.) Read the rest of this entry »
Peter Provost beschreibt in seinem Blog eine interessante Einstellung in Vista, welche die Zahl der CPUs/-Kerne festsetzt. Vista verwendet wohl beim Booten erstmal nur einen Kern, unabhängig davon, wieviele das System tatsache hat. Die manuelle Einstellung auf die volle Anzahl soll das Booten beschleunigen: Speeding Up Vista Boot Time Ob es tatsächlich was bringt kann ich leider nicht nachvollziehen, da ich Vista bei mir eh nur zum Spielen einsetze.
Microsoft beschreibt in der MSDN Library noch was interessantes. Die Speicherlimits von Windows lassen sich über Bootparameter mittels PAE ggf. nochmal höher setzen, wenn diese sich nicht durch andere Optionen bereits aktiviert haben. Dort finden sich auch nochmal Verweise zu anderen nützlichen Optionen:
Danach dachte ich eigentlich hätte ich (inkl. System) meine vollen 4GB RAM zur Verfügung. Bisher zeigt Vista allerdings immernoch 3326 MB im Task-Manager an, genauso wie zuvor. Entweder hat das noch nicht richtig geklappt oder der vom Betriebssystem belegte Speicher wird in der Anzeige verborgen. Ich werd bei Gelegenheit nochmal damit rumprobieren, vielleicht funktionierts ja doch noch. Ob sich PAE evtl. negativ auf die Leistung auswirkt ist mir nicht bekannt.
Nachdem ich einige Zeit lang die “Überwachungsecke” des AK auf meine Webseite eingebunden hatte und hier im Blog mehrmals darauf Bezug genommen habe, sehe ich mich aufgrund der meiner Interpretation nach nicht mehr vollständig legalen Aktionen bzw. des zunehmend starken Bündnisses mit mir dubios erscheinenden Organisationen des AK wie z.B. Critical Mass dazu gezwungen, mich aufgrund der deutschen Rechtslage im Internet von jeglichen Aufrufen zu Aktionen dieser oder ihm verbundenen Organisationen und Personen, sowie allen weiteren Inhalten der Webseiten des AK oder ihm verbundener Organisationen und Personen zu distanzieren. Alle direkten Links zum AK und über 2 Klicks erreichbaren Deep Links werden darum vorsichtshalber von dieser Webseite entfernt.
Diese Selbstzensur ist leider nötig, da es wiederholt Urteile zur Haftung für Links gab, die mich für derartige Verweise haftbar machen, wenn ich bei Bekanntwerden von möglichen Verstößen egal welcher Art nicht sofort Selbstzensur betreibe. Bedauerlicherweise betrifft dies auch Deep Links, sodaß ich gezwungen bin, Verweise auf fremde, volllegale Seiten wie heise.de zu entfernen, welche auf der verlinkten Seite auf den AK unmittelbar weiterverlinken.
Es ist erschreckend, wie tief die Gesetzgebung und die Rechtsprechung in Deutschland bereits gesunken sind, sodaß ich zu diesem Schritt gezwungen bin. Im Rahmen der mir gestatteten freien Meinungsäußerung kann ich daher nur nahelegen, diesen Irrungen auf legalem Wege auch in Zukunft entgegenzutreten; dies schließt z.B. die von mir mitunterzeichnete Verfassungsbeschwerde des AK und angemeldete Demonstrationen und Aktionen zu diesem Thema ein.
Update: Im Kommentar und einem Forum belehrt wurde, handelt es sich bei Critical Mass um eine organisationsunabhängige Aktionsform. Die Initiative und die bisherigen Forderungen des AK Vorrat befürworte ich nach wie vor, jedoch bleibt mir aus rechtlicher Sicht in Anbetracht einer nichtangekündigten Demonstration der Form “Critical Mass” nichts anderes übrig, als den Aufruf dazu – in Form der PagePeel-Ecke – von dieser Seite zu entfernen, ebenso mögliche Deep Links dazu. Aus Konsequenz musste ich leider auch den Link auf den Wikipedia-Artikel zu Critical Mass und den Link auf den AK Vorratsdatenspeicherung aus Kommentar #1 entfernen. Gesponsort wird dieser Griff ins Klo vom LG und OLG Hamburg, die sich beide wiederholt und sehr häufig für eine umfassende Haftung zu fast allem auf Webseiten stark gemacht haben. Ums noch klarer zu machen: Dieser Blog-Eintrag fällt in die Kategorie Disclaimer, damit hat er nichts damit zu tun, wie ich tatsächlich über die Aktionen des AK denke.
If you’re wondering why I post this in English: I felt the urge to post in a way so Google & Co. can find it on the keywords I was unable to get any helpful results for.
In a homework we have to use JAX WS to implement a sample SOAP web service. I don’t understand why we were not simply allowed to continue using Axis (well, they said setting it up on server-side would be too complex – but if you’re just deploying the WAR archive and use the JWS approach without complex types/classes that would have been enough for such an exercise). It’s not only demanding you to use Java 1.6 (which Apple doesn’t think is worth providing a 32 Bit JRE/JDK for; so I can’t use my iBook to work on it) but compared to Axis I found JAX extremely bad documented (or their web site too confusing). I was unable to find the information I was looking for and got stuck on pages telling me how generated files look like after they have been generated. For some reason they just missed to give a fast introduction like “Getting started on implementing a web service” to give a short overview of what’s necessary just to get your workspace and environment up and running.
I thought I would need to setup Tomcat 6, compile, wsgen, write lots of configuration files, WAR everything and then deploy it. I was wrong. After hours of unsuccessful attempts and searches I remembered I saw something about JAX WS on IBM DeveloperWorks some time ago. I headed for their website and there it was: Design and develop JAX-WS 2.0 Web services describes everything you need to know to get started with JAX. It even shows a one-liner to start the web service standalone – without the hassle to deploy it. Just read until at least section 4 (page 8 on PDF) and have a look into the example code, class OrderWebServicePublisher. You’ll be surprised.
BTW: In case you are using Gentoo you may notice some JDK tools are not yet linked to /usr/bin (e.g. wsgen ). You may want to have a look into /opt/sun-jdk-…/bin. Doesn’t affect the Ant task though.
Mir fiel grad durch Zufall auf, daß ich – ohne selbst im Netzwerk tätig zu sein – 27 kB/s an ein- und ausgehendem Traffic hatte. Der Traffic lief über UDP zwischen 2 norwegischen Rechnern, scheinbar als Proxy über mich geleitet. Am Router festgestellt, daß über UPnP exakt dieser Port geöffnet wurde und diesen geschlossen. Seltsamerweise hörte der Traffic aber nicht auf.
Die Lösung: Skype beenden. Scheinbar hat Skype mitbekommen, daß ich nicht länger über ein relativ schmalbandiges 1000er DSL online bin sondern diese Kapazität jetzt bei Inaktivität locker durchleiten kann. Daraufhin bin ich wohl unbemerkt zu einem Vermittlungsknoten im Netzwerk geworden.
Was lernen wir daraus? Skype abstellen wenn mans nicht braucht oder besser gleich ganz und gar darauf verzichten, denn eine Option, Skype diese Vermittlungstätigkeit abzustellen, existiert nicht.
2 Seiten die ich schon länger mal kurz bloggen wollte, aber nie getan hab:
DZone (”fresh links for developers”) ist ein Social Bookmarking-Dienst. Wem das auf Anhieb nichts sagt, dem sei mit der Erwähnung von del.icio.us und Digg oder – im deutschsprachigen Raum etwas bekannter – Mr. Wong evtl. weitergeholfen. Wer die letzten Jahre verpennt hat, dem sei kurz zusammengefasst, daß man auf diesen Webseiten scheinbar interessante Links hinterlassen kann und dann andere Besucher darüber abstimmen, ob diese für die Allgemeinheit interessant sind. Wenn dem so ist, erscheinen die Links in einem sich schnell erneuernden “Best Of” zum bequemen Überfliegen. (Sowas in der Art gibts schon seit einer halben Ewigkeit und heißt Slashdot.) DZone bringt nun nicht Klatsch und Tratsch auf den Schirm, sondern für Entwickler interessante Links, meistens Verweise auf (Entwickler-)Blogs. Die geposteten Links haben zwar (momentan) einen Schwerpunkt auf Java, jedoch kommen auch allgemeinere Themen und andere Sprachen zum Zug. Das Best Of wird auch per RSS exportiert, sodaß es sich anderswo einbinden lässt.
Und damit komm ich zum nächsten Dienst: Netvibes. Dabei handelt es sich um einen Dienst, bei dem sich jeder eine personalisierte Startseite aus Widgets oder Feeds zusammenstellen kann. Die Seite funktioniert dabei komplett mit JavaScript (und natürlich Backend-Abfragen per AJAX o.ä.). Die Nutzung ist kostenlos und erstaunlicherweise bisher auch werbefrei. Genau dort war (und bin) ich skeptisch, was die Verwendung evtl. gesammelter Daten anbelangt. Ich melde mich zwar bei ziemlich viel an, jedoch bleibe ich für gewöhnlich so lange ich mich dem entziehen kann, möglichen “Datenkraken” fern. Bei diesem Dienst dachte ich mir jedoch einfach mal “Augen zu und durch” (ob das sinnvoll war ist eine andere Frage). Netvibes taugt nicht nur gut als Startseite sondern darüber hinaus auch als Feed-Reader, zumal nach einer Registrierung die Seite (jedenfalls meistens) auf allen Rechnern synchron ist, inkl. der Markierung gelesener Einträge. Beim Namen Netvibes mag bei manch einem evtl. noch was klingeln; ich verweise einfach mal auf den Heise-Artikel zu UWA aus dem letzten Jahr (wovon man leider außerhalb von Netvibes bisher nichts mehr gehört hat). Da der Dienst auch ohne Anmeldung nutzbar ist, kann sich jeder gefahrlos selbst ein Bild davon verschaffen.
Wo ich grad meinen Desktop entmiste fielen mir auch wieder 2 kleine Screenshots auf, die Darstellungsfehler in Compiz Fusion zeigen. Dabei wurden Anzeigen (insbesondere Texte) mehrfach überschrieben, wenn sich der betroffene Teil des Fensters während des Updates außerhalb des sichtbaren Desktopbereichs befand:
Der Fix war einfach eine weitere Option in die Device-Section einzufügen: