Newsletters - Summer 2006

Read and understand before you sign

Employment Agreements
by John W. Stout

I read an interesting article in which the author discussed his experiences as a consultant in the IT industry. In particular, he detailed the “terrifying provisions” that one consulting company attempted to get him to agree to.

I thought it would be worthwhile to give a brief summary of what is now more-or-less standard in the industry as far as employment agreements are concerned.

“At-will” employment: This means that employer or employee can terminate employment at any time for any reason, with or without notice. This is the typical employment relationship, with no employment contracts or guarantees.

Background checks: Extensive checks are common, including checking criminal records, driving records, terrorist databases, doing drug screenings and, in some cases, even credit checks. There should be some limiter in the agreement as to who will be allowed to look at the results of background checks—typically the firm doing the screening and the firm’s customer who requested the screening.

Non-disclosure: Firms want to protect confidential information. It is important that you understand what your employer considers confidential. It may include proprietary technologies, customer information, pricing, payroll, plans and internal processes. There should be limits on the time and circumstances of the disclosure of such knowledge.

Non-compete: Former employees who have knowledge of the firm’s customers, vendors, proprietary technology and other information could use that knowledge competitively against the company. A non-compete specifies that an employee or consultant may not work for one of the company’s competitors for some period of time after leaving. Non-competes for consultants also exclude them for working directly for the firm’s customers. In both cases, the duration of the non-compete is typically one to two years, after which the firm has to yield to right-to-work employment statutes, which can vary from state-to-state.

Individual companies may have other clauses and provisions in their employment agreements, so if you encounter anything that seems excessive consult your attorney before signing.

John W. Stout is the founder and president of Stout Systems. He has twenty-five year's experience in the software industry. He is also sought after as a technology speaker, presenting sessions at developer conferences and user groups. E-mail .


Overview of Embedded Linux, Part II—A Short HOWTO
by David B. Rein

Editor’s Note: In the Spring 2006 edition of our newsletter, we featured an article by Dave titled Overview of Embedded Linux. If you missed the article and would like to read it, it is available online.

In the Spring 2006 newsletter I explored several of the advantages and issues of using Linux for embedded systems. I thought it might be helpful to walk through how I developed a specific embedded Linux system, paying special attention to tools, development issues and the steps for taking a general distribution of Linux and configuring it for a target system.

For purposes of illustration, I’ll discuss a target system that automated the control of building lighting. Large buildings frequently use automated lighting systems to turn on and off the lights in various zones. Think of how tedious it would be to run around flipping switches every morning and then again every evening. Now think of how convenient it would be to program lights to turn on at 6AM, to turn up at 6PM and to turn off at midnight.

The lighting control system used an inexpensive, small-footprint X86 motherboard with on-board Ethernet, USB, RS-232 serial, ATA disk interface, PS/2 keyboard and mouse ports and video. The video and keyboard were used only for development and debug.

The development path for this project took advantage of the fact that the motherboard had the features of a normal PC system. The tools that I selected worked in both Windows and Linux. This allowed the development steps to be:

• Step One: Start application development in Windows.

• Step Two: Develop device drivers in Linux.

• Step Three: Port application to Linux.

• Step Four: Port application to target hardware.

• Step Five: Create embedded version of Linux.

The choices that we made at the beginning of the project—the use of Linux, a full-featured operating system, the use of an X86 motherboard, and the use of tools that run on both Windows and Linux—made it possible for us to design, develop and review an application on Windows long before we had to worry about the final embedded target.

Step One, application development, was done on a Windows box using the Cygwin port of the GNU tools. Application development was completed long before we worried about anything having to do with hardware issues, operating system or device drivers. In this step I was able to test module function and inter-module communications. The interfaces to device drivers were stubbed out. The design partitioned major functionality into separate programs and used the TCP/IP stack for inter-process communications.

Step Two ran concurrently with Step One. Here I developed the USB serial port driver on a Linux box. The manufacturer of the serial chip provided open source device drivers for Linux. I just needed to rework the drivers to provide the functions need for this project. The driver development was significantly eased by the fact that the whole Linux kernel is open source, making it, in effect,  the DDK (driver development kit). I was able to examine all modules of the USB driver stack and gain insight into the needs of my driver.

An important feature of Linux is that most device drivers are separate modules that are dynamically loaded and unloaded. The kernel does not have to be changed or rebooted just to modify a driver. A note here for those familiar with the Windows Blue Screen of Death (BSOD): the first bad memory access by my driver resulted in all the information from the BSOD being dumped to the screen while the system continued to run. All I had to do was unload the driver, modify, rebuild and then reload the driver. In the course of driver development I only had to reboot about a dozen times due to the driver hanging, but never due to memory access.

Step Three was to port the application to Linux. This required setting up a development environment on a Linux box, building the code and testing it for correct operation. Since the source code was already built with the GNU tools, there was very little editing needed to build in the Linux environment. Most of the effort was modifying makefiles. I was able at this point to test the input and output processes which used my custom device drivers. This procedure was very similar to Windows development. I used Visual SlickEdit on both Windows and Linux, which provided a consistent IDE environment.

Step Four was porting to the target system. This was done in two parts. First, I installed an unmodified version of Linux onto the target system, which included a disk drive and CDROM. With this configuration I was able to test the application and device driver, especially checking for performance and memory issues. The second part was to reduce the footprint of the storage and memory usage.

Finally, Step Five. I created a read-only FLASH based system.

It is at this point that one is faced with the sculptor’s dilemma: the block of marble holds the work of art, giving the sculptor the problem of removing only the unnecessary stone. With Linux there is tremendous choice of kernel modules and utilities. Often there are multiple packages to accomplish the same function, so it is important to understand the packages and choose the best for the system requirements. One path was to use a Linux distribution configured for a minimal footprint such as the Linux Router Project or Damn Small Linux. I found several weaknesses in the minimal pre-configured systems; they used older kernels, didn’t include some features needed for the target system, and were not compatible with many pre-built packages. The other path was to start with a full distribution, such as Debian or Fedora, and then whittle it down to meet the storage requirements. I chose the latter path using the Debian distribution since it is widely supported, well tested, and provides the latest kernel and a vast number of pre-built packages. It is also what I was using for my development system so it simplified the port to the target.

The two main tools needed to configure the target system are menuconfig and a package manager. Menuconfig is the part of the kernel build process and allows configuring the kernel and device drivers. For Debian based distributions the utility, Aptitude, manages the installation and removal of utility packages. Using these tools brought the storage footprint down from 1GB to under 400MB. Further removal of unnecessary files and drivers completed the sizing to under our target of 256MB.

The next step was to make the system read-only. This required the following:

•  identify those files and directories that needed to be writable

• snapshot the files and directories, placing them in a FLASH directory

• change these files and directories to symbolic links pointing to the ramdisk locations

• on boot, copy the snapshot from the FLASH directory to ramdisk

As the project matured, the Linux box built the code and downloaded it to the target to run and test. With the monitor and keyboard attached, the target system allowed console access to each process and control of the system. Without the keyboard and monitor, which was the normal target configuration, Telnet provided much of the same debug access into the system and processes. I only ran the code on the development system when I needed to use the debugger.

Using Linux in an embedded system provides excellent tools for development and testing and the flexibility that allowed compatible operation from a full featured environment to a limited target. The end result is a development process that can separate application development from the embedded target issue, often removing operating system configuration and driver development from the critical path and allowing the port to the target be done in smaller and more controlled steps.

David Rein is a software engineer and the founder of DBR Consulting, LLC. He has been designing embedded and real-time systems for over thirty years. E-mail .

References:
O'Reilly Books

"Building Embedded Linux Systems" by Karim Yaghmour

Great resource for understanding the configuration and issues related to embedded Linux. Only covers the 2.4 kernel.

"Linux Device Drivers" by Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman

Complete details on Linux device driver development for the 2.4 and 2.6 kernels.

News Groups

Comp.os.linux.embedded

Focused and low flame, the title says it all.

Comp.os.arch.embedded

More general news group but very informative. Lots of hardware discussion.

Comp.os.linux.announce

Announcements of what’s new in the Linux world.

Comp.realtime

More software oriented than comp.os.arch.embedded.

Web Sites

www.linuxdevices.com

Great forums on embedded Linux issues.

www.damnsmalllinux.org

50MB port of Debian Linux, complete with GUI and broad support of PC devices. Put a copy on a USB FLASH disk and you can recover a damaged system.

www.uclinux.org

uCLinux is a port of Linux for very small systems, including processors without memory management. Works well on low end Coldfire systems.

www.rtlinuxfree.com

RTLinux has support for hard real-time.

www.sourceforge.net

Repository of many open source projects.

www.lnxw.com

LynuxWorks is a commercial Linux operating system for real-time embedded projects.

www.mvista.com

Monta Vista provides real-time enhanced ports of Linux for many different processors and off the shelf boards.

www.timesys.com

TimeSys provides Linux development tools and board support packages.


Recent News

Stout Systems welcomes new employees Rick Pluth and Bill Whelan (Software Engineers).


 


Current Job Opportunities

View Our Candidates

Subscribe to Our Newsletter

Stout Systems, P.O. Box 2934, Ann Arbor, MI 48106 · Voice 734-663-0877 · Fax 734-663-7659 ·
Copyright © 1995-2008 Stout Systems Development Inc. All Rights Reserved. Trademark & Legal Notice. Site Map Design by Fast Forward