<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.elphel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JavierRojas</id>
	<title>ElphelWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.elphel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JavierRojas"/>
	<link rel="alternate" type="text/html" href="https://wiki.elphel.com/wiki/Special:Contributions/JavierRojas"/>
	<updated>2026-08-01T15:45:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4571</id>
		<title>Direct DMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4571"/>
		<updated>2008-07-25T15:55:51Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: /* Notes/bugs/etc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Direct DMA =&lt;br /&gt;
This is an implementation of DMA between the FPGA and the main memory of an Elphel 353 camera. &lt;br /&gt;
== Requirements/preparation ==&lt;br /&gt;
We used the 7.1.7.26 version of the Elphel software. To use this driver you will have to recompile the kernel&lt;br /&gt;
(and because of this, also reflash the camera), and create a proper device file.&lt;br /&gt;
&lt;br /&gt;
Since we will be using a new device (file in /dev), we&#039;ll have to create it as well; but, since the /dev filesystem is read-only, this must be done when creating the camera image (and therefore requires reflashing the camera).&lt;br /&gt;
&lt;br /&gt;
Needless to say, you can recompile the kernel and arrange for the creation of the device at the same time so you will only have to reflash the camera once to apply both changes.&lt;br /&gt;
&lt;br /&gt;
=== Kernel recompilation ===&lt;br /&gt;
The original Elphel drivers are compiled inside of the kernel (i.e., not as modules). Since they use resources&lt;br /&gt;
like the interruption line, they must be removed from the kernel, because to do proper DMA we need to be able to handle the interruption issued when the FPGA finishes the data transfer.&lt;br /&gt;
&lt;br /&gt;
To remove these parts, you&#039;ll have to edit the file &amp;lt;tt&amp;gt;elphel353/os/linux-2.6/arch/cris/arch-v32/drivers/elphel/Makefile&amp;lt;/tt&amp;gt; so it looks like this&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_common.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgajtag.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgaclocks.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_sdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_io.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgactrl.o&lt;br /&gt;
 	&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cc3x3.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxi2c.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxsdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxdma.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += hist.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += ext353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += circbuf.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += exif353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += stream.o&lt;br /&gt;
  &lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_MT9X001)   += mt9x001.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL347)        += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI11002)  += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI16000)  += ???.o&lt;br /&gt;
&lt;br /&gt;
=== Creation of a new device node ===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;elphel353-7.1.7.26/elphel353/packages/devices/elphel/Makefile&amp;lt;/tt&amp;gt; and add the line&lt;br /&gt;
         @$(MKNOD) -m 0666           $(DEV)/dma_test      c 42   0&lt;br /&gt;
after the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; target. Take into account that behind the character behind the &amp;lt;tt&amp;gt;@&amp;lt;/tt&amp;gt; is a TAB. It is not spaces.&lt;br /&gt;
&lt;br /&gt;
=== Reflashing camera ===&lt;br /&gt;
Once both of these modifications are made, it is possible to reflash the camera following the usual procedure ([[Firmware_upgrade]])&lt;br /&gt;
== Driver compilation ==&lt;br /&gt;
The tarball attached to this page has a Makefile. To use it you have to edit it to correct the path to the kernel Makefile of the elphel tree (&amp;lt;tt&amp;gt;elphel353-7.1.7.26/elphel353/...&amp;lt;/tt&amp;gt;). You also have to make sure of putting gcc-cris into the PATH (by sourcing the &amp;lt;tt&amp;gt;init_env&amp;lt;/tt&amp;gt; located in the elphel tree).&lt;br /&gt;
&lt;br /&gt;
Once this is done, you can compile the driver by simply issuing the command &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&lt;br /&gt;
== Testing DMA ==&lt;br /&gt;
Log into the camera, upload there both the driver (&amp;lt;tt&amp;gt;frame_reader.ko&amp;lt;/tt&amp;gt;) and the FPGA image (&amp;lt;tt&amp;gt;fpga.bit&amp;lt;/tt&amp;gt;). A good place to put these files is &amp;lt;tt&amp;gt;/var&amp;lt;/tt&amp;gt;. Once there, issue the following commands&lt;br /&gt;
 fpcf -X 0 100&lt;br /&gt;
 cat fpga.bit &amp;gt; /dev/fpgaconfjtag&lt;br /&gt;
 insmod frame_reader.ko&lt;br /&gt;
after this, it is possible to test the DMA transfer by reading from the file &amp;lt;tt&amp;gt;/dev/dma_test&amp;lt;/tt&amp;gt;. Like this&lt;br /&gt;
 cat /dev/dma_test &amp;gt; out_file&lt;br /&gt;
The FPGA is programmed to write a sequence of numbers into the DMA buffer, and the driver is programmed to read the DMA buffer (once the FPGA has filled it) and pass it to user space. If the transfer was successful, the resulting file will have a size of 307200 bytes, or 76800 DWORDs. Each DWORD contains a number. The first DWORD has the number 0, the second has a 1, and so on. Inside the tarball attached there is a python program that reads the file and says if the data is consistent or not.&lt;br /&gt;
&lt;br /&gt;
== Notes/bugs/etc ==&lt;br /&gt;
* Every once in a while the reading of the &amp;lt;tt&amp;gt;/dev/dma_test&amp;lt;/tt&amp;gt; fails. It is still not clear why this happens. The failure doesn&#039;t seem to be related to the amount of times the device is read. Tracking the driver execution with printk shows that the system hangs when writing to the FPGA (when passing the DMA address). &lt;br /&gt;
 #define MEM_CSP4_START (0x20000000)&lt;br /&gt;
 #define MEM_NON_CACHEABLE (0x80000000)&lt;br /&gt;
 ...&lt;br /&gt;
 volatile unsigned long *fpga;&lt;br /&gt;
 ...&lt;br /&gt;
 ... (on module (driver) inititialization)&lt;br /&gt;
      fpga = ioremap(MEM_CSP4_START|MEM_NON_CACHEABLE, 8192);&lt;br /&gt;
 ... (on device reading)&lt;br /&gt;
      printk(&amp;quot;Yadda Yadda\n&amp;quot;);&lt;br /&gt;
      fpga[0x84] = dmabuf_phys_addr;&lt;br /&gt;
The last thing heard from the kernel (on the serial port) is the &amp;quot;Yadda Yadda&amp;quot; message. No kernel dumps/oops/etc.&lt;br /&gt;
We have also made tests with and without interruptions from the FPGA, and the problem arises on both cases.&lt;br /&gt;
* There seem to be issues with the frequency used. So far a frequency of 100Mhz is needed for the data transfer to work properly. Higher frequencies (e.g. 160Mhz) lead to problems when the FPGA writes the data to the DMA buffer, and sometimes to problems when passing the address of the DMA buffer to the FPGA (which makes the FPGA fill some random location of the memory with a nice sequence). It is important to note that since the SDRAM memory works with at most 130Mhz, the FPGA uses a fake clock of half the frequency, so it works with the SDRAM memory at, at most, 80Mhz.&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
[[Media:Dma-driver.tar.gz]]&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4570</id>
		<title>Direct DMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4570"/>
		<updated>2008-07-24T21:27:07Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Direct DMA =&lt;br /&gt;
This is an implementation of DMA between the FPGA and the main memory of an Elphel 353 camera. &lt;br /&gt;
== Requirements/preparation ==&lt;br /&gt;
We used the 7.1.7.26 version of the Elphel software. To use this driver you will have to recompile the kernel&lt;br /&gt;
(and because of this, also reflash the camera), and create a proper device file.&lt;br /&gt;
&lt;br /&gt;
Since we will be using a new device (file in /dev), we&#039;ll have to create it as well; but, since the /dev filesystem is read-only, this must be done when creating the camera image (and therefore requires reflashing the camera).&lt;br /&gt;
&lt;br /&gt;
Needless to say, you can recompile the kernel and arrange for the creation of the device at the same time so you will only have to reflash the camera once to apply both changes.&lt;br /&gt;
&lt;br /&gt;
=== Kernel recompilation ===&lt;br /&gt;
The original Elphel drivers are compiled inside of the kernel (i.e., not as modules). Since they use resources&lt;br /&gt;
like the interruption line, they must be removed from the kernel, because to do proper DMA we need to be able to handle the interruption issued when the FPGA finishes the data transfer.&lt;br /&gt;
&lt;br /&gt;
To remove these parts, you&#039;ll have to edit the file &amp;lt;tt&amp;gt;elphel353/os/linux-2.6/arch/cris/arch-v32/drivers/elphel/Makefile&amp;lt;/tt&amp;gt; so it looks like this&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_common.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgajtag.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgaclocks.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_sdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_io.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgactrl.o&lt;br /&gt;
 	&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cc3x3.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxi2c.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxsdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxdma.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += hist.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += ext353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += circbuf.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += exif353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += stream.o&lt;br /&gt;
  &lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_MT9X001)   += mt9x001.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL347)        += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI11002)  += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI16000)  += ???.o&lt;br /&gt;
&lt;br /&gt;
=== Creation of a new device node ===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;elphel353-7.1.7.26/elphel353/packages/devices/elphel/Makefile&amp;lt;/tt&amp;gt; and add the line&lt;br /&gt;
         @$(MKNOD) -m 0666           $(DEV)/dma_test      c 42   0&lt;br /&gt;
after the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; target. Take into account that behind the character behind the &amp;lt;tt&amp;gt;@&amp;lt;/tt&amp;gt; is a TAB. It is not spaces.&lt;br /&gt;
&lt;br /&gt;
=== Reflashing camera ===&lt;br /&gt;
Once both of these modifications are made, it is possible to reflash the camera following the usual procedure ([[Firmware_upgrade]])&lt;br /&gt;
== Driver compilation ==&lt;br /&gt;
The tarball attached to this page has a Makefile. To use it you have to edit it to correct the path to the kernel Makefile of the elphel tree (&amp;lt;tt&amp;gt;elphel353-7.1.7.26/elphel353/...&amp;lt;/tt&amp;gt;). You also have to make sure of putting gcc-cris into the PATH (by sourcing the &amp;lt;tt&amp;gt;init_env&amp;lt;/tt&amp;gt; located in the elphel tree).&lt;br /&gt;
&lt;br /&gt;
Once this is done, you can compile the driver by simply issuing the command &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&lt;br /&gt;
== Testing DMA ==&lt;br /&gt;
Log into the camera, upload there both the driver (&amp;lt;tt&amp;gt;frame_reader.ko&amp;lt;/tt&amp;gt;) and the FPGA image (&amp;lt;tt&amp;gt;fpga.bit&amp;lt;/tt&amp;gt;). A good place to put these files is &amp;lt;tt&amp;gt;/var&amp;lt;/tt&amp;gt;. Once there, issue the following commands&lt;br /&gt;
 fpcf -X 0 100&lt;br /&gt;
 cat fpga.bit &amp;gt; /dev/fpgaconfjtag&lt;br /&gt;
 insmod frame_reader.ko&lt;br /&gt;
after this, it is possible to test the DMA transfer by reading from the file &amp;lt;tt&amp;gt;/dev/dma_test&amp;lt;/tt&amp;gt;. Like this&lt;br /&gt;
 cat /dev/dma_test &amp;gt; out_file&lt;br /&gt;
The FPGA is programmed to write a sequence of numbers into the DMA buffer, and the driver is programmed to read the DMA buffer (once the FPGA has filled it) and pass it to user space. If the transfer was successful, the resulting file will have a size of 307200 bytes, or 76800 DWORDs. Each DWORD contains a number. The first DWORD has the number 0, the second has a 1, and so on. Inside the tarball attached there is a python program that reads the file and says if the data is consistent or not.&lt;br /&gt;
&lt;br /&gt;
== Notes/bugs/etc ==&lt;br /&gt;
* Every once in a while the reading of the &amp;lt;tt&amp;gt;/dev/dma_test&amp;lt;/tt&amp;gt; fails. It is still not clear why this happens. As far as what the driver can see, it is not receiving any interruption from the FPGA, and therefore it hangs. In other tries the kernel crashes.&lt;br /&gt;
* There seem to be issues with the frequency used. So far a frequency of 100Mhz is needed for the data transfer to work properly. Higher frequencies (e.g. 160Mhz) lead to problems when the FPGA writes the data to the DMA buffer, and sometimes to problems when passing the address of the DMA buffer to the FPGA (which makes the FPGA fill some random location of the memory with a nice sequence). It is important to note that since the SDRAM memory works with at most 130Mhz, the FPGA uses a fake clock of half the frequency, so it works with the SDRAM memory at, at most, 80Mhz.&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
[[Media:Dma-driver.tar.gz]]&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=File:Dma-driver.tar.gz&amp;diff=4572</id>
		<title>File:Dma-driver.tar.gz</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=File:Dma-driver.tar.gz&amp;diff=4572"/>
		<updated>2008-07-24T21:25:04Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4569</id>
		<title>Direct DMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4569"/>
		<updated>2008-07-24T21:03:51Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Direct DMA =&lt;br /&gt;
This is an implementation of DMA between the FPGA and the main memory of an Elphel 353 camera. &lt;br /&gt;
== Requirements/preparation ==&lt;br /&gt;
We used the 7.1.7.26 version of the Elphel software. To use this driver you will have to recompile the kernel&lt;br /&gt;
(and because of this, also reflash the camera), and create a proper device file.&lt;br /&gt;
&lt;br /&gt;
Since we will be using a new device (file in /dev), we&#039;ll have to create it as well; but, since the /dev filesystem is read-only, this must be done when creating the camera image (and therefore requires reflashing the camera).&lt;br /&gt;
&lt;br /&gt;
Needless to say, you can recompile the kernel and arrange for the creation of the device at the same time so you will only have to reflash the camera once to apply both changes.&lt;br /&gt;
&lt;br /&gt;
=== Kernel recompilation ===&lt;br /&gt;
The original Elphel drivers are compiled inside of the kernel (i.e., not as modules). Since they use resources&lt;br /&gt;
like the interruption line, they must be removed from the kernel, because to do proper DMA we need to be able to handle the interruption issued when the FPGA finishes the data transfer.&lt;br /&gt;
&lt;br /&gt;
To remove these parts, you&#039;ll have to edit the file &amp;lt;tt&amp;gt;elphel353/os/linux-2.6/arch/cris/arch-v32/drivers/elphel/Makefile&amp;lt;/tt&amp;gt; so it looks like this&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_common.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgajtag.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgaclocks.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_sdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_io.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgactrl.o&lt;br /&gt;
 	&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cc3x3.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxi2c.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxsdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxdma.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += hist.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += ext353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += circbuf.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += exif353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += stream.o&lt;br /&gt;
  &lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_MT9X001)   += mt9x001.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL347)        += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI11002)  += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI16000)  += ???.o&lt;br /&gt;
&lt;br /&gt;
=== Creation of a new device node ===&lt;br /&gt;
Edit the file &amp;lt;tt&amp;gt;elphel353-7.1.7.26/elphel353/packages/devices/elphel/Makefile&amp;lt;/tt&amp;gt; and add the line&lt;br /&gt;
         @$(MKNOD) -m 0666           $(DEV)/dma_test      c 42   0&lt;br /&gt;
after the &amp;lt;tt&amp;gt;install&amp;lt;/tt&amp;gt; target. Take into account that behind the character behind the &amp;lt;tt&amp;gt;@&amp;lt;/tt&amp;gt; is a TAB. It is not spaces.&lt;br /&gt;
&lt;br /&gt;
=== Reflashing camera ===&lt;br /&gt;
Once both of these modifications are made, it is possible to reflash the camera following the usual procedure ([[Firmware_upgrade]])&lt;br /&gt;
== Driver compilation ==&lt;br /&gt;
The tarball attached to this page has a Makefile. To use it you have to edit it to correct the path to the kernel Makefile of the elphel tree (&amp;lt;tt&amp;gt;elphel353-7.1.7.26/elphel353/...&amp;lt;/tt&amp;gt;). You also have to make sure of putting gcc-cris into the PATH (by sourcing the &amp;lt;tt&amp;gt;init_env&amp;lt;/tt&amp;gt; located in the elphel tree).&lt;br /&gt;
&lt;br /&gt;
Once this is done, you can compile the driver by simply issuing the command &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&lt;br /&gt;
== Testing DMA ==&lt;br /&gt;
Log into the camera, upload there both the driver (&amp;lt;tt&amp;gt;frame_reader.ko&amp;lt;/tt&amp;gt;) and the FPGA image (&amp;lt;tt&amp;gt;fpga.bit&amp;lt;/tt&amp;gt;). A good place to put these files is &amp;lt;tt&amp;gt;/var&amp;lt;/tt&amp;gt;. Once there, issue the following commands&lt;br /&gt;
 fpcf -X 0 100&lt;br /&gt;
 cat fpga.bit &amp;gt; /dev/fpgaconfjtag&lt;br /&gt;
 insmod frame_reader.ko&lt;br /&gt;
after this, it is possible to test the DMA transfer by reading from the file &amp;lt;tt&amp;gt;/dev/dma_test&amp;lt;/tt&amp;gt;. Like this&lt;br /&gt;
 cat /dev/dma_test &amp;gt; out_file&lt;br /&gt;
The FPGA is programmed to write a sequence of numbers into the DMA buffer, and the driver is programmed to read the DMA buffer (once the FPGA has filled it) and pass it to user space. If the transfer was successful, the resulting file will have a size of 307200 bytes, or 76800 DWORDs. Each DWORD contains a number. The first DWORD has the number 0, the second has a 1, and so on. Inside the tarball attached there is a python program that reads the file and says if the data is consistent or not.&lt;br /&gt;
&lt;br /&gt;
== Notes/bugs/etc ==&lt;br /&gt;
* Every once in a while the reading of the &amp;lt;tt&amp;gt;/dev/dma_test&amp;lt;/tt&amp;gt; fails. It is still not clear why this happens. As far as what the driver can see, it is not receiving any interruption from the FPGA, and therefore it hangs. In other tries the kernel crashes.&lt;br /&gt;
* There seem to be issues with the frequency used. So far a frequency of 100Mhz is needed for the data transfer to work properly. Higher frequencies (e.g. 160Mhz) lead to problems when the FPGA writes the data to the DMA buffer, and sometimes to problems when passing the address of the DMA buffer to the FPGA (which makes the FPGA fill some random location of the memory with a nice sequence). It is important to note that since the SDRAM memory works with at most 130Mhz, the FPGA uses a fake clock of half the frequency, so it works with the SDRAM memory at, at most, 80Mhz.&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4568</id>
		<title>Direct DMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4568"/>
		<updated>2008-07-24T19:35:51Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: /* Kernel recompilation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Direct DMA =&lt;br /&gt;
This is an implementation of DMA between the FPGA and the main memory of an Elphel 353 camera. &lt;br /&gt;
== Requirements/preparation ==&lt;br /&gt;
We used the 7.1.7.26 version of the Elphel software. To use this driver you will have to recompile the kernel&lt;br /&gt;
(and because of this, also reflash the camera), and create a proper device file.&lt;br /&gt;
&lt;br /&gt;
Since we will be using a new device (file in /dev), we&#039;ll have to create it as well; but, since the /dev filesystem is read-only, this must be done when creating the camera image (and therefore requires reflashing the camera).&lt;br /&gt;
&lt;br /&gt;
Needless to say, you can recompile the kernel and arrange for the creation of the device at the same time so you will only have to reflash the camera once to apply both changes.&lt;br /&gt;
&lt;br /&gt;
=== Kernel recompilation ===&lt;br /&gt;
The original Elphel drivers are compiled inside of the kernel (i.e., not as modules). Since they use resources&lt;br /&gt;
like the interruption line, they must be removed from the kernel, because to do proper DMA we need to be able to handle the interruption issued when the FPGA finishes the data transfer.&lt;br /&gt;
&lt;br /&gt;
To remove these parts, you&#039;ll have to edit the file elphel353/os/linux-2.6/arch/cris/arch-v32/drivers/elphel/Makefile so it looks like this&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_common.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgajtag.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgaclocks.o&lt;br /&gt;
 obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_sdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_io.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgactrl.o&lt;br /&gt;
 	&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cc3x3.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxi2c.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxsdram.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += cxdma.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += hist.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += ext353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += circbuf.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += exif353.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL353)        += stream.o&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_MT9X001)   += mt9x001.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL347)        += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI11002)  += ???.o&lt;br /&gt;
 #obj-$(CONFIG_ETRAX_ELPHEL_KAI16000)  += ???.o&lt;br /&gt;
&lt;br /&gt;
== Driver compilation ==&lt;br /&gt;
&lt;br /&gt;
== Testing DMA ==&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4567</id>
		<title>Direct DMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4567"/>
		<updated>2008-07-24T19:22:23Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: /* Kernel recompilation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Direct DMA =&lt;br /&gt;
This is an implementation of DMA between the FPGA and the main memory of an Elphel 353 camera. &lt;br /&gt;
== Requirements/preparation ==&lt;br /&gt;
We used the 7.1.7.26 version of the Elphel software. To use this driver you will have to recompile the kernel&lt;br /&gt;
(and because of this, also reflash the camera), and create a proper device file.&lt;br /&gt;
&lt;br /&gt;
Since we will be using a new device (file in /dev), we&#039;ll have to create it as well; but, since the /dev filesystem is read-only, this must be done when creating the camera image (and therefore requires reflashing the camera).&lt;br /&gt;
&lt;br /&gt;
Needless to say, you can recompile the kernel and arrange for the creation of the device at the same time so you will only have to reflash the camera once to apply both changes.&lt;br /&gt;
&lt;br /&gt;
=== Kernel recompilation ===&lt;br /&gt;
The original Elphel drivers are compiled inside of the kernel (i.e., not as modules). Since they use resources&lt;br /&gt;
like the interruption line, they must be removed from the kernel, because to do proper DMA we need to be able to handle the interruption issued when the FPGA finishes the data transfer.&lt;br /&gt;
&lt;br /&gt;
To remove these parts, you&#039;ll have to edit the file elphel353/os/linux-2.6/arch/cris/arch-v32/drivers/elphel/Makefile so it looks like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_common.o&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgajtag.o&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgaclocks.o&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_sdram.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_io.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgactrl.o&lt;br /&gt;
	&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cc3x3.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cxi2c.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cxsdram.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cxdma.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += hist.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += ext353.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += circbuf.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += exif353.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += stream.o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL_MT9X001)   += mt9x001.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL347)        += ???.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL_KAI11002)  += ???.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL_KAI16000)  += ???.o&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver compilation ==&lt;br /&gt;
&lt;br /&gt;
== Testing DMA ==&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4566</id>
		<title>Direct DMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Direct_DMA&amp;diff=4566"/>
		<updated>2008-07-24T19:20:52Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Direct DMA =&lt;br /&gt;
This is an implementation of DMA between the FPGA and the main memory of an Elphel 353 camera. &lt;br /&gt;
== Requirements/preparation ==&lt;br /&gt;
We used the 7.1.7.26 version of the Elphel software. To use this driver you will have to recompile the kernel&lt;br /&gt;
(and because of this, also reflash the camera), and create a proper device file.&lt;br /&gt;
&lt;br /&gt;
Since we will be using a new device (file in /dev), we&#039;ll have to create it as well; but, since the /dev filesystem is read-only, this must be done when creating the camera image (and therefore requires reflashing the camera).&lt;br /&gt;
&lt;br /&gt;
Needless to say, you can recompile the kernel and arrange for the creation of the device at the same time so you will only have to reflash the camera once to apply both changes.&lt;br /&gt;
&lt;br /&gt;
=== Kernel recompilation ===&lt;br /&gt;
The original Elphel drivers are compiled inside of the kernel (i.e., not as modules). Since they use resources&lt;br /&gt;
like the interruption line, they must be removed from the kernel, because to do proper DMA we need to be able to handle the interruption issued when the FPGA finishes the data transfer.&lt;br /&gt;
&lt;br /&gt;
To remove these parts, you&#039;ll have to edit the file elphel353/os/linux-2.6/arch/cris/arch-v32/drivers/elphel/Makefile so it looks like this&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_common.o&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgajtag.o&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgaclocks.o&lt;br /&gt;
obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_sdram.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += fpga_io.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += fpgactrl.o&lt;br /&gt;
	&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cc3x3.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cxi2c.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cxsdram.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += cxdma.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += hist.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += ext353.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += circbuf.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += exif353.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL353)        += stream.o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL_MT9X001)   += mt9x001.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL347)        += ???.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL_KAI11002)  += ???.o&lt;br /&gt;
#obj-$(CONFIG_ETRAX_ELPHEL_KAI16000)  += ???.o&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver compilation ==&lt;br /&gt;
&lt;br /&gt;
== Testing DMA ==&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Firmware_upgrade&amp;diff=2477</id>
		<title>Firmware upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Firmware_upgrade&amp;diff=2477"/>
		<updated>2008-07-11T21:02:30Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: corrected mac address: it had Oes (the vowel) instead of 0 (zeroes)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Firmware Installation and Upgrade ==&lt;br /&gt;
=== Background ===&lt;br /&gt;
We are now reworking the process of the initial installation and upgrade of the software in Elphel cameras (starting with 353/363).&lt;br /&gt;
So far it was a modified version of [http://www.axis.com Axis communications] e100boot and fsboot, that after receiving the compressed&lt;br /&gt;
flash image from the host over the network was erasing and writing the flash chip.&lt;br /&gt;
&lt;br /&gt;
It was OK with the NOR flash, but even with it I had to rewrite the flashing software as Axis supported only AMD type of NOR flash, but not Intel/Micron we used in the camera. With the NAND flash and ETRAX FS things got more complicated - handling NAND flash and bad block needs more code. In 2006 I had to port MTD drivers to the bootloader myself because Axis SDK that supports NAND flash was not ready then. In spring 2007 that new SDK (2.10) was released and so we need to merge it with our hardware-specific modifications once again. And this merging among other things includes the bootloader too.&lt;br /&gt;
=== Problems with the old bootloader ===&lt;br /&gt;
* Need to overhaul the bootloader with each SDK change&lt;br /&gt;
* duplicate port of MTD drivers and mtd-utils in the bootloader - possible mismatch with those running with the booted system&lt;br /&gt;
* problems with handling of the flash larger than RAM - normally bootloader downloads the image to RAM first, then writes it to flash&lt;br /&gt;
=== New software installation process ===&lt;br /&gt;
All the time I was using Axis ETRAX and software it had &amp;quot;ktest&amp;quot; - ability to boot system from the network bypassing flash. And most of the time that code was broken - sometimes it did not work in SDK, sometimes - we broke it ourselves. Now we fixed it and the system boots without doing anything with flash.&lt;br /&gt;
&lt;br /&gt;
How does it help? &lt;br /&gt;
&lt;br /&gt;
We have running a &amp;quot;normal&amp;quot; system running, with the current mtd drivers and mtd-utils - same ones that will be used in the camera during normal operation. The actual installation of the flash images is implemented using MTD drivers and mdt-utils that know how to skip the bad blocks in the NAND flash. The data to write to flash is received by the camera from the NFS server using regular network protocols that handle lost packets much better than spartan network implementation in the bootloader, so multiple cameras can be programmed at the same time without interfering with each other.&lt;br /&gt;
&lt;br /&gt;
After booting from the network (no flash used) cameras will receive IP addresses from the DHCP server using either earlier assigned MAC address (written in bootblock of the flash) or, if it is a brand new camera, temporary use random MAC address. Next step - running installation script from the NFS server that, among others will assign permanent serial number/MAC address to each new camera. Different scripts can be prepared for different tasks - upgrading a single camera, production programming of the multiple cameras, programming of the specialized multi-camera systems.&lt;br /&gt;
&lt;br /&gt;
Such installation process can use either complete images for each JFFS2 partition or it can just install uncompressed files.&lt;br /&gt;
&lt;br /&gt;
Similar procedure can be used to read flash from the camera for postmortem analysis of the data if camera does not boot for some reason.&lt;br /&gt;
&lt;br /&gt;
=== TODO ===&lt;br /&gt;
&lt;br /&gt;
1. It would be nice to make it possible for the camera to boot same kernel + root file system from flash, not only from the network. That will simplify remote firmware upgrade (that does not require pressing the button on the camera)&lt;br /&gt;
&lt;br /&gt;
2. Pass parameter string to the kernel through the network bootloader (i.e. serial number fro the new camera) and during reboot (too instruct flash bootloader not to mount flash but use RAM instead)&lt;br /&gt;
&lt;br /&gt;
--[[User:Andrey.filippov|Andrey.filippov]] 12:07, 19 June 2007 (CDT)&lt;br /&gt;
&lt;br /&gt;
Most of the TODO is already done, below is the [http://elphel.cvs.sourceforge.net/*checkout*/elphel/elphel353-2.10/README.flash?revision=1.3 README.flash] included with the current software:&lt;br /&gt;
&lt;br /&gt;
=== How to install from CVS. ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /nfs/elphel353-2.10/&lt;br /&gt;
chmod 777 -R /nfs/elphel353-2.10/&lt;br /&gt;
cvs -d:pserver:anonymous@elphel.cvs.sourceforge.net:/cvsroot/elphel login &lt;br /&gt;
cvs -z3 -d:pserver:anonymous@elphel.cvs.sourceforge.net:/cvsroot/elphel co -P elphel353-2.10&lt;br /&gt;
./install_elphel_from_cvs &lt;br /&gt;
cp -R ../353/* .&lt;br /&gt;
./install_elphel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install NFS server on your computer ===&lt;br /&gt;
&lt;br /&gt;
To install NFS server on your Debian/Ubuntu GNU/Linux execute:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install nfs-kernel-server nfs-common portmap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When configuring portmap do ***not*** bind loopback. &lt;br /&gt;
&lt;br /&gt;
Now configure exported file systems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vi /etc/exports&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and put this text inside:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/nfs/elphel353-2.10  192.168.0.15/24(rw,no_root_squash)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
last stage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
sudo exportfs -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your NFS server should be up and running.&lt;br /&gt;
&lt;br /&gt;
=== How to reflash (update firmware) in the camera. ===&lt;br /&gt;
&lt;br /&gt;
==== I. Reflash from camera: ====&lt;br /&gt;
&lt;br /&gt;
This work only if you upgrade from 7.1.*, if you are upgrading from 7.0.* you need to use method II.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 1. login with telnet to camera with login &amp;quot;root&amp;quot; and password &amp;quot;pass&amp;quot;&lt;br /&gt;
 2. edit file /etc/reflash.conf, if needed, and change NFS server address and directory, where placed firmware&lt;br /&gt;
 3. type &amp;quot;reflash&amp;quot;&lt;br /&gt;
 4. check flash log file on NFS server in directory with firmware, log file name is flash.log.MAC-ADDRESS_of_camera&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== II. Reflash from computer with ktest: ====&lt;br /&gt;
&lt;br /&gt;
Your current working directory should be the CVS tree. (normally it should be ~/elphel353-2.10&lt;br /&gt;
&lt;br /&gt;
Do not forget to change the mac address, the camera&#039;s IP and the IP of your NFS server (your computer)&lt;br /&gt;
&lt;br /&gt;
If you are performing an upgrade from 7.0.* you should use &amp;quot;cmd=all&amp;quot; in other case use &amp;quot;cmd=update&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlike the previous method for this one you need to press the green button on the back of the camera while booting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd elphel353/&lt;br /&gt;
 sudo su&lt;br /&gt;
. ./init_env&lt;br /&gt;
./ktest -d eth1 mac=000E64000000 ip=192.168.0.9 nfs=192.168.0.15:/nfs/elphel353-2.10 cmd=update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ktest parameters &amp;amp; options:&lt;br /&gt;
&lt;br /&gt;
* [-d ethX] - network interface to camera, by default, eth0&lt;br /&gt;
* mac=OOOE64000000 - MAC address for camera; if SERNO in camera boot block not present, this MAC address will be written in bootblock&lt;br /&gt;
* ip=xxx.xxx.xxx.xxx - ip for camera (by default, 192.168.0.9)&lt;br /&gt;
* nfs=192.168.0.15:/nfs/elphel353-2.10 - NFS server, where placed firmware.&lt;br /&gt;
* cmd=boot|update|all&lt;br /&gt;
&lt;br /&gt;
** boot - just boot camera, don&#039;t touch flash memory, by default&lt;br /&gt;
** update - update firmware (results as in II)&lt;br /&gt;
** all - rewrite all partitions on camera (be careful with this option)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the camera started from ktest, it boot, mount NFS share and write the firmware to the flash.&lt;br /&gt;
&lt;br /&gt;
If the firmware was flashed successfully you should see a log file in /nfs/elphel353-2.10 finishing with &amp;quot;done&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Only after this you can unplug the Ethernet cable for 10 seconds and reconnect the camera. (those 10 seconds are due to a bug that will be corrected in near future)&lt;br /&gt;
&lt;br /&gt;
==== Troubleshouting ====&lt;br /&gt;
&lt;br /&gt;
If you see only &amp;quot;Starting boot...&amp;quot; and nothing after it mean what you forgot the ktest&#039;s &amp;quot;-d&amp;quot; parameter or did not press the green button on the camera when power up.&lt;br /&gt;
&lt;br /&gt;
If you see something after &amp;quot;Starting boot...&amp;quot;, but do not see any log files in your NFS share after one minute it probably mean what the camera was not able to mount the NFS share. The camera will remain booted from the network and accessible trouth telnet. You may telnet to the camera and manually try to execute one by one commands from /bin/reflash script. (just to see what&#039;s wrong)&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=RawImage&amp;diff=4306</id>
		<title>RawImage</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=RawImage&amp;diff=4306"/>
		<updated>2008-06-12T20:20:17Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The raw sensor data can be obtained on the 353 camera by reading from the /dev/ccam_img file.&lt;br /&gt;
&lt;br /&gt;
However, I am having some problems doing this:&lt;br /&gt;
  #. Trying to read from /dev/ccam_img right after booting the camera causes the reading process (I&#039;ve tried dd and cat) to take all the CPU and block. Only after opening the web page of the camera (192.168.0.9) the proccess finishes (with error :( read error: invalid argument)&lt;br /&gt;
&lt;br /&gt;
  #. Once I get the raw sensor data and convert it to an image (a PNG), I get the expected picture... sometimes. See URL for the results&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=RawImage&amp;diff=4305</id>
		<title>RawImage</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=RawImage&amp;diff=4305"/>
		<updated>2008-06-12T19:37:01Z</updated>

		<summary type="html">&lt;p&gt;JavierRojas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The raw sensor data can be obtained on the 353 camera by reading from the /dev/ccam_img file.&lt;br /&gt;
&lt;br /&gt;
However, I am having&lt;/div&gt;</summary>
		<author><name>JavierRojas</name></author>
	</entry>
</feed>