https://xinu.cs.mu.edu/api.php?action=feedcontributions&user=Phinze&feedformat=atomEmbedded Xinu - User contributions [en]2024-03-29T15:46:14ZUser contributionsMediaWiki 1.34.2https://xinu.cs.mu.edu/index.php?title=Systems_Laboratory&diff=3812Systems Laboratory2011-05-26T21:24:46Z<p>Phinze: /* Alumni */</p>
<hr />
<div>== About the Systems Laboratory ==<br />
<br />
[http://www.mu.edu/ Marquette]'s [[Systems Laboratory]], under the direction of [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] in the [http://www.mscs.mu.edu/ Department of Mathematics, Statistics, and Computer Science], is housed on the third floor of Cudahy Hall.<br />
<br />
The lab creates new tools and methods for building and studying complex computer systems. Our emphasis is on embedded, real-time, and network systems, with strong ties to the electrical and computer engineering community, and the computer science education community. Current projects include:<br />
<br />
1. Experimental Embedded Networking Platform. Creation of laboratory infrastructure and software for research and education in the area of embedded networking appliances, particularly wireless routers and IP telephony. Collaboration with Cisco Systems Advanced Research Division.<br />
<br />
2. Experimental Embedded Operating System Laboratory. Creation of laboratory infrastructure and software for research and education in area of embedded operating systems. Collaboration with University of Buffalo and University of Mississippi, with funding from the National Science Founcation.<br />
<br />
3. Embedded Software Transactional Memory. Exploration of an innovative transactional memory model for guaranteeing process synchronization in embedded operating systems. Collaboration with Intel Research.<br />
<br />
The Systems Lab will host three undergraduate [http://acm.mscs.mu.edu/reu REU] (Research Experience for Undergraduates) students in summer 2010, funded by the MU's College of Arts and Sciences. They will be working on ports of the Embedded Xinu operating system to new embedded platforms, embedded network emulation, and multicore embedded systems.<br />
<br />
See the MSCS [http://www.mscs.mu.edu/mscs/faculty/research_labs.html Research Labs] page for more research laboratories in our department.<br />
<br />
== Publications ==<br />
<br />
=== Conference Proceedings and Journals ===<br />
<li>Dennis Brylow and Kyle Thurow. Hands-on Networking Labs With Embedded Routers. In <i>Proceedings of [http://www.sigcse.org/sigcse2011/ SIGCSE 2011]: The 42nd ACM Technical Symposium on Computer Science Education</i>, pages 399-404, Dallas, Texas, March 2011.<br />
[http://doi.acm.org/10.1145/1953163.1953283 (link)]<br />
<br />
<li>Matt Netkow and Dennis Brylow. Xest: An Automated Framework for Regression Testing of Embedded Software. In <i>Proceedings of [http://www.artist-embedded.org/artist/-WESE-10-.html WESE 2010]: 6th Workshop on Embedded Systems Education</i>, pages 40-47, Scottsdale, Arizona, October 2010.<br />
[http://www.artist-embedded.org/docs/Events/2010/WESE/Proceedings_WESE_2010.pdf (link)]<br />
<br />
<li>Adam Mallen and Dennis Brylow. Compiler Construction With A Dash of Concurrency and An Embedded Twist. In <i>Proceedings of [http://splashcon.org/ SPLASH 2010]: Systems, Programming, Languages, and Applications: Software for Humanity</i> (formerly OOPSLA) Educators' and Trainers' Symposium, pages 161-168, Reno, Nevada, October 2010. <br />
[http://dx.doi.org/10.1145/1869542.1869568 (link)]<br />
<br />
<li>Dennis Brylow and Bina Ramamurthy. Nexos: A Next Generation Embedded<br />
Systems Laboratory, In <i>Proceedings of WESE 2008: 4th Workshop on Embedded<br />
Systems Education</i>, pages 10-17, Atlanta, Georgia, October 2008.<br />
[http://www.lulu.com/content/3613764 (link)]<br /><br />
Extended version in <i>SIGBED Review</i>, Volume 6, Number 1, January 2009.<br />
[http://www.cs.virginia.edu/sigbed/archives/2009-01/j-7-wese-journal-p18-final-brylow.pdf (link)]<br />
<br />
<li>Dennis Brylow. An Experimental Laboratory Environment for Teaching Embedded <br />
Operating Systems, In <i>Proceedings of [http://www.cs.duke.edu/sigcse08/ SIGCSE 2008]: The 39th ACM Technical Symposium on Computer Science Education</i>, pages 192-196, Portland, Oregon, March 2008. [http://doi.acm.org/10.1145/1352322.1352201 (link)]<br />
<br />
<li>Dennis Brylow. An Experimental Laboratory Environment for Teaching Embedded Hardware Systems, In <i>Proceedings of<br />
[http://www.ncsu.edu/wcae/ISCA2007/FinalProgram.html WCAE 2007]:<br />
Workshop on Computer Architecture Education</i>,<br />
pages 44-51, San Diego, California, June 2007.<br />
[http://www.mscs.mu.edu/~brylow/papers/Brylow-WCAE2007.pdf (link)]<br />
<br />
=== Posters and Undergraduate Research ===<br />
<br />
<li> Kyle Thurow and Dennis Brylow. A Network Emulator on Embedded Xinu.<br />
Poster presentation and research talk presented at [http://www.sigcse.org/sigcse2010/ SIGCSE 2010]<br />
[http://src.acm.org/ ACM Student Research Competition], undergraduate division, Milwaukee, Wisconsin, March 2010. Kyle placed in the top five and advanced to the semi-finals round.<br />
<br />
<li> Gabe Van Eyck and Dennis Brylow. Xinu as a Multi-Core Operating<br />
System on the PlayStation 3. Poster presentation at [http://www.sigcse.org/sigcse2010/ SIGCSE 2010]<br />
[http://src.acm.org/ ACM Student Research Competition], undergraduate division, Milwaukee, Wisconsin, March 2010.<br />
<br />
<li> Aaron Gember and Dennis Brylow. Real-Time TCP Extensions. Poster<br />
presentation and research talk presented at [http://www.cs.arizona.edu/groups/sigcse09/ SIGCSE 2009]<br />
[http://src.acm.org/ ACM Student Research Competition], undergraduate division, Chattanooga, Tennessee. Aaron advanced to<br />
semi-finals, placed in top<br />
three finalists, and advanced to the grand finals.<br />
<br />
<li>Dennis Brylow. Experimental Operating System Lab On A Dime.<br />
[http://www.cs.potsdam.edu/sigcse07/ SIGCSE 2007]: Technical Symposium on Computer Science Education, Covington, Kentucky,<br />
March 2007. [http://www.mscs.mu.edu/~brylow/papers/Brylow-SIGCSE2007.pdf (link)].<br />
<br />
=== Workshops ===<br />
<br />
<li> Paul Ruth and Dennis Brylow. Teaching With Embedded Xinu. Workshop<br />
accepted at [http://www.cs.olemiss.edu/acmse2010/Home.htm ACMSE 2010]:<br />
The 48th ACM Southeast Conference, Oxford, Mississippi, April 2010.<br />
<br />
<li>Dennis Brylow and Paul Ruth. Teaching With Embedded Xinu. Workshop<br />
accepted at [http://www.sigcse.org/sigcse2010/ SIGCSE 2010]:<br />
The 41st ACM Technical Symposium on Computer Science Education, Milwaukee,<br />
Wisconsin, March 2010.<br />
<br />
== Lab Equipment ==<br />
<br />
The [[Systems Laboratory]] is populated with dual-headed Linux boxes running the latest version of [http://fedoraproject.org/ Fedora Linux].<br />
Other workstations in the lab include a dual-core Apple G5 running OS X, and several multi-core boxes for higher-end computation.<br />
<br />
The Xinu Laboratory component of the Systems Lab includes a pool of 24 WRT54GL wireless routers organized into a managed embedded<br />
backend pool, as well as smaller quantities of half a dozen other router types. Embedded development kits available include<br />
the Freescale/Motorola [http://www.evbplus.com/hcs12.html 68HC12 Dragon12] board,<br />
the Atmel [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2717 AT91 Series ARM Thumb] AT91EB40A board,<br />
the [http://www.atmel.com/products/AVR/butterfly ATmega169 Butterfly],<br />
a Zilog [http://www.zilog.com/docs/z8/devtools/z86ccp01zem.pdf Z86 Emulator Z86CCP01ZEM],<br />
and the Zilog [http://www.zilog.com/index.php?option=com_product&Itemid=26&mode=showProdDet&businessLine=1&familyId=6&productId=Z8F04A28100KIT Z8 Encore XP Dev Kit Z8F04A28100KIT-C].<br />
<br />
The Systems Lab includes both a private research network with our own gateway and firewall, and connections to each of the MSCS department production networks.<br />
The Lab also hosts Subversion, Trac, and Web service for the Marquette Student [http://acm.mscs.mu.edu/ ACM Chapter], the<br />
[http://mulug.mscs.mu.edu/ Marquette University Linux Users Group], and a stratum 2 NTP server for campus.<br />
<br />
== Lab Personnel ==<br />
<br />
=== Current Students ===<br />
<br />
[[File:XINU-summer2009.png|800px|thumb]] The Xinu Team in Summer 2009.<br />
<br />
From left,<br />
Kyle Thurow, [http://www.mscs.mu.edu/~dmahoney/ Dan Mahoney],<br />
[http://www.gemberdesign.com/ Aaron Gember],<br />
[http://www.mscs.mu.edu/~mschul/ Mike Schultz],<br />
[http://www.zacintosh.com/ Zachary Lund],<br />
[http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow],<br />
[http://www.mscs.mu.edu/~rberg/ Ryan Berg], and<br />
[http://pintozzi.com/ Joe Pintozzi].<br />
Not pictured: <br />
[http://www.mscs.mu.edu/~akoehler/ Adam Koehler] and<br />
Paul Spillane.<br />
<br />
<br />
=== Alumni ===<br />
<br />
[http://phinze.com Paul Hinze], B.S. 2008. Currently works as a developer for [http://braintreepayments.com Braintree].<br />
<br />
[http://research.engineering.wustl.edu/~schultzm/ Mike Schultz], M.S. 2009. Now at [http://cse.wustl.edu/Pages/default.aspx Washington University in St. Louis] doctoral program.<br />
<br />
Tim Blattner, B.S. 2009. Now at [http://www.cs.umbc.edu/ University of Maryland - Baltimore County] doctoral program.<br />
<br />
[http://www.gemberdesign.com/ Aaron Gember], B.S. 2009. Now at [http://www.cs.wisc.edu/ University of Wisconsin-Madison] doctoral program.<br />
<br />
[http://netkow.com/ Matt Netkow], B.S. 2009. Now works as a developer for [http://www.savogroup.com/ The SAVO Group].<br />
<br />
Adam Mallen, B.S. 2009. Now at [http://www.marquette.edu/mscs/ Marquette University] doctoral program in Computational Sciences with an emphasis in Math.<br />
<br />
Adam Koehler, M.S. 2010. Now at [http://www1.cs.ucr.edu/index.php University of California Riverside] doctoral program.</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Build_Xinu&diff=3265Build Xinu2009-05-20T01:59:02Z<p>Phinze: /* Build binutils */ Removing fuzz from ubuntu patch</p>
<hr />
<div>[[Category:HOWTO]]<br />
The new MIPS port of Embedded XINU has been released. See the [[Downloads]] tab for more information.<br />
A revision of Doug Comer's venerable ''Operating System Design - The XINU Approach'' textbook is in progress.<br />
<br />
== Cross-Compiler ==<br />
In order to compile Embedded MIPS kernels on a workstation that is not itself<br />
a MIPS processor, it is necessary to build and install an appropriate<br />
[[wikipedia:Cross Compiler|cross compiler]]. There are many<br />
ways to accomplish this; for reference, we list the specific versions and<br />
steps we used for our installation.<br />
<br />
'''NOTE:''' the following tutorial describes the steps for creating a MIPS cross-compiler in a Linux environment. See our other wiki pages for tutorials on building cross-compilers for [[HOWTO:Build XINU on Windows XP|Windows XP]] or [[HOWTO:Build XINU on Mac OS X|Mac OS X]].<br />
<br />
As always, one should be wary of installing unfamilar software as the root<br />
user of the system. All of the steps below have been carried out as a<br />
lesser-privileged user with write access to the necessary directories.<br />
<br />
=== Build binutils ===<br />
<br />
First, we downloaded, compiled, and installed the appropriate binary utilities.<br />
We downloaded [http://www.gnu.org/software/binutils/ binutils] version<br />
[http://ftp.gnu.org/gnu/binutils/binutils-2.18.tar.gz 2.18], untarred the<br />
source code, and ran the following commands inside the new directory created by untarring the download:<br />
<br />
./configure --prefix=/usr/local/project/mipsel-dev --target=mipsel<br />
make<br />
make install<br />
<br />
'''NOTE:''' Fedora 10 requires [http://www.gnu.org/software/binutils/ binutils] version<br />
[http://ftp.gnu.org/gnu/binutils/binutils-2.19.tar.gz 2.19].<br />
<br />
'''NOTE:''' Ubuntu 8.10 or 9.04 users will experience errors in trying to compile binutils <= 2.19.1. This is a known problem when compiling binutils with gcc-4.3, and will be fixed in the next binutils release. Until then, you can apply this patch to binutils 2.19 to allow it to build properly:<br />
<br />
<pre><br />
Index: binutils-2.19/gas/config/tc-mips.c<br />
===================================================================<br />
--- binutils-2.19.orig/gas/config/tc-mips.c 2009-05-19 20:54:20.000000000 -0500<br />
+++ binutils-2.19/gas/config/tc-mips.c 2009-05-19 20:54:23.000000000 -0500<br />
@@ -3457,7 +3457,7 @@<br />
warning now. */<br />
const char *msg = macro_warning (subtype);<br />
if (msg != 0)<br />
- as_warn (msg);<br />
+ as_warn("%s", msg);<br />
}<br />
else<br />
{<br />
@@ -14450,7 +14450,7 @@<br />
{<br />
const char *msg = macro_warning (fragp->fr_subtype);<br />
if (msg != 0)<br />
- as_warn_where (fragp->fr_file, fragp->fr_line, msg);<br />
+ as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);<br />
}<br />
<br />
/* Go through all the fixups for the first sequence. Disable them<br />
</pre><br />
<br />
More information about this particular problem can be found on this thread: http://www.mail-archive.com/bug-binutils@gnu.org/msg07225.html<br />
<br />
=== Note about cross-compiler location ===<br />
<br />
We have chosen the path "/usr/local/project/mipsel-dev" to host our cross-compiler<br />
installation. Whatever path is used here must be reflected in the [[XINU]] build<br />
configuration file, "compile/makeVars" when you arrive at that step.<br />
<br />
=== Link include directory ===<br />
<br />
We are not building a true, full-blown UNIX cross-compiler here, and do not need<br />
a proper installation of the platform-specific C libraries; [[XINU]] has its own small<br />
libraries that compile with the kernel. However, the GCC compilation will want to<br />
see appropriate library headers, so we cheat here by linking the platform-specific include directory<br />
to the host machine's include directory.<br />
<br />
mkdir -p /usr/local/project/mipsel-dev/mipsel/usr<br />
ln -s /usr/include /usr/local/project/mipsel-dev/mipsel/usr/include<br />
<br />
=== Build GNU C Compiler ===<br />
<br />
Second, we downloaded, patched, compiled and installed the GNU C Compiler.<br />
We downloaded [http://gcc.gnu.org/ GCC] version 3.4.6. We applied a <br />
[http://www.mscs.mu.edu/~brylow/xinu/gcc-3.4.6-fixproto.patch short patch]<br />
to correct some kind of obscure fixproto error. We added the newly compiled binutils<br />
into the shell path (/usr/local/project/mipsel-dev/bin) for the gcc compilation to find them.<br />
This is also known to work with [http://gcc.gnu.org/ GCC] version 4.1.2 and 4.2.0 unpatched, using<br />
[http://www.mscs.mu.edu/~brylow/xinu/fakelibdetection.sh this script] to get around installing<br />
a bunch of platform-specific UNIX libraries.<br />
<br />
./configure --prefix=/usr/local/project/mipsel-dev --target=mipsel --with-sysroot=/usr/local/project/mipsel-dev/mipsel/ --enable-languages=c<br />
make<br />
make install<br />
<br />
=== Rejoice ===<br />
<br />
If all has gone well, you should now have a gcc cross-compiler from your host's native architecture to<br />
little-endian MIPS:<br />
<br />
/usr/local/project/mipsel-dev/bin/mipsel-gcc<br />
<br />
Remember the path to this file because later you'll need to double check some building variables to make sure they point to the correct location of your cross-compiler.<br />
<br />
== Building the XINU Image ==<br />
<br />
Once you have downloaded and extracted the xinu tarball, you will see a basic directory structure:<br />
<br />
<pre>AUTHORS device lib loader README system<br />
compile include LICENSE mailbox shell test</pre><br />
<br />
<tt>AUTHORS</tt> is a brief history of contributors to the XINU operating system in it's varying iterations.<br />
<br />
<tt>compile/</tt> contains the Makefile and other necessities for [[Build System|building the XINU system]] once you have a cross-compiler.<br />
<br />
<tt>device/</tt> contains the source for all device drivers, including the tty and uart driver.<br />
<br />
<tt>include/</tt> contains all the header files used by XINU.<br />
<br />
<tt>lib/</tt> contains a folder (libxc/) with a Makefile and source for the library, as well as a binary blob which contains the pre-compiled library.<br />
<br />
<tt>LICENSE</tt> is the license under which this project falls.<br />
<br />
<tt>loader/</tt> contains assembly files and is where the bootloader will begin execution of O/S code.<br />
<br />
<tt>mailbox/</tt> contains the source for the mailbox message-passing implementation. <br />
<br />
<tt>README</tt> is this document.<br />
<br />
<tt>shell/</tt> contains the source for all shell related functions.<br />
<br />
<tt>system/</tt> contains the source for all system functions such as the nulluser process (initialize.c) as well as code to set up a C environment (startup.S).<br />
<br />
<tt>test/</tt> contains a number of testcases (which can be run using the shell command testsuite).<br />
<br />
----<br />
<br />
First, it is a good idea to read up on [[Build System|building the XINU system]]. Next, you'll want to check your <code> mipsVars </code> file in the <code> compile </code> directory. The file should look something like this:<br />
<pre>MIPS_ROOT = /usr/local/project/mipsel-dev/bin<br />
MIPS_PREFIX = mipsel-<br />
<br />
COMPILER_ROOT = ${MIPS_ROOT}/${MIPS_PREFIX}<br />
<br />
CC = ${COMPILER_ROOT}gcc<br />
CPP = ${COMPILER_ROOT}cpp<br />
LD = ${COMPILER_ROOT}ld<br />
AS = ${COMPILER_ROOT}as<br />
AR = ${COMPILER_ROOT}ar<br />
MAKEDEP = `which makedepend`<br />
<br />
DOCGEN = doxygen<br />
<br />
# DETAIL = -DDETAIL<br />
<br />
DEFS =<br />
INCLUDE = -I../include<br />
<br />
#flag for producing GDB debug information<br />
BUGFLAG = -ggdb<br />
<br />
CFLAGS = -O0 -Wall -Werror -Wstrict-prototypes -Wno-trigraphs \<br />
-nostdinc -fno-builtin -fno-strict-aliasing -fno-common \<br />
-fomit-frame-pointer -fno-pic -ffunction-sections -G 0 \<br />
-mlong-calls -mno-abicalls -mabi=32 -march=mips32 \<br />
-Wa,-32 -Wa,-march=mips32 -Wa,-mips32 -Wa,--trap \<br />
${DEBUG} ${INCLUDE} ${DETAIL} ${DEFS} -c<br />
<br />
<br />
ASFLAGS = ${INCLUDE} ${DEBUG} -march=mips32 -mips32<br />
</pre><br />
<br />
The important thing to note on this file is the <code> MIPS_ROOT </code> variable. It needs to point to the directory containing the cross-compiler. If you followed the commands in the tutorial exactly, then the value of the <code> MIPS_ROOT </code> variable in the code above should be the correct value.<br />
<br />
Now you'll want to actually create your boot image. In the <code> compile/ </code> directory execute the following commands: <code>make clean </code> and <code> make</code>. The <code> make </code> command will let you know if you have any compiling errors or warnings. If there are none, then you should have successfully created a XINU boot image located in the file <code> xinu.boot </code> in the <code> compile/ </code> directory. Remember that each time you make changes to source files, to recompile and create a new XINU boot image you have to execute <code> make clean </code> and then <code> make</code>.<br />
<br />
== What to do next? ==<br />
<br />
Now that you have successfully built a XINU boot image you're ready to use that file to actually [[HOWTO:Deploy_Xinu|boot XINU]] on your backend router.<br />
<br />
<br />
<hr/><br />
''This work is supported in part by NSF grant DUE-CCLI-0737476.''</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Build_Xinu&diff=3264Build Xinu2009-05-20T01:42:29Z<p>Phinze: /* Cross-Compiler */ Notes about binutils + ubuntu, and subheadings</p>
<hr />
<div>[[Category:HOWTO]]<br />
The new MIPS port of Embedded XINU has been released. See the [[Downloads]] tab for more information.<br />
A revision of Doug Comer's venerable ''Operating System Design - The XINU Approach'' textbook is in progress.<br />
<br />
== Cross-Compiler ==<br />
In order to compile Embedded MIPS kernels on a workstation that is not itself<br />
a MIPS processor, it is necessary to build and install an appropriate<br />
[[wikipedia:Cross Compiler|cross compiler]]. There are many<br />
ways to accomplish this; for reference, we list the specific versions and<br />
steps we used for our installation.<br />
<br />
'''NOTE:''' the following tutorial describes the steps for creating a MIPS cross-compiler in a Linux environment. See our other wiki pages for tutorials on building cross-compilers for [[HOWTO:Build XINU on Windows XP|Windows XP]] or [[HOWTO:Build XINU on Mac OS X|Mac OS X]].<br />
<br />
As always, one should be wary of installing unfamilar software as the root<br />
user of the system. All of the steps below have been carried out as a<br />
lesser-privileged user with write access to the necessary directories.<br />
<br />
=== Build binutils ===<br />
<br />
First, we downloaded, compiled, and installed the appropriate binary utilities.<br />
We downloaded [http://www.gnu.org/software/binutils/ binutils] version<br />
[http://ftp.gnu.org/gnu/binutils/binutils-2.18.tar.gz 2.18], untarred the<br />
source code, and ran the following commands inside the new directory created by untarring the download:<br />
<br />
./configure --prefix=/usr/local/project/mipsel-dev --target=mipsel<br />
make<br />
make install<br />
<br />
'''NOTE:''' Fedora 10 requires [http://www.gnu.org/software/binutils/ binutils] version<br />
[http://ftp.gnu.org/gnu/binutils/binutils-2.19.tar.gz 2.19].<br />
<br />
'''NOTE:''' Ubuntu 8.10 or 9.04 users will experience errors in trying to compile binutils <= 2.19.1. This is a known problem when compiling binutils with gcc-4.3, and will be fixed in the next binutils release. Until then, you can apply this patch to binutils 2.19 to allow it to build properly:<br />
<br />
<pre><br />
--- gas/config/tc-mips.c 2009-05-19 20:20:18.000000000 -0500<br />
+++ gas/config/tc-mips.c 2009-01-14 02:49:59.000000000 -0600<br />
@@ -3457,7 +3456,7 @@<br />
warning now. */<br />
const char *msg = macro_warning (subtype);<br />
if (msg != 0)<br />
- as_warn (msg);<br />
+ as_warn("%s", msg);<br />
}<br />
else<br />
{<br />
@@ -14450,7 +14449,7 @@<br />
{<br />
const char *msg = macro_warning (fragp->fr_subtype);<br />
if (msg != 0)<br />
- as_warn_where (fragp->fr_file, fragp->fr_line, msg);<br />
+ as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);<br />
}<br />
</pre><br />
<br />
More information about this particular problem can be found on this thread: http://www.mail-archive.com/bug-binutils@gnu.org/msg07225.html<br />
<br />
=== Note about cross-compiler location ===<br />
<br />
We have chosen the path "/usr/local/project/mipsel-dev" to host our cross-compiler<br />
installation. Whatever path is used here must be reflected in the [[XINU]] build<br />
configuration file, "compile/makeVars" when you arrive at that step.<br />
<br />
=== Link include directory ===<br />
<br />
We are not building a true, full-blown UNIX cross-compiler here, and do not need<br />
a proper installation of the platform-specific C libraries; [[XINU]] has its own small<br />
libraries that compile with the kernel. However, the GCC compilation will want to<br />
see appropriate library headers, so we cheat here by linking the platform-specific include directory<br />
to the host machine's include directory.<br />
<br />
mkdir -p /usr/local/project/mipsel-dev/mipsel/usr<br />
ln -s /usr/include /usr/local/project/mipsel-dev/mipsel/usr/include<br />
<br />
=== Build GNU C Compiler ===<br />
<br />
Second, we downloaded, patched, compiled and installed the GNU C Compiler.<br />
We downloaded [http://gcc.gnu.org/ GCC] version 3.4.6. We applied a <br />
[http://www.mscs.mu.edu/~brylow/xinu/gcc-3.4.6-fixproto.patch short patch]<br />
to correct some kind of obscure fixproto error. We added the newly compiled binutils<br />
into the shell path (/usr/local/project/mipsel-dev/bin) for the gcc compilation to find them.<br />
This is also known to work with [http://gcc.gnu.org/ GCC] version 4.1.2 and 4.2.0 unpatched, using<br />
[http://www.mscs.mu.edu/~brylow/xinu/fakelibdetection.sh this script] to get around installing<br />
a bunch of platform-specific UNIX libraries.<br />
<br />
./configure --prefix=/usr/local/project/mipsel-dev --target=mipsel --with-sysroot=/usr/local/project/mipsel-dev/mipsel/ --enable-languages=c<br />
make<br />
make install<br />
<br />
=== Rejoice ===<br />
<br />
If all has gone well, you should now have a gcc cross-compiler from your host's native architecture to<br />
little-endian MIPS:<br />
<br />
/usr/local/project/mipsel-dev/bin/mipsel-gcc<br />
<br />
Remember the path to this file because later you'll need to double check some building variables to make sure they point to the correct location of your cross-compiler.<br />
<br />
== Building the XINU Image ==<br />
<br />
Once you have downloaded and extracted the xinu tarball, you will see a basic directory structure:<br />
<br />
<pre>AUTHORS device lib loader README system<br />
compile include LICENSE mailbox shell test</pre><br />
<br />
<tt>AUTHORS</tt> is a brief history of contributors to the XINU operating system in it's varying iterations.<br />
<br />
<tt>compile/</tt> contains the Makefile and other necessities for [[Build System|building the XINU system]] once you have a cross-compiler.<br />
<br />
<tt>device/</tt> contains the source for all device drivers, including the tty and uart driver.<br />
<br />
<tt>include/</tt> contains all the header files used by XINU.<br />
<br />
<tt>lib/</tt> contains a folder (libxc/) with a Makefile and source for the library, as well as a binary blob which contains the pre-compiled library.<br />
<br />
<tt>LICENSE</tt> is the license under which this project falls.<br />
<br />
<tt>loader/</tt> contains assembly files and is where the bootloader will begin execution of O/S code.<br />
<br />
<tt>mailbox/</tt> contains the source for the mailbox message-passing implementation. <br />
<br />
<tt>README</tt> is this document.<br />
<br />
<tt>shell/</tt> contains the source for all shell related functions.<br />
<br />
<tt>system/</tt> contains the source for all system functions such as the nulluser process (initialize.c) as well as code to set up a C environment (startup.S).<br />
<br />
<tt>test/</tt> contains a number of testcases (which can be run using the shell command testsuite).<br />
<br />
----<br />
<br />
First, it is a good idea to read up on [[Build System|building the XINU system]]. Next, you'll want to check your <code> mipsVars </code> file in the <code> compile </code> directory. The file should look something like this:<br />
<pre>MIPS_ROOT = /usr/local/project/mipsel-dev/bin<br />
MIPS_PREFIX = mipsel-<br />
<br />
COMPILER_ROOT = ${MIPS_ROOT}/${MIPS_PREFIX}<br />
<br />
CC = ${COMPILER_ROOT}gcc<br />
CPP = ${COMPILER_ROOT}cpp<br />
LD = ${COMPILER_ROOT}ld<br />
AS = ${COMPILER_ROOT}as<br />
AR = ${COMPILER_ROOT}ar<br />
MAKEDEP = `which makedepend`<br />
<br />
DOCGEN = doxygen<br />
<br />
# DETAIL = -DDETAIL<br />
<br />
DEFS =<br />
INCLUDE = -I../include<br />
<br />
#flag for producing GDB debug information<br />
BUGFLAG = -ggdb<br />
<br />
CFLAGS = -O0 -Wall -Werror -Wstrict-prototypes -Wno-trigraphs \<br />
-nostdinc -fno-builtin -fno-strict-aliasing -fno-common \<br />
-fomit-frame-pointer -fno-pic -ffunction-sections -G 0 \<br />
-mlong-calls -mno-abicalls -mabi=32 -march=mips32 \<br />
-Wa,-32 -Wa,-march=mips32 -Wa,-mips32 -Wa,--trap \<br />
${DEBUG} ${INCLUDE} ${DETAIL} ${DEFS} -c<br />
<br />
<br />
ASFLAGS = ${INCLUDE} ${DEBUG} -march=mips32 -mips32<br />
</pre><br />
<br />
The important thing to note on this file is the <code> MIPS_ROOT </code> variable. It needs to point to the directory containing the cross-compiler. If you followed the commands in the tutorial exactly, then the value of the <code> MIPS_ROOT </code> variable in the code above should be the correct value.<br />
<br />
Now you'll want to actually create your boot image. In the <code> compile/ </code> directory execute the following commands: <code>make clean </code> and <code> make</code>. The <code> make </code> command will let you know if you have any compiling errors or warnings. If there are none, then you should have successfully created a XINU boot image located in the file <code> xinu.boot </code> in the <code> compile/ </code> directory. Remember that each time you make changes to source files, to recompile and create a new XINU boot image you have to execute <code> make clean </code> and then <code> make</code>.<br />
<br />
== What to do next? ==<br />
<br />
Now that you have successfully built a XINU boot image you're ready to use that file to actually [[HOWTO:Deploy_Xinu|boot XINU]] on your backend router.<br />
<br />
<br />
<hr/><br />
''This work is supported in part by NSF grant DUE-CCLI-0737476.''</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Quotes&diff=2661Quotes2008-05-30T18:57:29Z<p>Phinze: organized quotes in a way that makes sense; try and follow the established standard (or change the standard consistently)</p>
<hr />
<div>== Summer 2008 ==<br />
* ../net/tcp/tcpTimer.c:101: error: ‘rum’ undeclared (first use in this function)<br />
* Brandon: "Vim has a learning curve." / MS: "No, it's a line."<br />
* MS: "[re: Firefox Plushie] Wow, that look more like a racoon to me. And wouldn't that just make people position Linux Tux and Firefox Fux is various explicit positions? Or is that just me?" / DB: "Yes, Michael. It is just you. And I don't think the Firefox mascot's proper name is 'Fux.'"<br />
<br />
== Spring 2008 ==<br />
* JP: "I'm not saying it's my opinion, I'm just saying it's an opinion."<br />
* JP: "Yeah, that's just fool complicated."<br />
* AG: "Even Tim's pictures have bugs in them."<br />
* AK: "Warnings mean you are smarter than the compiler!"<br />
* AG: "Do you use text messaging?" / JP: "What's that?"<br />
* AG: "I feel like doing something. What should I do?" / PH: "Go home."<br />
* DB: "Any questions? What else have I forgotten to tell you?" (email to lab) / Response: "The XINU lab notes that you forgot to tell us that you love us."<br />
* DB: "Traditionally, graduate students get a bed to themselves in this situation."<br />
* PH: "I'm really going to enjoy watching the commits to this branch."<br />
* ZL: "Voc and Supervoc joined at the UART"<br />
* George Corliss: "Verbose. Minus 5."<br />
* Steve Merrill: "Publish! Publish! Publish!" (walking down the hall past junior faculty offices)<br />
* JP: "I am just participating cause I'm standing here."<br />
* JP: "New commands are silly."<br />
* JP: "I've solved all kinds of problems in my life that no one's ever solved before."<br />
* AG: "You know scheme. I know scheme. We all scheme for ice cream."<br />
* DB: "I like StarTrek, but that would be less a hobby and more an investment."<br />
* MS: "Subtract two." / MN: "Why?" / MS: "...because I said so." / MN: "...alright..." / MS: "...and then when that doesn't work subtract four. But two should work." / MN: "Two didn't work." / MS: "Damnit! Subtract four." (Conversation continues in a similar fashion until Matt ends up subtracting eight.)<br />
* DB: "So they basically made a hammer and went after everything that could be a nail."<br />
* JP: "This is so unfair to us petty criminals."<br />
* DB: "We'll all be getting eye transplants soon."<br />
* DB: "''I'' am somehow derived from C." (on the ubiquity of the C programming language)<br />
* JP: "First you have to get the $3,000 license for the whizbang that does all the work."<br />
* DB: "I don't remember what the silly window is, but it must be important."<br />
* AK: "[UML is] just a bunch of boxes on paper."<br />
* DB: "Java has corrupted you all."<br />
* KJ: "There are some fonts that ''really'' spread out a paper." (discussing parameters for COSC 198 term paper)<br />
* DB: "You're telling me to put in less work. I'm not going to argue with you."<br />
* ''See MIPS Run, 2nd Ed.'': "When we finally make contact with aliens, their wheelbarrows will have round wheels and their computers will probably use fixed-size pages."<br />
<br />
== XINU Pith ==<br />
* XINU Cometh.<br />
* XINU Returneth.<br />
* XINU Calls.<br />
* XINU Returns.<br />
* XINU Creates.<br />
* XINU Reschedules.<br />
* XINU Saves and Restores.<br />
* XINU Preempts.<br />
* XINU Comes Not to JUDGE, But to EXECUTE...<br />
* XINU Knows Your Inmost Firmware.<br />
* XINU Brings New Life to Old Hardware.<br />
* XINU Waits.<br />
* XINU Allocates.<br />
* XINU Deallocates Away.<br />
* XINU Tastes Great.<br />
* XINU Has Less Filling.<br />
* XINU Runs FOREVER.<br />
* XINU Eschews Obfuscation.<br />
* XINU Does Not Do Windows.<br />
* XINU Brings ORDER out of CHAOS.<br />
* XINU Brings CHAOS from ORDER.<br />
* He Whoever Believes in XINU Shall Have Eternal Processing.<br />
* XINU Shall Run Again.<br />
* XINU Is Not UNIX.<br />
* XINU. It's What's For Dinner.<br />
* No XINU and No Mips Make Homer Something Something...<br />
* See XINU. See XINU Run. Run XINU Run.<br />
* XINU Allocateth, XINU Deallocateth Away.<br />
<br />
== Abbreviations ==<br />
{|<br />
|-<br />
! Abbreviation || Name<br />
|-<br />
| AG || Aaron Gember<br />
|-<br />
| AK || Adam Koehler<br />
|-<br />
| DB || Dennis (or Dr.) Brylow<br />
|-<br />
| JP || Justin Picotte<br />
|-<br />
| KJ || Kyle Jackson<br />
|-<br />
| MN || Matt Netkow<br />
|-<br />
| MS || Michael Schultz<br />
|-<br />
| PH || Paul Hinze<br />
|-<br />
| ZL || Zachary Lund<br />
|-<br />
|}</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Quotes&diff=2504Quotes2008-04-26T21:01:17Z<p>Phinze: see mips run quote</p>
<hr />
<div>* "I'm not saying it's my opinion, I'm just saying it's an opinion." - Justin Picotte<br />
* "Yeah, that's just fool complicated." - Justin Picotte<br />
* "Even Tim's pictures have bugs in them." - Aaron Gember<br />
* "Warnings mean you are smarter than the compiler!" - Adam Koehler<br />
* Conversation:<br />
** Aaron: "Do you use text messaging?" <br />
** Justin: "What's that?"<br />
* Conversation:<br />
** Aaron: "I feel like doing something. What should I do?"<br />
** Paul: "Go home."<br />
* Email:<br />
** From Brylow: "Any questions? What else have I forgotten to tell you?"<br />
** Response: "The XINU lab notes that you forgot to tell us that you love us."<br />
* "Traditionally, graduate students get a bed to themselves in this situation."<br />
* "I'm really going to enjoy watching the commits to this branch." - Paul Hinze<br />
* "Voc and Supervoc joined at the UART" - Zachary Lund<br />
* "Verbose. Minus 5." - George Corliss<br />
* "Publish! Publish! Publish!" - Steve Merrill, walking down the hall past junior faculty offices.<br />
* XINU Cometh.<br />
* XINU Returneth.<br />
* XINU Calls.<br />
* XINU Returns.<br />
* XINU Creates.<br />
* XINU Reschedules.<br />
* XINU Saves and Restores.<br />
* XINU Preempts.<br />
* XINU Comes Not to JUDGE, But to EXECUTE...<br />
* XINU Knows Your Inmost Firmware.<br />
* XINU Brings New Life to Old Hardware.<br />
* XINU Waits.<br />
* XINU Allocates.<br />
* XINU Deallocates Away.<br />
* XINU Tastes Great.<br />
* XINU Has Less Filling.<br />
* XINU Runs FOREVER.<br />
* XINU Eschews Obfuscation.<br />
* XINU Does Not Do Windows.<br />
* XINU Brings ORDER out of CHAOS.<br />
* XINU Brings CHAOS from ORDER.<br />
* He Whoever Believes in XINU Shall Have Eternal Processing.<br />
* XINU Shall Run Again.<br />
* XINU Is Not UNIX.<br />
* XINU. It's What's For Dinner.<br />
* No XINU and No Mips Make Homer Something Something...<br />
* See XINU. See XINU Run. Run XINU Run.<br />
* XINU Allocateth, XINU Deallocateth Away.<br />
* "I am just participating cause I'm standing here." - Justin Picotte<br />
* "New commands are silly." - Justin Picotte<br />
* "I've solved all kinds of problems in my life that no one's ever solved before." - Justin Picotte<br />
* "You know scheme. I know scheme. We all scheme for ice cream." - Aaron Gember<br />
* "I like StarTrek, but that would be less a hobby and more an investment." - Brylow<br />
* Conversation:<br />
** Mike: "Subtract two."<br />
** Matt: "Why?"<br />
** Mike: "...because I said so."<br />
** Matt: "...alright..."<br />
** Mike: "...and then when that doesn't work subtract four. But two should work."<br />
** Matt: "Two didn't work."<br />
** Mike: "Damnit! Subtract four."<br />
** (Conversation continues in a similar fashion until Matt ends up subtracting eight.)<br />
* "So they basically made a hammer and went after everything that could be a nail." - Brylow<br />
* "This is so unfair to us petty criminals." - Justin<br />
* "We'll all be getting eye transplants soon." - Brylow<br />
* "I am somehow derived from C." - Brylow<br />
* "First you have to get the $3,000 license for the whizbang that does all the work." - Justin<br />
* "I don't remember what the silly window is, but it must be important." - Brylow<br />
* "[UML is] just a bunch of boxes on paper." - Adam<br />
* "Okay, I can dig it." - Justin<br />
* "My experience has been that Marquette students can write." - Brylow<br />
* "Java has corrupted you all." - Brylow<br />
* "There are some fonts that really spread out a paper." - Kyle<br />
* "You're telling me to put in less work. I'm not going to argue with you." - Justin<br />
* "When we finally make contact with aliens, their wheelbarrows will have round wheels and their computers will probably use fixed-size pages." - ''See MIPS Run, 2nd Ed.''</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Quotes&diff=2481Quotes2008-04-21T21:01:45Z<p>Phinze: </p>
<hr />
<div>* "I'm not saying it's my opinion, I'm just saying it's an opinion." - Justin Picotte<br />
* "Yeah, that's just fool complicated." - Justin Picotte<br />
* "Even Tim's pictures have bugs in them." - Aaron Gember<br />
* "Warnings mean you are smarter than the compiler!" - Adam Koehler<br />
* Conversation:<br />
** Aaron: "Do you use text messaging?" <br />
** Justin: "What's that?"<br />
* Conversation:<br />
** Aaron: "I feel like doing something. What should I do?"<br />
** Paul: "Go home."<br />
* Email:<br />
** From Brylow: "Any questions? What else have I forgotten to tell you?"<br />
** Response: "The XINU lab notes that you forgot to tell us that you love us."<br />
* "Traditionally, graduate students get a bed to themselves in this situation."<br />
* "I'm really going to enjoy watching the commits to this branch." - Paul Hinze<br />
* "Voc and Supervoc joined at the UART" - Zachary Lund<br />
* "Verbose. Minus 5." - George Corliss<br />
* "Publish! Publish! Publish!" - Steve Merrill, walking down the hall past junior faculty offices.<br />
* XINU Cometh.<br />
* XINU Returneth.<br />
* XINU Calls.<br />
* XINU Returns.<br />
* XINU Creates.<br />
* XINU Reschedules.<br />
* XINU Saves and Restores.<br />
* XINU Preempts.<br />
* XINU Comes Not to JUDGE, But to EXECUTE...<br />
* XINU Knows Your Inmost Firmware.<br />
* XINU Brings New Life to Old Hardware.<br />
* XINU Waits.<br />
* XINU Allocates.<br />
* XINU Deallocates Away.<br />
* XINU Tastes Great.<br />
* XINU Has Less Filling.<br />
* XINU Runs FOREVER.<br />
* XINU Eschews Obfuscation.<br />
* XINU Does Not Do Windows.<br />
* XINU Brings ORDER out of CHAOS.<br />
* He Whoever Believes in XINU Shall Have Eternal Processing.<br />
* XINU Shall Run Again.<br />
* XINU Is Not UNIX.<br />
* XINU. It's What's For Dinner.<br />
* No XINU and No Mips Make Homer Something Something...<br />
* See XINU. See XINU Run. Run XINU Run.<br />
* XINU Allocateth, XINU Deallocateth Away.<br />
* "I am just participating cause I'm standing here." - Justin Picotte<br />
* "New commands are silly." - Justin Picotte<br />
* "I've solved all kinds of problems in my life that no one's ever solved before." - Justin Picotte<br />
* "You know scheme. I know scheme. We all scheme for ice cream." - Aaron Gember<br />
* "I like StarTrek, but that would be less a hobby and more an investment." - Brylow<br />
* Conversation:<br />
** Mike: "Subtract two."<br />
** Matt: "Why?"<br />
** Mike: "...because I said so."<br />
** Matt: "...alright..."<br />
** Mike: "...and then when that doesn't work subtract four. But two should work."<br />
** Matt: "Two didn't work."<br />
** Mike: "Damnit! Subtract four."<br />
** (Conversation continues in a similar fashion until Matt ends up subtracting eight.)</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Talk:XMMS&diff=2347Talk:XMMS2008-02-19T00:25:52Z<p>Phinze: re: logo</p>
<hr />
<div>== Logo Request ==<br />
<br />
Request: XINU Logo composed entirely of M&M's. [[User:Phinze|phinze]] 15:59, 13 February 2008 (CST)<br />
<br />
*Which logo would you like? We've got the book logo, the simple courier Embedded XINU text, or the router. Perhaps a new logo could even be developed. [[User:Michael|Michael]] 15:19, 14 February 2008 (CST)<br />
** I would imagine that a unique logo would develop during the construction process. [[User:Phinze|phinze]] 18:25, 18 February 2008 (CST)</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=2316Main Page2008-02-13T22:57:47Z<p>Phinze: Added information about COSC198 class.</p>
<hr />
<div>== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [[XINU|XINU Operating System]] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# Obtain a [[List of supported platforms|supported platform]].<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
<!-- Research --><br />
{|style="width:100%; border-spacing:8px; margin:0px -8px;"<br />
|style="width:50%; border:1px solid #afb0b0; background:#dbdbdb; vertical-align:top; color:#000;"|<br />
{|width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background:#dbdbdb;"<br />
! <h2 style="border-bottom: 1px solid black;">[[Research papers|Research]]</h2><br />
|-<br />
|style="color:#000;"| {{:Research papers/Current}}<br />
<div style="text-align:right;">[[Research papers/Current|view]]</div><br />
|-<br />
|}<br />
<br />
<!-- Development --><br />
|style="width:50%; border:1px solid #b4c3e1; background:#dde4f1; vertical-align:top; color:#000;"|<br />
{|width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background:#dde4f1;"<br />
! <h2 style="border-bottom: 1px solid black;">[[Development tasks|Development]]</h2><br />
|-<br />
|style="color:#000;"| {{:Development tasks/Current}}<br />
<div style="text-align:right;">[[Development tasks/Current|view]]</div><br />
|-<br />
|}<br />
|}<br />
<br />
== Spring 2008 Embedded Systems Course ==<br />
* [http://www.mscs.mu.edu/~brylow/cosc198/Spring2008/index.html Class Webpage]<br />
* [[Project Teams]]<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs|Internal Documentation]]''' for the current semester.<br />
* View all [[Special:Prefixindex/InternalDocs/|Internal Documentation]].<br />
<br />
----<br />
<br />
<small><small><small>The XINU Lab is brought to you in part by [[XMMS|M&M's]].</small></small></small><br />
<!--<br />
-->__NOTOC__<!-- Disable "Contents" box from showing --><!--<br />
-->__NOEDITSECTION__<!-- Disable [edit] from appearing --><!--<br />
--></div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Talk:XMMS&diff=2314Talk:XMMS2008-02-13T21:59:18Z<p>Phinze: New page: Request: XINU Logo composed entirely of M&M's. ~~~~</p>
<hr />
<div>Request: XINU Logo composed entirely of M&M's. [[User:Phinze|phinze]] 15:59, 13 February 2008 (CST)</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=2313Main Page2008-02-13T21:50:09Z<p>Phinze: xmms</p>
<hr />
<div>== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [[XINU|XINU Operating System]] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# Obtain a [[List of supported platforms|supported platform]].<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
<!-- Research --><br />
{|style="width:100%; border-spacing:8px; margin:0px -8px;"<br />
|style="width:50%; border:1px solid #afb0b0; background:#dbdbdb; vertical-align:top; color:#000;"|<br />
{|width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background:#dbdbdb;"<br />
! <h2 style="border-bottom: 1px solid black;">[[Research papers|Research]]</h2><br />
|-<br />
|style="color:#000;"| {{:Research papers/Current}}<br />
<div style="text-align:right;">[[Research papers/Current|view]]</div><br />
|-<br />
|}<br />
<br />
<!-- Development --><br />
|style="width:50%; border:1px solid #b4c3e1; background:#dde4f1; vertical-align:top; color:#000;"|<br />
{|width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background:#dde4f1;"<br />
! <h2 style="border-bottom: 1px solid black;">[[Development tasks|Development]]</h2><br />
|-<br />
|style="color:#000;"| {{:Development tasks/Current}}<br />
<div style="text-align:right;">[[Development tasks/Current|view]]</div><br />
|-<br />
|}<br />
|}<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs|Internal Documentation]]''' for the current semester.<br />
* View all [[Special:Prefixindex/InternalDocs/|Internal Documentation]].<br />
<br />
----<br />
<br />
<small><small><small>The XINU Lab is brought to you in part by [[XMMS|M&M's]].</small></small></small><br />
<!--<br />
-->__NOTOC__<!-- Disable "Contents" box from showing --><!--<br />
-->__NOEDITSECTION__<!-- Disable [edit] from appearing --><!--<br />
--></div>Phinzehttps://xinu.cs.mu.edu/index.php?title=XMMS&diff=2312XMMS2008-02-13T21:47:00Z<p>Phinze: Added the much needed XINU M&M's (XMMS) page.</p>
<hr />
<div>[[Image:XMMS-02-13-2008a.jpg|thumb|400px|left]]<br />
<br />
M&M's are small candy coated milk chocolate delights that come in a rainbow of colors and several variations. The XINU Lab maintains a supply of these colorful treats so that members of the lab can make it through the hard days and long nights of XINU development.<br />
<br />
<br />
[[Image:XMMS-02-13-2008b.jpg|thumb|300px|center]]</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=File:XMMS-02-13-2008b.jpg&diff=2310File:XMMS-02-13-2008b.jpg2008-02-13T21:39:28Z<p>Phinze: XINU M&M's close up.</p>
<hr />
<div>XINU M&M's close up.</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=File:XMMS-02-13-2008a.jpg&diff=2309File:XMMS-02-13-2008a.jpg2008-02-13T21:36:49Z<p>Phinze: XINU M&M's at capacity.</p>
<hr />
<div>XINU M&M's at capacity.</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=2233Main Page2007-12-29T01:53:49Z<p>Phinze: Reverted edits by RacdrOnlic (Talk); changed back to last version by Michael</p>
<hr />
<div>{| class="messagebox" style="background-color: #cfc"<br />
|-<br />
| style="font-size:20px; color: green; font-weight: bold;" | Embedded XINU Version 1.0 Released<br />
|-<br />
| The venerable [[XINU]] operating system has been used in classrooms, research labs, and commercial development firms for nearly a quarter of a century. Reimplemented in ANSI standard C, targeted to a modern RISC architecture, and optimized for resource-scarce embedded systems, Embedded XINU is rested, relaxed, and ready to go for the next quarter century.<br />Get it in the [[Downloads]] section.<br />
|}<br />
<br />
== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [[XINU|XINU Operating System]] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# Obtain a [[List of supported platforms|supported platform]].<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
<!-- Research --><br />
{|style="width:100%; border-spacing:8px; margin:0px -8px;"<br />
|style="width:50%; border:1px solid #afb0b0; background:#dbdbdb; vertical-align:top; color:#000;"|<br />
{|width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background:#dbdbdb;"<br />
! <h2 style="border-bottom: 1px solid black;">[[Research papers|Research]]</h2><br />
|-<br />
|style="color:#000;"| {{:Research papers/Current}}<br />
<div style="text-align:right;">[[Research papers/Current|view]]</div><br />
|-<br />
|}<br />
<br />
<!-- Development --><br />
|style="width:50%; border:1px solid #b4c3e1; background:#dde4f1; vertical-align:top; color:#000;"|<br />
{|width="100%" cellpadding="2" cellspacing="5" style="vertical-align:top; background:#dde4f1;"<br />
! <h2 style="border-bottom: 1px solid black;">[[Development tasks|Development]]</h2><br />
|-<br />
|style="color:#000;"| {{:Development tasks/Current}}<br />
<div style="text-align:right;">[[Development tasks/Current|view]]</div><br />
|-<br />
|}<br />
|}<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs|Internal Documentation]]''' for the current semester.<br />
* View all [[Special:Prefixindex/InternalDocs/|Internal Documentation]].<br />
<!--<br />
-->__NOTOC__<!-- Disable "Contents" box from showing --><!--<br />
-->__NOEDITSECTION__<!-- Disable [edit] from appearing --><!--<br />
--></div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Shell&diff=2177Shell2007-09-20T21:20:46Z<p>Phinze: /* How it works */ linked docs</p>
<hr />
<div>The XINU shell is a [[Modules | subsystem]] designed as an interface for interacting with the operating system. <br />
<br />
== How it works ==<br />
The shell relies on the [[TTY_Driver | TTY driver]] to receive user input and provide output to the user. When XINU starts, a shell process is spawned for each [[UART_Driver | serial port]] (or TTY). When a user enters a command the [http://xinu.mscs.mu.edu/docs/lexan_8c.html <code>lexan</code> function] divides the string of input into tokens. Command name, arguments, quoted strings, backgrounding, and redirection tokens are all recognized and divided by <code>lexan</code>.<br />
<br />
After the command is parsed, the shell uses the tokens to properly execute the given command. The shell first checks for the backgrounding ampersand ('&'), which should only appear as the last token. The shell is designed to handle redirection, but does not currently do so since XINU's file system is in development. Next, the command is looked up in the command table defined at the top of <code>[http://xinu.mscs.mu.edu/docs/shell_8c.html shell/shell.c]</code>. Each entry in the command table follows the format of command name, is the command built-in (ie can the command run in the background), and the function that executes the command: <code>{"command_name", TRUE / FALSE, xsh_function},</code>. Built-in commands are executed by calling the function that implements the command. All other commands are executed by creating a new process. If the user did not include the backgrounding flag in the input, the shell waits until the command process has completed before asking for more input.<br />
<br />
== Running commands ==<br />
The current distribution of the XINU shell is equipped with some basic commands. The majority of the commands provide information about the current state of the system including its processes, memory, and hardware. A full list of commands can be obtained from the shell by using the <code>help</code> command. Help on a specific command can be obtained using <code>COMMAND --help</code> or <code>help COMMAND</code>.<br />
<br />
* <code>clear</code>: clears the shell<br />
* <code>exit</code>: quits the XINU shell<br />
* <code>gpiostat</code>: displays the current status of the [[GPIO]] pins<br />
* <code>help</code>: displays a list of commands in the XINU shell<br />
* <code>kill PID</code>: kills a process number <code>PID</code><br />
* <code>led DESCRIPTOR STATUS</code>: turns an led on or off<br />
* <code>memstat</code>: displays the current memory usage and prints the free list<br />
* <code>memdump</code>: dumps a region of memory<br />
* <code>ps</code>: displays a table of running processes<br />
* <code>reset</code>: soft powercycles the backend<br />
* <code>sleep DELAY</code>: sleep for <code>DELAY</code> seconds<br />
* <code>test</code>: can be used for building test programs, all builds should simply return <code>OK</code><br />
* <code>testsuite</code>: run a series of tests to see if the system is functioning properly<br />
* <code>uartstat UARTNUM</code>: displays statistics for [[UART | uart]] <code>UARTNUM</code><br />
<br />
== Adding commands ==<br />
The shell is designed to be expandable, allowing users to add their own commands. The code that runs the shell (<code>shell/shell.c</code>) and the command parser (<code>shell/lexan.c</code>) do not need to change when a new command is added. The majority of the work goes into writing the actual command. After the command is written, it needs to be added to the header file (<code>include/shell.h</code>), the command table (<code>shell/shell.c</code>), and the make file (<code>compile/Makefile</code>).<br />
<br />
=== Writing the command ===<br />
The command should be given its own C source file in the <code>shell</code> directory, following the naming convention <code>xsh_command.c</code>. All command files should include <code>kernel.h</code> and <code>shell.h</code>, along with any other headers necessary for the command. Function names for commands follow the same naming convention as the source file: <code>xsh_command</code>. The method signature for a command is:<br />
command xsh_command(ushort stdin, ushort stdout, ushort stderr, ushort nargs, char *args[])<br />
<br />
Within the command, arguments are accessed via the <code>args</code> array. The command name is located in <code>arg[0]</code>. Subsequent arguments, up to <code>nargs</code> are accessed via <code>arg[n]</code>. Error checking of arguments is the responsibility of the command function. It is good practice to check for the correct number of arguments; remember the command name is counted in <code>nargs</code>, so a command without any arguments should have <code>nargs == 1</code>. Although not required, command functions should also allow for an argument of <code>--help</code> as <code>arg[1]</code>. This argument should cause the command to print out usage information. When a user types <code>help COMMAND</code> in the shell, the <code>COMMAND</code> is called with the <code>--help</code> argument.<br />
<br />
Additional code within the command function depends on what the command does. After the command is completed it should return <code>OK</code>.<br />
<br />
=== Add to command table ===<br />
After the command function is written, the command needs to be added to the command table so the shell is aware of the command. The command table is an array of <code>centry</code> (command entry) structures defined in <code>shell/shell.c</code>. Each entry in the command table follows the format of command name, is the command built-in (ie can the command run in the background), and the function that executes the command: <code>{"command_name", TRUE / FALSE, xsh_function},</code>.<br />
<br />
=== Add to header and makefile ===<br />
To complete the process, add the function prototype to the shell header file <code>include/shell.h</code>: <br />
command xsh_command( ushort, ushort, ushort, ushort, char *[]);<br />
Lastly, add the command function source file to the makefile (<code>compile/Makefile</code>) to ensure the command is compiled into the XINU boot image.</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=List_of_supported_platforms&diff=2027List of supported platforms2007-07-31T20:29:34Z<p>Phinze: linked to WRT350N development page</p>
<hr />
<div>== Summary ==<br />
This page lists the platforms currently supported by the Embedded XINU operating system.<br />
<br />
== Supported Platforms ==<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!width="18%"|Platform<br />
!width="15%"|Status<br />
!Comments<br />
|-<br />
|[[WRT54GL|LinkSys WRT54GL]] [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper]<br />
|Fully Supported<br />
|This is our primary development platform, on which XINU has been tested thoroughly.<br />
|-<br />
|[[WRT54G|Linksys WRT54G]] v8 [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1149562300349&pagename=Linksys%2FCommon%2FVisitorWrapper] <br />
|Fully Supported<br />
|Tested and running at the Embedded XINU Lab.<br />
|-<br />
|[[WRT54G|Linksys WRT54G]] v4 [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1149562300349&pagename=Linksys%2FCommon%2FVisitorWrapper]<br />
|Probably Supported<br />
|The v4 is apparently the version on which WRT54GL is based, and so although the Embedded XINU Lab has not explicitly tested it, it probably works.<br />
|-<br />
|[[WRT350N|LinkSys WRT350N]] [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1162354643512&pagename=Linksys%2FCommon%2FVisitorWrapper]<br />
|[[WRT350N|Under Development]]<br />
|Currently the asynchronous [[UART Driver]] works.<br />
|}</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Ethernet_Driver&diff=1992Ethernet Driver2007-07-30T16:23:14Z<p>Phinze: Logged Failure</p>
<hr />
<div>The Ethernet driver for Embedded XINU is currently under development. This page for now will serve as a space for scratch documentation of the development process.<br />
== Failure Log ==<br />
=== 11:23, 30 July 2007 (CDT) ===<br />
*'''Problem''': status read 0x00001080 (TimeOut & DescProtoErr)<br />
<pre><br />
91556 bytes XINU code.<br />
[0x80001000 to 0x800175A3]<br />
32764 bytes stack space.<br />
[0x800175A4 to 0x8001F59F]<br />
16648800 bytes heap space.<br />
[0x8001F5A0 to 0x80FFFFFF]<br />
</pre><br />
<pre><br />
descriptor rings allocated...<br />
receive ring at 0x80020000<br />
transmit ring at 0x80021000<br />
packet pool allocated at 0x800217C0<br />
</pre></div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=1927Main Page2007-07-13T23:07:23Z<p>Phinze: added release announcement</p>
<hr />
<div>{| class="messagebox" style="background-color: #cfc"<br />
|-<br />
| style="font-size:20px; color: green; font-weight: bold;" | Embedded XINU Version 1.0 Released<br />
|-<br />
| The first major release of XINU in a decade.<br />The first port of XINU to a modern RISC architecture.<br />Get it in the [[Downloads]] section.<br />
|}<br />
<br />
== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [[XINU]] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# Obtain a [[List of supported platforms|supported platform]].<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs_2007|InternalDocs for Summer 2007]]''' - currently in development<br />
* [[InternalDocs_2006|InternalDocs for 2006]] - archive of past work</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Cross-compiler&diff=1924Cross-compiler2007-07-13T22:36:52Z<p>Phinze: Redirecting to HOWTO:Build and Deploy XINU#Cross-Compiler</p>
<hr />
<div>#REDIRECT [[HOWTO:Build_and_Deploy_XINU#Cross-Compiler]]</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=XINU_Console_Tools&diff=1923XINU Console Tools2007-07-13T20:38:02Z<p>Phinze: imported basic text from HOWTO:Build Backend Pool</p>
<hr />
<div>The XINU Console Daemon and various associated utilities provide network clients with connectivity to backend consoles that are really only connected directly to the console host.<br />
The xinu-console software package is now freely available for UNIX console hosts and front end clients.<br />
<br />
[http://www.mscs.mu.edu/~brylow/xinu/xinu-console-2.02.tar.gz (GZipped tarball xinu-console-2.02.tar.gz)]<br />
<br />
[http://www.mscs.mu.edu/~brylow/xinu/xinu-console-2.02-2.src.rpm (Fedora Core Source RPM xinu-console-2.02-2.src.rpm)]</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Talk:Memory/Archive1&diff=1887Talk:Memory/Archive12007-07-11T23:18:01Z<p>Phinze: added gpio</p>
<hr />
<div>{{Cleanup}}<br />
<br />
Currently this is how we believe memory is mapped on the device.<br />
<br />
<pre><br />
------------<br />
|0x0000 0000 User Segment<br />
| 0x00FF FFFF End of 16 MB physical ram<br />
|<br />
|0x7FFF FFFF<br />
------------<br />
|0x8000 0000 Kernel Segment 0 (KSEG0) Unmapped, cached.<br />
| Translates to lowest 512 MB of physical memory.<br />
| Ideal for kernel.<br />
|<br />
|+-----------<br />
||0x8000 0180 Interrupt vector<br />
||0x8000 0200<br />
|+-----------<br />
|<br />
|+-----------<br />
||0x8000 1000 Kernel entry point.<br />
|| Kernel text, data, heap, and stack segments<br />
||0x80FF FFFF End of 16MB physical ram<br />
|+-----------<br />
|<br />
|0x9FFF FFFF<br />
------------<br />
|0xA000 0000 Kernel Segment 1 (KSEG1) Unmapped, uncached.<br />
| Translates (again) to lowest 512 MB of physical memory.<br />
| Ideal for memory-mapped I/O ports.<br />
|<br />
|+------------<br />
||0xB800 0000 Broadcom I/O Controller [ IRQ 3 ]<br />
||+-----------<br />
|||0xB800 0060 GPIO<br />
|||0xB800 006F<br />
||+-----------<br />
||+-----------<br />
|||0xB800 0300 UART 0<br />
|||0xB800 0307<br />
||+-----------<br />
||<br />
||+-----------<br />
|||0xB800 0400 UART 1<br />
|||0xB800 0407<br />
||+-----------<br />
||<br />
||<br />
|+------------<br />
||0xB800 1000 Broadcom Ethernet 47xx (4401?) [ IRQ 4 ]<br />
||<br />
|+------------<br />
||0xB800 2000 Mips 32 CPU [ IRQ 5 ]<br />
||<br />
|+------------<br />
||0xB800 3000 Broadcom USB Controller [ IRQ 6 ]<br />
||<br />
|+------------<br />
||0xB800 4000 DD SDRAM Controller [ IRQ 3 ]<br />
||<br />
|+------------<br />
||0xB800 5000 Broadcom Wireless LAN Controller [ IRQ 2 ]<br />
||<br />
|+------------<br />
||0xB800 6000 Broadcom 47xx Robo Switch Core [ IRQ 3 ]<br />
||<br />
|+------------<br />
||0xBC00 0000 Flash RAM (4 MB)<br />
||+-----------<br />
|||0xBC00 0000 flash0.boot (256 KB)<br />
|||<br />
|||0xBC03 FFFF<br />
||+-----------<br />
|||0xBC04 0000 flash0.trx<br />
|||<br />
|||0xBC04 001B or 0xBC04 03FF<br />
||+-----------<br />
|||0xBC04 001C or 0xBC04 0400<br />
||| flash0.os (3808 KB)<br />
|||0xBC3F 7FFF<br />
||+-----------<br />
|||0xBC3F 8000 flash0.nvram (32 KB)<br />
|||<br />
|||0xBC3F FFFF<br />
||+-----------<br />
||0xBC3F FFFF<br />
|+------------<br />
|0xBFFF FFFF<br />
------------<br />
|0xC000 0000 Kernel Segment 2 (KSEG2)<br />
|0xFFFF FFFF<br />
------------<br />
</pre></div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Connect_to_a_modified_router&diff=1875Connect to a modified router2007-07-11T21:18:20Z<p>Phinze: /* What to do next? */</p>
<hr />
<div>== Summary ==<br />
<br />
This will explain how to connect to the serial ports on a modified LinkSys WRT54G using serial communication software such as the open source [http://www.columbia.edu/kermit/ Kermit].<br />
<br />
== Before Starting ==<br />
<br />
=== Expose a serial port on the router ===<br />
<br />
You must have successfully modified a LinkSys WRT54G to expose at least its first serial port in such a way that you can connect it to another machine with serial communications software. If you have not done so yet, please see [[HOWTO:Modify the Linksys hardware]]<br />
<br />
=== Acquire serial communication software ===<br />
<br />
There is a freely available software package for serial communication on almost every major platform. A solid open source suite of communication software known as Kermit has served us well as a method of communicating with the WRT54GL. [http://www.columbia.edu/kermit/ck80.html C-Kermit] is the UNIX compatible implementation, and a Windows version, [http://www.columbia.edu/kermit/k95.html Kermit 95], is available as well.<br />
<br />
Alternatively, if you are building multiple backends to be made available as a pool, our suite of XINU [[Console Tools]] includes a basic serial console utility called '''tty-connect'''.<br />
<br />
== Steps to Connect to the Router ==<br />
<br />
=== Task One: Connect Serial (& Optionally Network) Cable(s) ===<br />
<br />
Ensure that the connection is going from UART0 (the first serial port--you ''did'' label them didn't you?) as this is where the console will be running. If you are connecting a standard PC serial port (a DTE) to your router, use a straight serial cable. Other arrangements may require a [[Null Modem]]; check your transmit/receive line polarities to be sure.<br />
<br />
Also, because the goal is to upload custom code to the router, it would be a good idea to connect the router to your network by wiring it up via one of the numbered LAN ports on the back of the router (NOT the Internet/WAN port).<br />
<br />
=== Task Two: Configure your Serial Communication Software ===<br />
<br />
The connection used by the router's serial port is fairly standard: 115200bps, with 8 data bits, no parity bit, and 1 stop bit, or 8N1. Set your software to connect using these settings.<br />
<br />
=== Task Three: Power up the Router ===<br />
<br />
Yes, that means plug it in.<br />
<br />
With serial communications software listening, you should see something like the following output:<br />
<br />
<pre>CFE version 1.0.37 for BCM947XX (32bit,SP,LE)<br />
Build Date: Mon Nov 14 18:06:25 CST 2005 (root@localhost.localdomain)<br />
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.<br />
<br />
Initializing Arena<br />
Initializing Devices.<br />
<br />
No DPN<br />
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0<br />
CPU type 0x29008: 200MHz<br />
Total memory: 16384 KBytes<br />
<br />
Total memory used by CFE: 0x80300000 - 0x803A39C0 (670144)<br />
Initialized Data: 0x803398D0 - 0x8033BFE0 (10000)<br />
BSS Area: 0x8033BFE0 - 0x8033D9C0 (6624)<br />
Local Heap: 0x8033D9C0 - 0x803A19C0 (409600)<br />
Stack Area: 0x803A19C0 - 0x803A39C0 (8192)<br />
Text (code) segment: 0x80300000 - 0x803398D0 (235728)<br />
Boot area (physical): 0x003A4000 - 0x003E4000<br />
Relocation Factor: I:00000000 - D:00000000<br />
<br />
Boot version: v3.7<br />
The boot is CFE<br />
<br />
mac_init(): Find mac [00:18:39:6F:78:15] in location 0<br />
Nothing...<br />
<br />
eou_key_init(): Find key pair in location 0<br />
The eou device id is same<br />
The eou public key is same<br />
The eou private key is same<br />
Device eth0: hwaddr 00-18-39-6F-78-15, ipaddr 192.168.1.1, mask 255.255.255.0<br />
gateway not set, nameserver not set<br />
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)<br />
Loading: ...... 1601536 bytes read<br />
Entry at 0x80001000<br />
Closing network.<br />
Starting program at 0x80001000<br />
CPU revision is: 00029008<br />
Primary instruction cache 16kb, linesize 16 bytes (2 ways)<br />
Primary data cache 8kb, linesize 16 bytes (2 ways)<br />
Linux version 2.4.20 (root@localhost.localdomain) (gcc version 3.2.3 with Broadcom modifications)<br />
...<br />
(snip)<br />
...<br />
Hit enter to continue...<br />
</pre><br />
<br />
Pressing enter will give you a root shell:<br />
<pre>BusyBox v0.60.0 (2005.11.14-09:45+0000) Built-in shell (msh)<br />
Enter 'help' for a list of built-in commands.<br />
<br />
#<br />
</pre><br />
<br />
=== Task Four: Access the Common Firmware Environment CLI ===<br />
<br />
If you reboot the router while holding CTRL+C on the serial console, you will get a [[CFE]] prompt.<br />
<br />
<pre><br />
CFE version 1.0.37 for BCM947XX (32bit,SP,LE)<br />
Build Date: Mon Nov 14 18:06:25 CST 2005 (root@localhost.localdomain)<br />
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.<br />
<br />
Initializing Arena<br />
Initializing Devices.<br />
<br />
No DPN<br />
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0<br />
CPU type 0x29008: 200MHz<br />
Total memory: 16384 KBytes<br />
<br />
Total memory used by CFE: 0x80300000 - 0x803A39C0 (670144)<br />
Initialized Data: 0x803398D0 - 0x8033BFE0 (10000)<br />
BSS Area: 0x8033BFE0 - 0x8033D9C0 (6624)<br />
Local Heap: 0x8033D9C0 - 0x803A19C0 (409600)<br />
Stack Area: 0x803A19C0 - 0x803A39C0 (8192)<br />
Text (code) segment: 0x80300000 - 0x803398D0 (235728)<br />
Boot area (physical): 0x003A4000 - 0x003E4000<br />
Relocation Factor: I:00000000 - D:00000000<br />
<br />
Boot version: v3.7<br />
The boot is CFE<br />
<br />
mac_init(): Find mac [00:18:39:6F:78:15] in location 0<br />
Nothing...<br />
<br />
eou_key_init(): Find key pair in location 0<br />
The eou device id is same<br />
The eou public key is same<br />
The eou private key is same<br />
Device eth0: hwaddr 00-18-39-6F-78-15, ipaddr 192.168.1.1, mask 255.255.255.0<br />
gateway not set, nameserver not set<br />
Automatic startup canceled via Ctrl-C<br />
CFE> ^C<br />
CFE> ^C<br />
CFE><br />
</pre><br />
<br />
See the [[CFE]] page for more information about using this prompt.<br />
<br />
== What to do next? ==<br />
<br />
Now that you have successfully modified and connected to your router, you are ready to [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Connect_to_a_modified_router&diff=1874Connect to a modified router2007-07-11T21:16:52Z<p>Phinze: /* Task Four: Access the Common Firmware Environment CLI */</p>
<hr />
<div>== Summary ==<br />
<br />
This will explain how to connect to the serial ports on a modified LinkSys WRT54G using serial communication software such as the open source [http://www.columbia.edu/kermit/ Kermit].<br />
<br />
== Before Starting ==<br />
<br />
=== Expose a serial port on the router ===<br />
<br />
You must have successfully modified a LinkSys WRT54G to expose at least its first serial port in such a way that you can connect it to another machine with serial communications software. If you have not done so yet, please see [[HOWTO:Modify the Linksys hardware]]<br />
<br />
=== Acquire serial communication software ===<br />
<br />
There is a freely available software package for serial communication on almost every major platform. A solid open source suite of communication software known as Kermit has served us well as a method of communicating with the WRT54GL. [http://www.columbia.edu/kermit/ck80.html C-Kermit] is the UNIX compatible implementation, and a Windows version, [http://www.columbia.edu/kermit/k95.html Kermit 95], is available as well.<br />
<br />
Alternatively, if you are building multiple backends to be made available as a pool, our suite of XINU [[Console Tools]] includes a basic serial console utility called '''tty-connect'''.<br />
<br />
== Steps to Connect to the Router ==<br />
<br />
=== Task One: Connect Serial (& Optionally Network) Cable(s) ===<br />
<br />
Ensure that the connection is going from UART0 (the first serial port--you ''did'' label them didn't you?) as this is where the console will be running. If you are connecting a standard PC serial port (a DTE) to your router, use a straight serial cable. Other arrangements may require a [[Null Modem]]; check your transmit/receive line polarities to be sure.<br />
<br />
Also, because the goal is to upload custom code to the router, it would be a good idea to connect the router to your network by wiring it up via one of the numbered LAN ports on the back of the router (NOT the Internet/WAN port).<br />
<br />
=== Task Two: Configure your Serial Communication Software ===<br />
<br />
The connection used by the router's serial port is fairly standard: 115200bps, with 8 data bits, no parity bit, and 1 stop bit, or 8N1. Set your software to connect using these settings.<br />
<br />
=== Task Three: Power up the Router ===<br />
<br />
Yes, that means plug it in.<br />
<br />
With serial communications software listening, you should see something like the following output:<br />
<br />
<pre>CFE version 1.0.37 for BCM947XX (32bit,SP,LE)<br />
Build Date: Mon Nov 14 18:06:25 CST 2005 (root@localhost.localdomain)<br />
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.<br />
<br />
Initializing Arena<br />
Initializing Devices.<br />
<br />
No DPN<br />
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0<br />
CPU type 0x29008: 200MHz<br />
Total memory: 16384 KBytes<br />
<br />
Total memory used by CFE: 0x80300000 - 0x803A39C0 (670144)<br />
Initialized Data: 0x803398D0 - 0x8033BFE0 (10000)<br />
BSS Area: 0x8033BFE0 - 0x8033D9C0 (6624)<br />
Local Heap: 0x8033D9C0 - 0x803A19C0 (409600)<br />
Stack Area: 0x803A19C0 - 0x803A39C0 (8192)<br />
Text (code) segment: 0x80300000 - 0x803398D0 (235728)<br />
Boot area (physical): 0x003A4000 - 0x003E4000<br />
Relocation Factor: I:00000000 - D:00000000<br />
<br />
Boot version: v3.7<br />
The boot is CFE<br />
<br />
mac_init(): Find mac [00:18:39:6F:78:15] in location 0<br />
Nothing...<br />
<br />
eou_key_init(): Find key pair in location 0<br />
The eou device id is same<br />
The eou public key is same<br />
The eou private key is same<br />
Device eth0: hwaddr 00-18-39-6F-78-15, ipaddr 192.168.1.1, mask 255.255.255.0<br />
gateway not set, nameserver not set<br />
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)<br />
Loading: ...... 1601536 bytes read<br />
Entry at 0x80001000<br />
Closing network.<br />
Starting program at 0x80001000<br />
CPU revision is: 00029008<br />
Primary instruction cache 16kb, linesize 16 bytes (2 ways)<br />
Primary data cache 8kb, linesize 16 bytes (2 ways)<br />
Linux version 2.4.20 (root@localhost.localdomain) (gcc version 3.2.3 with Broadcom modifications)<br />
...<br />
(snip)<br />
...<br />
Hit enter to continue...<br />
</pre><br />
<br />
Pressing enter will give you a root shell:<br />
<pre>BusyBox v0.60.0 (2005.11.14-09:45+0000) Built-in shell (msh)<br />
Enter 'help' for a list of built-in commands.<br />
<br />
#<br />
</pre><br />
<br />
=== Task Four: Access the Common Firmware Environment CLI ===<br />
<br />
If you reboot the router while holding CTRL+C on the serial console, you will get a [[CFE]] prompt.<br />
<br />
<pre><br />
CFE version 1.0.37 for BCM947XX (32bit,SP,LE)<br />
Build Date: Mon Nov 14 18:06:25 CST 2005 (root@localhost.localdomain)<br />
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.<br />
<br />
Initializing Arena<br />
Initializing Devices.<br />
<br />
No DPN<br />
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0<br />
CPU type 0x29008: 200MHz<br />
Total memory: 16384 KBytes<br />
<br />
Total memory used by CFE: 0x80300000 - 0x803A39C0 (670144)<br />
Initialized Data: 0x803398D0 - 0x8033BFE0 (10000)<br />
BSS Area: 0x8033BFE0 - 0x8033D9C0 (6624)<br />
Local Heap: 0x8033D9C0 - 0x803A19C0 (409600)<br />
Stack Area: 0x803A19C0 - 0x803A39C0 (8192)<br />
Text (code) segment: 0x80300000 - 0x803398D0 (235728)<br />
Boot area (physical): 0x003A4000 - 0x003E4000<br />
Relocation Factor: I:00000000 - D:00000000<br />
<br />
Boot version: v3.7<br />
The boot is CFE<br />
<br />
mac_init(): Find mac [00:18:39:6F:78:15] in location 0<br />
Nothing...<br />
<br />
eou_key_init(): Find key pair in location 0<br />
The eou device id is same<br />
The eou public key is same<br />
The eou private key is same<br />
Device eth0: hwaddr 00-18-39-6F-78-15, ipaddr 192.168.1.1, mask 255.255.255.0<br />
gateway not set, nameserver not set<br />
Automatic startup canceled via Ctrl-C<br />
CFE> ^C<br />
CFE> ^C<br />
CFE><br />
</pre><br />
<br />
See the [[CFE]] page for more information about using this prompt.<br />
<br />
== What to do next? ==</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Connect_to_a_modified_router&diff=1871Connect to a modified router2007-07-11T21:13:25Z<p>Phinze: /* Steps to Connect to the Router */ powering up shouldn't happen until after things are set up</p>
<hr />
<div>== Summary ==<br />
<br />
This will explain how to connect to the serial ports on a modified LinkSys WRT54G using serial communication software such as the open source [http://www.columbia.edu/kermit/ Kermit].<br />
<br />
== Before Starting ==<br />
<br />
=== Expose a serial port on the router ===<br />
<br />
You must have successfully modified a LinkSys WRT54G to expose at least its first serial port in such a way that you can connect it to another machine with serial communications software. If you have not done so yet, please see [[HOWTO:Modify the Linksys hardware]]<br />
<br />
=== Acquire serial communication software ===<br />
<br />
There is a freely available software package for serial communication on almost every major platform. A solid open source suite of communication software known as Kermit has served us well as a method of communicating with the WRT54GL. [http://www.columbia.edu/kermit/ck80.html C-Kermit] is the UNIX compatible implementation, and a Windows version, [http://www.columbia.edu/kermit/k95.html Kermit 95], is available as well.<br />
<br />
Alternatively, if you are building multiple backends to be made available as a pool, our suite of XINU [[Console Tools]] includes a basic serial console utility called '''tty-connect'''.<br />
<br />
== Steps to Connect to the Router ==<br />
<br />
=== Task One: Connect Serial (& Optionally Network) Cable(s) ===<br />
<br />
Ensure that the connection is going from UART0 (the first serial port--you ''did'' label them didn't you?) as this is where the console will be running. If you are connecting a standard PC serial port (a DTE) to your router, use a straight serial cable. Other arrangements may require a [[Null Modem]]; check your transmit/receive line polarities to be sure.<br />
<br />
Also, because the goal is to upload custom code to the router, it would be a good idea to connect the router to your network by wiring it up via one of the numbered LAN ports on the back of the router (NOT the Internet/WAN port).<br />
<br />
=== Task Two: Configure your Serial Communication Software ===<br />
<br />
The connection used by the router's serial port is fairly standard: 115200bps, with 8 data bits, no parity bit, and 1 stop bit, or 8N1. Set your software to connect using these settings.<br />
<br />
=== Task Three: Power up the Router ===<br />
<br />
Yes, that means plug it in.<br />
<br />
With serial communications software listening, you should see something like the following output:<br />
<br />
<pre>CFE version 1.0.37 for BCM947XX (32bit,SP,LE)<br />
Build Date: Mon Nov 14 18:06:25 CST 2005 (root@localhost.localdomain)<br />
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.<br />
<br />
Initializing Arena<br />
Initializing Devices.<br />
<br />
No DPN<br />
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0<br />
CPU type 0x29008: 200MHz<br />
Total memory: 16384 KBytes<br />
<br />
Total memory used by CFE: 0x80300000 - 0x803A39C0 (670144)<br />
Initialized Data: 0x803398D0 - 0x8033BFE0 (10000)<br />
BSS Area: 0x8033BFE0 - 0x8033D9C0 (6624)<br />
Local Heap: 0x8033D9C0 - 0x803A19C0 (409600)<br />
Stack Area: 0x803A19C0 - 0x803A39C0 (8192)<br />
Text (code) segment: 0x80300000 - 0x803398D0 (235728)<br />
Boot area (physical): 0x003A4000 - 0x003E4000<br />
Relocation Factor: I:00000000 - D:00000000<br />
<br />
Boot version: v3.7<br />
The boot is CFE<br />
<br />
mac_init(): Find mac [00:18:39:6F:78:15] in location 0<br />
Nothing...<br />
<br />
eou_key_init(): Find key pair in location 0<br />
The eou device id is same<br />
The eou public key is same<br />
The eou private key is same<br />
Device eth0: hwaddr 00-18-39-6F-78-15, ipaddr 192.168.1.1, mask 255.255.255.0<br />
gateway not set, nameserver not set<br />
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)<br />
Loading: ...... 1601536 bytes read<br />
Entry at 0x80001000<br />
Closing network.<br />
Starting program at 0x80001000<br />
CPU revision is: 00029008<br />
Primary instruction cache 16kb, linesize 16 bytes (2 ways)<br />
Primary data cache 8kb, linesize 16 bytes (2 ways)<br />
Linux version 2.4.20 (root@localhost.localdomain) (gcc version 3.2.3 with Broadcom modifications)<br />
...<br />
(snip)<br />
...<br />
Hit enter to continue...<br />
</pre><br />
<br />
Pressing enter will give you a root shell:<br />
<pre>BusyBox v0.60.0 (2005.11.14-09:45+0000) Built-in shell (msh)<br />
Enter 'help' for a list of built-in commands.<br />
<br />
#<br />
</pre><br />
<br />
=== Task Four: Access the Common Firmware Environment CLI ===<br />
<br />
This will be filled in, but here's the basics:<br />
* Make sure boot_wait is on (this should be added to the Install OpenWRT HOWTO)<br />
* Reboot the router (<code>reboot</code> or power cycle).<br />
* Hit CTRL+C on your serial console.<br />
* You're in.<br />
<br />
== What to do next? ==</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Connect_to_a_modified_router&diff=1858Connect to a modified router2007-07-11T20:47:49Z<p>Phinze: /* Acquire serial communication software */</p>
<hr />
<div>== Summary ==<br />
<br />
This will explain how to connect to the serial ports on a modified LinkSys WRT54G using serial communication software such as the open source [http://www.columbia.edu/kermit/ Kermit].<br />
<br />
== Before Starting ==<br />
<br />
=== Expose a serial port on the router ===<br />
<br />
You must have successfully modified a LinkSys WRT54G to expose at least its first serial port in such a way that you can connect it to another machine with serial communications software. If you have not done so yet, please see [[HOWTO:Modify the Linksys hardware]]<br />
<br />
=== Acquire serial communication software ===<br />
<br />
There is a freely available software package for serial communication on almost every major platform. A solid open source suite of communication software known as Kermit has served us well as a method of communicating with the WRT54GL. [http://www.columbia.edu/kermit/ck80.html C-Kermit] is the UNIX compatible implementation, and a Windows version, [http://www.columbia.edu/kermit/k95.html Kermit 95], is available as well.<br />
<br />
Alternatively, if you are building multiple backends to be made available as a pool, our suite of XINU [[Console Tools]] includes a basic serial console utility called '''tty-connect'''.<br />
<br />
== Steps to Connect to the Router ==<br />
<br />
=== Task One: Power up the Router ===<br />
<br />
Yes, that means plug it in.<br />
<br />
=== Task Two: Connect Serial (& Optionally Network) Cable(s) ===<br />
<br />
Ensure that the connection is going from UART0 (the first serial port--you ''did'' label them didn't you?) as this is where the console will be running. If you are connecting a standard PC serial port (a DTE) to your router, use a straight serial cable. Other arrangements may require a [[Null Modem]]; check your transmit/receive line polarities to be sure.<br />
<br />
Also, because the goal is to upload custom code to the router, it would be a good idea to connect the router to your network by wiring it up via one of the numbered LAN ports on the back of the router (NOT the Internet/WAN port).<br />
<br />
=== Task Three: Configure your Serial Communication Software ===<br />
<br />
The connection used by the router's serial port is fairly standard: 115200bps, with 8 data bits, no parity bit, and 1 stop bit, or 8N1.<br />
<br />
In our setup, once running Kermit on the external machine, we connected by typing in:<br/><br />
{| border="0" cellspacing="0" cellpadding="0"<br />
| <code>set line /dev/tty000</code><br />
| &nbsp;&nbsp;&nbsp;&nbsp;<br />
| to select the serial device that is connected to the router*.<br />
|- <br />
| <code>set serial 8n1</code><br />
| &nbsp;&nbsp;&nbsp;&nbsp;<br />
| which is not really necessary since this is default.<br />
|-<br />
| <code>set speed 115200</code><br />
| &nbsp;&nbsp;&nbsp;&nbsp;<br />
| as given to us in the router specifications.<br />
|-<br />
|}<br />
(* - Your device is probably different. Check your O/S documentation to figure out the name of your computer's relevant serial port.)<br />
<br />
=== Task Four: Access the Common Firmware Environment CLI ===<br />
<br />
This will be filled in, but here's the basics:<br />
* Make sure boot_wait is on (this should be added to the Install OpenWRT HOWTO)<br />
* Reboot the router (<code>reboot</code> or power cycle).<br />
* Hit CTRL+C on your serial console.<br />
* You're in.<br />
<br />
== What to do next? ==</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1853Modify the Linksys hardware2007-07-11T20:26:30Z<p>Phinze: /* What to do next? */</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy.]]<br />
<br />
There are no screws or tools needed to open the router, just pop open the front with your thumbs as shown in the picture. Some nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions] can be found for a more detailed explanation of this step<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!'''<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Once the PCB has been removed from the case, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). [[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]] These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device.<br />
<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering required for the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the finished product just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
[[Image:MAX233A.png|thumb|300px|left|Diagram showing connections from the MAX233A to the DB9 connectors and to the board.]]<br />
<br />
Using information on the diagram, make the connections from the '''IDC shrouded header''' to the [[MAX233A|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the photos, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:Maxim.jpg|thumb|200px|right|The MAX233A wired to the ribbon cable and the DB9 connectors.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|align="center"<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
Connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1852Modify the Linksys hardware2007-07-11T20:25:32Z<p>Phinze: /* Steps to Modify the Hardware */ moved and added photos, some text edits</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy.]]<br />
<br />
There are no screws or tools needed to open the router, just pop open the front with your thumbs as shown in the picture. Some nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions] can be found for a more detailed explanation of this step<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!'''<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Once the PCB has been removed from the case, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). [[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]] These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device.<br />
<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering required for the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the finished product just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
[[Image:MAX233A.png|thumb|300px|left|Diagram showing connections from the MAX233A to the DB9 connectors and to the board.]]<br />
<br />
Using information on the diagram, make the connections from the '''IDC shrouded header''' to the [[MAX233A|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the photos, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:Maxim.jpg|thumb|200px|right|The MAX233A wired to the ribbon cable and the DB9 connectors.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|align="center"<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1851Modify the Linksys hardware2007-07-11T20:21:04Z<p>Phinze: /* Task Three: Wire Serial Header to MAX233A */</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy.]]<br />
<br />
There are no screws or tools needed to open the router, just pop open the front with your thumbs as shown in the picture. Some nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions] can be found for a more detailed explanation of this step<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!'''<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Once the PCB has been removed from the case, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). [[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]] These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device.<br />
<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering required for the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the finished product just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the diagram, make the connections from the '''IDC shrouded header''' to the [[MAX233A|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the photos, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1850Modify the Linksys hardware2007-07-11T20:20:25Z<p>Phinze: /* Task Two: Attach the Serial Header */ moved photo</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy.]]<br />
<br />
There are no screws or tools needed to open the router, just pop open the front with your thumbs as shown in the picture. Some nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions] can be found for a more detailed explanation of this step<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!'''<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Once the PCB has been removed from the case, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). [[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]] These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device.<br />
<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering required for the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the finished product just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=File:Maxim.jpg&diff=1847File:Maxim.jpg2007-07-11T20:15:54Z<p>Phinze: Copied data from caption on Pictures page</p>
<hr />
<div>This is a picture of the MAX233A transceiver chip we used to convert the digital serial signal to proper RS232 voltages. Our picture shows a wire-wrap socket to hold the transceiver chip, but this was our prototype. In practice, now that the correct connections have been confirmed experimentally, we will solder leads directly to a 20-pin standard DIP socket, which can be glued on its side to the inside of the front case piece. This allows access to the receiver chip (in case an electrical mishap damages it,) while still allowing easy opening and closing of the case.</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Chips&diff=1843Chips2007-07-11T20:11:59Z<p>Phinze: Added historical tag instead of deleting so as not to break summer 2006 links</p>
<hr />
<div>{{Historical}}<br />
== LinkSys WRT54GL ==<br />
[[image:Wrt54gl-layout.jpg|thumb|500px|center|Here is the basic layout of the WRT54GL Board]]<br />
<br />
== Max 233A Transceiver ==<br />
[[Image:maxim.jpg|thumb|150px|right|The MAX233A transceiver chip.]]<br />
Because the power needed to send digital signals through the router is much less than the standard RS232 power levels, we need a way of ramping up the voltage enough for signals to be correctly detected by serial hardware on the other end of the cable we connect. In the same way, we need to make sure that the ~5V signals coming as input from another machine do not fry the internal circuitry of the router. The obvious solution for this problem would be a transformer, but there exists another, much cooler way: the MAX233A. It requires no extra parts or special power source, but it correctly changes the voltages so everything works properly. (See [1] for more information on the MAX233A.)<br />
<br />
<br />
<br />
[1] http://www.compsys1.com/workbench/On_top_of_the_Bench/Max233_Adapter/max233_adapter.html</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=MAX233A&diff=1841MAX233A2007-07-11T20:11:13Z<p>Phinze: Moved data from 'Chips' page</p>
<hr />
<div>== Max 233A Transceiver ==<br />
[[Image:maxim.jpg|thumb|150px|right|The MAX233A transceiver chip.]]<br />
Because the power needed to send digital signals through the router is much less than the standard RS232 power levels, we need a way of ramping up the voltage enough for signals to be correctly detected by serial hardware on the other end of the cable we connect. In the same way, we need to make sure that the ~5V signals coming as input from another machine do not fry the internal circuitry of the router. The obvious solution for this problem would be a transformer, but there exists another, much cooler way: the MAX233A. It requires no extra parts or special power source, but it correctly changes the voltages so everything works properly. (See [1] for more information on the MAX233A.)<br />
<br />
[1] http://www.compsys1.com/workbench/On_top_of_the_Bench/Max233_Adapter/max233_adapter.html</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=File:MAX233A.png&diff=1839File:MAX233A.png2007-07-11T20:04:12Z<p>Phinze: Moved data from 'Wiring' page.</p>
<hr />
<div>'''Please note that the diagrams do NOT represent actual placement of the pins on the hardware, which may have been moved to simplify the diagram.'''<br />
<br />
* The component on the left represents the UART head on the main board of the router. The even pins (2,6,4,8,10) represent the data that is sent and received from the first serial port, the odd pins (1,5,3,7,9) the second serial port. Each port has lines for power, ground, transmit, receive, and an unconnected line. These UARTs follow the standard, three-wire "smart modem" connection strategy, and do not make use of hardware flow control lines.<br />
<br />
* The component in the middle represents the [[Chips|MAX233A transceiver]] needed to convert the voltage used to transmit signals in the router (3.3V) to the RS-232 standard signals to send over the serial port.<br />
<br />
* The components on the right represent two standard DB9 jacks. The first port is wired to be a DCE with female DB9, implying that this console port connects to a computer. The second serial port is wired as a DTE, with male DB9, implying that this secondary port will connect to other kinds of communications equipment (serial-controlled sensors, etc.,) or perhaps another router's console.<br />
<br />
* A computer connecting to the first port would require a standard DB9 serial cable; connecting a computer or other DTE to the second port would require a [[Null Modem]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1836Modify the Linksys hardware2007-07-11T19:53:07Z<p>Phinze: /* Task Two: Attach the Serial Header */ professionalized and clarified a bit</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy.]]<br />
<br />
There are no screws or tools needed to open the router, just pop open the front with your thumbs as shown in the picture. Some nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions] can be found for a more detailed explanation of this step<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!'''<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Once the PCB has been removed from the case, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device.<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering required for the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the finished product just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1835Modify the Linksys hardware2007-07-11T19:50:26Z<p>Phinze: /* Task One: Open the Router */ professionalized a bit</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy.]]<br />
<br />
There are no screws or tools needed to open the router, just pop open the front with your thumbs as shown in the picture. Some nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions] can be found for a more detailed explanation of this step<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!'''<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Now that your PCB is naked, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device. ([[OpenWRT]] by default runs a console on UART0, so we have something to look forward to here!)<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering that you have to do on the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the contraption just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1834Modify the Linksys hardware2007-07-11T19:47:26Z<p>Phinze: /* Task One: Open the Router */ removed first person</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy... almost <em>too</em> easy.]]<br />
<br />
Void Main provides nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions].<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!''' (But really, you know there's no ''real'' fun to be had unless a warranty gets voided somewhere.)<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Now that your PCB is naked, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device. ([[OpenWRT]] by default runs a console on UART0, so we have something to look forward to here!)<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering that you have to do on the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the contraption just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=MediaWiki:Sidebar&diff=1833MediaWiki:Sidebar2007-07-11T19:46:13Z<p>Phinze: </p>
<hr />
<div>* navigation<br />
** mainpage|Main Page<br />
** Special:Recentchanges|Recent Changes<br />
* links<br />
** http://www.mscs.mu.edu/~brylow/xinu | XINU @ Marquette<br />
** http://www.mscs.mu.edu/ | MSCS Department<br />
** http://mulug.mscs.mu.edu/ | Linux Users Group<br />
** http://www.mu.edu/ | Marquette University</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=MediaWiki:Sidebar&diff=1832MediaWiki:Sidebar2007-07-11T19:45:39Z<p>Phinze: </p>
<hr />
<div>* navigation<br />
** mainpage|Main Page<br />
** Special:Recentchanges|Recent Changes<br />
* links<br />
** http://www.mscs.mu.edu/~brylow/xinu | XINU Home Page<br />
** http://www.mscs.mu.edu/ | MSCS Department<br />
** http://mulug.mscs.mu.edu/ | Linux Users Group<br />
** http://www.mu.edu/ | Marquette University</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=MediaWiki:Sidebar&diff=1831MediaWiki:Sidebar2007-07-11T19:44:27Z<p>Phinze: </p>
<hr />
<div>* navigation<br />
** mainpage|Main Page<br />
** Special:Recentchanges|Recent Changes<br />
* links<br />
** http://www.mscs.mu.edu/~brylow/xinu | Embedded XINU Home Page<br />
** http://www.mscs.mu.edu/ | MSCS Department<br />
** http://mulug.mscs.mu.edu/ | Linux Users Group<br />
** http://www.mu.edu/ | Marquette University</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=MediaWiki:Sidebar&diff=1830MediaWiki:Sidebar2007-07-11T19:44:07Z<p>Phinze: added link to dr. brylow's page</p>
<hr />
<div>* navigation<br />
** mainpage|Main Page<br />
** Special:Recentchanges|Recent Changes<br />
* links<br />
** http://www.mscs.mu.edu/~brylow/xinu | Dr. Brylow's Embedded XINU Page<br />
** http://www.mscs.mu.edu/ | MSCS Department<br />
** http://mulug.mscs.mu.edu/ | Linux Users Group<br />
** http://www.mu.edu/ | Marquette University</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=HOWTO:Install_OpenWRT&diff=1829HOWTO:Install OpenWRT2007-07-11T19:41:36Z<p>Phinze: Marked historical.</p>
<hr />
<div>{{Historical}}<br />
== Summary ==<br />
This is a quick overview of the very easy process of installing the [[OpenWRT]] open source firmware into a LinkSys WRT54GL. Several much more detailed sources of documentation exist on this [http://wiki.openwrt.org/OpenWrtDocs/Installing] [http://wiki.openwrt.org/InstallingWrt54gl], but we include the bare essentials here for simplicity's sake and also because the bulk of OpenWRT does not interest us--it only provides us with a working open-source implementation of an embedded operating system on the router.<br />
<br />
[[OpenWRT]] provides a mature environment for exploring your router hardware, but is not required to run [[XINU]].<br />
<br />
== Before Starting ==<br />
<br />
=== Download OpenWRT Binary ===<br />
Get the latest OpenWRT binary from http://downloads.openwrt.org/whiterussian/newest/bin/. The correct file is <tt>openwrt-wrt54g-squashfs.bin</tt><br />
<br />
== Steps to Install OpenWRT ==<br />
# Connect to the LinkSys web interface by visiting its address (default 192.168.1.1) in a web browser.<br />
# Upload the OpenWRT file as a "firmware update".<br />
# Watch as your router magically transforms into an OpenWRT-running box.<br />
<br />
== What to do next? ==<br />
First it is a good idea to play around with the OpenWRT installation and get a feel for its web interface. You can also login via ssh to the router and poke around its directory structure.<br />
<br />
The next big step towards a custom operating system on the router is covered in the next HOWTO in which we will [[HOWTO:Modify the Linksys hardware|modify the LinkSys hardware]]</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1828Modify the Linksys hardware2007-07-11T19:02:03Z<p>Phinze: /* Parts List */ added link to product page</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy... almost <em>too</em> easy.]]<br />
<br />
As others have done, I will defer to Void Main, who provides nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions].<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!''' (But really, you know there's no ''real'' fun to be had unless a warranty gets voided somewhere.)<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Now that your PCB is naked, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device. ([[OpenWRT]] by default runs a console on UART0, so we have something to look forward to here!)<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering that you have to do on the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the contraption just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1827Modify the Linksys hardware2007-07-11T19:01:18Z<p>Phinze: /* Parts List */</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| [LinkSys Whttp://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper RT54GL]<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy... almost <em>too</em> easy.]]<br />
<br />
As others have done, I will defer to Void Main, who provides nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions].<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!''' (But really, you know there's no ''real'' fun to be had unless a warranty gets voided somewhere.)<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Now that your PCB is naked, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device. ([[OpenWRT]] by default runs a console on UART0, so we have something to look forward to here!)<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering that you have to do on the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the contraption just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1826Modify the Linksys hardware2007-07-11T18:58:08Z<p>Phinze: /* Summary */ removed references to openwrt</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run [[XINU]] on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| LinkSys WRT54GL<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy... almost <em>too</em> easy.]]<br />
<br />
As others have done, I will defer to Void Main, who provides nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions].<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!''' (But really, you know there's no ''real'' fun to be had unless a warranty gets voided somewhere.)<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Now that your PCB is naked, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device. ([[OpenWRT]] by default runs a console on UART0, so we have something to look forward to here!)<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering that you have to do on the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the contraption just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Modify_the_Linksys_hardware&diff=1825Modify the Linksys hardware2007-07-11T18:57:17Z<p>Phinze: /* Before Starting */ kill openwrt</p>
<hr />
<div>== Summary ==<br />
<br />
This will walk through adding hardware to a [http://www.linksys.com Linksys] [[WRT54GL]] wireless router that will take advantage of existing leads on the PCB for two UART connections, which will be exposed as DB9 connectors mounted to the faceplate of the router. These connections can be used to communicate with the serial console for [[XINU]] or for [[OpenWRT]], and also to interact with the [[Common Firmware Environment]]'s command line interface. Gaining direct access to [[CFE]] is a key step towards being able to run custom code on the router.<br />
<br />
== Before Starting ==<br />
=== Parts List ===<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
! Quantity<br />
! Part Name<br />
! Details<br />
! Part / Model Number<br />
! Price<br />
|- <br />
| 1<br />
| LinkSys [[WRT54GL]] Router<br />
| 802.11b/g wireless broadband router<br />
| LinkSys WRT54GL<br />
| ~$65.00<br />
|-<br />
| 1<br />
| Ribbon cable<br />
| 28 AWG, 10 conductor, 25'<br />
| Jameco 643508CM<br />
| $4.99<br />
|-<br />
| 1<br />
| IDC socket connector<br />
| 0.1”, 10 conductor <br />
| Jameco 32491CM<br />
| $0.25<br />
|-<br />
| 1<br />
| IDC shrouded header<br />
| 0.1”, 10 conductor<br />
| Jameco 67811CM<br />
| $0.33<br />
|-<br />
| 1<br />
| RS232 Transmitter/Receiver<br />
| IC 2DVR/2RCVR RS232 5V 20-DIP<br />
| DigiKey MAX233CPP-ND<br />
| $7.45<br />
|-<br />
| 1<br />
| DB9 Female<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15771CM<br />
| $0.59<br />
|-<br />
| 1<br />
| DB9 Male<br />
| 22AWG,SOLDER CUP<br />
| Jameco 15747CM<br />
| $0.59<br />
|-<br />
|}<br />
<br />
(We provide this parts list as a data point; we offer no guarantees about current prices, and it is not our intent to endorse any particular vendor.)<br />
<br />
=== Tools List ===<br />
* Soldering Iron<br />
* Dremel tool (for cutting holes in plastic case)<br />
* Multimeter, or some other way of checking for proper connections<br />
<br />
== Steps to Modify the Hardware ==<br />
<br />
=== Task One: Open the Router ===<br />
<br />
[[Image:Opening-linksys.jpg|thumb|400px|center|It's really very easy... almost <em>too</em> easy.]]<br />
<br />
As others have done, I will defer to Void Main, who provides nice [http://voidmain.is-a-geek.net/redhat/wrt54g_revival.html illustrated opening instructions].<br />
<br />
'''DO NOTE: This is where the warranty on the router is voided!''' (But really, you know there's no ''real'' fun to be had unless a warranty gets voided somewhere.)<br />
<br />
=== Task Two: Attach the Serial Header ===<br />
<br />
[[Image:Wrt54gl-layout.jpg|thumb|250px|left|An overhead view to get your bearings. The serial header is (D) here.]]<br />
Now that your PCB is naked, locate the serial header holes provided by LinkSys. This would be a grid of 10 holes (5x2) located on the bottom-right corner of the board when the antennae stubs are on top (see the top-down photo for clarification). These ten holes hold all of the input and output for the two serial interfaces--UART0, and UART1--on the device. ([[OpenWRT]] by default runs a console on UART0, so we have something to look forward to here!)<br />
<br />
[[Image:Serial.jpg|thumb|250px|right|A closer look at our attached serial header.]]<br />
Now, we could just solder wires right onto these holes, but a by placing a nice 10-pin header on the board we can easily attach and detach a 10 connection cable. This is where you will use your '''soldering iron''' to solder the '''IDC shrouded header''' onto the board.<br />
<br />
This will be the only soldering that you have to do on the LinkSys PCB. The rest of the work will be done wiring the MAX233A transceiver and the DB9 connectors correctly and then the contraption just has to be plugged it into this header.<br />
<br />
=== Task Three: Wire Serial Header to MAX233A ===<br />
<br />
Using information on the [[Wiring]] page, make the connections from the '''IDC shrouded header''' to the [[Wiring|MAX233A RS232 Transmitter/Receiver]] chip using your '''soldering iron'''. As you can see from the [[Pictures|Build Pictures]] page, we did this with the '''ribbon cable''' from our parts list. The '''IDC socket connector''' goes on one end of the cable, and the correct connections are made to the '''RS232 Transmitter/Receiver''' on the other. Because we will be mounting our DB9 connectors to the front of the case, this will allow for easy disconnection and opening of the case. In terms of cable length, try and decide where you are going to mount the MAX233A on the outer case so you can estimate correctly.<br />
<br />
''Be sure to test all of your connections thoroughly before proceeding.''<br />
<br />
=== Task Four: Wire the DB9 Connectors to the MAX233A ===<br />
<br />
[[Image:faceplate.jpg|thumb|200px|right|This is the final version of the faceplate of our router, with the two external serial ports attached and ready to go.]]<br />
<br />
For the following connections, you are going to use the '''soldering iron''' and either chopped up portions of the '''ribbon cable''' or some other wire (which would probably be more convenient).<br />
<br />
Checking the [[Wiring|wiring diagram]] again, note that there are several loopback connections per DB9 connector in order to fake RS232 hardware flow control compliance. It would be a good idea to get these out of the way first. Then, make the connections required from the '''RS232 Transmitter/Receiver''' to the DB9 connectors, remembering to leave enough slack for where you plan on mounting the MAX233A and the connectors. <br />
<br />
''Again, before mounting anything, test that all connections correspond to the diagram.''<br />
<br />
=== Task Five: Mount DB9 Connectors to the Router Faceplate ===<br />
<br />
Using your trusty '''dremel''' cut a few DB9 shaped holes in the plastic casing of the router. There are several options for placement; we chose the front so that multiple routers would still be stackable. The picture at right shows the placement of our connectors with wires attached. The fit is quite tight; you may wish to consider only installing one jack (you only need port 0 to communicate with the router, your plans may not call for using the second serial port) or installing them horizontally instead of vertically.<br />
<br />
Using either epoxy or mounting screws (I believe we used a combination of both, as one of our jacks could not fit a hole for a screw), secure the connectors to the case.<br />
<br />
''Following the theme, now would be a good time to do a final test on all connections, because next we are closing things up.''<br />
<br />
=== Task Six: Close the Router ===<br />
<br />
This final task is best described in photos:<br />
{|<br />
|-<br />
| [[Image:attach-back.jpg|thumb|350px|Now that everything is connected we can re-assemble it. First you put on the back/top half. Keyed ribbon cable is plugged in to serial port header on circuit board.]]<br />
| [[Image:attach-front.jpg|thumb|350px|Next you can carefully install the front half (making sure not to break any of the wires we have).]]<br />
|-<br />
|}<br />
=== Task Seven: Rejoice ===<br />
<br />
[[Image:final.jpg|thumb|500px|center|Now you have a WRT54GL with two serial ports installed and ready to run your own operating system.]]<br />
<br />
== What to do next? ==<br />
<br />
If you have OpenWRT installed, the first thing to do is to connect UART0 to a computer and follow the next HOWTO on using a PC to [[HOWTO:Connect to a modified router|connect to a modified router]].</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=List_of_supported_platforms&diff=1824List of supported platforms2007-07-11T18:56:24Z<p>Phinze: </p>
<hr />
<div>== Summary ==<br />
This page lists the platforms currently supported by the Embedded XINU operating system.<br />
<br />
== Supported Platforms ==<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!width="18%"|Platform<br />
!width="15%"|Status<br />
!Comments<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
|Fully Supported<br />
|This is our primary development platform, on which XINU has been tested thoroughly.<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1149562300349&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54G] v8<br />
|Fully Supported<br />
|Tested and running at the Embedded XINU Lab.<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1149562300349&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54G] v4<br />
|Probably Supported<br />
|The v4 is apparently the version on which WRT54GL is based, and so although the Embedded XINU Lab has not explicitly tested it, it probably works.<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1162354643512&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT350N]<br />
|Under Development<br />
|<br />
|}</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=List_of_supported_platforms&diff=1823List of supported platforms2007-07-11T18:55:57Z<p>Phinze: New page: == Summary == This page lists the platforms currently supported by the Embedded XINU operating system. {|border="1" cellpadding="5" cellspacing="0" |- !width="18%"|Platform !width="15%"|S...</p>
<hr />
<div>== Summary ==<br />
This page lists the platforms currently supported by the Embedded XINU operating system.<br />
<br />
{|border="1" cellpadding="5" cellspacing="0"<br />
|-<br />
!width="18%"|Platform<br />
!width="15%"|Status<br />
!Comments<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1133202177241&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54GL]<br />
|Fully Supported<br />
|This is our primary development platform, on which XINU has been tested thoroughly.<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1149562300349&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54G] v8<br />
|Fully Supported<br />
|Tested and running at the Embedded XINU Lab.<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1149562300349&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT54G] v4<br />
|Probably Supported<br />
|The v4 is apparently the version on which WRT54GL is based, and so although the Embedded XINU Lab has not explicitly tested it, it probably works.<br />
|-<br />
|[http://www.linksys.com/servlet/Satellite?c=L_Product_C2&childpagename=US%2FLayout&cid=1162354643512&pagename=Linksys%2FCommon%2FVisitorWrapper Linksys WRT350N]<br />
|Under Development<br />
|<br />
|}</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=1821Main Page2007-07-11T18:04:47Z<p>Phinze: /* Embedded XINU Guides */</p>
<hr />
<div>== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [http://en.wikipedia.org/wiki/XINU XINU Operating System] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# Obtain a [[List of supported platforms|supported platform]].<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs_2007|InternalDocs for Summer 2007]]''' - currently in development<br />
* [[InternalDocs_2006|InternalDocs for 2006]] - archive of past work</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=1820Main Page2007-07-11T18:03:03Z<p>Phinze: /* Embedded XINU Guides */</p>
<hr />
<div>== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [http://en.wikipedia.org/wiki/XINU XINU Operating System] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# Obtain a supported platform from our [[List of supported platforms|list]].<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs_2007|InternalDocs for Summer 2007]]''' - currently in development<br />
* [[InternalDocs_2006|InternalDocs for 2006]] - archive of past work</div>Phinzehttps://xinu.cs.mu.edu/index.php?title=Main_Page&diff=1819Main Page2007-07-11T18:01:01Z<p>Phinze: /* Guides to Replicate Our Work */</p>
<hr />
<div>== About Embedded XINU ==<br />
<br />
Embedded XINU is an ongoing research and implementation project in the area of Operating Systems and Embedded Systems. Its goal is to port the [http://en.wikipedia.org/wiki/XINU XINU Operating System] to the MIPS platform by specifically targeting LinkSys WRT54GL routers. While this project is still in progress, our prototype laboratory environment is already being used as the platform for courses<br />
in Operating Systems, Hardware Systems, Embedded Systems, and Compilers. We're also working on support for Networking and Internetworking classes.<br />
<br />
The Embedded XINU project was conceived and is supervised by [http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow] and is being conducted by both graduate and undergraduate students in the [http://www.mscs.mu.edu/ Math, Statistics, & Computer Science] department of [http://www.mu.edu/ Marquette University] in Milwaukee, Wisconsin. The first major phase of work on Embedded XINU began in the Summer of 2006.<br />
<br />
== Embedded XINU Guides ==<br />
<br />
In this section we are developing instructions so that other groups can benefit from the work we are doing. These guides can be followed more or less in order to create a relatively inexpensive platform for a custom operating system. As our work develops further, there will be more XINU-specific information.<br />
<br />
# [[HOWTO:Obtain a supported platform|Obtain a supported platform]]<br />
# [[HOWTO:Modify the Linksys hardware|Modify the Linksys hardware]]<br />
# [[HOWTO:Connect to a modified router|Connect to a modified router]]<br />
# [[HOWTO:Build and Deploy XINU|Build and Deploy XINU]]<br />
# (Optional) [[HOWTO:Build Backend Pool|Build a pool of backends]]<br />
<br />
== Internal Documentation ==<br />
Here is where we develop our research project as it is happening. While it is possible that there may be more detailed information on a few topics, beyond this point the documentation is only for internal use and not meant for public consumption.<br />
<br />
* '''[[InternalDocs_2007|InternalDocs for Summer 2007]]''' - currently in development<br />
* [[InternalDocs_2006|InternalDocs for 2006]] - archive of past work</div>Phinze