Subject:
|
Re: Windows NT Success Story!
|
Newsgroups:
|
lugnet.robotics.rcx.legos
|
Date:
|
Thu, 10 Feb 2000 03:48:43 GMT
|
Viewed:
|
1494 times
|
| |
| |
Thanks a lot for this really helpful and detailed post!
Especially thanks for making the result of your success story
available for download. This allowed me to simply download
the whole thing and start experimenting with legOS applications
rather than figuring out why things don't compile, etc. etc.
Last time I tried, I ran into similar issues as you did, but gave
up after a couple of hours....
....just wanted to say thanks, that's all.
Chris.
"John Lorenz" <fatfree@wcug.wwu.NOSPAM.edu> wrote in message
news:FpLuI4.56B@lugnet.com...
> I'm pleased to announce that the NT boxes in our computer science lab has
> LegOS installed and running under Cygwin! I'd like to share this success
> story in the hope that it might help those who are still battling the Redmond
> Behemoth.
>
> In our lab we have Cygwin installed on all the local hard drives, but none of
> the students (including myself) have access rights to modify the installation
> (e.g. to install the Hitachi cross-compiler). We have a couple of new
> sysadmins because our cool sysadmin is graduating, and they are not receptive
> to "other people" making changes to their machines. So, I created my own
> Cygwin installation on a public network drive, installed the cross-compiler,
> and made it available to everyone. Since ActivePerl is already installed on
> all the machines locally, I changed my Cygnus.bat file to include the existing
> ActivePerl executable in the PATH.
>
> The installation of LegOS is very straightforward and easy. I followed Peter
> Van der Beken's instruction page at:
>
> http://arthurdent.dorm.duke.edu/legos/archives/windows/legOS-0.2.2
>
> The problems started when I typed "make" into the Cygwin shell the first
> time. Everything blew up! The error messages were endless, and it took an
> entire week to read the LegOS newsgroup, find the errors, and make the
> necessary corrections.
>
> **************************************************************************
>
> PROBLEM #1: The Firmdl3 Program Won't Work: "Permission Denied" Error
> Messages. The source code that Kekoa Proudfoot wrote is excellent, and the
> program displays a tremendous amount of patience waiting for packets from the
> RCX, but it assumes that packets are always written from the IR tower to the
> RCX successfully. As it turns out, that isn't always true. Writing to the
> RCX can be just as fragile an operation as reading from it. Unfortunately, I
> still don't know why the error was "Permission Denied" instead of "Write
> Error" or something else as appropriate.
>
> Solution: Paolo Masetti wrote a patch for the firmdl3 source files that
> introduces some patience into the packet write routines. Although I had to
> apply the patch manually, it worked perfectly and all the error messages
> dissappeared on the very first try. Thank you Paulo!! Here's Paulo's patch:
>
> http://www.lugnet.com/robotics/rcx/legos/?n=663
>
> After the application of this patch, I was able to download the LegOS firmware
> to my RCX for the first time! Now for some LegOS appz...
>
> **************************************************************************
>
> PROBLEM #2: The Dll Program Won't Compile. "Undefined symbol O_ASYNC" Error.
> This really threw me for a loop, because I really don't know the internals of
> LegOS; I'm just trying to install it. Fortunately, Markus L. Noga himself
> came up with the answer to this one, and it solved the problem for me:
>
> http://www.lugnet.com/robotics/rcx/legos/?n=439
>
> After implementing this solution, the program compiled successfully although
> there were several compiler warnings.
>
> **************************************************************************
>
> PROBLEM #3: The Dll Program Won't Run. "Invalid Argument" Error Message.
> This problem was more annoying than the last because the program wouldn't even
> attempt to communicate with the RCX before quitting.
>
> Solution: Paulo to the rescue. This patch took care of the problem:
>
> http://www.lugnet.com/robotics/rcx/legos/?n=619
>
> Not only that, but Paulo's dll patch got rid of all the warnings that were
> appearing during compilation of the dll program. Thanks again, Paulo!
>
> **************************************************************************
>
> PROBLEM #4: Dll Is Still Broken: Repeated displays of "keepaliveSend()"
> followed by "error deleting program" and program termination. This appears to
> be the same problem as Problem #1, but on a larger scale and involving more
> source files. The lnp_assured_write() function in util/dll-src/loader.c tries
> up to five times to receive an acknowledgement from the RCX. Unfortunately,
> again only one write operation actually happens, and since it fails nearly
> every time, the repeated attempts to receive an acknowledgement don't
> accomplish anything.
>
> There has been a lot of discussion about this problem:
>
> http://www.lugnet.com/robotics/rcx/legos/?n=415
> http://www.lugnet.com/robotics/rcx/legos/?n=416
> http://www.lugnet.com/robotics/rcx/legos/?n=458
>
> Solution: This time I made my own contribution to this effort. Using the
> idea behind Paulo's patch for the firmdl3 program, I made several changes of
> my own to make the dll program perform error checking during packet write
> operations. My initial change created a ripple effect, and for various
> reasons (including the avoidance of potential infinite loops!) I ended up
> making several other changes as well.
>
> In the end, the dll program became much more RCX friendly, just like Paulo's
> changes made firmdl3 more friendly. My dll program now downloads user
> programs nearly every time. Of course, interfering with the IR traffic with
> bright lights, long distances, or the IR transmitter in a remote control (!)
> can still cause communication difficulties and cause both firmdl3 and dll to
> fail. However, when the hardware works properly, software errors are much
> less likely to happen now.
>
> Since I've had little luck using the patch program to apply patches found on
> this newsgroup, I've had to apply patches manually. It's not such a big deal,
> but I'm not going to post a patch of my own. Instead, if you would like to
> see the changes I've made to the dll source, the files I changed are
> compressed into this 37KB zip archive:
>
> http://www.wcug.wwu.edu/~fatfree/LegOS/Happier_DLL.zip
>
> After making the dll program work, I was able to download both the
> helloworld.lx and rover.lx user programs that came with LegOS, and they both
> ran successfully.
>
> The last step in this venture is to successfully compile an original user
> program for the RCX.
>
> **************************************************************************
>
> PROBLEM #5: The Compiler Won't Compile an Original User Program. The linker
> reports missing symbol errors, lots of them. This was the error that kept me
> in the lab for more than 55 and a half hours one weekend. I went nuts trying
> to find the cause of this error. I spent lots of time going through the
> documentation for LegOS, Cygwin, ActivePerl, and the GNU compiler. After a
> lot of reading, I got nowhere, so I started tinkering. Tinkering is the most
> enjoyable ways to find an error.
>
> Sometimes the cause of an error isn't even remotely related to the
> manifestation of the subsequent error messages. Sure, it was the linker that
> was delivering the error messages, but the problem wasn't with the linker, or
> with the compiler for that matter. No, this error had to do with what I
> consider the real magic behind LegOS: that of dynamic linking.
>
> Here's the deal. Every time you compile a new LegOS kernel, the makefile
> turns on some extra options in the compiler which causes it to output a pair
> of disassembly (?) files. These text files contain all the assembly language
> and symbols that will become the kernel after the final pass through the cross-
> assembler. The makefile also launches a few Perl scripts which input these
> disassembly files and create the map file and the LDS files. The map file
> appears to be a sorted list of all the symbols in the kernel, and the LDS
> files are Linker Description Scripts which control the way programs are linked
> together.
>
> When you compile your own programs, the linker uses the map file and the LDS
> files from the kernel compilation to resolve references to the firmware and
> ROM routines into explicit offsets into the kernel. OK, it may not actually
> be magical, but it's the first time I've ever seen this method of compilation,
> so it's magic to me. My hat is off to Markus L. Noga. Nice work, dude.
>
> So what was the real problem that caused all these linker errors? ActivePerl
> wasn't launching correctly. That meant the disassembly files were not
> becoming map files and LDS files, so the linker had no basis with which to
> resolve outstanding symbols during the linking process. Mass bummer.
>
> It seems that ActivePerl insists on having MS-DOS style file names with colons
> and backslashes, while Cygwin insists on unix style file names with forward
> slashes. It's a very strange situation, especially when you factor in the
> magic that Unix/Cygwin performs when you invoke Perl scripts by entering the
> file name alone in the Cygwin shell. Unix/Cygwin examines the file,
> determines that it is a Perl script, runs Perl, and hands Perl the name of the
> script it should process. The problem with this process is with the path to
> where the Perl interpreter lives, which must always be the first line of the
> Perl script. When Cygwin passes the name of the Perl script to ActivePerl, it
> uses a unix style filename and that makes ActivePerl puke. This method
> doesn't work at all.
>
> This Unix/Cygwin magic can be bypassed by issuing an explicit Perl command.
> However, you have to use an MS-DOS style filename, even though you are typing
> the command into the Cygwin window. Let's say I have a hello world Perl
> script on my NT desktop. Entering the command
>
> "perl file://c/winnt/profiles/username/desktop/hello.pl"
>
> into the Cygwin shell results in a "Can't open perl script (snip): No such
> file or directory" error message. However, the command
>
> "perl c:\\winnt\\profiles\\username\\desktop\\hello.pl"
>
> runs successfully. Notice how the backslashes are all escaped. This is what
> Cygwin requires to deliver a proper MS-DOS filename to Perl. Finally, a
> solution to this problem is at hand.
>
> Solution: Edit the make files to invoke Perl explicitly, with an MS-DOS style
> filename to identify the script to be run.
>
> Finally, we have the ability to compile user programs, or do we?
>
> **************************************************************************
>
> PROBLEM #6: Make Displays "Invalid Separator" Error Message and Stops.
> Here is one last little problem I encountered. Even though Make is running
> under Cygwin in Windows, it is still a Unix program and it can't handle text
> files that have chr$(13) and chr$(10) separating lines of text. The normal
> (Unix) way of doing things is to have a single chr$(13) at the end of each
> line of text. It appears that Make is quite strict about this.
>
> Solution: Edit the makefiles with WordPad or an equivalent text editor that
> retains the original separations between lines of text. If you use WordPad,
> DON'T PRESS [ENTER]. Introducing a new break between lines of text will
> always insert an unwanted chtr$(10). I've also found success FTPing a
> makefile to a Unix box, making the changes there using any text editor, and
> then FTPing the file back to the Windows box.
>
> Finally, after fixing all these errors, LegOS finally works under Cygwin in
> Windows NT 4.0 SP 4. Make is a little touchy with the makefiles it's given,
> but that's manageable.
>
> I've typed in the Hello World program from the LegOS chapter of the O'Reilly
> book "The Unofficial Guide to LEGO Mindstorms Robots". It compiled,
> downloaded, and ran without incident. I also compiled and ran Martin
> Cornelius' program that plays "Wir sind die Roboter" on the RCX.
>
> http://www.lugnet.com/robotics/rcx/legos/?n=536
>
> This program is an excellent example of what LegOS can make an RCX do. At the
> same time, the ability to play music is completely out of reach of something
> like Not Quite C. The song sounds great but the program doesn't exit
> cleanly. Finally, I wrote an original program to run a motor and play around
> with the LCD display a little. The "Unofficial Guide" contains a wonderful
> reference to all the firmware calls and some of the ROM calls, too. The
> really good reading, of course, is in the header files for the RCX that came
> with LegOS.
>
> This LegOS installation was built to serve the students of CS 402, Artificial
> Intelligence class at Western Washington University. The goal was to make
> LegOS simple and easy to use so the students could concentrate on their
> software. Inside the LegOS installation I created a new directory called
> New_Project. This directory contains a shortcut to the Cygwin.bat file on the
> public network drive, a default makefile for compiling user programs, and some
> demonstration source code, including Martin's music program. I wrote some
> instructions for the students on this web page:
>
> http://www.wcug.wwu.edu/~fatfree/LegOS/
>
> The basic idea is that my fellow students can copy the New_Project directory
> from the public drive to some private directory of their choosing. Following
> the directions on the web page, the students simply open Cygwin, create a C
> program, carefully edit the makefile to add the name of the .lx file they want
> to compile, and then type "make" into the Cygwin shell. Once the program is
> compiled, dll is used to download the executable into the RCX and start it
> running.
>
> In closing, I would like to offer a copy of my installation for anyone who is
> interested. This installation represents everything that currently resides on
> the public network drive in WWU's computer lab. The whole enchilada,
> including all of LegOS, Cygwin, the Hitachi H8 cross-compiler, and all the
> changes to all the source code and makefiles I've mentioned throughout this
> post, *BUT* with the exception of ActivePerl, has been compressed into a 16.7
> MB zip file:
>
> http://www.wcug.wwu.edu/~fatfree/LegOS/LegOS_022_NT.zip
>
> I would also like to thank all the people whose posts to this newsgroup made
> this LegOS installation possible. Without your help, I would never have made
> it through this tangled mess.
>
> Thanks again,
> John
|
|
Message is in Reply To:
| | Windows NT Success Story!
|
| I'm pleased to announce that the NT boxes in our computer science lab has LegOS installed and running under Cygwin! I'd like to share this success story in the hope that it might help those who are still battling the Redmond Behemoth. In our lab we (...) (25 years ago, 8-Feb-00, to lugnet.robotics.rcx.legos)
|
2 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|