<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3975835529053559015</id><updated>2011-12-15T01:01:13.893-06:00</updated><category term='bug Ada GNAT RTEMS'/><category term='bug embedded corruption'/><category term='debugging shell RTEMS'/><category term='Firefox spellcheck'/><category term='Fedora upgrade yum X11'/><category term='gmail spam'/><category term='debugging gdb RTEMS SPARC SIS'/><category term='SMP'/><category term='user interface least surprise'/><category term='space RTEMS embedded satellites avionics MMS Goddard'/><category term='RTEMS Graphics svgalib GSOC'/><title type='text'>RTEMS Ramblings by Dr Joel</title><subtitle type='html'>A blog of what I hope are interesting tales from the embedded software trenches.  Interesting bugs, tricks, tips, etc.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-6480017233837856345</id><published>2011-11-20T14:31:00.001-06:00</published><updated>2011-11-20T15:16:37.281-06:00</updated><title type='text'>MINIX versus Linux versus BSD</title><content type='html'>This morning an &lt;a href="http://linuxfr.org/nodes/88229/comments/1291183"&gt;article&lt;/a&gt;&amp;nbsp;was posted to &lt;a href="http://bsd.slashdot.org/story/11/11/20/1427227/andrew-tanenbaum-on-minix-linux-bsd-and-licensing"&gt;Slashdot&lt;/a&gt;&amp;nbsp;in which Andrew Tanenbaum is interviewed. &amp;nbsp;One question and answer from the interview seemed to draw the most reaction on &lt;a href="http://www.slashdot.org/"&gt;Slashdot&lt;/a&gt;. &amp;nbsp; &amp;nbsp;&lt;a href="http://linuxfr.org/"&gt;LinuxFr.org&lt;/a&gt; asked: "&lt;i&gt;If you could return in the past to change the MINIX original proprietary licence to the GPL licence, do you think your system might have become the dominant free OS today?&lt;/i&gt;". &amp;nbsp;Andrew Tanenbaum answered:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Never. The reason MINIX 3 didn't dominate the world has to do with one mistake I made about 1992. At that time I thought BSD was going to take over the world. It was a mature and stable system. I didn't see any point in competing with it, so I focused MINIX on education. Four of the BSD guys had just formed a company to sell BSD commercially. They even had a nice phone number: 1-800-ITS-UNIX. That phone number did them and me in. AT&amp;amp;T sued them over the phone number and the lawsuit took 3 years to settle. That was precisely the period Linux was launched and BSD was frozen due to the lawsuit. By the time it was settled, Linux had taken off. My mistake was not to realize the lawsuit would take so long and cripple BSD. If AT&amp;amp;T had not brought suit (or better yet, bought BSDI), Linux would never have become popular at all and BSD would dominate the world.&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;Now as we are starting to go commercial, we are realizing the value of the BSD license. Many companies refuse to make major investments in modifying Linux to suit their needs if they have to give the code to their competitors. We think that the BSD license alone will be a great help to us, as well as the small size, reliability, and modularity.&lt;/blockquote&gt;&lt;br /&gt;&lt;div&gt;My first UNIX experience was in the 1984-85 timeframe and my first job out of college was developing software for intelligent I/O controllers for a UNIX System V mini-computer. &amp;nbsp;I remember what commercial UNIX was like in those days. You may have wanted it but the options were limited and expensive. &amp;nbsp;On the 80286, you had XENIX. &amp;nbsp;When the i386 came out, there were a number of nice options including Interactive 386/ix and even SCO UNIX. &amp;nbsp;Yes SCO had a decent product back in the day.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I could finally afford a computer capable of running some UNIX-ish system, I found myself in on the consumer side of what the question is about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;From my perspective, I didn't use MINIX because I viewed it as an educational and teaching OS. Its desired user base was not "real" users doing non-academic work. &amp;nbsp;We had experimented with it in our labs at work and found it quite primitive in comparison to the "real UNIX" we were used to. &amp;nbsp;Personally, I found the acquisition process painful as well. &amp;nbsp;But all UNIXy systems were painful to get back then. &amp;nbsp;The focus on educational users was it for me. &amp;nbsp;I don't ever want to be the "odd user" of anything who is not in the desired target audience for a product.&lt;br /&gt;&lt;br /&gt;Why did I choose a Linux distribution over a BSD? &amp;nbsp;I honestly don't remember. &amp;nbsp;My vaguest recollection is that I preferred System V more than BSD&amp;nbsp;systems&amp;nbsp;and Linux leaned to System V. &amp;nbsp;I doubt this was a factor for most others though. &amp;nbsp;If I had to guess, I would go back and look at how you had to obtain it, community responses to newbies, etc.. Was the AT&amp;amp;T lawsuit have factor? Maybe. Linux was certainly perceived to be immune from that lawsuit among those I knew. &amp;nbsp;It did not suffer from that heritage.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Finally, I want to look back with the free software community building experience I have. &amp;nbsp;When viewed from this perspective and the prism of time, I think the answer has a lot to do with what we should have learned from &lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code&lt;/a&gt;. A project has to be easy to obtain, get started with, contribute to, have a vibrant and friendly community, etc.. The license is important but as long as it is imposes legal impediments or obligations, that won't stop most people. &amp;nbsp;In the old days, Minix was not really easy to obtain and was not focused on general use. It was not available as an impulse download. That was enough of a hurdle to stop a lot of folks. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;When one examines the choices faced by someone who wanted a UNIX-like system on their personal computer in the early 1990's, it is easy to see how Linux was the default choice. &amp;nbsp;It simply did not have the "targeted to teaching operating systems" stigma, was easy to obtain, and didn't have a lawsuit looming over its head. &lt;br /&gt;&lt;br /&gt;But one of the nice things about free software is that if there is interest, a project will continue on. &amp;nbsp;&lt;a href="http://www.minix3.org/"&gt;MINIX 3&lt;/a&gt;&amp;nbsp;is a great OS that has a BSD-style &lt;a href="http://www.minix3.org/license.html"&gt;license&lt;/a&gt;, is easy to obtain, and they are clearly interested in MINIX 3 being used for more than teaching operating systems design. &amp;nbsp;Variety is the spice of life. &amp;nbsp;I would recommend that you give it a try and tell them I sent you.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-6480017233837856345?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/6480017233837856345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/11/minix-versus-linux-versus-bsd.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6480017233837856345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6480017233837856345'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/11/minix-versus-linux-versus-bsd.html' title='MINIX versus Linux versus BSD'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-6259301477351610427</id><published>2011-11-10T16:41:00.001-06:00</published><updated>2011-11-10T16:53:09.411-06:00</updated><title type='text'>Open Source and Generational Differences</title><content type='html'>&lt;br /&gt;It is time again for another entry from guest blogger Chris Johns. Chris and I have chatted and emailed a lot over the past few months about the issues in this post. They are tough because it is always hard to question your decisions and embrace change. But it is critical to do so on anything that is long-term in your life. RTEMS is a long-term software projects and we need to embrace self-examination and change. &lt;br /&gt;&lt;br /&gt;Developers start projects to scratch itches or to bring about change. They join projects as users because they need to use a piece of software. They get involved because they to need to fix bugs or develop new features. The reasons are many, well documented and understood by those who work in or around open source software. What happens when a project becomes old enough that generational change is needed and those who start a project reach an age where they do not have the energy, mental capacity or desire is not well understood. As a project and its leadership age do they move from being intensive productive developers to mentors and governors of the project. Understanding this change is difficult as the interests and focuses of the newer generations are different and sometimes clash with the original developers yet both are right and neither are wrong. The primary function of the project maybe the same, the way it is developed and maintained can be different. Open source is starting to reach this point and some projects have such a long life cycles in user projects it is starting to become an issue. RTEMS is such a project. It is used in space flight and some new projects do not take flight until 2018. Being open source each user has the code and can make changes long past the life of the project, but it is the project and community this discussion is about.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RTEMS is now 22 years old. It is able to drink, vote and hold a drivers license in most countries. It has experimented with a few things it should not have and so far has not been in trouble with the law. You could say it has had a stable and happy up bring. RTEMS is now looking to the future and life without the current custodians.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RTEMS at its core is a collection of C source files that are built into a C library and linked with user application code to provide single executable image often embedded into a custom piece of hardware. The key factors for the user of this device is performance, resources and stability. The key factors for the developer of this device is availability of source code, easy to use software interfaces, easy to integrate into a team environment, and stability of the project. The key factors for the maintainers of RTEMS is the ability to effectively integrate changes, respond to hardware changes, stable infrastructure and the ability to attract new developers. Developers are the food source that feeds, refreshes and sustains a project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RTEMS in its post toddler years moved to a new version control tool called CVS that allowed concurrent development of the code. It was liberating because a single set of code did not have to be maintained. Before CVS patches were emailed to the maintainer, merged and then released back to developers as tar files. With CVS this task could be spread among a number of trusted developers. RTEMS also moved from custom makefiles to autoconf and automake. This improved the productivity of the developers allowing the code to be configured and built on a range of host operating systems. RTEMS still uses these same tools 10 to 15 years later and they still work. The developers are comfortable with their work flow and know the problems or issues they have. Why the need to change? There are problems and over time these have grown in size as the project has grown. What were problems are now distance memories and all we have left is the new problems that came with the tools.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We have files in places that have long since lost there meaning. The board support packages is an example. They are located under 'c/src/lib/libbsp' when they could be located in 'libbsp' or even 'bsps'. This path does not effect the build time or the disk space used and the developers know this path very well so why is this a problem. It makes no sense. Any new users of RTEMS, and by new I mean anyone who has joined in the last 10 years, would have no idea why this structure exists. RTEMS use to have an Ada version and all code was under 'c' or 'ada' and the source was under 'c/src'. Why not move the files? We cannot because CVS does not have a rename command and repository hacks are something we discourage.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Would we move them if CVS allowed it? Maybe, however this effects the build system. Why is that a problem, is there something wrong with it? Building RTEMS is complex. As a user of RTEMS a release comes with all the autotool's generated files in place ready to work. You can configure RTEMS with a few options passed to configure, plus provide a few more on the command line to the build a range of BSP specific options and then at runtime you have a large array of configurations and runtime options. Are these documented? Only a small number are. The user needs to look into the source to find the full set and even for a seasoned developer this can be complex and not accurate or complete. As a user you just build RTEMS and that does happen and it does it well. By well I mean you get a library of code that is stable and will perform the task asked. As a developer you need to work with the build system and this is where problems start to appear. Performance is an issue. A clean check out from CVS requires a bootstrap to generate all the autoconf and automake files as they are not held in the repository and this can take a lengthy period of time even on large hosts and fast disks. Fortunately this is not often needed as the maintainer mode helps how-ever it makes build-bot type support on check in difficult if not impossible. Also contributing to this is the repeated installing of header files. If you build all 120+ BSPs you will install over 50,000+ header files. This is just building RTEMS and does not include installation of the build output. When installing the 50,000+ files are copied to the install paths. Does this seem normal or ok? Maybe there really needs to be this many headers, or maybe header files have been added to RTEMS following a common template with little regard to the consequence and over the years this has grown to this figure. Most users are only interested in one or two BSPs so this is not a major issue. For a maintainer is it a problem because they need to make sure everything builds and works.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;I suppose the important questions regarding the build system are "Is it efficient given the new generation of build tools?" and "Does it aid or inhibit the development process?". These are debatable questions which span the boundaries of technical merits, broad range support, supported hosts, and personal preferences. This last one being the most contentious.&lt;div&gt;&lt;br /&gt;The question the current developers and maintainers of RTEMS need to ask is not "Are these tools working and doing the job they are suppose to?", rather if we handed the project to a new group of developers and maintainers "What would new maintainers think of the state of the project?". While we may be comfortable and able to release and maintain RTEMS it may look to a new generation as something from a time past.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Change is never easy. There needs to be leadership, desire and willingness to refresh to bring about change. It is easy to be negative and to find fault in any new change, then offer no path forward. Leading is not always about "What I think is right", it is about being honest and openly critical of how we work and approach problem solving, and it is about providing paths to new ways of solving problems we face in the project. Not all paths will succeed how-ever being open to change means a new path can be taken until a solution found. Inviting new and young talent to follow these paths and find solutions involves them in the project. They become responsible for various parts and that builds pride and commitment. The hope being someday they will be managing and leading the project.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-6259301477351610427?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/6259301477351610427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/11/open-source-and-generational.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6259301477351610427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6259301477351610427'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/11/open-source-and-generational.html' title='Open Source and Generational Differences'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-6565363858699444550</id><published>2011-10-28T11:09:00.003-05:00</published><updated>2011-10-28T14:17:26.475-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='space RTEMS embedded satellites avionics MMS Goddard'/><title type='text'>Flight Software Workshop and Goddard Space Center Visit</title><content type='html'>OAR was a sponsor of &lt;a href="http://flightsoftware.jhuapl.edu/"&gt;2011 Workshop on Spacecraft Flight Software &lt;/a&gt; at the &lt;a href="http://www.jhuapl.edu/"&gt;John Hopkins University Applied Physics Laboratory&lt;/a&gt; held October 20 - 22 2011. This was the first time OAR had been an event sponsor and the first time &lt;a href="http://www.rtems.org/"&gt;RTEMS&lt;/a&gt; stickers have ever been given away. We had spent weeks preparing a new table top display for RTEMS, updating flyers for the project and our services, and having stickers made. The preparation was a lot of work that was outside our primary skill sets. Jennifer Averett is a core RTEMS developer who did the artwork. We are technical folks and not marketing or sales types. If you have ever worked with us to get a quote, you would know. Hence this was a challenge. If you have any suggestions on our display, flyers, etc., please share them.&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;div class="separator" style="clear: both; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://a6.sphotos.ak.fbcdn.net/hphotos-ak-ash4/291868_10150343021016589_539166588_8421894_840686816_n.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://a6.sphotos.ak.fbcdn.net/hphotos-ak-ash4/291868_10150343021016589_539166588_8421894_840686816_n.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Chris is much more special.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Mark Johannes, Chris Johns, and I were fortunate enough to have Alan Cudmore take us on a tour of &lt;a href="http://www.nasa.gov/centers/goddard/home/index.html"&gt;Goddard Space Center&lt;/a&gt;. We first visited their &lt;a href="http://en.wikipedia.org/wiki/SpaceCube"&gt;SpaceCube&lt;/a&gt; &lt;a href="http://www.nasa.gov/centers/goddard/multimedia/galleries/top_images/SpaceCube.html"&gt;lab&lt;/a&gt; and saw the smaller current generation and a larger newer one which had been flown on a sounding rocket. &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://a3.sphotos.ak.fbcdn.net/hphotos-ak-snc7/298841_10150343019926589_539166588_8421870_1581293025_n.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://a3.sphotos.ak.fbcdn.net/hphotos-ak-snc7/298841_10150343019926589_539166588_8421870_1581293025_n.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;MMS "Flat Sat" Work Area&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Alan showed us the &lt;a href="http://mms.gsfc.nasa.gov/"&gt;MMS&lt;/a&gt; laboratory where we chatted and learned about their workflow. The lab included a “flat sat” version with the electronics of a single node from the constellation. Their laboratory also included hardware required to test the system driving all inputs. Very impressive. &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://a8.sphotos.ak.fbcdn.net/hphotos-ak-ash4/316632_10150343020766589_539166588_8421888_1339794812_n.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://a8.sphotos.ak.fbcdn.net/hphotos-ak-ash4/316632_10150343020766589_539166588_8421888_1339794812_n.jpg" width="150" /&gt;&lt;/a&gt;The laboratory setup was very nice but we were all shocked when we saw the MMS assembly area and how large each of the four satellites in the constellation was. We expected birthday cake size and they are the diameter of a large rocket body. Each satellite is running a hardened Coldfire CPU with RTEMS and application software built on top of the Core Flight Executive.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;Although not running RTEMS, seeing the &lt;a href="http://www.jwst.nasa.gov/"&gt;James Webb Telescope&lt;/a&gt; and &lt;a href="http://hubblesite.org/the_telescope/team_hubble/servicing_missions.php"&gt;Hubble Service Mission&lt;/a&gt; assembly areas was a real treat. It is ultimately about the science and I am proud RTEMS is a part of it.&lt;br /&gt;&lt;br /&gt;The&amp;nbsp;Workshop on Spacecraft&amp;nbsp;Flight Software &amp;nbsp;was a real treat. Gedare Bloom and his wife joined Chris, Mark, and I there. I have been to the last three FSW's and have been blown away repeatedly at the incredible work being done by this community. As might be expected, we collectively were delightfully pleased to see so many people using or considering RTEMS. It is quite humbling. Many attendees shared their RTEMS experiences and plans with us.  The presentations were video recorded and should be available with slides in the near future. &amp;nbsp;Presentations and video from previous years is also available online. &lt;br /&gt;&lt;br /&gt;All in all, it was a fabulously rewarding experience getting to meet so many people, tour Goddard Space Center, and hear about so many projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-6565363858699444550?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/6565363858699444550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/flight-software-workshop-and-goddard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6565363858699444550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6565363858699444550'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/flight-software-workshop-and-goddard.html' title='Flight Software Workshop and Goddard Space Center Visit'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-4020886031532175928</id><published>2011-10-20T08:30:00.002-05:00</published><updated>2011-10-20T08:30:45.165-05:00</updated><title type='text'>Johnson Space Center Visit</title><content type='html'>&lt;br /&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;I recently was invited to teach a weeklong RTEMS class to 14 people at &lt;a href="http://www.nasa.gov/centers/johnson/home/index.html"&gt;Johnson Space Center&lt;/a&gt; (JSC) .  Multiple projects are considering using RTEMS and two arebeing the trailblazers which bring RTEMS to JSC.  Before sayinganything else, I want to thank the folks who invited me and were suchgood hosts.  In addition to a self-guided tour of the Rocket Park, Igot a field trip where I got to see a few of the interesting thingsat JSC.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;A complete set of photos from my fieldtrips are in a &lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_34071316"&gt;&lt;/span&gt;Facebook album&lt;span id="goog_34071317"&gt;&lt;/span&gt;&lt;/a&gt;. My field trips included seeing theSaturn V rocket, space suits that had been to the moon, Morpheuslunar lander, and the infamous Building 9 where the ISS and spaceshuttle training modules, &lt;a href="http://en.wikipedia.org/wiki/Canadarm"&gt;CanadARM&lt;/a&gt;, and zero-gravity practicefacilities.  It also includes a small area of cool projects thatdidn't make the cut including &lt;a href="http://robonaut.jsc.nasa.gov/default.asp"&gt;Robonaut&lt;/a&gt; and the movie-scary&lt;a href="http://spidernaut.jsc.nasa.gov/"&gt;Spidernaut&lt;/a&gt;.  Everything I saw was impressive but much of it leavesyou with an unsettling feeling of sadness when you realize it hasbeen almost forty years since man went to the moon and, with the endof the shuttle program, we have no ability to put a person in orbit. Big science is not cheap and takes years of effort, but without it,we quit learning more about our universe, getting insight into basicphysics, and solving the hard problems. &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;The &lt;a href="http://morpheuslander.jsc.nasa.gov/"&gt;Morpheus&lt;/a&gt;&amp;nbsp;lunar lander isone of the two projects taking the leap and switching to RTEMS.  Ithas already had multiple successful test flights and at least one“interesting” one (&lt;a href="http://morpheuslander.jsc.nasa.gov/"&gt;videos&lt;/a&gt;).  Morpheus uses a PowerPC basedcomputer system and is built using the &lt;a href="http://gsfctechnology.gsfc.nasa.gov/MissionCost.html"&gt;Core Flight Executive&lt;/a&gt; from&lt;a href="http://www.nasa.gov/centers/goddard/home/index.html"&gt;Goddard Space Center&lt;/a&gt;.  CFE has long supported RTEMS and as moreapplications are based upon it, I am sure we will see at least a fewof those applications use RTEMS.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;DownMASS is a small automatedcapsule that can be filled with contents that need to be shipped fromthe &lt;a href="http://www.nasa.gov/mission_pages/station/main/"&gt;International Space Station (ISS)&lt;/a&gt;.  It is being designed to holdapproximately 100 pounds (43.5 kg) of cargo.  When filled and releasedfrom the ISS&amp;lt; it will reenter the Earth's atmosphere andeventually deploy its parachutes.  The hardware configuration forprototyping is using a ruggedized embedded PC-104 system.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;I am thrilled to see more spaceapplications using RTEMS – especially since have applications atJohnson opens a potential path to having man-rated applications usingRTEMS.  Thanks to Morpheus and DownMASS for giving RTEMS a chance.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-4020886031532175928?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/4020886031532175928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/johnson-space-center-visit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4020886031532175928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4020886031532175928'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/johnson-space-center-visit.html' title='Johnson Space Center Visit'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-5981584158569389605</id><published>2011-10-16T13:28:00.003-05:00</published><updated>2011-10-16T13:29:00.143-05:00</updated><title type='text'>Google Code In 2011 Announced</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-r-9PCaFd-W8/Tpdkis9cQCI/AAAAAAAAAR8/Umgq1ojFRiI/s1600/GCI_2011_logo_URL_blueborder-nowww.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="132" src="http://4.bp.blogspot.com/-r-9PCaFd-W8/Tpdkis9cQCI/AAAAAAAAAR8/Umgq1ojFRiI/s200/GCI_2011_logo_URL_blueborder-nowww.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;The 2011 edition of&amp;nbsp;&lt;a href="http://www.google-melange.com/gci/homepage/google/gci2011"&gt;Google Code-In&lt;/a&gt;&amp;nbsp;has been announced. &amp;nbsp;Google Code-In is a unique opportunity for up and coming hackers. &amp;nbsp;It is a competition, an open source development contest for 13-17 year old students around the world. The purpose of the Google Code-in competition is to give students everywhere an opportunity to explore the world of open source development. We not only run open source software throughout our business, we also value the way the open source model encourages people to work together on shared goals over the Internet.&lt;br /&gt;&lt;br /&gt;Each participating project identifies a variety of tasks which students can choose to perform. &amp;nbsp;Tasks are not just coding - they can involve documentation, testing, or outreach. &amp;nbsp;These are the categories:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Code: Writing or &lt;a href="http://en.wikipedia.org/wiki/Code_refactoring"&gt;refactoring code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Documentation: Creating and editing documents&lt;/li&gt;&lt;li&gt;Outreach: Community management and outreach, as well as marketing&lt;/li&gt;&lt;li&gt;Quality Assurance: Testing and ensuring code is of high quality&lt;/li&gt;&lt;li&gt;Research: Studying a problem and recommending solutions&lt;/li&gt;&lt;li&gt;Training: Helping others learn more&lt;/li&gt;&lt;li&gt;Translation: Localization (adapting code to your region and language)&lt;/li&gt;&lt;li&gt;User interface: User experience research or user interface design and interaction&lt;/li&gt;&lt;/ol&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash4/294337_10150323831041589_539166588_8312360_1531315058_n.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="239" src="http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash4/294337_10150323831041589_539166588_8312360_1531315058_n.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Black stickers are friom Google Code-In task&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The &lt;a href="http://www.rtems.org/"&gt;RTEMS Project&lt;/a&gt;&amp;nbsp;was fortunate to be one of the twenty organization that participated in the &lt;a href="http://code.google.com/opensource/gci/2010-11/index.html"&gt;2010 edition of Google Code-In&lt;/a&gt;. We identified about 150 potential tasks had almost 100 tasks done by a variety of students. &amp;nbsp;One of the highlights was a new RTEMS logo which we are using on stickers and project calling cards. Another student modified the shell scripts which generate our test coverage reports to add a &lt;a href="http://www.rtems.org/ftp/pub/rtems/people/joel/coverage/erc32/graphs/timeplot-erc32.html"&gt;timeline capability&lt;/a&gt;. &amp;nbsp;Some students created Wiki pages for the Board Support Packages that did not have one. &amp;nbsp;And still other students created question sets for the &lt;a href="http://moodle.rtems.org/"&gt;RTEMS Moodle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The RTEMS Project is planning on applying again this year. &amp;nbsp;We have some new tasks in mind for those students who volunteer. &amp;nbsp;It was an interesting and challenging holiday season for the RTEMS mentors. &amp;nbsp;I know that I personally did a lot of Google Code-In mentoring and task approval using my phone while visiting family. &amp;nbsp;We are looking forward to the opportunity be a part of&amp;nbsp;&lt;a href="http://www.google-melange.com/gci/homepage/google/gci2011"&gt;Google Code-In 2011&lt;/a&gt;&amp;nbsp;and to be challenged by the students.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-5981584158569389605?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/5981584158569389605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/google-code-in-2011-announced.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5981584158569389605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5981584158569389605'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/google-code-in-2011-announced.html' title='Google Code In 2011 Announced'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-r-9PCaFd-W8/Tpdkis9cQCI/AAAAAAAAAR8/Umgq1ojFRiI/s72-c/GCI_2011_logo_URL_blueborder-nowww.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-9006979489642917934</id><published>2011-10-14T12:22:00.000-05:00</published><updated>2011-10-14T12:22:07.130-05:00</updated><title type='text'>RTEMS Configuration and Resource Limits</title><content type='html'>This post started as an answer to a question from an &lt;a href="http://sophia.estec.esa.int/socis2011/"&gt;ESA Summer of Code In Space&lt;/a&gt; student.  She had hit one of the things that every person new to RTEMS hits at one point.  She attempted to create a pthread mutex via pthread_mutex_init() during the package's initialization.  It failed and returned EAGAIN.  This was an especially  surprising error since it happened in a C++ global constructor which was executed before the first task was entered.  It appeared to her that RTEMS was not initialized or something even weirder was wrong.  RTEMS was, in fact, initialized and since C++ global constructors are supposed to run before main().  On RTEMS, we run them in the context of the first user task which executes.&amp;nbsp;Let me start with an obvious and decidedly unhelpful assertion:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;RTEMS != GNU/ Linux&lt;/div&gt;&lt;br /&gt;I am sure that didn't help at all to understand why she got an out of resources error.  But it is a lead-in to try to explain the philosophical difference between RTEMS and GNU/Linux that leads us to this.  The error she encountered was is in fact an out of resources error.  Most people start programming on operating systems that do not discourage you from using dynamic allocation and do not put restrictive limits on the number of instances of an object class you can create.  For example, on a GNU/Linux system, you don't worry about how many instances of an OS object you create.  There are often limits but these are so high as to not present problems. But the Linux kernel does have some behavioural and limits configuration parameters available to the end user. &amp;nbsp;If you are curious about these, see &lt;i&gt;/etc/sysctl.conf&lt;/i&gt;&amp;nbsp;and &lt;i&gt;sysctl(8)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;In contrast, RTEMS is a member of a class of real-time operating systems that was designed for to target systems with safety and hard real-time requirements.  There are often limited computing resources. In this design view, it is better to pre-allocate as much as possible so you don't have to deal with running out of resources at run-time.  This makes the resulting system safer and less likely to have a weird failure mode in this situation. It is not uncommon for the entire set of tasks, semaphores, etc. to be well known and listed in the application design documentation. &amp;nbsp;Configuring the resources required is common in this environment.   Moreover, it is not uncommon for &lt;i&gt;malloc()&lt;/i&gt; to be forbidden after system initialization.  There is nothing inherently right or wrong with either of these contrasting philosophies.  They are just different approaches given different system requirements.&lt;br /&gt;&lt;br /&gt;In RTEMS you configure the maximum number of each type of object you want.  The defaults tend to be 0.  Memory is reserved for RTEMS separate from the C Program Heap based upon your cofniguration requests.  The sample in &lt;i&gt;testsuites/samples/ticker&lt;/i&gt; has the following configuration in the file &lt;i&gt;system.&lt;/i&gt;h:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#include &lt;bsp.h&gt; /* for device driver prototypes */&lt;br /&gt;&lt;br /&gt;#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER&lt;/bsp.h&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER&lt;br /&gt;&lt;br /&gt;#define CONFIGURE_MAXIMUM_TASKS      4&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#define CONFIGURE_RTEMS_INIT_TASKS_TABLE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#define CONFIGURE_EXTRA_TASK_STACKS  (3 * RTEMS_MINIMUM_STACK_SIZE)&lt;br /&gt;&lt;br /&gt;#include &lt;rtems confdefs.h=""&gt;&lt;br /&gt;&lt;/rtems&gt;&lt;/span&gt;&lt;br /&gt;The ticker application says it needs a console (used for stdio) and clock tick (time passage) device drivers.  It may have a maximum of four concurrently instantiated Classic API tasks. It is using a Classic API style initialization task -- the alternative is a POSIX Threads initialization thread.  And each of the tasks it is creating has a stack larger than the minimum required.  It is assumed that each task requires only the minimum amount of stack space so we have to tell the RTEMS configuration to reserve some extra memory for those that are larger than minimum.  You can look at the calls to &lt;i&gt;rtems_task_create()&lt;/i&gt; in &lt;i&gt;init.c&lt;/i&gt; for the calling parameters that indicate the desired stack size.&lt;br /&gt;&lt;br /&gt;The hello world sample application is simpler.  It doesn't need a Clock device driver and would only have one task.  Your application will likely have a more complicated configuration than hello world but it doesn't need to specify any configuration parameters unless it requires that class of object to be supported.&lt;br /&gt;&lt;br /&gt;Our young programmer simply missed defining CONFIGURE_MAXIMUM_POSIX_MUTEXES to however many is required.  This is an RTEMS specific issue that is not done on non-embedded operating systems.&lt;br /&gt;&lt;br /&gt;With all that background on the hard limit focus on RTEMS configuration, it is easy to forget that RTEMS also has "unlimited object creation mode" and "unified workspace" options.  This is probably more useful for our intrepid programmer at this stage.  These configuration options lets you specify that you want a potentially unlimited number of a class of objects and that you want the RTEMS Workspace and the C Program Heap to be the same pool of memory.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#define CONFIGURE_MAXIMUM_POSIX_MUTEXES \&lt;br /&gt;&amp;nbsp; &amp;nbsp; rtems_resource_unlimited( 5 )&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES \&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; rtems_resource_unlimited( 10 )&lt;br /&gt;#define CONFIGURE_UNIFIED_WORK_AREAS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The above specifies that POSIX mutexes and condition variables are "unlimited" but the set is extended by five (5) instances of mutexes and ten (10) instances of condition variables at a time.  When you create the sixth mutex instance, instances 6-10 will be added to the inactive pool for that object class.&lt;br /&gt;&lt;br /&gt;The full set configuration macros are (hopefully) well documented in the Configuring a System chapter of the RTEMS User's Manual.  This is a link to the appropriate section for RTEMS 4.10.1:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rtems.org/onlinedocs/releases/rtemsdocs-4.10.1/share/rtems/html/c_user/c_user00414.html"&gt;http://www.rtems.org/onlinedocs/releases/rtemsdocs-4.10.1/share/rtems/html/c_user/c_user00414.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For normal application development, that's really about all there is to this issue.  If you get an out of resources error, you will need to raise the limit.  When looking inside the code, any time you see a NULL returned from _Objects_Allocate() fail, it is a maximum objects issue.  If you see a task, thread or message queue create fail, then you are not accounting for variable memory like stack space or message buffers which must be allocated when the&amp;nbsp;object instance is created.&lt;br /&gt;&lt;br /&gt;Since our intrepid young lady is actually porting a software package, let me throw out another thought &amp;nbsp;which impacts this situation.  There is likely a fixed base set of objects the package creates such as for global mutexes or message queues.  A user of package X&amp;nbsp;will create instances of objects that it defines.   So if the package X has a macaroni object that requires a mutex, condition variable, and a message queue, then you can let the end user of package X know that for each macaroni instance, they need to reserve A, B, and C.  For certain cases, like the tasking in Ada and Go, RTEMS provides higher level configuration helpers like CONFIGURE_MAXIMUM_ADA_TASKS to encapsulate this configuration information.&lt;br /&gt;&lt;br /&gt;I know my answer to her was a over the top but I realized that she had run into something that many others hit when using RTEMS for the first time.  I really wanted her, and now you, to understand this part of RTEMS.  Figuring out how many of each kind of object when developing an application can be tough but figuring that same information out when porting a software package is can really be a challenge.  Embedded developers focused on safe, reliable systems don't like surprises and using various techniques to avoid running out of resources at run-time is a big part of it. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-9006979489642917934?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/9006979489642917934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/rtems-configuration-and-resource-limits.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/9006979489642917934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/9006979489642917934'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/10/rtems-configuration-and-resource-limits.html' title='RTEMS Configuration and Resource Limits'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-2480222075999801998</id><published>2011-09-16T15:50:00.000-05:00</published><updated>2011-09-16T15:50:10.822-05:00</updated><title type='text'>Elvis Costello and RTEMS.info History</title><content type='html'>Over the years, I have told many RTEMS users that I provide hosting and system administration for an Elvis Costello fan site (&lt;a href="http://www.elviscostellofans.com/phpBB3/"&gt;PHPBB Forum&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.elviscostello.info/wiki/index.php/Main_Page"&gt;Wiki&lt;/a&gt;). &amp;nbsp;I have had the fan site for about 9 years now. &amp;nbsp;What many of you probably don't realize is that I have also hosted the &lt;a href="http://www.rtems.info/"&gt;RTEMS.info Mirror Site&lt;/a&gt;&amp;nbsp;since 2006. &lt;br /&gt;&lt;br /&gt;This is a personal effort and I receive no subsidy from OAR for doing this. &amp;nbsp;In order to have a static IP address and host services, I have to have a business class account which is more than a residential class account. &amp;nbsp;All of the sites I host plus the family Internet activities&amp;nbsp;share a 7Mbps/1Mbps connection.&lt;br /&gt;&lt;br /&gt;I had been helping on the technical side of administrating the Elvis Costello Fan Forum for a while when the hosting service got hacked and our site trashed. &amp;nbsp;We were unable to get anyone to contact us via email or phone for over a week. &amp;nbsp;I realized that I had a computer running GNU/Linux Fedora that was largely unused since I had upgraded. &amp;nbsp;Even though it was only a 350 Mhz Pentium II with 384MB RAM, it was perfectly suitable to host a small (~100K hits a day) website. &amp;nbsp;I made a phone call to get a static IP address, moved the domains and within about a week we were back up. &lt;br /&gt;&lt;br /&gt;A couple of years after that, the person who ran the Elvis Costello Wiki asked if I could host it. &amp;nbsp;I had already planned to upgrade to a 2.4 Ghz Pentium 4 with 2GB RAM. &amp;nbsp;We decided to wait to move the Wiki until after the server upgrade. The hardware upgrade went easily and we moved the Wiki. &amp;nbsp;What surprised us both was that the performance on the site went to hell. &amp;nbsp;The server logs showed nothing, load looked low and no amount of tuning or probing helped. I begged my ISP for help and got an unlocked, uncapped cable modem to test with. &amp;nbsp;After more research and fighting, I learned that my router could not hand the number of simultaneous connections and was dropping them randomly. &amp;nbsp;I upgraded routers and the performance issues were settled. &lt;br /&gt;&lt;br /&gt;The site has always used external hard disks for backup. &amp;nbsp;There is a script which runs every night and dumps all user directories, databases, etc to a special directory on an internal disk. &amp;nbsp;Then another which runs later and "rsync's" the internal disk copy with an external one. &amp;nbsp;Backups are placed in dated directories and a few a month are saved.&lt;br /&gt;&lt;br /&gt;When I set up the RTEMS.info Mirror, I was more concerned with disk space than bandwidth consumption. &amp;nbsp;I don't have the fastest connection and I am sure users would appreciate a faster uplink. But I foot the bill and until there is funding, this is what there is. &amp;nbsp;The RTEMS.info site mirrors at least 4 times a day. &amp;nbsp;Ralf Corsepius has set up automated checks which let us know when a mirror site is down or out of sync. &lt;br /&gt;&lt;br /&gt;In late 2010, I became worried that the 2.4 Ghz Pentium 4 was getting very old. &amp;nbsp;It was not new when it became the server and I was sure it had seen at least 6 years as server. &amp;nbsp;The Elvis Costello Fan community rallied around my request for a new server and within a month or so, the fund raising goal was met. &amp;nbsp;The new server is from AS Labs who specialize in building custom GNU/Linux systems. &amp;nbsp;It has a quad-core 3.0 Ghz CPU and 8 GB RAM. &amp;nbsp;It runs very cool and is far from overloaded.&lt;br /&gt;&lt;br /&gt;Over the years we have had period power outages with the worst being the tornadoes of April 2011. But overall, I believe our uptime is very good. &amp;nbsp;I don't track it but thanks to the Elvis Costello fan community, it can't be down over 20 minutes without me getting an email. Thanks folks!&lt;br /&gt;&lt;br /&gt;My wife and I have learned a lot about system administration over the years of maintaining these sites. &amp;nbsp;She personally reviews and approves every account request for the PHPBB Fan Forum. &amp;nbsp;The number of spam account requests is boggling and periodically she begs me to try to find another way to stem an increase. &amp;nbsp;The Wiki account requests and spam were solved when we instituted a very strict policy on getting an account. &amp;nbsp;A small group of people review and approve these accounts.&lt;br /&gt;&lt;br /&gt;The server also hosts a couple of very low volume sites for friends. &amp;nbsp;They are more interesting from a content viewpoint and I want to share more about them in a future post.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-2480222075999801998?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/2480222075999801998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/09/elvis-costello-and-rtemsinfo-history.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/2480222075999801998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/2480222075999801998'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/09/elvis-costello-and-rtemsinfo-history.html' title='Elvis Costello and RTEMS.info History'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-5707845471943409005</id><published>2011-09-08T18:22:00.002-05:00</published><updated>2011-09-12T13:03:01.353-05:00</updated><title type='text'>RTEMS Pair Programming</title><content type='html'>One of the most interesting and under-utilized&amp;nbsp;&lt;a href="http://support.rtems.com/"&gt;RTEMS services&lt;/a&gt;&amp;nbsp;that &lt;a href="http://www.oarcorp.com/"&gt;OAR Corporation&lt;/a&gt;&amp;nbsp;offers is RTEMS Pair Programming. &amp;nbsp;This service is a great solution when dealing with a customer who&amp;nbsp;wants to a big head start on some type of development effort. In Agile terms, this is a development sprint with a team consisting of RTEMS and customer supplied experts. &amp;nbsp;Most of the time, we do this for BSPs and device drivers. &lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x4xkAgnI3iY/TmkysHPzlzI/AAAAAAAAAHY/K2XvuPpOJsE/s1600/IMG_20110819_100146.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="149" src="http://1.bp.blogspot.com/-x4xkAgnI3iY/TmkysHPzlzI/AAAAAAAAAHY/K2XvuPpOJsE/s200/IMG_20110819_100146.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Left to Right: Walter Nakano, Wendell Pereira da Silva, &lt;br /&gt;Joel Sherrill and Jennifer Averett&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The key to pair programming success is that we know RTEMS and the customer knows their hardware and test equipment. &amp;nbsp;OAR folks can concentrate on quickly providing the framework for the BSP and needed devices drivers. Then we work together to author the device drivers. This provides them with specialized training on the details of the BSPs and device drivers that are critical to the success of their application. &amp;nbsp;Usually the initial testing is performed as joint effort with subsequent detailed testing performed by the customer engineers.&lt;br /&gt;&lt;br /&gt;Recently, OAR got to host Wendell Pereira da Silva and Walter Nakano from &lt;a href="http://www.compsis.com.br/"&gt;COMPSIS&lt;/a&gt;&amp;nbsp;&amp;nbsp;for two weeks of intense development activity. &amp;nbsp;Their system consisted of an embedded PC plus some add-on boards which added up to a lot of individual pins and ports to test. &amp;nbsp;They brought a LabView test right which allowed us to test every input and output on the Multi-I/O board.The hardware list was:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rtd.com/PC104/CM/processor_LX.htm"&gt;RTD CME137686LX&lt;/a&gt;&amp;nbsp;Embedded PC&lt;/li&gt;&lt;ul&gt;&lt;li&gt;4 COM ports and i82551 NIC of particular interest to their project&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.rtd.com/pc104/UM/network/CM17320HR.htm"&gt;RTD 17320HR&lt;/a&gt; Octal UART&amp;nbsp;PC-104&amp;nbsp;board (PCI interface)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Exar PCI Vendor Id with 8 NS16550 compatible serial ports&lt;/li&gt;&lt;li&gt;NOTE: We only had one of these boards but they will have 4 in the real configuration!!&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.rtd.com/pc104/UM/network/CM316HR.htm"&gt;RTD 316HR&lt;/a&gt; Dual Synchronous Serial Port PC-104 board&lt;/li&gt;&lt;ul&gt;&lt;li&gt;single Zilog Z85230&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.rtd.com/pc104/DM/analog%20IO/DM6425.htm"&gt;RTD 6425HR&lt;/a&gt; Multi-I/O PC-104 board&lt;/li&gt;&lt;ul&gt;&lt;li&gt;16 differential or 32 single-ended analog input channels&lt;/li&gt;&lt;li&gt;4 analog output channels&lt;/li&gt;&lt;li&gt;32-bit discrete I/O with 16 bit programmable for interrupt on input change&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;One thing should quickly stand out with viewing that hardware list. &amp;nbsp;They have a LOT of serial ports. &amp;nbsp;Four asynchronous on the embedded PC, 32 on 4 PCI-104 boards, and 2 synchronous on the Z85230 board for a total of 38 serial ports. &amp;nbsp;This is actually a classic example of a case where using the libchip serial driver framework would be very useful. &amp;nbsp;But the PC386 console driver was not designed this way. &amp;nbsp;Before the guys arrived, Jennifer reworked this driver to be libchip style. &amp;nbsp;At the same time, I factored out the mouse input stream parsing code. &amp;nbsp;It really wasn't BSP dependent and by moving it to &lt;i&gt;cpukit/libmisc/mouse&lt;/i&gt;, I made it potentially available to every BSP. &amp;nbsp;Jennifer and I had tested COM1 and COM2 on qemu before they arrived but waited for their hardware to test COM3 and COM4.&lt;br /&gt;&lt;br /&gt;COM1 and COM2 worked as soon as the cabling was correct. COM3 and COM4 proved more difficult. &amp;nbsp;After struggling to find a software problem, it occurred to me that it could be as simple as RTS/CTS not being wired together in the shell since we were using a 3-wire connection. &amp;nbsp;That was indeed the problem. &amp;nbsp;Next came the octal serial port board.&lt;br /&gt;&lt;br /&gt;After realizing that we would end up with a libchip configuration table with 38 entries and most of them would be disabled for "normal" configurations, I had the idea to allow for dynamic registration of new "ports" in the libchip configuration table. &amp;nbsp; The idea is that if you probe for a bank of 8 serial ports and find them, then you can dynamically add 8 more entries to the libchip configuration table. &amp;nbsp;Currently this allows probes to insert entries prior to &lt;i&gt;console_initialize()&lt;/i&gt;&amp;nbsp;being called. &amp;nbsp;It is possible to allow them to be registered after this point but they would not be available to be &lt;i&gt;/dev/console&lt;/i&gt;&amp;nbsp;or used for &lt;i&gt;printk()&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;While I was implementing dynamic registration, Jennifer and our guests worked to get the PCI probe to find the card and the first serial port working. &amp;nbsp;We were surprised to learn that it didn't have a vendor Id of RTD but Exar. &amp;nbsp;This explained the sparse programming documentation from RTD. &amp;nbsp;As soon as the probe and one serial port worked, we switched to my dynamic registration code. &amp;nbsp;Soon all eight ports on the board we had were working. &amp;nbsp;Plus I added code to detect the 2, 4, and 8 port variants of the Exar chip.&lt;br /&gt;&lt;br /&gt;Next was the dual port synchronous board. &amp;nbsp;Unfortunately, RTEMS does not have a Z8530 synchronous driver but does have a standard libchip asynchronous driver. &amp;nbsp;After fiddling to figure out the baud rate clock divisor math, we ended up with both ports working. &amp;nbsp;There was one issue in the driver we did not resolve in the two weeks they were here. &amp;nbsp;The two ports on a Z8530 share a single interrupt status register which when read, clears the source. &amp;nbsp;You have to be extremely careful to touch it one time and process all interrupt sources on both ports. &amp;nbsp;The ports worked individually but not when both were installed. &amp;nbsp;Jennifer and I had a solution but not enough time to implement it. Hopefully Wendell and Walter can implement it and we can get this resolved in the main tree.&lt;br /&gt;&lt;br /&gt;Next was the Multi-IO board. &amp;nbsp;If you have been following my blog a while, then you might remember the entry&amp;nbsp;&lt;a href="http://rtemsramblings.blogspot.com/2011_02_01_archive.html"&gt;RTEMS Shell as Debug Aid&lt;/a&gt;&amp;nbsp;where I discussed adding commands to the RTEMS Shell to aid in debugging a Winsystems Multi-IO board similar in capability to this board. &amp;nbsp; One of the last things Jennifer and I had done to the existing&amp;nbsp;&lt;i&gt;multiio&lt;/i&gt;&amp;nbsp;was to define a board independent interface between the shell commands and the actual driver. &amp;nbsp;My plan was to let this interface evolve and grow as we learned more about user application requirements. &amp;nbsp;This was the first opportunity we had to write a driver to this interface and reuse the commands. &amp;nbsp;As might be expected, there were places where 0/1 based numbering of inputs still reflected the Winsystems board. &amp;nbsp;And there were places in the RTD documentation that were unclear. &amp;nbsp;But after a while of fighting these and the normal cabling issues, we were able to use the existing commands to debug the driver and verify that all discrete I/Os to work polled and interrupt driven and that all analog inputs and outputs work polled. &amp;nbsp;We ran out of time before we were able to attempt analog input interrupts.&lt;br /&gt;&lt;br /&gt;The final thing we attempted was getting the RTEMS TCP/IP stack to run on this board. &amp;nbsp;It had an Intel i82551ER NIC which required using the&lt;i&gt;&amp;nbsp;&lt;/i&gt;drivers in the &lt;i&gt;libbsdport&lt;/i&gt;&amp;nbsp;kit of late model FreeBSD drivers. &amp;nbsp;This driver works on &lt;a href="http://wiki.qemu.org/Main_Page"&gt;qemu&lt;/a&gt; when you configure qemu for the i82559 simulation. &amp;nbsp;We verified the basics were OK on qemu. &amp;nbsp;Then we moved on to the real hardware. &amp;nbsp;After the normal hunt for an extra cable and battle of the network settings, we were able to run the &lt;i&gt;telnetd&lt;/i&gt;&amp;nbsp;application from the &lt;i&gt;network-demos&lt;/i&gt;&amp;nbsp;module.&lt;br /&gt;&lt;br /&gt;Walter and Wendell drove their hardware. &amp;nbsp;Jennifer and I were the main forces driving the code but they reviewed every line of code and we all verified that each line of code programmed the hardware as we all agreed it should be. &amp;nbsp;Along the way, if something was unclear, we took a break from coding and testing to focus on a portion of the RTEMS Open Class that was very specific to what we were working on. The goal was not only to have as much functional code as possible; it was also to ensure that the code was high quality and they left understanding it and capable of modifying it should the need arise.&lt;br /&gt;&lt;br /&gt;At the end of two weeks, we all were thrilled. &amp;nbsp;Walter and Wendell had been sending home progress reports and every day I continued to be amazed at the progress we -- as a team -- had made. &amp;nbsp;This amount of progress was possible because each of us brought unique skills and knowledge to the table. &amp;nbsp;Jennifer and I knew where to reuse code from in RTEMS and how to create an elegant solution the RTEMS way. &amp;nbsp;Walter and Wendell were intimately familiar with their hardware and test equipment and ensured we tested well. &amp;nbsp;Together we reviewed all code to ensure they left understanding it.&lt;br /&gt;&lt;br /&gt;I really enjoy teaching the RTEMS Classes but RTEMS Pair Programming is one of the most fun and personally rewarding services we offer. &amp;nbsp;I always come away amazed at how much is working at the end of an intense 2-3 week development sprint. &amp;nbsp;By bringing together engineers with complementary skills and knowledge, solutions are found quicker. &amp;nbsp;And solutions are ultimately what we all want.&lt;br /&gt;&lt;br /&gt;Thanks to Walter, Wendell and Daniel who couldn't make the trip for two weeks of fun and productive work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-5707845471943409005?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/5707845471943409005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/09/rtems-pair-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5707845471943409005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5707845471943409005'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/09/rtems-pair-programming.html' title='RTEMS Pair Programming'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-x4xkAgnI3iY/TmkysHPzlzI/AAAAAAAAAHY/K2XvuPpOJsE/s72-c/IMG_20110819_100146.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-576230094969740509</id><published>2011-08-28T10:10:00.002-05:00</published><updated>2011-08-28T10:12:06.065-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox spellcheck'/><title type='text'>Spell Checking Not Working in Firefox</title><content type='html'>This is not RTEMS related at all but everyone in the field has done free technical support before.&amp;nbsp;&amp;nbsp; I got asked&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Why isn't spell checking working on my new Firefox install?&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;It turns out there can be a variety of reasons and from my searches, the possible answers are not all in one place.&amp;nbsp; This article is an attempt to put all the things to check in one place.&lt;br /&gt;&lt;br /&gt;WARNING: I checked this on Fedora (GNU/Linux) and menu options may vary based upon your host operating system.&amp;nbsp; Hopefully they are close enough to keep you on track.&lt;br /&gt;&lt;br /&gt;The first thing to check is whether spell check is enabled at all.&amp;nbsp; Select "Edit &amp;gt; Preferences" from the menu.&amp;nbsp; Navigate to the "Advanced" tab and select the "General" subtab.&amp;nbsp; Make sure the "Check my spelling as I type" option is enabled as shown in this figure:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VFIzUHWpSpk/TlpYTKtlioI/AAAAAAAAAHU/_i1VsS42ztc/s1600/pref.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="284" src="http://1.bp.blogspot.com/-VFIzUHWpSpk/TlpYTKtlioI/AAAAAAAAAHU/_i1VsS42ztc/s320/pref.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If this option is selected, then we will have to check two more things  which might not be correct.&amp;nbsp; In order to do these you will have to  navigate to a website which has a text entry form.&amp;nbsp; Composing mail on a  web mail client like Google or Yahoo mail will work.&amp;nbsp; When you are  there, right click in the text entry area and verify that "Check  Spelling" is checked.&lt;br /&gt;&lt;br /&gt;If it is, there is still one more thing to check.&amp;nbsp; Apparently some  Firefox distributions were shipped without dictionaries.&amp;nbsp; If you  installed one of these as a clean install, rather than as an upgrade,  then you didn't get a dictionary.&amp;nbsp; I don't know why and it doesn't  really matter.&amp;nbsp; If you have installed one of these versions, then you  need to install a dictionary.&amp;nbsp; Again, you need to right click but this  time, select "Languages &amp;gt; Add Dictionaries".&amp;nbsp; This will guide you  through installing the dictionary you need.&lt;br /&gt;&lt;br /&gt;As I was investigating this to help the person who asked, I learned I  was using the "English / Zimbabwe" dictionary which I found surprising.&amp;nbsp;  It definitely explains why I use UK spellings frequently.&amp;nbsp; It is  necessary to make that language variant.&amp;nbsp; Colour me surprised.&amp;nbsp; Or color  me surprised not that I am using "English / United States".&lt;br /&gt;&lt;br /&gt;If there are any other things which might explain spell check not working in Firefox, please leave a comment. &amp;nbsp; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-576230094969740509?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/576230094969740509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/08/spell-checking-not-working-in-firefox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/576230094969740509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/576230094969740509'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/08/spell-checking-not-working-in-firefox.html' title='Spell Checking Not Working in Firefox'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VFIzUHWpSpk/TlpYTKtlioI/AAAAAAAAAHU/_i1VsS42ztc/s72-c/pref.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-6063043473772430733</id><published>2011-05-18T17:38:00.004-05:00</published><updated>2011-05-18T20:02:22.005-05:00</updated><title type='text'>Passing of Dr James Johannes</title><content type='html'>My normal blog entries cover technical issues.&amp;nbsp; This post is going to be very different.&amp;nbsp; It is an homage to the man who referred to himself as my academic grandfather because my Ph.D. advisor had been his first Ph.D. student.&amp;nbsp; A man I have had the pleasure of knowing and working for for almost twenty-five years.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-REBymk5uThE/TdRFEjn1ktI/AAAAAAAAAFQ/pS5rJ7z56P0/s1600/jjohannes.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-REBymk5uThE/TdRFEjn1ktI/AAAAAAAAAFQ/pS5rJ7z56P0/s1600/jjohannes.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Dr. James D. Johannes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;Dr James Johannes (Dr J) passed away Tuesday May 17 2011 at the age of 76.&amp;nbsp; This came as a shock to those who knew him because he was a vibrant person.&amp;nbsp; He was the type of person that one just expected to always be there.&amp;nbsp; Until a few months ago, he came to the office nearly every day. Within the past few years, he earned his pilot's license for the first time.&lt;br /&gt;&lt;br /&gt;Dr Johannes earned his Ph.D. in his early 40's from Vanderbilt University.&amp;nbsp; At the time, he lived in Huntsville and had two children (Mark and Michele) and commuted about 100 miles each way to take classes.&amp;nbsp; His dear wife Aurelia -- who was the epitome of a classy and tough southern lady -- supported him and the children through this.&amp;nbsp; This was clearly a factor in them being understanding and supportive of my finishing my Ph.D. with four small children in the house.&amp;nbsp; Aurelia appreciated what my wife Michele (not his daughter) was doing.&lt;br /&gt;&lt;br /&gt;Dr Johannes  founded &lt;a href="http://www.oarcorp.com/"&gt;On-Line Applications Research (OAR) Corporation&lt;/a&gt; in 1978.&amp;nbsp; He was an Emeritus Professor of the &lt;a href="http://www.cs.uah.edu/"&gt;Computer Science department&lt;/a&gt; faculty at &lt;a href="http://www.uah.edu/"&gt;University of Alabama in Huntsville&lt;/a&gt; and was the first head of the department.&amp;nbsp; Based upon the number of dissertations on the shelves at OAR, he advised over twenty-five successful Ph.D. students. When he retired, he was serving as the Graduate Dean of the UAH College of Science.&amp;nbsp; He wrote the Thesis and Dissertation Style Guide required by the university that I followed on my own dissertation.&amp;nbsp; It certainly made it easier to get clarifications. &lt;br /&gt;&lt;br /&gt;I first encountered Dr J as a student in Spring 1988.&amp;nbsp; I was taking the Ph.D. level Operating Systems class he was teaching. I must have made a good impression because after the class was over, I received a job offer.&amp;nbsp; I asked if they could hold the offer for a few months.&amp;nbsp; My daughter Jessica (now 22) had just been born and I wanted to make sure she passed her six-week check up before switching jobs.&amp;nbsp; In July 1988, I started work at OAR and my first project was RTEMS.&amp;nbsp; You should know the RTEMS story.&lt;br /&gt;&lt;br /&gt;Dr J also could show pride in those around him. I was the lucky  recipient of his special events twice.&amp;nbsp; The first was a company wide  lunch at the Huntsville Country Club when I passed my Ph.D. defense!&amp;nbsp; He  knew the system and didn't wait for graduation.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5oaFNqoMueA/TdRJGFrAo1I/AAAAAAAAAFU/G0Uob5OHCzM/s1600/7934_139666505913_540805913_2619046_6727861_n.jpg" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="239" src="http://4.bp.blogspot.com/-5oaFNqoMueA/TdRJGFrAo1I/AAAAAAAAAFU/G0Uob5OHCzM/s320/7934_139666505913_540805913_2619046_6727861_n.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Twentieth Anniversary&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The other special event was in 2009 when we  celebrated my twentieth anniversary at OAR.&lt;br /&gt;&lt;br /&gt;There are many Dr J stories but I will only share a  few.&amp;nbsp; Long ago, he called me at home on a Saturday completely unexpectedly.&amp;nbsp; I assumed I was about to be fired and went to a quiet place in the house to take the call.&amp;nbsp; Dr J had that professorial demeanour that makes professional students always a bit leery. It turned out he needed some sysadmin help with a Solaris computer he had at home.&amp;nbsp; Why he had a Solaris computer at home I don't know.&lt;br /&gt;&lt;br /&gt;He didn't like to dispose of old computers. OAR still has a CP/M computer with 8" floppy drives in storage.&amp;nbsp; The HP1000 was taken to his house after the OAR folks refused to move it to our third office location in the mid-1990s.&amp;nbsp; I think Aurelia finally made him dispose of it.&lt;br /&gt;&lt;br /&gt;Dr J was loved and respected by a wide circle of people.&amp;nbsp; He will be missed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-6063043473772430733?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/6063043473772430733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/passing-of-dr-james-johannes.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6063043473772430733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6063043473772430733'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/passing-of-dr-james-johannes.html' title='Passing of Dr James Johannes'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-REBymk5uThE/TdRFEjn1ktI/AAAAAAAAAFQ/pS5rJ7z56P0/s72-c/jjohannes.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-2756858026538531583</id><published>2011-05-03T17:43:00.001-05:00</published><updated>2011-05-04T06:54:23.754-05:00</updated><title type='text'>Power Restored But Issues Remain</title><content type='html'>Power was restored to OAR at ~5pm CST Tuesday May after being off since about the same time May 27.&amp;nbsp; The area is still  under a dawn to dusk curfew so no hands on to fix things until tomorrow morning.&amp;nbsp; If a machine came up, we are running checks remotely.&amp;nbsp; The known status is&lt;br /&gt;&lt;ul&gt;&lt;li&gt; rtems.org rebooted cleanly and appears to have all services running correctly. &lt;/li&gt;&lt;li&gt;OAR VOIP phone service rebooted cleanly.&lt;/li&gt;&lt;li&gt;mail.oarcorp.com did not automatically come up and needs hands on help.&amp;nbsp; I was not the one checking this machine and that's all I know.&lt;/li&gt;&lt;li&gt; None of the RTEMS lab machines are up.&amp;nbsp; I smelled something acrid in&lt;br /&gt;the lab after the outage so don't know.&amp;nbsp; They are on different UPS's so unless it is the circuit the machines are on, it has to be a single piece of equipment. That has to be investigated tomorrow.&lt;/li&gt;&lt;/ul&gt;Tomorrow's work is focused on testing batteries in UPS's, running checks on machines, and cleaning the refrigerator.&amp;nbsp; Everyone is really chomping at the bit to get back to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-2756858026538531583?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/2756858026538531583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/power-restored-but-issues-remain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/2756858026538531583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/2756858026538531583'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/power-restored-but-issues-remain.html' title='Power Restored But Issues Remain'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-5952393870172047539</id><published>2011-05-03T14:45:00.000-05:00</published><updated>2011-05-03T14:45:42.098-05:00</updated><title type='text'>rtems.info and Power Update</title><content type='html'>&lt;a href="http://rtems.info/"&gt;rtems.info&lt;/a&gt; is my personal server.&amp;nbsp; It is a purely volunteer effort and unfunded.&amp;nbsp; It is in my home.&amp;nbsp; We lost power Wednesday April 27 about 6pm CST.&amp;nbsp; Power was restored overnight Sunday.&amp;nbsp; Monday we returned home and I started to get the server back online.&amp;nbsp; There was some damage to various MySQL databases so I did a check like this after stopping mysqld:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; &lt;span style="font-size: x-small;"&gt;service mysqld stop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;cd /var/lib/mysql&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;for i in */*.MYI; do myisamchk --max-record-length=1048576 -r -f $i; done&lt;/span&gt;&lt;/blockquote&gt;That seemed to resolve all of those issues.&lt;br /&gt;&lt;br /&gt;The outstanding issue now is that it appears my ISP had some damage to their network operations center.&amp;nbsp; All appears OK but in the process of recovering, they have deleted the DNS entry for rtems.info.&amp;nbsp; This was filed with them last night.&lt;br /&gt;&lt;br /&gt;Huntsville is still under a dusk to dawn curfew and power is NOT restored to Research Park.&amp;nbsp; City schools are scheduled to start again on Thursday May 5.&amp;nbsp; So we are hoping for power tomorrow or Thursday.&lt;br /&gt;&lt;br /&gt;More as it becomes available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-5952393870172047539?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/5952393870172047539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/rtemsinfo-and-power-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5952393870172047539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5952393870172047539'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/rtemsinfo-and-power-update.html' title='rtems.info and Power Update'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-5233987316852646806</id><published>2011-05-03T08:52:00.001-05:00</published><updated>2011-05-03T08:53:22.569-05:00</updated><title type='text'>Terrible Storm and RTEMS Outage</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jQiJWOHST94/TcAF2WQ5syI/AAAAAAAAAFM/W4TQAT0UCY0/s1600/IMG_20110428_150911.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;Surely by now, you have noticed that the RTEMS Project appeared to drop completely off the face of the planet about 6pm CST April 27.&amp;nbsp; It was at this time that the third storm system moved through north Alabama and knocked out all major power transmission lines.&amp;nbsp; This blog is a first in a series to let you all know what happened and what is happening now.&lt;br /&gt;&lt;br /&gt;The primary servers and lab machines for the RTEMS Project (.org and .com) are in Huntsville Alabama which  was in the path of the storm April 27th 2011. This storm&amp;nbsp; killed 340+ across multiple states and left a huge trail of destruction.&amp;nbsp; I have heard reports of business signs being found 100 miles (160km) away.&amp;nbsp; The following is a nice weather  summary without the heart wrenching photos of the death and devastation.  &lt;br /&gt;&lt;br /&gt;&lt;a class="postlink" href="http://www.washingtonpost.com/blogs/capital-weather-gang/post/alabama-tornado-outbreak-visuals-jaw-dropping-radar-and-satellite-imagery/2011/04/29/AFg1C5YF_blog.html"&gt;http://www.washingtonpost.com/blogs/capital-weather-gang/post/alabama-tornado-outbreak-visuals-jaw-dropping-radar-and-satellite-imagery/2011/04/29/AFg1C5YF_blog.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Huntsville  had three systems pass over it that day.  The first was nasty but no  issues impacting the server or our home.  The second system resulted in  water getting into the &lt;a href="http://rtems.info/"&gt;rtems.info&lt;/a&gt; server area but we still had power.  This allowed  us to clean up and get the server back online until the third system hit.  The third system was  the killer.  It was the devastating one that wiped out communities from  Mississippi through Alabama and Georgia to points further north.  It  destroyed the major power transmission lines into north Alabama and  Mississippi.   Local utilities get power from the Tennessee Valley  Authority (TVA) and TVA could not supply power to them.  Their blog is  here with details:&lt;br /&gt;&lt;br /&gt;&lt;a class="postlink" href="http://www.tva.com/news/releases/aprjun11/storm.htm"&gt;http://www.tva.com/news/releases/aprjun11/storm.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-jQiJWOHST94/TcAF2WQ5syI/AAAAAAAAAFM/W4TQAT0UCY0/s1600/IMG_20110428_150911.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-jQiJWOHST94/TcAF2WQ5syI/AAAAAAAAAFM/W4TQAT0UCY0/s320/IMG_20110428_150911.jpg" width="320" /&gt;&lt;/a&gt;I was teaching an RTEMS class during this with the sole attendee being a wonderful fellow from the UK.&amp;nbsp;&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/-jQiJWOHST94/TcAF2WQ5syI/AAAAAAAAAFM/W4TQAT0UCY0/s1600/IMG_20110428_150911.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;We spent much of Wednesday in a safe area inside OAR.&amp;nbsp; And once the storm had passed and we realized we were the lucky ones, we finished the class without power.&amp;nbsp; His hotel room was wet and without power but his bed was dry.&amp;nbsp; He could charge his laptop from the car.&amp;nbsp; We took a table and a couple of chairs from OAR and sat outside the door.&amp;nbsp; When the sun moved and we got hot,&amp;nbsp; we moved the furniture.&amp;nbsp; At one point, we were on the other side of the parking lot.&amp;nbsp; We had nothing else to do and a dusk to dawn curfew, so we followed the class material, chatted, drank soda, etc.. Just chilled and did RTEMS stuff.&amp;nbsp; Phillip deserves a big thank you for helping me make sure all was turned off Thursday and cleaning the fridge and freezer Friday. I sent him to Chattanooga for the weekend and I hope it was some nice relaxing site-seeing.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-jQiJWOHST94/TcAF2WQ5syI/AAAAAAAAAFM/W4TQAT0UCY0/s1600/IMG_20110428_150911.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt; &lt;br /&gt;Friday, my family went to a hotel in a neighbouring city and waited for power to be  restored.  We came home Monday afternoon since our home had no apparent damage and power was restored.&amp;nbsp; We are near the main hospital so we usually get power early.&amp;nbsp; I started ensuring the &lt;a href="http://rtems.info/"&gt;rtems.info&lt;/a&gt; and &lt;a href="http://elviscostellofans.co/"&gt;elviscostellofans.co&lt;/a&gt;m server came back  up OK.  Michele is cleaning the fridge and freezer out.  If we didn't  lose any electronics due to power spikes, then that's all I think we  have.  That makes us very lucky.  Michele and I know people with deaths  in their families or homes destroyed.  Cleaning the fridge looks pretty  tame in comparison.&lt;br /&gt;&lt;br /&gt;We tried to stay in touch using our cell  phones for email but the towers died about 12 hours in.&amp;nbsp; Plus if we didn't know you on Facebook or via our private emails, it looked like we disappeared.&amp;nbsp; I apologize for not remembering linkedin and the RTEMS facebook group.&amp;nbsp; I didn't even remember IRC until Friday when we got to the hotel.&lt;br /&gt;&lt;br /&gt;Huntsville Utilities announced yesterday (Monday night) that they have done all they can.&amp;nbsp; Everywhere TVA has given them power has been passed on to residents.&amp;nbsp; Only 30% have power.&amp;nbsp; I believe that Redstone Arsenal, Marshall Space Flight Center, and Research Park will be the last in the area to be restored.&amp;nbsp; They consume a LOT of power between them and it is more important to get power back to houses.&lt;br /&gt;&lt;br /&gt;We really appreciate the good karma that was sent  our way.  We are both tired and frazzled but that's no biggie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-5233987316852646806?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/5233987316852646806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/surely-by-now-you-have-noticed-that.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5233987316852646806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5233987316852646806'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/05/surely-by-now-you-have-noticed-that.html' title='Terrible Storm and RTEMS Outage'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-jQiJWOHST94/TcAF2WQ5syI/AAAAAAAAAFM/W4TQAT0UCY0/s72-c/IMG_20110428_150911.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-853674861802652740</id><published>2011-04-22T09:08:00.002-05:00</published><updated>2011-04-22T11:01:09.234-05:00</updated><title type='text'>More RTEMS SMP Patches Coming</title><content type='html'>Some of you may be aware that SMP for RTEMS has been underway for about a year now.&amp;nbsp; The goal of the SMP effort is to have a simple, working, and correct implementation.&amp;nbsp; The first incarnation will have the following characteristics.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BSP SMP Interface definition with implementations for &lt;/li&gt;&lt;ul&gt;&lt;li&gt;PC386 &lt;/li&gt;&lt;li&gt;LEON3&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Simple SMP Aware Priority Based Scheduler &lt;/li&gt;&lt;li&gt;Faithful SMP safe version of RTEMS OS Critical Sections&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Dispatch Disable&lt;/li&gt;&lt;li&gt;Interrupt Disable&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Scheduler Simulator&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Test scenarios for new Simple SMP Scheduler&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Features Not Present&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Processor affinity&lt;/li&gt;&lt;li&gt;Deferred Floating Point context switch&lt;/li&gt;&lt;li&gt;Taking a core offline&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;The SMP implementation plan broken the effort into as many small steps as possible so it could be incrementally reviewed and merged.&amp;nbsp; This plan also allows for intermittent work.&amp;nbsp; This was critical due to the fact that all initial work was completely volunteer.&amp;nbsp; In addition to being planned as a series of small steps, the initial SMP implementation is focused on simplicity and correctness.&amp;nbsp; We can improve a simple working implementation.&lt;br /&gt;&lt;br /&gt;Gedare Bloom and I made the first steps last summer when implemented the Pluggable Scheduler Framework for RTEMS and I added a "per cpu" data structure.&amp;nbsp; Together these allow us to provide an alternative scheduler that is SMP aware and to have the data required by RTEMS SuperCore to manage each core encapsulated and allocated properly.&lt;br /&gt;&lt;br /&gt;Jennifer Averett and I have been working the past couple of months on completing the SMP support to RTEMS.&amp;nbsp;&amp;nbsp; Jennifer and I are approaching a milestone of having a basic SMP system functional with the only major missing item being SMP safe interrupt disable sections.&amp;nbsp; We are about to file a set of PRs and merge our current work and it made sense to post a blog entry with status that the PRs could reference.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Test code - our test code is hacky since it has to force interprocessor interrupts. We need to integrate where these are generated&amp;nbsp;&amp;nbsp; inside RTEMS.&amp;nbsp; Tests will be submitted once the code is in shape to work without "user-level" intervention.&lt;/li&gt;&lt;li&gt;Simple SMP Scheduler - implemented, tested with schedsim and our hacky test&lt;/li&gt;&lt;li&gt;Scheduler Simulator - multiple changes to improve its use during Scheduler development and to track changes in code base&lt;/li&gt;&lt;li&gt;PC386 BSP - SMP BSP support seems complete.&lt;/li&gt;&lt;li&gt;LEON3 BSP - SMP BSP support seems complete.&lt;/li&gt;&lt;li&gt;Context Switch Disable Critical Section - Working&lt;/li&gt;&lt;/ul&gt;Overall, (today) SMP RTEMS&amp;nbsp; can bring an SMP system out of reset, schedule across multiple cores, and command the first dispatch on the secondary cores.&amp;nbsp; The "disable dispatch" should be SMP safe now.&amp;nbsp; It can do this on pc386 and leon3.&lt;br /&gt;&lt;br /&gt;The next major tasks are to integrate the generation of interprocessor interrupts for subsequent dispatch requests and system shutdown.&amp;nbsp; We also have to address interrupt disable SMP safety.&lt;br /&gt;&lt;br /&gt;We are doing our best to break this into as many small incremental pieces as possible so the review and integration into the main tree is easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-853674861802652740?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/853674861802652740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/more-rtems-smp-patches-coming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/853674861802652740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/853674861802652740'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/more-rtems-smp-patches-coming.html' title='More RTEMS SMP Patches Coming'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-4709189693586331850</id><published>2011-04-20T15:09:00.000-05:00</published><updated>2011-04-20T15:09:18.796-05:00</updated><title type='text'>Behind the Scenes of the RTEMS Tool Binaries</title><content type='html'>I recently posted a long email to the &lt;a href="http://www.rtems.org/pipermail/rtems-users/2011-April/008352.html"&gt;RTEMS Users mailing list&lt;/a&gt; about what went into the building and distribution of the pre-built RTEMS Cross Development Tools.&amp;nbsp; I thought it would be interesting to clean that post up and turn it into a blog entry for posterity.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;I don't think most people in the community realize what goes on quietly behind the scenes for the tools. When someone installs a pre-built toolset, it is the result of Ralf Corsepius' ongoing effort.&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OAR hosts the &lt;a href="http://www.rtems.com/wiki/index.php/RTEMS_Build_Farm"&gt;RTEMS Build Farm&lt;/a&gt; and Ralf uses these machines to build the tools.  When&lt;span style="font-size: small;"&gt; &lt;/span&gt;there is a change in a patch or tool revision, he very quickly responds and kicks off tool builds.  I have no idea how long it takes for them to finish building but the number of individual toolset combinations is staggering when you consider the multipliers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;number of target architectures (~10-12 depending on RTEMS version)&lt;/li&gt;&lt;li&gt;number of host OS distributions and version&lt;/li&gt;&lt;ul&gt;&lt;li&gt;SUSE&lt;/li&gt;&lt;li&gt;CentOS/RHEL&lt;/li&gt;&lt;li&gt;Fedora&lt;/li&gt;&lt;li&gt;mingw32&amp;nbsp;&lt;/li&gt;&lt;li&gt;Cygwin&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;32 and 64 bit hosts&lt;/li&gt;&lt;/ul&gt;Today there are 15 unique host variations for 4.11.  This results in approximately 25GB of tool content for 4.11 on &lt;a href="http://ftp.rtems.org/ftp/pub/rtems/linux/4.11"&gt;ftp.rtems.org&lt;/a&gt;. In addition, there are binary toolsets on the ftp site for release branches back to 4.6.&amp;nbsp; So the main ftp site has a LOT of stuff on it.&lt;br /&gt;&lt;br /&gt;Ralf is very quick about getting new tool binaries out. Because of this, RTEMS is typically the first project to release binary tools after a binutils, gcc, or gdb release.&amp;nbsp; For gcc 4.6.0, he tracked the final release candidates so we were using the release image before the announcement. :-D&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;A&lt;/span&gt;fter the tools land on the RTEMS FTP site, there are two yum mirrors of the rtems.org&lt;span style="font-size: small;"&gt; &lt;/span&gt;site:&lt;br /&gt;&lt;br /&gt;rtems.eu [1]&lt;br /&gt;rtems.info [2]&lt;br /&gt;&lt;br /&gt;It can take hours for the mirror process to complete.  Ralf has a script that checks the mirrors each hour.&amp;nbsp; This script emails those interested when things get out of sync.&amp;nbsp; The Yum repository for each RTEMS branch, distribution, OS version, and 32/64-bit variation is checked individually.&amp;nbsp; When a mirror out of sync for a variation, that single mirror is taken out of the yum mirror list for that variation until it has time to resynchronize.  When a tool build is under way, I might get email for 8+ hours showing the progress of the synchronization.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://www.rtems.info/munin/localhost/localhost/index.html#network"&gt;Munin performance graphs&lt;/a&gt; for rtems.info to see how long a recent tool mirroring took.&lt;br /&gt;&lt;br /&gt;This is what goes on behind the scenes to make the tool binaries available.&amp;nbsp; There is a different process for building the various tool chains, running the tests on them and reporting them to both the &lt;a href="http://www.rtems.org/pipermail/rtems-tooltestresults/"&gt;RTEMS Tool Test Results&lt;/a&gt; and &lt;a href="http://gcc.gnu.org/ml/gcc-testresults/"&gt;GCC Test Results&lt;/a&gt; mailing lists.&lt;br /&gt;&lt;br /&gt;If you would be interested in DVD distributions of the pre-built tools, let me know.&lt;br /&gt;&lt;br /&gt;--joel&lt;br /&gt;&lt;br /&gt;[1] rtems.eu is sponsored by &lt;a href="http://www.embedded-brains.de/"&gt;Embedded Brains&lt;/a&gt;.  I don't know its speed.&lt;br /&gt;&lt;br /&gt;[2] &lt;a href="http://rtems.info/"&gt;rtems.info&lt;/a&gt; is my personal server and is sponsored by love and donations.  It is an 8/1 Mbps connection which could be upgraded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-4709189693586331850?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/4709189693586331850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/behind-scenes-of-rtems-tool-binaries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4709189693586331850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4709189693586331850'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/behind-scenes-of-rtems-tool-binaries.html' title='Behind the Scenes of the RTEMS Tool Binaries'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-660098453990868997</id><published>2011-04-19T16:02:00.000-05:00</published><updated>2011-04-19T16:02:28.430-05:00</updated><title type='text'>Merging Multiple PDF Files</title><content type='html'>If you have taken one of the RTEMS Classes from me, you will remember that the material for the Open Class comprises over 1000 PowerPoint slides. [1]&amp;nbsp; These slides are broken down into sections and within each section, there is a unit of 20-100 slides.&amp;nbsp; Each unit is an individual file.&amp;nbsp; Getting from 50+ PowerPoint files to printed material is a tedious and error prone process by hand.&amp;nbsp; The class and this process have evolved over the past ten years.&amp;nbsp; In this post, I will provide some insight into how this is done.&lt;br /&gt;&lt;br /&gt;The first piece of magic is an MS-Office macro written by someone here are OAR.&amp;nbsp; It reads in a list of files from a text file.&amp;nbsp; The files are in the order they are to be printed.&amp;nbsp; This macro  automates either generating PDFs or directly printing the files in the various handout formats (1 per page, 3 per page, 6 per page, etc.).&amp;nbsp; The PDFs are generated using &lt;a href="http://sourceforge.net/projects/pdfcreator/"&gt;PDFCreator&lt;/a&gt; which makes it possible to specify a unique file name for each PDF file.&amp;nbsp; The PDF files are prepended with a number so they sort and print in the correct order when wild-carded.&amp;nbsp; This produces files like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;001-OpenClass.pdf &lt;br /&gt;002-IntroToRTEMS.pdf&lt;br /&gt;003-ProfilesAndRTEMS.pdf&lt;/span&gt;&lt;br /&gt;...&lt;/blockquote&gt;Once the PDF files are generated, they can be printed easily.&amp;nbsp; However, I sometimes teach the class in Munich and have to send the PDFs to the nice folks &lt;a href="http://www.embedded-brains.de/"&gt;embedded brains GmbH&lt;/a&gt;&amp;nbsp; to print there.&amp;nbsp; For the first few classes, there I sent them a large number of PDFs.&amp;nbsp; When someone dropped the master copy, we learned it didn't have page numbers.&amp;nbsp; This taught us to add page numbers. :-D&lt;br /&gt;&lt;br /&gt;But this still leaves us with a large number of PDFs.&amp;nbsp; The solution to this was a custom&amp;nbsp; shell script that merges them into proper double-sided "units".&amp;nbsp; Each unit is then a single PDF file which goes between divider tabs in a binder.&amp;nbsp; Now there are seven PDF files for the Open Class and each page is numbered.&amp;nbsp; Much safer and easier.&lt;br /&gt;&lt;br /&gt;The script to merge the PDF files was developed and executes on GNU/Linux (no surprise, right?).&amp;nbsp; The key to this program is this shell function:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;merge_them()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; outf=$1&lt;br /&gt;&amp;nbsp; shift&lt;br /&gt;&amp;nbsp; inf=$*&lt;br /&gt;&amp;nbsp; gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=${outf} -dBATCH ${inf}&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;This function takes the name of output file as the first argument and the set of PDF files to merge as the rest of the arguments.&amp;nbsp; When invoked, the command looks something like this in my shell script:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt; merge_them ${mergedir}/01-Intro.pdf 00[1-5]*.pdf&lt;/span&gt;&lt;/blockquote&gt;That takes the first five "section" PDF files and merges them to produce the PDF file named 01-Intro.pdf for the &lt;i&gt;Introduction to RTEMS&lt;/i&gt; "unit".&amp;nbsp; This file&amp;nbsp; is&amp;nbsp; placed in the output directory &lt;i&gt;${mergedir}&lt;/i&gt;.&amp;nbsp; This is repeated for each of the units in the class.&lt;br /&gt;&lt;br /&gt;But remember -- I want to produce a double-sided master copy.&amp;nbsp; Sometimes, the merged PDF files for a unit will have an odd number of pages.&amp;nbsp; The script has another section to detect merged PDFs with odd number of pages and add a page the says "Intentionally Blank"&amp;nbsp; [2]&amp;nbsp; The following fragment of the shell script determines  how many pages are in the PDF file. If the number of pages is odd, it them adds the Intentionally Blank PDF file.&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt; pages=`pdfinfo $1 | grep Pages | cut -d':' -f2`&lt;br /&gt;remainder=`expr ${pages} % 2`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;if [ ${remainder} = 1 ] ; then&lt;br /&gt;&amp;nbsp;&amp;nbsp; mv $1 XXX.pdf&lt;br /&gt;&amp;nbsp;&amp;nbsp; merge_them $1 XXX.pdf ${BLANKPDF}&lt;br /&gt;&amp;nbsp;&amp;nbsp; rm -f XXX.pdf&lt;br /&gt;fi&lt;/span&gt;&lt;/blockquote&gt;And that's it.&amp;nbsp; It only takes about a minute to run and produces double-sided files that are very easy to send to a printer.&amp;nbsp; We have a nice duplex printer and by using paper that is already 3-hole punched, constructing the material for the RTEMS classes is much simpler than it was 10 years ago.&lt;br /&gt;&lt;br /&gt;--joel &lt;br /&gt;&lt;br /&gt;[1] OpenOffice did not exist when the slides were created.&amp;nbsp; I have tried to use OpenOffice with them, but it butchers the slides and destroys. them.&amp;nbsp; If this is ever resolved, I will happily use OpenOffice for the class.&lt;br /&gt;&lt;br /&gt;[2] The "Intentionally Blank" page was generated in OpenOffice. :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-660098453990868997?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/660098453990868997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/merging-multiple-pdf-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/660098453990868997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/660098453990868997'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/merging-multiple-pdf-files.html' title='Merging Multiple PDF Files'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-7082896647194535732</id><published>2011-04-07T08:45:00.000-05:00</published><updated>2011-04-07T08:45:25.921-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gmail spam'/><title type='text'>A Close Look at a Funny Spam</title><content type='html'>I get a lot of spam.&amp;nbsp; And when I say a lot, I really mean it.&amp;nbsp; Most  of it is caught by the OAR spam filter but I have to have them keep my  settings down a bit to ensure I always get random sales inquiries.&amp;nbsp; I  have had the same email address for over 15 years and am very open about  it.&amp;nbsp; I post to free software development mailing lists and sometimes  those get archived with email addresses.&amp;nbsp; When people get viruses, they  have my email from those lists or personal correspondence.&amp;nbsp; So I have  received dating and penis enlargement spam that is supposedly from  people who would die if they knew.&amp;nbsp; I generally just delete it quickly  but sometimes read it.&lt;br /&gt;&lt;br /&gt;This morning, I received this gem.&amp;nbsp; I changed the return address and the phone numbers.&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;Received:&amp;nbsp;from&amp;nbsp;[32.11.46.109]&amp;nbsp;(helo=tdyoireznpl.tmxmykph.ua)&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Subject:&amp;nbsp;Free&amp;nbsp;heroin&amp;nbsp;shipping!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;FREE&amp;nbsp;HEROIN&amp;nbsp;SHIPPING!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1.&amp;nbsp;Heroin,&amp;nbsp;in&amp;nbsp;liquid&amp;nbsp;and&amp;nbsp;crystal&amp;nbsp;form.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;2.&amp;nbsp;Rocket&amp;nbsp;fuel&amp;nbsp;and&amp;nbsp;Tomohawk&amp;nbsp;rockets&amp;nbsp;(serious&amp;nbsp;enquiries&amp;nbsp;only).&lt;/em&gt;&lt;br /&gt;&lt;em&gt;4.&amp;nbsp;New&amp;nbsp;shipment&amp;nbsp;of&amp;nbsp;cocaine&amp;nbsp;has&amp;nbsp;arrived,&amp;nbsp;buy&amp;nbsp;9&amp;nbsp;grams&amp;nbsp;and&amp;nbsp;get&amp;nbsp;10th&amp;nbsp;for&amp;nbsp;free.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Everebody&amp;nbsp;welcome,&amp;nbsp;but&amp;nbsp;not&amp;nbsp;US&amp;nbsp;citizens,&amp;nbsp;sorry.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;ATTENTION.&amp;nbsp;Clearance&amp;nbsp;offer.&amp;nbsp;Buy&amp;nbsp;30&amp;nbsp;grams&amp;nbsp;of&amp;nbsp;heroin,&amp;nbsp;get&amp;nbsp;5&amp;nbsp;free.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Please&amp;nbsp;contact: SPAMMER_EMAIL@gmail.com&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;PHONE&amp;nbsp;0093(0)1234567&lt;/em&gt;&lt;br /&gt;&lt;em&gt;FAX&amp;nbsp;0093(0)1234567&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Afghanistan&lt;/em&gt;&lt;/blockquote&gt;There  are so many things to notice.&amp;nbsp; The incorrect spellings and numbering  (1, 2, 4) are how they arrived.&amp;nbsp;&amp;nbsp; The interesting mix of drug spam and weapon spam.&lt;br /&gt;&lt;br /&gt;On  the technical side, they claim to be from Afghanistan and the 0093  country code is for Afghanistan but the email address listed is gmail  (frowny face to them), the "helo" exchange with the mail service   indicates it came from .ua which is the Ukraine.&amp;nbsp; But the IP address  listed is neither of those.&amp;nbsp; The IP address is allocated to .... are you ready...&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;OrgName:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AT&amp;amp;T Global Network Services, LLC&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;OrgId:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ATGS&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Address:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3200 Lake Emma Road&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;City:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lake Mary&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;StateProv:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FL&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PostalCode:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32746&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; Country:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; US &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So we have spam from Florida, claiming to be from the Ukraine, and wanting us to contact some drug/weapon runner in Afghanistan.&amp;nbsp; My guess is that this is likely spam from one of those infamous Russian botnets driven by the Russian mob.&lt;br /&gt;&lt;br /&gt;The marketing and salesmanship is brilliant in a warped way. You  have to smile at the offer of free shipping and buying 9  grams and get one free.&amp;nbsp; And who could resist the Clearance offer?&amp;nbsp; All we are missing is an order by midnight tonight and the more you buy, the more you save.&lt;br /&gt;&lt;br /&gt;The pinnacle of the marketing here is that this offer is not available for  American citizens.&amp;nbsp; Wow!&amp;nbsp; What a great use of reverse psychology.&amp;nbsp; Now all of the  Americans reading this spam want the drugs with free shipping and a six-pack of "Tomohawk"  missiles.&amp;nbsp; Hold me back.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;This is nothing I will reply and it is already deleted but very entertaining to read. This is even funnier than the offer I got recently which was supposed to be from an RTEMS Steering Committee member and slipped through the the RTEMS Users mailing list this week.&amp;nbsp; It wanted us all to look at their photo set at a Russian "sex flirt girls" site.&amp;nbsp; I really hope they were not pictures of him. LOL&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-7082896647194535732?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/7082896647194535732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/close-look-at-funny-spam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/7082896647194535732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/7082896647194535732'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/04/close-look-at-funny-spam.html' title='A Close Look at a Funny Spam'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-3848296443371925651</id><published>2011-03-08T16:17:00.003-06:00</published><updated>2011-03-08T16:28:59.127-06:00</updated><title type='text'>Coverage Testing Finds Unexpected Bug</title><content type='html'>Recent posts have been about debugging experiences.  Jennifer and I have been working on a simple implementation of the RTEMS priority based scheduler to illustrate how to write an alternative scheduler.  The primary RTEMS Scheduler is deterministic (e.g. constant, predictable) in performance because it uses a FIFO per priority and a two level bit map to assist in look ups.  The simple scheduler uses a single list for all tasks and searches down the list to perform inserts.  Its worst case is thus O(n) where n is the number of ready tasks.  But this post is above debugging, not about the new scheduler.  We will discuss that another time.&lt;br /&gt;&lt;br /&gt;Jennifer and I want the simple scheduler to have 100% test coverage when it is merged.  This has required us to run &lt;a href="http://http://www.rtems.com/wiki/index.php/RTEMS_Coverage_Analysis"&gt;coverage analysis &lt;/a&gt;on RTEMS and check the &lt;a href="http://http://www.rtems.org/ftp/pub/rtems/people/joel/coverage/"&gt;results&lt;/a&gt;.  We haven't yet merged this code so it isn't showing up in published runs.  She noticed that thee method &lt;span style="font-style: italic;"&gt;_Scheduler_priority_Enqueue_first&lt;/span&gt; was reported as never executed.  We both found this incredulous since this is called as part of inheriting a priority.  We knew this was well tested.  She was perplexed and asked me what I thought.  It turned out to be a recently introduced typo where &lt;span style="font-style: italic;"&gt;_Scheduler_priority_Enqueue&lt;/span&gt; was configured as the handler for both the &lt;span style="font-style: italic;"&gt;enqueue&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;enqueue&lt;/span&gt; entries points in the Scheduler Priority table.  This also explained a couple of test failures Jennifer had noticed but hadn't investigated yet.  This is the pertinent part of patch:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new; font-style: italic;"&gt;-    _Scheduler_priority_Enqueue,    /* enqueue_first entry point */ \&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new; font-style: italic;"&gt;+    _Scheduler_priority_Enqueue_first, /* enqueue_first entry point */ \&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Again, this problem was highlighted by an unexpected drop in the coverage results.  RTEMS has very good test coverage and an unexpected change can indicate a problem.  The fact that this method was never called was a huge hint to the cause.  The answer popped almost instantly in my head.  Debugging the test failures would almost certainly have taken much longer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-3848296443371925651?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/3848296443371925651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/03/coverage-testing-finds-unexpected-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/3848296443371925651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/3848296443371925651'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/03/coverage-testing-finds-unexpected-bug.html' title='Coverage Testing Finds Unexpected Bug'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-8848263062202521563</id><published>2011-03-08T10:09:00.014-06:00</published><updated>2011-03-08T10:45:14.828-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debugging gdb RTEMS SPARC SIS'/><title type='text'>Debugging an Invalid Memory Access</title><content type='html'>This time we have a guest at RTEMS Ramblings --  Chris Johns.  Chris is a long time RTEMS contributor and member of the Steering Committee.  He was the second person outside the core team to submit code to RTEMS.  He has fielded some pretty impressive RTEMS applications.  This is his discussion of he and I trying to track down an invalid memory access on the SPARC/SIS BSP.  From here on.. "I" == Chris. :D&lt;br /&gt;&lt;br /&gt;I have a SIS BSP failure with RTEMS head (+rbtree patch) and the latest  tools on a MacOS host running the "Hello" sample application in the erc32  simulator. Joel is not seeing this so I have to dig into what has been a  stable platform for me to developer the RTL code on. This is an account  of the debugging session as I work though the problem.&lt;br /&gt;&lt;br /&gt;I run the hello test and all I get is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$ sparc-rtems4.11-run sparc-rtems4.11/c/sis/testsuites/samples/hello/hello.exe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Memory exception at ffffffe0 (illegal address)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not much help from the tool. The same happens if I run the same application in gdb.&lt;br /&gt;&lt;br /&gt;Setting a break point on &lt;span style="font-style: italic;"&gt;boot_card&lt;/span&gt; and entering 'r' to run the application shows me the  target is loading, booting then reaching the &lt;span style="font-style: italic;"&gt;boot_card&lt;/span&gt; function. Nice  because this means the tools are not broken and RTEMS and the BSP are  sort of sane. I build the MacOS tools from source using the SpecBuilder  tool and track Ralf's changes closely. This means there is always a  chance something went wrong in the build. I have never seen this but  there can always be a first time. I can step the code up to the  &lt;span style="font-style: italic;"&gt;API_Mutex_initialization&lt;/span&gt; call then something goes wrong but I am not  sure where. Maybe I should look from the bottom up.&lt;br /&gt;&lt;br /&gt;I decide to track down who is printing the error message "Memory  exception ...". Running strings and grep on the executable shows it is  not in RTEMS. I see it is generated by the simulator. I also see the  simulator generates a trap 9 exception. This exception is not handled in  the target so the simulator terminates. Fair enough but the stopped  simulator destroys the state information of where the fault is which  means I cannot see what happens.&lt;br /&gt;&lt;br /&gt;A 'sparc-rtems4.11-objdump -D --source hello.exe | less' shows me trap 9  is address 0x2000090 so I set a break point with &lt;span style="font-style: italic;"&gt;b *0x2000090&lt;/span&gt; and run  again. I break at the trap 9 entry point and stop the simulator  exiting:&lt;div class="im"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="font-family:courier new;"&gt;(gdb) c&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Memory exception at ffffffe0 (illegal address)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;  Breakpoint 4, trap_table () at c/src/lib/libbsp/sparc/erc32/.&lt;/span&gt;&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;./../sparc/shared/start.S:68&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  68        BAD_TRAP;                                     ! 09 data access exception&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I can now inspect the state of the processor and try and find the source of the problem. First stop is a back trace:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;(gdb) bt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  #0  trap_table () at c/src /lib/libbsp/sparc/erc32/../../&lt;/span&gt;&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;sparc/shared/start.S:68&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nothing helpful here. We know we are at this location and what we want is what happened before this.&lt;br /&gt;&lt;br /&gt;I do not know SPARC processors very well and a dump of the registers gives me  little information. I do know the stack works down and most processors  save the return address on the stack. GDB is nice by providing me with  the stack pointer as $sp. I dump the stack:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;(gdb) x /32xw $sp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffcd0: 0x00000034      0x02007378      0x0200737c      0x00000008&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffce0: 0x00002000      0x02014928      0x00000001      0x00000000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffcf0: 0x02012a30      0x02014924      0x02012a30      0x00006054&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffd00: 0xffffffff      0x00000004      0x023ffd38      0x0200792c&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffd10: 0x00000000      0x00000000      0x00000000      0x00000000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffd20: 0x00000000      0x00000000      0x00000000      0x00000000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffd30: 0x00000000      0x00000000      0x02012a30      0x00006089&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  0x23ffd40: 0x0201a9ac      0x00000008      0x020148b0      0x02014928&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have a separate window open with the &lt;span style="font-style: italic;"&gt;sparc-rtems4.11-objdump&lt;/span&gt; output in &lt;span style="font-style: italic;"&gt;less&lt;/span&gt; so I can  search around with ease. With a few simple 'less' commands I can find  the code at a specific address. The first address is '0x02007378' which  must be the last one pushed. In &lt;span style="font-style: italic;"&gt;less&lt;/span&gt; a '1G' takes me to the start of  the dump then entering '/2007378' and enter brings up some code to do  with the heap:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;02007374 Heap_Protection_block_check_default:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;static void _Heap_Protection_block_check_default(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Heap_Control *heap,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Heap_Block *block&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; 2007374:       9d e3 bf a0     save  %sp, -96, %sp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    if (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; 2007378:       c2 06 60 04     ld  [ %i1 + 4 ], %g1&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Dumping '$l1' gives:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;(gdb) p /x $i1&lt;br /&gt;$14 = 0xffffffdc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dumping '$l1' gives: &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style=";font-family:courier new;font-size:85%;"  &gt;  (gdb) p /x $i1&lt;br /&gt;$14 = 0xffffffdc&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This is very close to the address in question. Time to run again this  time with a break point on this address and a couple of displays to help  me see what is happening:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;(gdb) b *0x2007378&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;   (gdb) display /i $pc&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;   (gdb) display /x $i1&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;   (gdb) r&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The break point gets hit a number of times and the arguments all look ok  so just continue. On the 6th hit of the breakpoint we get something  that does not look ok:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; (gdb) c&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Breakpoint 8, _Heap_Protection_block_check_&lt;/span&gt;&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;default (heap=0x2012a30, block=0xffffffdc) at c/src/../../cpukit/score/src/&lt;/span&gt;&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;heap.c:149&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   149         if (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   2: /x $i1 = 0xffffffdc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   1: x/i $pc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   =&gt; 0x2007378 &amp;amp;#60_heap_protection_block_check&gt;&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;default+4&amp;amp;#62:  ld  [ %i1 + 4 ], %g1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A back trace this time is much better:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(gdb) bt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #0  _Heap_Protection_block_check_default (heap=0x2012a30, block=0xffffffdc) at c/src/../../cpukit/score/src/heap.c:149&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #1  0x0200c82c in _Heap_Protection_block_check (heap=0x2012a30, alloc_begin_ptr=&lt;value&gt;) at ../../cpukit/../../../sis/lib/include/rtems/score/heap.h:625&lt;/value&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #2  _Heap_Free (heap=0x2012a30, alloc_begin_ptr=&lt;value&gt;) at c/src/../../cpukit/score/src/heapfree.c:119&lt;/value&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #3  0x02007d08 in _Objects_Extend_information (information=0x2012b18) at c/src/../../cpukit/score/src/objectextendinformation.c:224&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #4  0x02006cc8 in _API_Mutex_Initialization (maximum_mutexes=1) at c/src/../../cpukit/score/src/apimutex.c:23&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #5  0x0200672c in rtems_initialize_data_structures () at c/src/../../cpukit/sapi/src/exinit.c:125&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #6  0x0200137c in boot_card (cmdline=&lt;value&gt;) at c/src/lib/libbsp/sparc/erc32/../../shared/bootcard.c:163&lt;/value&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #7  0x02001158 in zerobss () at c/src/lib/libbsp/sparc/erc32/../../sparc/shared/start.S:334&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #8  0x02001158 in zerobss () at c/src/lib/libbsp/sparc/erc32/../../sparc/shared/start.S:334&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Backtrace stopped: previous frame identical to this frame (corrupt stack?)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Walking up the stack with the 'up' command until we end up in the &lt;span style="font-style: italic;"&gt;_Object_Extend_information&lt;/span&gt; call:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;(gdb) up&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; #3  0x02007d08 in _Objects_Extend_information (information=0x2012b18) at c/src/../../cpukit/score/src/&lt;/span&gt;&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;objectextendinformation.c:224&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; 224         _Workspace_Free( old_tables );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; (gdb) p old_tables&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; $16 = (void *) 0x0&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It would seem &lt;span style="font-style: italic;"&gt;_Object_Extend_information&lt;/span&gt; is calling the workspace with a  NULL which should be ok or it use to be ok. I chat with Joel and he  informs me the code in the interface to the workspace heap has changed  and this has exposed some bugs. A check of the code in the heap free  call shows the heap protection check is being called before the block  pointer has been validated. This also explains why Joel does not see the  problem. I built RTEMS with the debug configure option. There are other  cases so I will need to perform a careful check of all the heap code to  make sure we are correct.&lt;br /&gt;&lt;br /&gt;It looks like I am not the only one who has the problem. Peter Dufault has just posted to the RTEMS user list:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rtems.org/ml/rtems-users/2011/february/msg00142.html" target="_blank"&gt;http://www.rtems.org/ml/&lt;wbr&gt;rtems-users/2011/february/&lt;wbr&gt;msg00142.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The PR Peter has kindly raised is:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.rtems.org/bugzilla/show_bug.cgi?id=1746" target="_blank"&gt;https://www.rtems.org/&lt;wbr&gt;bugzilla/show_bug.cgi?id=1746&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was talking with Joel about the changes when I noticed the heap extend  now allows discontinuous memory regions. I did not know this was  allowed and I had been assuming the memory had to be continuous because  of the code in _Heap_Is_block_in_heap. A check of &lt;span style="font-style: italic;"&gt;rtems_region_extend&lt;/span&gt;  shows it uses heap extend and its documentation states memory must be  continuous. I have raised a PR to handle this:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.rtems.org/bugzilla/show_bug.cgi?id=1747" target="_blank"&gt;https://www.rtems.org/&lt;wbr&gt;bugzilla/show_bug.cgi?id=1747&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Back to Joel.. Chris' discussion should provide some insight into how an free software project and community work.  I made a modification to move some scattered NULL checks before calls to &lt;span style="font-style: italic;"&gt;_Workspace_Free&lt;/span&gt; into that routine.  Sebastian Huber noted that since NULL pointers shouldn't be processed by &lt;span style="font-style: italic;"&gt;_Heap_Free&lt;/span&gt;, so the check was technically redundant so he removed it.  This exposed a latent bug in &lt;span style="font-style: italic;"&gt;_Heap_Free&lt;/span&gt; when passed an invalid address and debug checks were enabled.  At the same time the Chris and I were tracking this down, a user tripped the same bug and filed a PR.  In reviewing the code, Chris and I found other cases which could cause the same fault and a disconnect between extending the heap and checking whether a block was in the heap.  This was a side-effect of recent enhancements and had never been caught by a user. So we see a community coding together, reviewing each other's code, and working together to resolve an issue.&lt;br /&gt;&lt;br /&gt;It is important to note that this bug was only present in the RTEMS Development Head.  It cannot occur in released versions.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-8848263062202521563?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/8848263062202521563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/03/debugging-invalid-memory-access.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/8848263062202521563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/8848263062202521563'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/03/debugging-invalid-memory-access.html' title='Debugging an Invalid Memory Access'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-6612503651088797681</id><published>2011-02-17T09:49:00.013-06:00</published><updated>2011-02-17T12:32:31.116-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debugging shell RTEMS'/><title type='text'>RTEMS Shell as a Debug Aid</title><content type='html'>Until the 4.9 release series, the RTEMS Shell was very primitive and only a few commands existed.  Virtually no one used it.  But with 4.9, the RTEMS Shell took a major leap forward with Chris Johns and I doing a lot of work on it.  We added commands, command line history, command line editing, and simple scripting.  You can use the shell from a serial port or via telnet.  There are now approximately 100 standard commands with some such as &lt;span style="font-style: italic;"&gt;ls&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;mv&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;cp&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;ln&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;dd&lt;/span&gt; ported over from NetBSD. In addition, there are RTEMS specific commands to look at CPU usage per thread, stack usage, and rate monotonic period statistics.  There are commands to examine the state of most RTEMS OS objects.&lt;br /&gt;&lt;br /&gt;Chris Johns used the standard file related commands to great benefit when developing and debugging the RTEMS File System (RFS).  He would mount remote NFS volumes and copy great quantities of data to an IDE hard disk.  This allowed him to place stress on his new  file system and even turned up a bug in the NFS client code.&lt;br /&gt;&lt;br /&gt;But the most useful capability for developing and debugging user applications is probably the capability to include custom commands.  These allow you to write commands which are specific to your hardware configuration or application.  I have used this to capability to write a set of commands for the &lt;a href="http://pc104.winsystems.com/products/PCM-MIO-G.cfm"&gt;Winsystems PCM-MIO-G&lt;/a&gt; multi-function I/O PC-104 module.  (Kudos to &lt;a href="http://pc104.winsystems.com/"&gt;Winsystems&lt;/a&gt; for relicensing their GNU/Linux driver to be compatible with RTEMS licensing requirements.) This board has the following features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Two                     8-channel, 16-bit Analog-to-Digital (A/D) &lt;/li&gt;&lt;li&gt;Two,                                        4-channel, 12-bit Digital-to-Analog (D/A)&lt;/li&gt;&lt;li&gt;48 Bidirectional I/O lines with interrupt support&lt;/li&gt;&lt;/ul&gt;For testing the driver for this board, I decided to write a series of custom RTEMS Shell commands to configure the analog inputs and perform various IO operations.  These commands allowed direct interaction with the hardware and can be used during development as well as hardware checkout and integration.  I implemented the following commands as well as providing shorter aliases for each command without the "pcmmio_" prefix:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_din&lt;/span&gt;   - Read PCMMIO Discrete Inputs&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_dout&lt;/span&gt;  - Write PCMMIO Discrete Outputs&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_adc&lt;/span&gt;   - Read PCMMIO Analog Inputs&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_adc_mode&lt;/span&gt; - Set PCMMIO Analog Input Modes&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_dac&lt;/span&gt;   - Write PCMMIO Analog Outputs&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_irq&lt;/span&gt;   - Wait for PCMMIO Interrupts&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pcmmio_bench&lt;/span&gt; - Benchmark PCMMIO Interrupts&lt;/li&gt;&lt;/ul&gt;All the test hardware I had available was a multimeter and a push button.  Although minimal, this was sufficient for me to test nearly all of capabilities on this board.  For example, I could use the &lt;span style="font-style: italic;"&gt;pcmmio_din&lt;/span&gt; command to poll for the discrete inputs.  When I pressed the button, the command reported the state changed. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;[/] # pcmmio_din -i 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Polling discrete inputs for 10 iterations with 1000 msec period&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;665:159912852 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;669:238111788 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;671:250111878 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The board cam be configured such that when a  discrete input changes an interrupt is generated.  The device driver's interrupt handler determines the pin which changed, its current value and timestamps it using the Time Stamp Counter (TSC) register.  This information is placed in a message buffer and send via an RTEMS Classic API Message Queue to an application task which is blocked waiting.  This allows the application to know as precisely as possible when an input has changed and process that change at the task level.  An example output of the &lt;span style="font-style: italic;"&gt;pcmmio_irq &lt;/span&gt;command when using the push button (which bounces) is below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;[/] # pcmmio_irq -d -i 5 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Polling for DIN IRQ for 5 iterations with 1000 msec period&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1000 DIN irq pin 8 @ b9eba88c0e (0 usecs since last)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;2000 DIN irq pin 8 @ b9eba932b2 (42 usecs since last)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;3000 DIN irq pin 8 @ b9eba9c52e (37 usecs since last)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;4000 DIN irq pin 8 @ b9ebadec4e (272 usecs since last)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;4 total interrupts from DIN in 5000 milliseconds&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the above example, the command looked for interrupts for 5 iterations of a loop with a delay of 1000 milliseconds between iterations.  But the interrupts from pushing the button and it bouncing occurred over a 272 microsecond period.  In real application code, you would not put a long delay in between each check but block forever or with a reasonable timeout.&lt;br /&gt;&lt;br /&gt;I could test analog output (DAC) by simply entering a command to write a value to a particular DAC channel using the &lt;span style="font-style: italic;"&gt;pcmmio_dac &lt;/span&gt;command and verifying that the proper voltage was written using my multimeter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;[/] # pcmmio_dac 0 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Write 5.0000 to to dac 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;pcmmio_dac &lt;/span&gt;command has an interesting feature where you can http://pc104.winsystems.comwrite a "step" pattern.  This steps from a low voltage to a high voltage using the specified step voltage and time between steps.  When it reaches the high voltage, the command begins to step down.  The following example illustrates using the &lt;span style="font-style: italic;"&gt;pcmmio_dac&lt;/span&gt; command to write a step pattern to DAC 0.  The pattern ranges from -2.5V to 2.5V with a .5V change every 250 milliseconds for a total of 10,000 milliseconds.  When the voltage reaches 2.5V, the step will change to -.5V.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;[/] # pcmmio_dac 0 -2.5  2.5 .5 250 10000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Write -2.5000-2.5000 step=0.5000 stepTime=250 msecs dac=0 max=10000 msecs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When testing analog input (ADC), I attached one DAC output to one ADC input.  Then I used the command &lt;span style="font-style: italic;"&gt;pcmmio_dac&lt;/span&gt;  to write a voltage and &lt;span style="font-style: italic;"&gt;pcmmio_adc&lt;/span&gt; to read a voltage.  Just as &lt;span style="font-style: italic;"&gt;pcmmio_din&lt;/span&gt; can monitor the discrete inputs for changes, the &lt;span style="font-style: italic;"&gt;pcmmio_adc&lt;/span&gt; command can monitor the ADCs for changes in input.  The following commands  illustrate using this command to read all ADCs or just a single ADC a single time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;[/] # pcmmio_adc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1117:232053  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;[/] # pcmmio_adc 0 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;1120:495519  0.0000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that in the above, the voltage read isn't the voltage that was written.  There are a few potential reasons for this.  First, I could have hooked things up wrong (but I checked and I didn't mess that up).  Second, I could have gotten confused on the DAC and ADC channels I used.  Yes, I did that a couple of times.  But the final reason was that I forgot to initialize the channels for the input configuration I was using.  This lead to the need for a command to configure an ADC channel.&lt;br /&gt;&lt;br /&gt;Each ADC channel could be individually programmer for either single-ended or differential input, unipolar or bipolar voltage ranges and for 5V or 10V as the upper voltage in the range.  I didn't want to enter sixteen commands by hand, so I added the feature where &lt;span style="font-style: italic;"&gt;pcmmio_adc_mode &lt;/span&gt;can configure a contiguous range of ADC's to a particular setting.  But this still could require multiple commands.  With a flash of insight, I remembered that I could write a shell script to do this for me.  This led to me writing the the following very simple shell script to configure the ADCs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#! joel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;echo "Setting all ADCs to +/-10V (bipolar) and single ended"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pcmmio_adc_mode 0 15&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As mentioned earlier, to test the ADCs I had to write a voltage using the &lt;span style="font-style: italic;"&gt;pcmmio_dac &lt;/span&gt;command and then read the voltage using the &lt;span style="font-style: italic;"&gt;pcmmio_adc &lt;/span&gt;command.  I wanted to run a series of voltages through the ADC but the step command didn't let me see the input between steps.  I could have figured out a way to get access to the lines but I had used a pre-made jumper wire and didn't want to destroy it.  So I wrote another simple shell script which repeated &lt;span style="font-style: italic;"&gt;pcmmio_dac&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;sleep&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;pcmmio_adc&lt;/span&gt; commands.  This allowed me to verify that a range of voltage could be written and read.  The following is one set of the three commands.  There were a lot more than this to have a script that ran for fifteen seconds.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pcmmio_dac 4 -2.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sleep 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pcmmio_adc 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You might wonder how I got the shell scripts onto the target.  Well I used another interesting feature of RTEMS.  RTEMS has long has the In-Memory File System (IMFS) and the capability to load initial contents from a &lt;span style="font-style: italic;"&gt;tar&lt;/span&gt; file image linked with the application.  I simply wrote the scripts on my development machine and included them in the initial file system contents.&lt;br /&gt;&lt;br /&gt;In using the RTEMS Shell and its ability to add custom commands, I was able to refactor the original GNU/Linux device driver, adapt it to RTEMS, add capabilities such as timeouts and timestamping input, and debug this device driver with very little difficulty.  Plus these commands are now available for hardware integration and testing for this project and any other project that might use this device driver in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-6612503651088797681?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/6612503651088797681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2011/02/rtems-shell-as-debug-aid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6612503651088797681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6612503651088797681'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2011/02/rtems-shell-as-debug-aid.html' title='RTEMS Shell as a Debug Aid'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-5431200594185291896</id><published>2010-10-20T12:27:00.003-05:00</published><updated>2010-10-20T12:43:25.465-05:00</updated><title type='text'>Running SLOCount on RTEMS</title><content type='html'>SLOC is everyone's favorite metric to hate but it is fun to discuss anyway.  I recently ran David Wheeler's &lt;a href="http://www.dwheeler.com/sloccount/"&gt;SLOCCount&lt;/a&gt; [1] on RTEMS and thought I would pass along some of the results.  There is an RPM available for Fedora so I started with that.  But I found a bug in which it counted our assembly include files as Pascal.  Needless to say there is no Pascal in RTEMS so I fixed that.  If anyone wants the patch, I am happy to provide it.&lt;br /&gt;&lt;br /&gt;The first part of the report from this program is a breakdown of the source code by language.  This showed the following breakdown based upon programming language:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ansic:       644676 (87.49%)&lt;br /&gt;asm:          39569 (5.37%)&lt;br /&gt;ada:          27563 (3.74%)&lt;br /&gt;sh:           18204 (2.47%)&lt;br /&gt;cpp:           5236 (0.71%)&lt;br /&gt;perl:          1623 (0.22%)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;No real surprise there.  RTEMS is mostly in C and high level languages with assembly language primarily for context switch and interrupt dispatching.  With over a dozen active ports on the CVS head, it is no shock there is 39.5K of well commented assembly language.&lt;br /&gt;The Shell and Perl is primarily for configuration and build infrastructure.&lt;br /&gt;&lt;br /&gt;The second part of the output from sloccount is related to the estimated cost of producing the software and how many man years it would take.  Using a rough estimate of 100K USD salary for each software developer implementing RTEMS, sloccount estimates RTEMS would require about 205 person-years to recreate at an estimated cost of 49.2M USD.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Total Physical Source Lines of Code (SLOC)                = 736,871&lt;br /&gt;Development Effort Estimate, Person-Years (Person-Months) = 205.02 (2,460.21)&lt;br /&gt;(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))&lt;br /&gt;Schedule Estimate, Years (Months)                         = 4.05 (48.59)&lt;br /&gt;(Basic COCOMO model, Months = 2.5 * (person-months**0.38))&lt;br /&gt;Estimated Average Number of Developers (Effort/Schedule)  = 50.64&lt;br /&gt;Total Estimated Cost to Develop                           = $ 49,204,211&lt;br /&gt;(average salary = $100,000/year, overhead = 2.40).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That makes RTEMS a great bargain!  You are getting very high quality software that would cost a sizeable fortune to reinvent.  IUnfortunately, the RTEMS team doesn't have $49,000,000 so please consider using the services of the core developers.  That's how we pay the bills and keep the kids from going hungry.&lt;br /&gt;&lt;br /&gt;Enjoy the gift of RTEMS!&lt;br /&gt;&lt;br /&gt;--joel&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;[1] Per David's request, this data was "generated using David A. Wheeler's 'SLOCCount'."&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-5431200594185291896?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/5431200594185291896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/10/running-slocount-on-rtems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5431200594185291896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/5431200594185291896'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/10/running-slocount-on-rtems.html' title='Running SLOCount on RTEMS'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-1159719005049698577</id><published>2010-08-20T09:30:00.002-05:00</published><updated>2010-08-20T09:39:38.061-05:00</updated><title type='text'>When Does a GSOC Project End?</title><content type='html'>Today is the deadline for turning in student evaluations for the 2010 edition of the &lt;a href="http://socghop.appspot.com/"&gt;Google Summer of Code&lt;/a&gt;.  The &lt;a href="http://www.rtems.org"&gt;RTEMS Project&lt;/a&gt; was fortunate enough to have eight students this year and they all did great work.  Some of it is still not merged and some needs some polish and love before being production ready.  But it looks like all the students successfully met their goals.  Personally, I am proud of all the students this year. &lt;br /&gt;&lt;br /&gt;So the GSOC 2010 program is nearing its official end and it is tempting for the students to consider their work as over and end their involvement with RTEMS.  But that's not the goal of GSOC nor is it desirable from an RTEMS perspective.   All projects participating in GSOC want code written during the summer but they also really want long-term contributors.  So this is not an end, it is a transition.  What do you do next?&lt;br /&gt;&lt;br /&gt;As a minimum, you need to work with the mentors to get your code merged into the various projects, functional, documented, and tested.  We want your code to be part of the RTEMS experience moving forward. This is not a classroom exercise where the code is thrown away. &lt;br /&gt;&lt;br /&gt;Last year, I told someone that you really should make your goal that you should be proud of what is merged and available.  You should be able to cite this work as  an example of what you are capable of to future employers and graduate schools.  Just as all FOSS developers take pride in their work, you should also.  Work with us to help get it to that point.&lt;br /&gt;&lt;br /&gt;We would like to see you all continue your involvement.  This would give you a chance to see YOUR work being used by real world applications.  Your involvement does not have to be limited to the area of your GSOC project.  RTEMS is a broad project and you can work on something else if that is what you want to do.  It is also perfectly acceptable to simply continue to work to perfect your submission.  We strive for 100% test coverage, great documentation and exceptional performance.  Those are hard to achieve in a first implementation of anything.&lt;br /&gt;&lt;br /&gt;So students, do not disappear.  Stay involved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-1159719005049698577?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/1159719005049698577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/08/when-does-gsoc-project-end.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/1159719005049698577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/1159719005049698577'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/08/when-does-gsoc-project-end.html' title='When Does a GSOC Project End?'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-106399548140903434</id><published>2010-06-04T21:24:00.002-05:00</published><updated>2010-06-04T21:47:29.032-05:00</updated><title type='text'>May -- A TIme of Beginnings and Endings</title><content type='html'>For still in school or who have children in school, May is always an interesting and busy month.  It was the end of another academic year for my four children and the end of high school for two of them.  It is the anniversary month for my high school, Bachelors and PhD graduations.  At the high school graduation commencement, we were once again reminded by the speaker that commencement is a ceremony to celebrate the end of one thing and the beginning of another.  It is more a recognition of a milepost on a journey than a goal in itself.  At this point, you are probably asking yourself what this has to do with software and the answer is nothing and everything. &lt;br /&gt;&lt;br /&gt;A successful software project lives on -- it is not something that is ever complete.  Each release announcement is comparable to a graduation commencement.  It captures what we have done and is just a milepost.  It is a useful milepost in the software world because it represents a completion point.  It is a recognizable measure like a diploma that means that the software has passed some measure of completeness and quality. &lt;br /&gt;&lt;br /&gt;RTEMS is now over twenty years old.  It is the same age as my daughter who is entering her senior year in college.  It has matured just as she has.  It has gotten more capabilities just as my children have learned more.  It is smarter and more efficient than it was.  My children are also somewhat more self-sufficient (not efficient yet) but I can hope.  RTEMS is in many ways my first child.  I was there at the birth.  I held its hand as it moved from a research project to an independent free software project. &lt;br /&gt;&lt;br /&gt;Today I cut the 4.10 release branch.  This represents a major milestone in the life of RTEMS.  I can say with certainty and the pride of a parent that this is the best release branch so far.  With both coverage testing and the daily builder, the testing has improvement markedly over the past few years.  We have automated testing for all of the GNU tools we use.  We have overhauled the main web site to be more modern looking and hopefully friendlier.  The core technical content was largely unchanged from the older site so this is a lot like a girl getting a make-over before a school dance. &lt;br /&gt;&lt;br /&gt;But just as with a graduation commencement, there is a past and a future.  The future for RTEMS includes both maturation and additional capabilities.  I want to see the RTEMS Project mature its processes by further expand our automated testing and improve the patch review and merge process.  I want to see RTEMS grow in capability and I know this is going to happen because there are multiple interesting efforts waiting to be reviewed and merged.  There is a SPARC64 port with multiple BSPs, a USB stack, a port of the LWIP stack, and my work on symmetric multiprocesssing support for RTEMS.&lt;br /&gt;&lt;br /&gt;So remember that life is full of milestones but those are also points of reflection and landings from which one can climb to the next level.  So reflect a bit on 4.10 and look forward to what RTEMS 4.11 or 5.0 will look like.  I am excited and hope you are too.&lt;br /&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-106399548140903434?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/106399548140903434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/06/may-time-of-beginnings-and-endings.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/106399548140903434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/106399548140903434'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/06/may-time-of-beginnings-and-endings.html' title='May -- A TIme of Beginnings and Endings'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-3427703686464591242</id><published>2010-05-04T14:22:00.004-05:00</published><updated>2010-05-04T17:18:19.893-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMP'/><title type='text'>RTEMS SMP Exploration #1</title><content type='html'>Many of you know that I have been working on an SMP design for RTEMS for a couple of years now as a background activity. This has been a slow project and I have been wanting to work on it more but it has been almost entirely volunteer activity on my part.   But recently, the activity level has picked up. Gedare Bloom's GSOC proposal &lt;span style="font-style: italic;"&gt;Modular SuperCore Scheduler Manager&lt;/span&gt; will make a significant dent in the work required to support SMP.  Currently, there is no discrete Scheduler component in the RTEMS SuperCore and a big part of supporting SMP is to have a single processor and an SMP-aware scheduler.  To properly support this, there has to be a discrete Scheduler component in the SuperCore and a mechanism to select alternate schedulers.   Gedare's project is to refactor the existing code base and provide a SuperCore Scheduler Handler along with the configuration required.  Gedare has previously implemented an Earliest Deadline First (EDF) Scheduler for RTEMS and we are planning for this to be available as one of the alternative schedulers.   Tiny/RTEMS may even benefit because it may make sense to have a light-weight scheduler algorithm for lower end target processors.&lt;br /&gt;&lt;br /&gt;With Gedare focusing on refactoring the Scheduler, I have felt free to focus on the process of initializing a multicore processor, interprocessor interrupts, spinlocks, and transferring control to the first thread on a secondary core.  I have succeeded in demonstrating these on pc386 with up to 32 cores and on SPARC/LEON3 with four cores.  This work has let me work through the definition of a per CPU OS structure as well as the BSP/RTEMS SMP Interface.    If you are interested in experimenting with this on another architecture, let me know.&lt;br /&gt;&lt;br /&gt;I am looking forward to working this summer with Gedare and seeing how close we get to SMP RTEMS support before the 2010 Summer of Code is over.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-3427703686464591242?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/3427703686464591242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/05/rtems-smp-exploration-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/3427703686464591242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/3427703686464591242'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/05/rtems-smp-exploration-1.html' title='RTEMS SMP Exploration #1'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-9153665925635923602</id><published>2010-04-04T11:03:00.003-05:00</published><updated>2010-04-04T11:26:25.024-05:00</updated><title type='text'>Google Summer of Code 2010</title><content type='html'>It has been a while since I posted but life and RTEMS have been busy.  The past few weeks have been a blur as GSoC 2010 approached.  The UT Chattanooga IEEE-CS student chapter visited NASA's Marshall Space Flight Center here in Huntsville and OAR hosted them for lunch.  Some &lt;a href="http://www.asterisk.org/"&gt;Asterisk &lt;/a&gt;developers joined us and we presented GSoC, RTEMS and Asterisk to them.  Earlier in the year, I had put together a cool double-sided &lt;a href="http://google-summer-of-code.googlecode.com/files/GSoC-RTEMS-Flyer-2010Logo-V2.pdf"&gt;flyer&lt;/a&gt; with RTEMS GSOC on one side and the general GSoC information on the other.  Both sides had tear-offs which aligned close enough where you get the general and RTEMS specific GSoC URLs.  For this visit, I put together a new &lt;a href="http://google-summer-of-code.googlecode.com/files/GSOC2010OrgsFlyer.pdf"&gt;flyer&lt;/a&gt; with the list of all participating organizations.  I think it is important to let students know about all the cool organizations that participate.&lt;br /&gt;&lt;br /&gt;The past couple of weeks have been hectic.  I had work deadlines looming, one of my sons had H1N1, and RTEMS had more students than ever asking questions and submitting proposals for review.  I had to update the &lt;a href="http://www.virtualbox.org"&gt;VirtualBox&lt;/a&gt; image of Fedora 12 with RTEMS tools for the i386 and sparc pre-installed and make the torrent available.  We had more students complete the &lt;a href="http://wiki.rtems.org/wiki/index.php/GSoC_Getting_Started"&gt;hello world requirement&lt;/a&gt; and have proposals to review before the web app opened than we did all of last year!! We ask them to put their proposal into Google Docs and let mentors insert comments into that.  We have so many students, I created a Google Docs Spreadsheet to track when each mentor had read the proposal and whether the student had submitted the official application. I spent this weekend ensuring I had read all of the proposals in hand.&lt;br /&gt;&lt;br /&gt;Overall, I am thrilled with this year's crop of proposals and the number of cross-project proposals.  We have students interested in &lt;a href="http://wiki.rtems.org/wiki/index.php/GSoC_Getting_Started"&gt;Go&lt;/a&gt; on RTEMS, &lt;a href="http://www.parrot.org"&gt;Parrot&lt;/a&gt; on RTEMS, and RTEMS support for the &lt;a href="http://www.milkymist.org/"&gt;MilkyMist&lt;/a&gt; board.  On top of that, we have students interested in adding a pluggable scheduler capability and EDF scheduler, coverage improvements, adding POSIX asynchronous and list IO, and much more.  And two students from last year are back in a mentoring capacity.  With a week to go before the student application deadline, I expect we will see more proposals and hope we are able to do a good job reviewing those.  I know we will try to do so and be fair to all students making proposals.  I am excited and hope we get enough slots to take on the students with quality, well thought out projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-9153665925635923602?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/9153665925635923602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/04/google-summer-of-code-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/9153665925635923602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/9153665925635923602'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/04/google-summer-of-code-2010.html' title='Google Summer of Code 2010'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-7046266272713010886</id><published>2010-02-22T14:03:00.002-06:00</published><updated>2010-02-22T14:32:12.190-06:00</updated><title type='text'>Ramblings From Radiology</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rtems.com/wiki/images/9/94/Technic02.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 300px; height: 134px;" src="http://www.rtems.com/wiki/images/9/94/Technic02.gif" alt="" border="0" /&gt;&lt;/a&gt;As I have mentioned to many of you, I had an excess of protein in my urine and have had to have a number of medical tests. Today I am at Huntsville Hospital and just got back from a kidney biopsy. I have to get another scan in a few hours to ensure I am not bleeding internally.  What does this have to do with RTEMS you ask? Well, nothing directly. But being  bored and surrounded by medical devices made me remember some of the RTEMS based medical devices people have told me about over the years.  &lt;p&gt;The first device I heard of was an HP (now Philips) Criticare heart monitor. Philips/HP Criticare equipment is common in our area but I don't know if I have actually ever seen one of these.&lt;/p&gt; &lt;p&gt;I assisted in the development of a BSP for what was going to be a blood analyser for Roche. I recall it be m683xx-based but do not know exactly it tested for.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;The AMV Technic I is a certified syringe pump for sale in a number of European countries. It uses RTEMS on an ARM CPU and we have information in the &lt;a href="http://www.rtems.com/wiki/index.php/AMV_Technic_I"&gt;RTEMS Wiki&lt;/a&gt;. It uses &lt;a href="http://www.microwindows.org/"&gt;Microwindows&lt;/a&gt; to provide the graphical user interface.&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class=" on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Link" class="gl_link" border="0" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;There are also RTEMS based intercom systems which are used by patients to summon or talk to a floor nurse. This product is ARM based and is on its second generation of hardware using RTEMS. Seeing a user build multiple product generations on RTEMS is personally very satisfying. It makes me know they are pleased with RTEMS.&lt;/p&gt;  There may well be other medical devices out there, but I don't know about them. Unfortunately, many people do not tell us about their application. I don't know how to change this but will continue to beg for marketing literature from RTEMS based products.  Please save me from begging! Just send me the information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-7046266272713010886?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/7046266272713010886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/02/ramblings-from-radiology.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/7046266272713010886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/7046266272713010886'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/02/ramblings-from-radiology.html' title='Ramblings From Radiology'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-3134869166202786618</id><published>2010-02-11T10:00:00.003-06:00</published><updated>2010-02-11T10:19:33.932-06:00</updated><title type='text'>NASA Solar Dynamic Observatory Launched</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5Tmc8sBljXU/S3QskYhPasI/AAAAAAAAAD0/vLj06TqRaoo/s1600-h/SDO-image2.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 122px; height: 200px;" src="http://3.bp.blogspot.com/_5Tmc8sBljXU/S3QskYhPasI/AAAAAAAAAD0/vLj06TqRaoo/s200/SDO-image2.jpg" alt="" id="BLOGGER_PHOTO_ID_5437019653711817410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The &lt;a href="http://sdo.gsfc.nasa.gov/"&gt;NASA Solar Dynamic Observatory (SDO)&lt;/a&gt; was successfully launched this morning. The SDO satellite includes 5 Radiation Hardened &lt;a href="http://en.wikipedia.org/wiki/Freescale_ColdFire"&gt;Coldfire&lt;/a&gt; CPUs running RTEMS. The Coldfire/RTEMS computers run many of the I/O functions and one of the instruments.   A very nice graphic of the mission is &lt;a href="http://www.nytimes.com/imagepages/2010/02/09/science/space/09solar_graphic.html"&gt;here&lt;/a&gt;.  The following is the description of the project from the SDO Project Site:&lt;br /&gt;&lt;blockquote&gt;SDO: The Solar Dynamics Observatory is the first mission to be launched for NASA's Living With a Star (LWS) Program, a program designed to understand the causes of solar variability and its impacts on Earth. SDO is designed to help us understand the Sun's influence on Earth and Near-Earth space by studying the solar atmosphere on small scales of space and time and in many wavelengths simultaneously.  &lt;p&gt;SDO's goal is to understand, driving towards a predictive capability, the solar variations that influence life on Earth and humanity's technological systems by determining&lt;/p&gt;  &lt;ul class="list"&gt;&lt;li&gt;how the Sun's magnetic field is generated and structured&lt;/li&gt;&lt;li&gt;how this stored magnetic energy is converted and released into the heliosphere and geospace in the form of solar wind, energetic particles, and variations in the solar irradiance.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;Congratulations to the folks at NASA Goddard on a successful launch and good luck in meeting their science goals.  I look forward to the new insights we will gain into the Sun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-3134869166202786618?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/3134869166202786618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/02/nasa-solar-dynamic-observatory-launched.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/3134869166202786618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/3134869166202786618'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/02/nasa-solar-dynamic-observatory-launched.html' title='NASA Solar Dynamic Observatory Launched'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5Tmc8sBljXU/S3QskYhPasI/AAAAAAAAAD0/vLj06TqRaoo/s72-c/SDO-image2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-1722436717256521531</id><published>2010-01-20T18:56:00.004-06:00</published><updated>2010-01-20T19:41:11.833-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RTEMS Graphics svgalib GSOC'/><title type='text'>RTEMS Graphics Toolkit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Tmc8sBljXU/S1evslcmVHI/AAAAAAAAADk/Ufb1xKfxJYM/s1600-h/gumstix-mine.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_5Tmc8sBljXU/S1evslcmVHI/AAAAAAAAADk/Ufb1xKfxJYM/s200/gumstix-mine.png" alt="" id="BLOGGER_PHOTO_ID_5429001056319591538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I haven't posted since before the holidays but that doesn't mean that nothing has been going on in the land of &lt;a href="http://www.rtems.org/"&gt;RTEMS&lt;/a&gt;.  I have been trying to work with Roxana Leontie to get her work merged into the &lt;a href="http://www.microwindows.org/"&gt;Microwindows/Nano-X&lt;/a&gt; repository.  Roxana was an RTEMS Summer of Code student.  The RTEMS Project took the Google donation from the Google Summer of Code and money from OAR Corporation to fund Roxana as the inaugural RTEMS Summer of Code Student.   Roxana worked to update and clean up the ancient port of Nano-X to RTEMS.  Roxana did all of her work targeting the RTEMS pc386 BSP.  The screenshot in the upper right is the Microwindows &lt;span style="font-style: italic;"&gt;minesweeper&lt;/span&gt; demo program.&lt;br /&gt;&lt;br /&gt;As Roxana wrapped up her work, she cooperated with a Google Summer of Student (Xi Yang) who had developed a &lt;a href="http://docwiki.gumstix.org/Basix_and_connex"&gt;Gumstix Connex&lt;/a&gt; BSP for RTEMS which ran on the &lt;a href="http://www.skyeye.org/"&gt;Skyeye&lt;/a&gt; simulator.  Xi implemented a frame buffer device driver for this board which worked with Nano-X.  All of Xi's work was merged into the RTEMS Source Code Repository when completed.&lt;br /&gt;&lt;br /&gt;As part of preparing her work to be merged into the Nano-X Source Code Repository, I worked with Roxana to clean up the build infrastructure and ensure that the code built easily on multiple BSPs.  As part of this, we worked to port some supporting libraries to RTEMS.  Before Greg Haerr had merged our work, we had created the &lt;span style="font-weight: bold;"&gt;RTEMS Graphics Toolkit&lt;/span&gt; (RTEMS CVS module rtems-graphics-toolkit) which includes the following libraries:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;libjpeg - (v7) &lt;a href="http://www.ijg.org/"&gt;http://www.ijg.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;libtiff - (v3.6.2) &lt;a href="http://www.libtiff.org/"&gt;http://www.libtiff.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;libpng - (1.2.42) &lt;a href="http://www.libpng.org/pub/png/libpng.html"&gt;http://www.libpng.org/pub/png/libpng.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;libfreetype  - (2.3.11) &lt;a href="http://freetype.sourceforge.net/index2.html"&gt;http://freetype.sourceforge.net/index2.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;libt1 - (5.1.2)  &lt;a href="http://www.t1lib.org/"&gt;http://www.t1lib.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5Tmc8sBljXU/S1ev2i9Vm4I/AAAAAAAAADs/2KJTFe3Y-fo/s1600-h/gumstix-rtems.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_5Tmc8sBljXU/S1ev2i9Vm4I/AAAAAAAAADs/2KJTFe3Y-fo/s200/gumstix-rtems.png" alt="" id="BLOGGER_PHOTO_ID_5429001227450293122" border="0" /&gt;&lt;/a&gt;This means you can decode and display JPEG, TIFF, PNG, GIF, and BMP graphics on an RTEMS system.  It also means that you may have support for Adobe Type 1 TrueType fonts.  The screen shot with the "Embedded with RTEMS" logo is the output of &lt;span style="font-style: italic;"&gt;nxview&lt;/span&gt; running on the arm/gumstix BSP.  The logo is a jpeg loaded from the RTEMS In-Memory File System (IMFS). The jpeg support library has no patches for RTEMS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using a build script in the top directory of this kit, you can easily build all of these packages and Nano-X (from their git repository).  This includes building all demos for a specific BSP.  The &lt;span style="font-weight: bold;"&gt;RTEMS Graphics Toolkit&lt;/span&gt; also includes the following libraries which are not currently ported but we would like to see ported.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;svgalib - (1.4.3)  &lt;a href="http://svgalib.org/"&gt;http://svgalib.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;fltk - (1.1.10) &lt;a href="http://www.fltk.org/"&gt;http://www.fltk.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Roxana is pursuing porting svgalib to bring its collection of more advanced graphics drivers to RTEMS.  Interestingly, this ties in with the work of another Google Summer of Code Student, Aanjhan Ranganathan.  Aanjhan's project consisted of adding MMU support to RTEMS.  This includes support on some targets for the mmap() family of calls from POSIX.  The svgalib package includes approximately 100 calls to members of this call family so we now have incentive for Aanjhan to get his work tidied up and merged.&lt;br /&gt;&lt;br /&gt;FLTK is an important piece of the puzzle because it includes a GUI builder and numerous widgets.  This will provide a robust foundation to build GUIs for RTEMS systems.&lt;br /&gt;&lt;br /&gt;At this point, all Nano-X demo programs that are expected to run on RTEMS do so on both the pc386 and arm/gumstix platforms.  There is obviously more to do.  But it is important to emphasize that this is a major step forward for RTEMS.  It makes it much easier to build GUIs for RTEMS based embedded systems.&lt;br /&gt;&lt;br /&gt;Thanks to all the folks at Google who work so hard on the Summer of Code and the students they sponsor.  This would not have happened without them.  Thanks Leslie, Ellen, and Kat. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-1722436717256521531?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/1722436717256521531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2010/01/rtems-graphics-toolkit.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/1722436717256521531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/1722436717256521531'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2010/01/rtems-graphics-toolkit.html' title='RTEMS Graphics Toolkit'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5Tmc8sBljXU/S1evslcmVHI/AAAAAAAAADk/Ufb1xKfxJYM/s72-c/gumstix-mine.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-6042343497603732664</id><published>2009-12-28T11:19:00.002-06:00</published><updated>2009-12-28T11:21:47.334-06:00</updated><title type='text'>RTEMS Turns 21</title><content type='html'>&lt;h3 style="font-weight: normal;" class="UIIntentionalStory_Message" ft="{&amp;quot;type&amp;quot;:&amp;quot;msg&amp;quot;}"&gt;&lt;span class="UIStory_Message"  style="font-size:100%;"&gt;The RTEMS ticker test (a.k.a. sp01) was the first test created during the development of RTEMS. It sets the date and time to 9:00 pm on 31 December 1988. This coincides with the earliest part of the RTEMS Project. Since there is no birth certificate, we are treating this as RTEMS birth date. &lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="font-weight: normal;" class="UIIntentionalStory_Message" ft="{&amp;quot;type&amp;quot;:&amp;quot;msg&amp;quot;}"&gt;&lt;span class="UIStory_Message"  style="font-size:100%;"&gt;Please toast RTEMS turni&lt;span class="text_exposed_show"&gt;ng 21 where ever you are. &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="font-weight: normal;" class="UIIntentionalStory_Message" ft="{&amp;quot;type&amp;quot;:&amp;quot;msg&amp;quot;}"&gt;&lt;span style="font-size:100%;"&gt;P&lt;/span&gt;&lt;span class="UIStory_Message"  style="font-size:100%;"&gt;&lt;span class="text_exposed_show"&gt;lease don't be online -- share the New Year's Eve with loved ones. :)&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-6042343497603732664?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/6042343497603732664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/rtems-turns-21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6042343497603732664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/6042343497603732664'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/rtems-turns-21.html' title='RTEMS Turns 21'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-4096279719608416808</id><published>2009-12-13T17:00:00.007-06:00</published><updated>2009-12-13T17:28:33.481-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user interface least surprise'/><title type='text'>Violating the Rule of Least Surprise</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5Tmc8sBljXU/SyV35ydDq7I/AAAAAAAAADc/hqUUNk1mhBA/s1600-h/saturn_ion_2_quad_coupe_2005_dashboard_dashboard.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_5Tmc8sBljXU/SyV35ydDq7I/AAAAAAAAADc/hqUUNk1mhBA/s320/saturn_ion_2_quad_coupe_2005_dashboard_dashboard.jpg" alt="" id="BLOGGER_PHOTO_ID_5414865961662786482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When you mention user interfaces, people usually think of a graphical interface with mouse and keyboard or a touchscreen.  But user interfaces do not exist solely in the world of computer displays.  In the world of embedded systems, a user interface can take on any number of variations.  One guiding principle that particularly applies in this domain is the "Rule of Least Surprise."  An example I use is that if you put someone behind the steering wheel of a vehicle of any type, they would expect that turning the wheel to the left directs the vehicle in that direction.  To do anything else, would surprise even a three year old who has ridden a tricycle.&lt;br /&gt;&lt;br /&gt;Even though I love my  current car, it has two areas which violate this rule.  As shown in the picture shown here (&lt;a href="http://www.shop.com/Floor_Vent_Register_Air_Filters_%2812_pack%29-21007566-28598067-p+.xhtml?sourceid=298"&gt;source&lt;/a&gt;), the instrument panel is in the center -- not directly in front of the driver.  Both interface surprises stem from this placement.&lt;br /&gt;&lt;br /&gt;The first violation is that when the lights are on at night, there is no light at all directly visible in the direct field of vision of the driver.  It is very easy to forget to turn the lights on at night when in a well-lit area because you have to look to the middle to realize that the instruments are unlit.  This has actually resulted in me getting pulled over by a friendly police officer to remind me to turn my lights on.&lt;br /&gt;&lt;br /&gt;The second violation is when you turn on the turn signal to turn left.  The blinking light indicating you have done so is in the right hand side of the driver's field of vision.  In other vehicles, this would be in the left hand side&lt;br /&gt;of your field of vision.&lt;br /&gt;&lt;br /&gt;Neither of these is a major issue and I have grown accustomed to both.  But both show how humans have expectations about how common devices operate.  When your clever design changes this, users are surprised.  In the end there may be a benefit, but often it is a difference just to be different.  Is there a surprise in a system you are familiar with? Is it an improvement or just a difference?  Share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-4096279719608416808?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/4096279719608416808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/violating-rule-of-expectation.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4096279719608416808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4096279719608416808'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/violating-rule-of-expectation.html' title='Violating the Rule of Least Surprise'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5Tmc8sBljXU/SyV35ydDq7I/AAAAAAAAADc/hqUUNk1mhBA/s72-c/saturn_ion_2_quad_coupe_2005_dashboard_dashboard.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-8890013521017266618</id><published>2009-12-12T13:31:00.005-06:00</published><updated>2009-12-12T14:29:59.060-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fedora upgrade yum X11'/><title type='text'>Fedora 12 Upgrade Experience</title><content type='html'>A few weeks ago, I upgraded the GNU/Linux computers I am personally responsible for from Fedora 10.  This includes a work computer (Dell Latitude D830), a home computer (Dell Inspiron 2400), and the home server (upgraded Dell Dimension 2100).  The home server is the host of an &lt;a href="http://www.elviscostellofans.com/phpBB3/"&gt;Elvis Costello Fan Forum&lt;/a&gt; phpBB site as well as the &lt;a href="http://www.elviscostello.info/wiki/index.php/Main_Page"&gt;Elvis Costello Wiki&lt;/a&gt; so it is not just my family that is impacted by down time.  I upgraded from Fedora 10 to 11, ran for about a week to make sure things were OK, and then upgraded to Fedora 12.  In the end, all of the computers are up and stable performing their assigned tasks but there were issues along the way which I will describe here.&lt;br /&gt;&lt;br /&gt;I upgraded via DVD and all of the computers handled that OK once I remembered the magic required to boot from DVD. But afterward the upgrade was complete, two of the computers did not boot.  As not so infrequently during GNU/Linux upgrades, GRUB was not updated correctly on two of them and I had to go into rescue mode to address that. This just required mounting the root partition, changing root and running &lt;span style="font-style:italic;"&gt;grub-install&lt;/span&gt;.  Scary the first time it is required, but not after a few times.&lt;br /&gt;&lt;br /&gt;One of the laptops booted nicely to the GUI login prompt but was clearly at the wrong resolution.  I did a little net research and learned that deleting the &lt;span style="font-style:italic;"&gt;/etc/X11/xorg.conf&lt;/span&gt; file and restarting X11 would result in a probe and very likely the correct video settings. This worked.&lt;br /&gt;&lt;br /&gt;The only issue shared by all of the machines was an issue with &lt;span style="font-style:italic;"&gt;yum&lt;/span&gt; getting upgraded between Fedora 10 and 11.  &lt;span style="font-style:italic;"&gt;yum&lt;/span&gt; was broken after the upgrade.  Before I could load further updates from then using &lt;span style="font-style:italic;"&gt;yum upgrade&lt;/span&gt;, I had to manually fetch a current yum rpm file and install it manually using &lt;span style="font-style:italic;"&gt;rpm&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The server had three very strange issues during the upgrade.  &lt;br /&gt;&lt;br /&gt;First, I couldn't log in.  The GUI login screen was flashing.  I remembered the magic key sequence to switch to a console display, logged in, and checked out the logs. I couldn't tell exactly what was wrong but I had a guess and tried it.  Apparently the graphical login program GDM had trouble parsing my email address in the name field of &lt;span style="font-style:italic;"&gt;/etc/passwd&lt;/span&gt;.  I think something was trying to use the user name field in an XML file because my entry was something like "Joel Sherrill &lt;joel.sherrill@..... .com&gt;".  I suspect that the presence of my email address looking like an XML tag confused it.  I deleted that and moved along.  GDM was happy.&lt;br /&gt;&lt;br /&gt;Next on the list was that something changed in MySQL and the user name table was reported as being corrupt.  I found reports on the web where others had suffered this and decided the easiest solution was to stop MySQL, delete the old table, and restart MySQL.  When restarted, MySQL would create the table with default contents.  From there, I could easily add back in the handful of accounts that were needed.  The actual database tables were not impacted.  So I felt lucky and moved on to the next problem.&lt;br /&gt;&lt;br /&gt;At this point, I started looking at the actual web content served from the server.  I first looked at the &lt;a href="http://www.phpbb.com"&gt;pbpbb&lt;/a&gt;-based &lt;a href="http://www.elviscostellofans.com/phpBB3/"&gt;Elvis Costello Fan Forum&lt;/a&gt;,  A bit of the page header was displayed along with an error message.  I don't remember why but somehow, I couldn't see the error completely on my side.  I enlisted some help on the #rtems IRC channel to see if others could see what the message said.  Someone cut and pasted me the error message.  I Google'd the message and learned that the new php 5.3 now requires the &lt;span style="font-style:italic;"&gt;/etc/php.ini&lt;/span&gt; file to explicitly set the timezone.  It does not trust the operating system's setting.  Without the timezone being set for php, php programs reported nasty error messages.  This meant that  phpbb3 would not run correctly and the &lt;a href="http://www.elviscostellofans.com/phpBB3/"&gt;Fan Forum&lt;/a&gt; was not available.  Adding the following to &lt;span style="font-style:italic;"&gt;/etc/php.ini&lt;/span&gt; resolved this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[Date]&lt;br /&gt;  date.timezone = America/Chicago&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I inspected the pages served from the &lt;a href="http://www.elviscostello.info/wiki/index.php/Main_Page"&gt;Elvis Costello Wiki&lt;/a&gt; and there were some minor error messages in the logs.  Apparently, &lt;a href="http://www.mediawiki.org"&gt;Mediawiki&lt;/a&gt; had some minor mistakes in its coding which php 5.3 detected.  These resulted in a plethora of errors in the web logs.&lt;br /&gt;&lt;br /&gt;I am a daily GNU/Linux user who rarely works in MS-Windows.  As a long time user of various UNIX desktop environments, I prefer mousing over a window to move focus.  I do not like to click on a window to move the focus.  In previous Fedora distributions, GNOME included an applet to switch the preference under "System &gt; Preferences &gt; Windows".  This applet is no longer included by default.  I don't know why it isn't part of the default install anymore.  Is 59K really that critical?  Anyway, the following installed it.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  yum install control-center-extra&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;At this point, I have been using Fedora 12 daily on two desktops and a server.  I use the two desktops for development, email, and word processing using Open Office.  I have encountered a few issues which I will share in a future post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-8890013521017266618?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/8890013521017266618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/fedora-12-upgrade-experience.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/8890013521017266618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/8890013521017266618'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/fedora-12-upgrade-experience.html' title='Fedora 12 Upgrade Experience'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-4246963752126442526</id><published>2009-12-10T18:56:00.006-06:00</published><updated>2009-12-12T08:28:34.784-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bug embedded corruption'/><title type='text'>Debugging Data Corruption #1</title><content type='html'>I recently helped someone debug a data corruption problem on an embedded system that was not RTEMS based and that I had not written any code for.  Just to be sure this is perfectly clear, I knew nothing about the source code to this application or its design when I arrived.  They had a global variable whose value was becoming invalid.  For the purposes of this discussion, the corrupted variable will be referred to as &lt;span style="font-style:italic;"&gt;CorruptedVariable.&lt;/span&gt;.  They had a way to reproduce the corrupted and could tell based upon the behaviour of the program that at least &lt;span style="font-style:italic;"&gt;CorruptedVariable&lt;/span&gt; was being clobbered.&lt;br /&gt;&lt;br /&gt;When I arrived, I listened a few minutes and watched them reproduce the problem.  I then asked they knew how to produce a numerically sorted symbol table for their application.  They did not and I explained that with any &lt;a href="http://www.gnu.org"&gt;GNU&lt;/a&gt; toolset using &lt;a href="http://sourceware.org/binutils/"&gt;binutils&lt;/a&gt;, there was included a utility named &lt;span style="font-style:italic;"&gt;nm&lt;/span&gt; which is used to produce a symbol table from an executable.  I instructed them to use a command similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  avr-nm -g -n application &gt;application.num&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style:italic;"&gt;-g&lt;/span&gt; option requests that the symbol table include only global symbols and the &lt;span style="font-style:italic;"&gt;-n&lt;/span&gt; option requests that the symbol table be sorted by address.  We then looked at application.num in a text editor and I had them search for &lt;span style="font-style:italic;"&gt;CorruptedVariable&lt;/span&gt;.  &lt;br /&gt;&lt;br /&gt;I then looked at the variables immediately before (e.g. lower addresses immediately preceding) &lt;span style="font-style:italic;"&gt;CorruptedVariable&lt;/span&gt; in memory. The variable immediate preceding &lt;span style="font-style:italic;"&gt;CorruptedVariable&lt;/span&gt; was a 32-bit integer (&lt;span style="font-style:italic;"&gt;RandomVariable&lt;/span&gt; so it was unlikely that accesses to it were the culprit.  But the variable before it had buffer in the name.  That was a big hint and I asked to see the corresponding source code. The C source code where the &lt;span style="font-style:italic;"&gt;CorruptedVariable&lt;/span&gt; was declared was similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    float  TooShortBuffer[8];&lt;br /&gt;    int    RandomVariable;&lt;br /&gt;    int    CorruptedVariable;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So &lt;span style="font-style:italic;"&gt;TooShortBuffer&lt;/span&gt; was indeed an array and not a structure.  For the purposes of this bug, that was awesome.  It meant that using an index that was greater than 8 would overwrite the variables immediately after it in memory.  And we had confirmed what the variables which would be overwritten were.&lt;br /&gt;&lt;br /&gt;I asked what &lt;span style="font-style:italic;"&gt;TooShortBuffer&lt;/span&gt; was used for and one of the team mentioned that they had recently added something and might have forgotten to extend all the arrays in the program. As a quick test, I asked them to add 100 elements to that array.  Not surprisingly the test scenario now worked.  &lt;br /&gt;&lt;br /&gt;I recommended to the team that the array now be sized with a hard number but with a macro defined to the maximum number of elements.  In addition, I recommended that when using an index into this array to access it, validate that the index is within range. Self-checking programs are so much easier to debug.&lt;br /&gt;&lt;br /&gt;I spent less than an hour on the customer site and left then with a smile.&lt;br /&gt;&lt;br /&gt;In my next post, I will show how &lt;span style="font-style:italic;"&gt;gdb&lt;/span&gt; can be used to help locate the source of stray writes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-4246963752126442526?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/4246963752126442526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/debugging-data-corruption-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4246963752126442526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/4246963752126442526'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/debugging-data-corruption-1.html' title='Debugging Data Corruption #1'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-9167628646793486138</id><published>2009-12-10T14:57:00.001-06:00</published><updated>2009-12-10T15:11:12.609-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bug Ada GNAT RTEMS'/><title type='text'>PC386 Memory Size Bug</title><content type='html'>Another day, another bug.  At least this one was interesting.  This issue was initially reported as Ada programs compiled for the pc386 BSP would run on the &lt;a href="http://www.qemu.org/"&gt;Qemu&lt;/a&gt; simulator but would not run on the real embedded PC we were using.  Since GNAT/RTEMS toolsets are built from source and users do not get the luxury of using the RPMs, my first suspicion was an Ada specific issue.  But after a few days of thinking on this, it occurred to me that the code was locking up long before Ada code ran.  I stripped the test case down to C only and added a dummy method for &lt;span style="font-style: italic;"&gt;gnat_main()&lt;/span&gt;.  This used the exact RTEMS application configuration and initialization as the broken Ada program did.  This program failed in exactly the same way.  Feeling the rush of some success, I did a binary search to determine what configuration  setting was making this fail.  After a few attempts, I discovered that when the application configued zeroing out the RTEMS Work Area, the board locked up.  Eureka!&lt;br /&gt;&lt;br /&gt;With that piece of insight, I began to focus on the code that zeroed memory.  I looked at the starting address and length.  The BSP initialization claimed there was 1007MB of RAM available on the board.  It looked fine given the board's configuration.  I decided to try deliberately lowering the amount of RAM RTEMS knew about.  Various low values worked and I tried 1004MB.  That worked.  I suddenly realized that some memory was reserved for some purpose.  I went away to think since I had a work around. &lt;br /&gt;&lt;br /&gt;I looked up the manual for the motherboard's chip set and low and behold, I had forgotten that the video controller shared RAM from the main RAM.  We needed to stay away from that area.  I posted to the RTEMS mailing list and it was suggested that we should trust the RAM size provided by the multiboot information available NOT the amount determined by our dynamic sizing probe.  Looking at the 4.9 release branch, it turned out that that code did give priority to the multiboot information. &lt;br /&gt;&lt;br /&gt;I compared the two pieces of code and quickly came to the conclusion that updates had broken this code in a subtle way.  A little restructuring and clean up and the problem was resolved.   But it had been a long and circuitous path from initial report to problem resolved.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What are the lesson to learn?  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this case, there are two lessons to take away.  First, a problem may not be what it first seems to be.  My first impression was that this was an Ada related issue not a very low BSP specific issue. &lt;br /&gt;&lt;br /&gt;The second lesson is that divide and conquer is a very good strategy.  You need to narrow down the problem space so it is possible to track down the specific issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-9167628646793486138?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/9167628646793486138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/pc386-memory-size-bug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/9167628646793486138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/9167628646793486138'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/pc386-memory-size-bug.html' title='PC386 Memory Size Bug'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3975835529053559015.post-403537873029221436</id><published>2009-12-10T14:46:00.000-06:00</published><updated>2009-12-10T14:51:56.656-06:00</updated><title type='text'>First Blog Post</title><content type='html'>Every blog has to have a first port and this blog is no different. &lt;br /&gt;&lt;br /&gt;I have considered having a blog for a while but never got around to it.  I don't know if anyone cares to read it or not.  I am the maintainer of the free real-time operating system RTEMS (&lt;a href="http://www.rtems.org"&gt;http://www.rtems.org&lt;/a&gt;) and a member of the GNU Compiler Collection (GCC) Steering Committee (&lt;a href="http://gcc.gnu.org"&gt;http://gcc.gnu.org&lt;/a&gt;).  I plan to ramble on free software activities that I am involved in, interesting bugs, RTEMS improvements, etc.. I may also ramble about design patterns for use in embedded systems, performance analysis, and &lt;a href="http://www.linux.org"&gt;GNU/Linux&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is a modest beginning to what I hope will be a blog containing interesting posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3975835529053559015-403537873029221436?l=rtemsramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rtemsramblings.blogspot.com/feeds/403537873029221436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/first-blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/403537873029221436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3975835529053559015/posts/default/403537873029221436'/><link rel='alternate' type='text/html' href='http://rtemsramblings.blogspot.com/2009/12/first-blog-post.html' title='First Blog Post'/><author><name>Dr Joel</name><uri>http://www.blogger.com/profile/15190404899273493174</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://1.bp.blogspot.com/_5Tmc8sBljXU/SyGTtuwr6lI/AAAAAAAAACc/2hSZvqBfqn0/s1600-R/15756_171942196588_539166588_3023556_78172_n.jpg'/></author><thr:total>0</thr:total></entry></feed>
