110 likes | 203 Views
Adventures in Real Time and Embedded Linux by Dawn Nelson. My CS Background. Long ago: BS in CS with Math minor and a German minor from Allegheny College, PA (near Erie). Have been working for Rome Research Corp as a programmer/system analyst for 24 years
E N D
My CS Background • Long ago: BS in CS with Math minor and a German minor from Allegheny College, PA (near Erie). • Have been working for Rome Research Corp as a programmer/system analyst for 24 years • Unix/Linux user since early 1990’s, with no sys-admin experience or kernel hacking. • Fortran and C programming with some VB thrown in, and then Java.
The Project: • Plan A: use the ARM 7 or ARM9 and a motion sensor, to control a usb webcam, sending photos to a web server. • Plan A fizzled out after 40-50 hours of not being able to get 3 different web cams to work. • Plan B: devise a device similar to the thermostat project, but the Arm has no parallel port. It morphed into seven-segment display with pushbuttons and toggle switches. • After melting 1 ARM9 and one 7-seg, I scaled back to prevent further injuries.
Steps Taken: • Acquire a system to embed upon – this was done by asking people at work. If none was found, I would use the ARM7. • Read 100 manuals on how to configure, boot, use the ARM9 (ok, that’s an exaggeration, but it was at least 100 pages of pdf files) • With no parallel port, I decided to use the DIO and LCD headers are directly readable/writable • My Co-workers like to make gadgets with wires.
More Steps: Embed the kernel • The ARM9 has a bootable flash Debian system. To embed a different kernel , I used an SD card. From the EmbeddedArm.com site, I downloaded an embeddable Debiantarball. • The SD card was fdisk-d and partitioned. • The unzipped tarball SD image was written to the SD card using dd if=512mbsd-debian-sarge.dd of=sda • Jumper 1 was set, and the ARM9 booted from the card upon restart
More Steps: Program the devices • Wrote C code to cycle through the segments of the 7-seg display in a figure 8 pattern. • Wrote C code to read switches and buttons, but due to component melting, those devices will not be used. • Wrote C code, using the timer code from Jitter.c to observe results of 7-seg display with cpu dragging.
Set Backs • ARM9 became unbootable upon smoking at the power source • With the 7-seg connected to the LCD pins and the switches/button connected to the DIO pins, something went wrong.. • Either a ground wire came loose or an unused connection wire touched something and caused a short • 7-seg display melted • Totally wrong connector
While waiting for repairs: Parport driver and thermostat program: • The driver needed some changes to allow it to register and unregister consistently. • But still doesn’t work. • Changed trgdriver.c to write to parport without the driver. That works. • Still trying to get the driver to work.
Step 3: Real Time • Download “vanilla” kernel 2.6.23 from kernel.org. • Download rtai-2.6.2.tar.gz from rtai.org • Unpack kernel source, make menuconfig, Apply patch from rtai/base/arch/i386/patches/linux-hal-…patch • Build the patched kernel, make, make modules_install, make install. • Boot new kernel , make and make install RTAI. So far, so good. • No Adeos present. Modules won’t insmod. • Backing up to the version that the book uses.
Now What? • The high priority task behaves the way I would expect a real time task to behave. • When I find a kernel and rtai/adeos that works, I will compare the timing results. • Also, port the RTAI kernel to the ARM9 device. • Find a way to get the parport driver to work.