<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://xinu.cs.mu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jpintozz</id>
	<title>Embedded Xinu - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://xinu.cs.mu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jpintozz"/>
	<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php/Special:Contributions/Jpintozz"/>
	<updated>2026-06-15T16:06:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Systems_Laboratory&amp;diff=3816</id>
		<title>Systems Laboratory</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Systems_Laboratory&amp;diff=3816"/>
		<updated>2011-06-01T21:06:33Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: /* Alumni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the Systems Laboratory ==&lt;br /&gt;
&lt;br /&gt;
[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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
3. Embedded Software Transactional Memory. Exploration of an innovative transactional memory model for guaranteeing process synchronization in embedded operating systems. Collaboration with Intel Research.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
See the MSCS [http://www.mscs.mu.edu/mscs/faculty/research_labs.html Research Labs] page for more research laboratories in our department.&lt;br /&gt;
&lt;br /&gt;
== Publications ==&lt;br /&gt;
&lt;br /&gt;
=== Conference Proceedings and Journals ===&lt;br /&gt;
&amp;lt;li&amp;gt;Dennis Brylow and Kyle Thurow. Hands-on Networking Labs With Embedded Routers. In &amp;lt;i&amp;gt;Proceedings of [http://www.sigcse.org/sigcse2011/ SIGCSE 2011]: The 42nd ACM Technical Symposium on Computer Science Education&amp;lt;/i&amp;gt;, pages 399-404, Dallas, Texas, March 2011.&lt;br /&gt;
[http://doi.acm.org/10.1145/1953163.1953283 (link)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Matt Netkow and Dennis Brylow. Xest: An Automated Framework for Regression Testing of Embedded Software. In &amp;lt;i&amp;gt;Proceedings of [http://www.artist-embedded.org/artist/-WESE-10-.html WESE 2010]: 6th Workshop on Embedded Systems Education&amp;lt;/i&amp;gt;, pages 40-47, Scottsdale, Arizona, October 2010.&lt;br /&gt;
[http://www.artist-embedded.org/docs/Events/2010/WESE/Proceedings_WESE_2010.pdf (link)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Adam Mallen and Dennis Brylow. Compiler Construction With A Dash of Concurrency and An Embedded Twist. In &amp;lt;i&amp;gt;Proceedings of [http://splashcon.org/ SPLASH 2010]: Systems, Programming, Languages, and Applications: Software for Humanity&amp;lt;/i&amp;gt; (formerly OOPSLA) Educators' and Trainers' Symposium, pages 161-168, Reno, Nevada, October 2010. &lt;br /&gt;
[http://dx.doi.org/10.1145/1869542.1869568 (link)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dennis Brylow and Bina Ramamurthy. Nexos: A Next Generation Embedded&lt;br /&gt;
Systems Laboratory, In &amp;lt;i&amp;gt;Proceedings of WESE 2008: 4th Workshop on Embedded&lt;br /&gt;
Systems Education&amp;lt;/i&amp;gt;, pages 10-17, Atlanta, Georgia, October 2008.&lt;br /&gt;
[http://www.lulu.com/content/3613764 (link)]&amp;lt;br /&amp;gt;&lt;br /&gt;
Extended version in &amp;lt;i&amp;gt;SIGBED Review&amp;lt;/i&amp;gt;, Volume 6, Number 1, January 2009.&lt;br /&gt;
[http://www.cs.virginia.edu/sigbed/archives/2009-01/j-7-wese-journal-p18-final-brylow.pdf (link)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dennis Brylow. An Experimental Laboratory Environment for Teaching Embedded &lt;br /&gt;
Operating Systems, In &amp;lt;i&amp;gt;Proceedings of [http://www.cs.duke.edu/sigcse08/ SIGCSE 2008]: The 39th ACM Technical Symposium on Computer Science Education&amp;lt;/i&amp;gt;, pages 192-196, Portland, Oregon, March 2008. [http://doi.acm.org/10.1145/1352322.1352201 (link)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dennis Brylow.  An Experimental Laboratory Environment for Teaching Embedded Hardware Systems, In &amp;lt;i&amp;gt;Proceedings of&lt;br /&gt;
[http://www.ncsu.edu/wcae/ISCA2007/FinalProgram.html WCAE 2007]:&lt;br /&gt;
Workshop on Computer Architecture Education&amp;lt;/i&amp;gt;,&lt;br /&gt;
pages 44-51, San Diego, California, June 2007.&lt;br /&gt;
[http://www.mscs.mu.edu/~brylow/papers/Brylow-WCAE2007.pdf (link)]&lt;br /&gt;
&lt;br /&gt;
=== Posters and Undergraduate Research ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Kyle Thurow and Dennis Brylow.  A Network Emulator on Embedded Xinu.&lt;br /&gt;
Poster presentation and research talk presented at [http://www.sigcse.org/sigcse2010/ SIGCSE 2010]&lt;br /&gt;
[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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Gabe Van Eyck and Dennis Brylow.  Xinu as a Multi-Core Operating&lt;br /&gt;
System on the PlayStation 3.  Poster presentation at [http://www.sigcse.org/sigcse2010/ SIGCSE 2010]&lt;br /&gt;
[http://src.acm.org/ ACM Student Research Competition], undergraduate division, Milwaukee, Wisconsin, March 2010.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Aaron Gember and Dennis Brylow.  Real-Time TCP Extensions.  Poster&lt;br /&gt;
presentation and research talk presented at [http://www.cs.arizona.edu/groups/sigcse09/ SIGCSE 2009]&lt;br /&gt;
[http://src.acm.org/ ACM Student Research Competition], undergraduate division, Chattanooga, Tennessee.  Aaron advanced to&lt;br /&gt;
semi-finals, placed in top&lt;br /&gt;
three finalists, and advanced to the grand finals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dennis Brylow.  Experimental Operating System Lab On A Dime.&lt;br /&gt;
[http://www.cs.potsdam.edu/sigcse07/ SIGCSE 2007]: Technical Symposium on Computer Science Education, Covington, Kentucky,&lt;br /&gt;
March 2007.  [http://www.mscs.mu.edu/~brylow/papers/Brylow-SIGCSE2007.pdf (link)].&lt;br /&gt;
&lt;br /&gt;
=== Workshops ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Paul Ruth and Dennis Brylow.  Teaching With Embedded Xinu.  Workshop&lt;br /&gt;
accepted at [http://www.cs.olemiss.edu/acmse2010/Home.htm ACMSE 2010]:&lt;br /&gt;
The 48th ACM Southeast Conference, Oxford, Mississippi, April 2010.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dennis Brylow and Paul Ruth.  Teaching With Embedded Xinu.  Workshop&lt;br /&gt;
accepted at [http://www.sigcse.org/sigcse2010/ SIGCSE 2010]:&lt;br /&gt;
The 41st ACM Technical Symposium on Computer Science Education, Milwaukee,&lt;br /&gt;
Wisconsin, March 2010.&lt;br /&gt;
&lt;br /&gt;
== Lab Equipment ==&lt;br /&gt;
&lt;br /&gt;
The [[Systems Laboratory]] is populated with dual-headed Linux boxes running the latest version of [http://fedoraproject.org/ Fedora Linux].&lt;br /&gt;
Other workstations in the lab include a dual-core Apple G5 running OS X, and several multi-core boxes for higher-end computation.&lt;br /&gt;
&lt;br /&gt;
The Xinu Laboratory component of the Systems Lab includes a pool of 24 WRT54GL wireless routers organized into a managed embedded&lt;br /&gt;
backend pool, as well as smaller quantities of half a dozen other router types.  Embedded development kits available include&lt;br /&gt;
the Freescale/Motorola [http://www.evbplus.com/hcs12.html 68HC12 Dragon12] board,&lt;br /&gt;
the Atmel [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2717 AT91 Series ARM Thumb] AT91EB40A board,&lt;br /&gt;
the [http://www.atmel.com/products/AVR/butterfly ATmega169 Butterfly],&lt;br /&gt;
a Zilog [http://www.zilog.com/docs/z8/devtools/z86ccp01zem.pdf Z86 Emulator Z86CCP01ZEM],&lt;br /&gt;
and the Zilog [http://www.zilog.com/index.php?option=com_product&amp;amp;Itemid=26&amp;amp;mode=showProdDet&amp;amp;businessLine=1&amp;amp;familyId=6&amp;amp;productId=Z8F04A28100KIT Z8 Encore XP Dev Kit Z8F04A28100KIT-C].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
The Lab also hosts Subversion, Trac, and Web service for the Marquette Student [http://acm.mscs.mu.edu/ ACM Chapter], the&lt;br /&gt;
[http://mulug.mscs.mu.edu/ Marquette University Linux Users Group], and a stratum 2 NTP server for campus.&lt;br /&gt;
&lt;br /&gt;
== Lab Personnel ==&lt;br /&gt;
&lt;br /&gt;
=== Current Students ===&lt;br /&gt;
&lt;br /&gt;
[[File:XINU-summer2009.png|800px|thumb]] The Xinu Team in Summer 2009.&lt;br /&gt;
&lt;br /&gt;
From left,&lt;br /&gt;
Kyle Thurow, [http://www.mscs.mu.edu/~dmahoney/ Dan Mahoney],&lt;br /&gt;
[http://www.gemberdesign.com/ Aaron Gember],&lt;br /&gt;
[http://www.mscs.mu.edu/~mschul/ Mike Schultz],&lt;br /&gt;
[http://www.zacintosh.com/ Zachary Lund],&lt;br /&gt;
[http://www.mscs.mu.edu/~brylow/ Dr. Dennis Brylow],&lt;br /&gt;
[http://www.mscs.mu.edu/~rberg/ Ryan Berg], and&lt;br /&gt;
[http://pintozzi.com/ Joe Pintozzi].&lt;br /&gt;
Not pictured: &lt;br /&gt;
[http://www.mscs.mu.edu/~akoehler/ Adam Koehler] and&lt;br /&gt;
Paul Spillane.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alumni ===&lt;br /&gt;
&lt;br /&gt;
[http://phinze.com Paul Hinze], B.S. 2008.  Currently works as a developer for [http://braintreepayments.com Braintree].&lt;br /&gt;
&lt;br /&gt;
[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.&lt;br /&gt;
&lt;br /&gt;
Tim Blattner, B.S. 2009.  Now at [http://www.cs.umbc.edu/ University of Maryland - Baltimore County] doctoral program.&lt;br /&gt;
&lt;br /&gt;
[http://www.gemberdesign.com/ Aaron Gember], B.S. 2009.  Now at [http://www.cs.wisc.edu/ University of Wisconsin-Madison] doctoral program.&lt;br /&gt;
&lt;br /&gt;
[http://netkow.com/ Matt Netkow], B.S. 2009.  Now works as a developer for [http://www.savogroup.com/ The SAVO Group].&lt;br /&gt;
&lt;br /&gt;
Adam Mallen, B.S. 2009.  Now at [http://www.marquette.edu/mscs/ Marquette University] doctoral program in Computational Sciences with an emphasis in Math.&lt;br /&gt;
&lt;br /&gt;
Adam Koehler, M.S. 2010.  Now at [http://www1.cs.ucr.edu/index.php University of California Riverside] doctoral program.&lt;br /&gt;
&lt;br /&gt;
Joseph Pintozzi, B.S. 2010.  Now works as a developer for [http://core-apps.com/ Core-Apps, LLC].&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=File:Xinu-Wiggler.png&amp;diff=3514</id>
		<title>File:Xinu-Wiggler.png</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=File:Xinu-Wiggler.png&amp;diff=3514"/>
		<updated>2009-08-24T21:52:52Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: uploaded a new version of &amp;amp;quot;File:Xinu-Wiggler.png&amp;amp;quot;: Updated again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schematic for the modified Wiggler that we are using. Designed in XCircuit.&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=File:Xinu-Wiggler.png&amp;diff=3513</id>
		<title>File:Xinu-Wiggler.png</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=File:Xinu-Wiggler.png&amp;diff=3513"/>
		<updated>2009-08-24T21:15:33Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: uploaded a new version of &amp;amp;quot;File:Xinu-Wiggler.png&amp;amp;quot;: Updated Wiggler screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schematic for the modified Wiggler that we are using. Designed in XCircuit.&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=EJTAG&amp;diff=3507</id>
		<title>EJTAG</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=EJTAG&amp;diff=3507"/>
		<updated>2009-08-13T19:32:38Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: /* Probes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EJTAG is a MIPS-specific extension of IEEE 1149.1, the Joint Test Action Group.&lt;br /&gt;
Allows interfacing with additional logic in SoC&lt;br /&gt;
* direct control of processor for step-by-step debugging&lt;br /&gt;
* access to busses and registers&lt;br /&gt;
** aids in debugging&lt;br /&gt;
** possible usage as additional peripheral data bus&lt;br /&gt;
** direct writing to flash for firmware updates (and de-bricking)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
Attempting to use GNU debugger: http://www.gnu.org/software/gdb.  GDP uses its own Remote Serial Protocol (RDB) to communicate to remote targets.  This protocol could be used to communicate with the XINU backends through the current serial connection.  Although, this would require additions to XINU: communication with the GDB host; altering of exception handler to allow GDB to take control of target processor.&lt;br /&gt;
&lt;br /&gt;
The use of the EJTAG port on the WRT54-series routers gives the user hardware control of the processor, avoiding the need for strategically placed breakpoints and XINU interrupt subsystem modification.  Additionally, requests by the debugger for specicfic data can be aquired directly from registers.  The trick to this operation is software that can interpret commands from RDB into EJTAG signals to be sent through the host parallel port, and vice-versa.  An implementation of this interpreter can be found at http://www.totalembedded.com/open_source/jtag/mips32_ejtag.php.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Specific Implementations ==&lt;br /&gt;
So far, development has focused exclusively on the WRT54GL.  For anyone investigating the capabilities of the WRT54GL EJTAG system, note the instruction register size is a full 8 bits, not the 5 bits required by specification.  Believing the 54GL CP0 Debug Program Counter register to be returning erroneous addresses, headers are being added to a 54G v.8, and a 350N v.1.  For IDCODEs and implementation register values check [[EJTAG ID Codes and Implementation Registers]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Probes ==&lt;br /&gt;
Images are of three variant EJTAG connections.  The first two buffered by active line drivers, the last passive.  Xinu research is currently using an active probe similar to the OpenWRT &amp;quot;Wiggler&amp;quot; clone; although, the parallel port pinouts match the unbuffered cable diagram.&lt;br /&gt;
Note that the unbuffered cable at the bottom of this page is only proven by xinu research functional in writing to the Test Access Port.  It may not read data back from the target device.  Additionally, rumor claims that the cable can be no longer than 6&amp;quot; (not 6').  This is partially substantiated by photographs &amp;quot;out there&amp;quot; of similar 6 inch cables used with a variety of devices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Te_jtag_cable.png|thumb|900px|center|Total Embedded buffered cable]]&lt;br /&gt;
[[Image:Wiggler.png|thumb|700px|center|&amp;quot;wiggler&amp;quot; clone from OpenWRT]]&lt;br /&gt;
[[Image:JTAGunbuffered.png|thumb|400px|center|unbuffered cable from OpenWRT; used by de-brick utility]]&lt;br /&gt;
[[Image:Xinu-Wiggler.png|thumb|700px|center|Our current buffer/wiggler setup]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[EJTAG ID Codes and Implementation Registers]]&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=File:Xinu-Wiggler.png&amp;diff=3506</id>
		<title>File:Xinu-Wiggler.png</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=File:Xinu-Wiggler.png&amp;diff=3506"/>
		<updated>2009-08-13T19:30:57Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: Schematic for the modified Wiggler that we are using. Designed in XCircuit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schematic for the modified Wiggler that we are using. Designed in XCircuit.&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=Talk:Flash_driver/Original&amp;diff=3266</id>
		<title>Talk:Flash driver/Original</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=Talk:Flash_driver/Original&amp;diff=3266"/>
		<updated>2009-05-20T11:41:09Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: &amp;quot;driver&amp;quot; was misspelt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Flash-design.png|450px|right]]&lt;br /&gt;
The [[WRT54GL]] has a 4MB Intel Flash chip which is able to store [[CFE]], [[NVRAM|NVRAM settings]], an operating system (like [[OpenWRT]] or LinkSys' operating system (or even [[XINU]]), and optionally a file system.  Currently the bleeding edge version of XINU in the flashmem branch has a working Flash driver, though it is not the one on this page and will be replaced with the driver described in this document.  GL-series routers have 2 erase-block regions (8-8KB and 63-64KB).&lt;br /&gt;
&lt;br /&gt;
Flash memory remains minimally tested on the [[WRT54G]]. XINU reports that the G-series has 2MB of Flash memory, separated into 4 regioins of varying erase-block sizes (1-16KB, 2-8KB, 1-32KB, and 31-64KB).&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
Flash is bounded by the rule that to program the software may only change a 1-bit to a 0-bit and cannot change from a 0 to a 1.  Because of this, it is often necesary to erase a block of memory (setting all bits in the block to 1) and then write data to it.  This is known as an &amp;quot;erasae-block&amp;quot;.  The majority of these seem to be in the 64 kilobyte range, with the smallest being a massive 8 kilobyte erase-block.  This causes a problem as most file systems work in 512 byte blocks or 2048 byte blocks, both of which are substantially smaller than the smallest erase-block. The [[Flash driver#Logical Flash Interface|logical flash interface]] attempts to solve this problem by presenting standard 512 byte blocks to the higher layers while maintaining erase-block regions within physical flash memory.&lt;br /&gt;
&lt;br /&gt;
== Physical Flash ==&lt;br /&gt;
&lt;br /&gt;
The base location of physical Flash is stored in a flash structure and for both series of routers is 0xBC000000.&lt;br /&gt;
&lt;br /&gt;
As stated above physical Flash is seperated into erase-blocks which are the smallest writable unit on Flash memory.  The GL-series and the G-series have differing Flash sizes and erase-block layouts.  The 4MB GLs have 2 erase-block regions with the first having 8-8 kilobyte erase-blocks and the second having 63-64 kilobyte erase-blocks.  The 2MB Gs have 4 erase-block regions, the first having 1-16 kilobyte erase-block, followed by 2-8 kilobyte erase-blocks, then 1-32 kilobyte erase-block, and finally 31-64 kilobyte erase-blocks.&lt;br /&gt;
&lt;br /&gt;
Because of these inconsistencies, this driver will use the Logical Flash Interface to provide a standard view of Flash memory with a fixed block size throughout.&lt;br /&gt;
&lt;br /&gt;
== Logical Flash Interface ==&lt;br /&gt;
&lt;br /&gt;
The logical Flash interface will do the bulk of the work needed for accessing flash memory. It will enforce the rules for what memory can be changed, present standard 512 byte block sizes to the upper layers, ensure that erase-blocks are not incorrectly modified (writing 512 bytes to a much larger erase-block would destroy most the data in the erase-block), and also provide an interface into the NVRAM settings of flash memory.&lt;br /&gt;
&lt;br /&gt;
When a 512 byte logical block is requested the logical Flash interface will read the entire erase-block into memory and pass the proper logical block through to the requester. When attempting to write the same logical block back the interface will recognize that the erase-block is in memory, overwrite the block, and write the erase-block back to Flash. Although the last portion could be modified to only write back to disk when a synchronization is requested, thus the Flash interface could maintain a collection of erase-blocks only writing them to Flash when too many exist or upon a synchronization request.&lt;br /&gt;
&lt;br /&gt;
== Lower Driver (Optional) ==&lt;br /&gt;
&lt;br /&gt;
== Upper Driver ==&lt;br /&gt;
&lt;br /&gt;
The upper driver can communicate directly with the logical Flash interface or use a lower driver if desired with slight code modification. The purpose of the upper driver is to present a simple interface to the rest of the operating system for all Flash input/output. The API is as follows:&lt;br /&gt;
&lt;br /&gt;
 read(FLASH, unsigned char *buffer, ulong block)&lt;br /&gt;
&lt;br /&gt;
This call will read into a buffer (which should be a pointer to a 512 byte region of memory) the specified block.  For the 4MB Flash there are (4*1024*1024 / DISK_BLOCK_SIZE) blocks.  It is up to the file system or programmer to know what block to request (although some blocks are off-limits, this is handeled by the logical Flash interface). This will return OK on a successful read and SYSERR on any error.&lt;br /&gt;
&lt;br /&gt;
 write(FLASH, unsigned char *buffer, ulong block)&lt;br /&gt;
&lt;br /&gt;
Similar to &amp;lt;code&amp;gt;read()&amp;lt;/code&amp;gt;, this will write the contents of buffer to the specified block. Again the logical Flash interface will know legal and illegal positions to write.  This will return OK on a successful write and SYSERR on any error.&lt;br /&gt;
&lt;br /&gt;
 seek(FLASH, ulong block)&lt;br /&gt;
&lt;br /&gt;
Seek will simply take the given block and return the position relative to Flash (Flash beginning at 0x00000000). So calling &amp;lt;code&amp;gt;seek(FLASH, 100)&amp;lt;/code&amp;gt; will return the position of the 100th block of Flash (100 * DISK_BLOCK_SIZE). Instead of just performing the multiplication in the code, using &amp;lt;code&amp;gt;seek()&amp;lt;/code&amp;gt; will provide a type of pre-check, if the block being seek'd to is outside of the range of Flash or if the logical Flash interface deems that block protected (in CFE's memory or NVRAM settings), it will return SYSERR.&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
	<entry>
		<id>https://xinu.cs.mu.edu/index.php?title=User:Jpintozz&amp;diff=3218</id>
		<title>User:Jpintozz</title>
		<link rel="alternate" type="text/html" href="https://xinu.cs.mu.edu/index.php?title=User:Jpintozz&amp;diff=3218"/>
		<updated>2009-05-18T21:12:15Z</updated>

		<summary type="html">&lt;p&gt;Jpintozz: In the begining....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey,&lt;br /&gt;
&lt;br /&gt;
This is my page.  I will add more later.&lt;/div&gt;</summary>
		<author><name>Jpintozz</name></author>
		
	</entry>
</feed>