<?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=Andrey.filippov</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=Andrey.filippov"/>
	<link rel="alternate" type="text/html" href="https://wiki.elphel.com/wiki/Special:Contributions/Andrey.filippov"/>
	<updated>2026-08-15T02:28:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=19595</id>
		<title>Elphel camera parts 0393-18</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=19595"/>
		<updated>2026-08-12T18:05:46Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-18-80 - Camera Pod Push Bracket */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
== 0393-18     - parts external other ==&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-01 - Vertical arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-02 - Horizontal arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-30 - tripod mount nut, 1/4-20 thread ===&lt;br /&gt;
{{Cad4a|0393-18-30}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-31 - tripod mount plate ===&lt;br /&gt;
{{Cad4a|0393-18-31}}&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-31A - tripod mount plate, Rev &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-18-31A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-50 - IMU enclosure ===&lt;br /&gt;
{{Cad4a|0393-18-50}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-51 - Camera top with GPS ===&lt;br /&gt;
{{Cad4a|0393-18-51}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-52 - Camera top without GPS ===&lt;br /&gt;
{{Cad4a|0393-18-52}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - GPS cap ===&lt;br /&gt;
{{Cad4a|0393-18-53}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - Fisheye lens shade ===&lt;br /&gt;
{{Cad4a|0393-18-54}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67 - 103993 PCBA Body ===&lt;br /&gt;
{{Cad4a|0393-18-67}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67A - 103993 PCBA Body, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-67a}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-695 - Adjustment Mount Cross Drilled ===&lt;br /&gt;
{{Cad4a|0393-18-69}}&lt;br /&gt;
---- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69A Adjustment Mount Cross Drilled, rev A ===&lt;br /&gt;
{{Cad4a|0393-18-69A}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69B Adjustment Mount Cross Drilled, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-69B}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70 - Adjustable Mount Base for Back Access ===&lt;br /&gt;
{{Cad4a|0393-18-70}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70B - Adjustable Mount Base for Back Access, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-70B}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70C - Adjustable Mount Base for Back Access, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-70C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-71 - Adjustment Mount Cross Threaded ===&lt;br /&gt;
{{Cad4a|0393-18-71}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-72 - Adjustable Mount Base for Helmet ===&lt;br /&gt;
{{Cad4a|0393-18-72}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-73 - Adjustment Spherical Mount Inner ===&lt;br /&gt;
{{Cad4a|0393-18-73}}&lt;br /&gt;
------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73A - Adjustment Spherical Mount Inner, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-73A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73C - Adjustment Spherical Mount Inner, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-73C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-80 - Camera Pod Push Bracket ===&lt;br /&gt;
{{Cad4a|0393-18-80}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-81 - Camera Pod Push Centerpiece ===&lt;br /&gt;
{{Cad4a|0393-18-81}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-82 - Camera Pod Pull Bracket Front ===&lt;br /&gt;
{{Cad4a|0393-18-82}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-83 - Camera Pod Pull Bracket Rear ===&lt;br /&gt;
{{Cad4a|0393-18-83}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-84 - Guide Tube ===&lt;br /&gt;
{{Cad4a|0393-18-84}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-85 - Push Rod ===&lt;br /&gt;
{{Cad4a|0393-18-85}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=19594</id>
		<title>Elphel camera parts 0393-18</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=19594"/>
		<updated>2026-08-12T18:01:32Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-18-73C - Adjustment Spherical Mount Inner, Rev C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
== 0393-18     - parts external other ==&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-01 - Vertical arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-02 - Horizontal arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-30 - tripod mount nut, 1/4-20 thread ===&lt;br /&gt;
{{Cad4a|0393-18-30}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-31 - tripod mount plate ===&lt;br /&gt;
{{Cad4a|0393-18-31}}&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-31A - tripod mount plate, Rev &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-18-31A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-50 - IMU enclosure ===&lt;br /&gt;
{{Cad4a|0393-18-50}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-51 - Camera top with GPS ===&lt;br /&gt;
{{Cad4a|0393-18-51}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-52 - Camera top without GPS ===&lt;br /&gt;
{{Cad4a|0393-18-52}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - GPS cap ===&lt;br /&gt;
{{Cad4a|0393-18-53}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - Fisheye lens shade ===&lt;br /&gt;
{{Cad4a|0393-18-54}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67 - 103993 PCBA Body ===&lt;br /&gt;
{{Cad4a|0393-18-67}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67A - 103993 PCBA Body, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-67a}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-695 - Adjustment Mount Cross Drilled ===&lt;br /&gt;
{{Cad4a|0393-18-69}}&lt;br /&gt;
---- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69A Adjustment Mount Cross Drilled, rev A ===&lt;br /&gt;
{{Cad4a|0393-18-69A}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69B Adjustment Mount Cross Drilled, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-69B}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70 - Adjustable Mount Base for Back Access ===&lt;br /&gt;
{{Cad4a|0393-18-70}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70B - Adjustable Mount Base for Back Access, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-70B}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70C - Adjustable Mount Base for Back Access, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-70C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-71 - Adjustment Mount Cross Threaded ===&lt;br /&gt;
{{Cad4a|0393-18-71}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-72 - Adjustable Mount Base for Helmet ===&lt;br /&gt;
{{Cad4a|0393-18-72}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-73 - Adjustment Spherical Mount Inner ===&lt;br /&gt;
{{Cad4a|0393-18-73}}&lt;br /&gt;
------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73A - Adjustment Spherical Mount Inner, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-73A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73C - Adjustment Spherical Mount Inner, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-73C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-80 - Camera Pod Push Bracket ===&lt;br /&gt;
{{Cad4a|0393-18-80}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-13&amp;diff=12804</id>
		<title>Elphel camera parts 0393-13</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-13&amp;diff=12804"/>
		<updated>2025-10-01T00:21:40Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* UAS Mount */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
=== 0393-13 - Camera back panels ===&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-01 - Back panel for NC393, connector openings for 10393A and 10389B connectors ====&lt;br /&gt;
{{Cad4a|0393-13-01}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-01A - Back panel for NC393, Rev. &amp;quot;A&amp;quot;, connector openings for 10393A and 10389B connectors ====&lt;br /&gt;
{{Cad4a|0393-13-01a}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-02 - Back panel for NC393, connector openings for 10393 board only ====&lt;br /&gt;
{{Cad4a|0393-13-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-03 - Camera back connection plate ====&lt;br /&gt;
{{Cad4a|0393-13-03}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-14 - Half-plate for SFE mount ====&lt;br /&gt;
{{Cad4a|0393-13-14}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-14A - Half-plate for SFE mount, Rev A ====&lt;br /&gt;
{{Cad4a|0393-13-14A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-15 - Sensor Assembly Cover ====&lt;br /&gt;
{{Cad4a|0393-13-15}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-15B - Sensor Assembly Cover, rev B ====&lt;br /&gt;
{{Cad4a|0393-13-15B}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-15C - Sensor Assembly Cover, rev CB ====&lt;br /&gt;
{{Cad4a|0393-13-15C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-16 - Flex Cables Cover, Side ====&lt;br /&gt;
{{Cad4a|0393-13-16}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-17 - Flex Cables Cover, Bottom ====&lt;br /&gt;
{{Cad4a|0393-13-17}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-18 - Flex Cable Cover Spacer, Corner ====&lt;br /&gt;
{{Cad4a|0393-13-18}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-19 - Flex Cables Cover Spacer, Middle ====&lt;br /&gt;
{{Cad4a|0393-13-19}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-20 - Back Mount Plate ====&lt;br /&gt;
{{Cad4a|0393-13-20}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-21 - Camera Mount Plate, Upper ====&lt;br /&gt;
{{Cad4a|0393-13-21}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-22 - Camera Support ====&lt;br /&gt;
{{Cad4a|0393-13-22}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-23 - Camera Mount Plate, Bottom ====&lt;br /&gt;
{{Cad4a|0393-13-23}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-25 - UAS Mount Bracket, Welded ====&lt;br /&gt;
{{Cad4a|0393-13-25}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-26 - UAS Mount Bracket, Beam Long, Camera Side ====&lt;br /&gt;
{{Cad4a|0393-13-26}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-27 - UAS Mount Bracket, Beam Left ====&lt;br /&gt;
{{Cad4a|0393-13-27}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-28 - UAS Mount Bracket, Beam Right ====&lt;br /&gt;
{{Cad4a|0393-13-28}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-29 - UAS Mount Bracket, Beam Vertical ====&lt;br /&gt;
{{Cad4a|0393-13-29}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-30 - UAS Mount Bracket, Beam Top ====&lt;br /&gt;
{{Cad4a|0393-13-30}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13115</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13115"/>
		<updated>2025-07-28T15:52:05Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead:&lt;br /&gt;
 git clone -b warrior git@git.elphel.com:Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
We never use non-developer mode ourselves, so it may malfunction. Be careful not to forget &amp;quot;-b warrior&amp;quot;, otherwise&lt;br /&gt;
you will get &lt;br /&gt;
 SyntaxError: invalid syntax&lt;br /&gt;
when running setup.py - main branch is broken. You may use &amp;quot;git checkout -b warrior&amp;quot; then.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7 python-numpy&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Using local mirror to accelerate multiple builds/testing&amp;lt;/font&amp;gt;==&lt;br /&gt;
You may use the files in poky/build/downloads directory as a local mirror (it should be copied outside of the build tree) by editing local.conf:&lt;br /&gt;
 #if mirrors are local (file:///), downloads will contain symlinks, not copies&lt;br /&gt;
 #SOURCE_MIRROR_URL = &amp;quot;file:///home/elphel/git/elphel393_mirror/&amp;quot;&lt;br /&gt;
 SOURCE_MIRROR_URL = &amp;quot;https://mirror.elphel.com/elphel393_mirror/&amp;quot;&lt;br /&gt;
to &lt;br /&gt;
 #if mirrors are local (file:///), downloads will contain symlinks, not copies&lt;br /&gt;
 SOURCE_MIRROR_URL = &amp;quot;file:///home/elphel/git/elphel393_mirror/&amp;quot;&lt;br /&gt;
 #SOURCE_MIRROR_URL = &amp;quot;https://mirror.elphel.com/elphel393_mirror/&amp;quot;&lt;br /&gt;
and replacing  file:/// link to your local mirror location (a copy of poky/build/downloads/). In that case the new build downloads folder will contain symlinks to the local mirror, not the copies.&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13114</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13114"/>
		<updated>2025-07-25T20:28:34Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git . We never use non-developer mode ourselves, so it may malfunction. Be careful not to forget &amp;quot;-b warrior&amp;quot;, otherwise&lt;br /&gt;
you will get &lt;br /&gt;
 SyntaxError: invalid syntax&lt;br /&gt;
when running setup.py - main branch is broken. You may use &amp;quot;git checkout -b warrior&amp;quot; then.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7 python-numpy&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Using local mirror to accelerate multiple builds/testing&amp;lt;/font&amp;gt;==&lt;br /&gt;
You may use the files in poky/build/downloads directory as a local mirror (it should be copied outside of the build tree) by editing local.conf:&lt;br /&gt;
 #if mirrors are local (file:///), downloads will contain symlinks, not copies&lt;br /&gt;
 #SOURCE_MIRROR_URL = &amp;quot;file:///home/elphel/git/elphel393_mirror/&amp;quot;&lt;br /&gt;
 SOURCE_MIRROR_URL = &amp;quot;https://mirror.elphel.com/elphel393_mirror/&amp;quot;&lt;br /&gt;
to &lt;br /&gt;
 #if mirrors are local (file:///), downloads will contain symlinks, not copies&lt;br /&gt;
 SOURCE_MIRROR_URL = &amp;quot;file:///home/elphel/git/elphel393_mirror/&amp;quot;&lt;br /&gt;
 #SOURCE_MIRROR_URL = &amp;quot;https://mirror.elphel.com/elphel393_mirror/&amp;quot;&lt;br /&gt;
and replacing  file:/// link to your local mirror location (a copy of poky/build/downloads/). In that case the new build downloads folder will contain symlinks to the local mirror, not the copies.&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13113</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13113"/>
		<updated>2025-07-25T20:18:55Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git . We never use non-developer mode ourselves, so it may malfunction. Be careful not to forget &amp;quot;-b warrior&amp;quot;, otherwise&lt;br /&gt;
you will get &lt;br /&gt;
 SyntaxError: invalid syntax&lt;br /&gt;
when running setup.py - main branch is broken. You may use &amp;quot;git checkout -b warrior&amp;quot; then.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7 python-numpy&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13112</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13112"/>
		<updated>2025-07-25T20:13:03Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git . We never use non-developer mode ourselves, so it may malfunction.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7 python-numpy&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=103891&amp;diff=13974</id>
		<title>103891</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=103891&amp;diff=13974"/>
		<updated>2023-07-09T20:02:00Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: Added A-D description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;103891 adapter board routes external sync I/O from the  [[10389| 10389 interface board]] to the back panel 2.5mm barrel connector and provide 4-pic connector socket for 3.3V/5.0V fan. It is used in [[10393|Elphel 393 series cameras]]&lt;br /&gt;
&lt;br /&gt;
[[File:103891 top.jpeg|thumb|250px|Fig.1 top]]&lt;br /&gt;
[[File:103891 bot.jpeg|thumb|250px|Fig.2 bot]]&lt;br /&gt;
&lt;br /&gt;
==Mechanical properties==&lt;br /&gt;
* Dimensions: 58 x 38 x 9 mm (all connectors installed)&lt;br /&gt;
* Weight: 3.0 g&lt;br /&gt;
* Mechanical drawings and CAD files for the 103891 board: [[Elphel_camera_parts_0393-00#0393-00-23A_-_103891_rev_A_external_synchronization_and_fan_PCB_assembly|link]]&lt;br /&gt;
&lt;br /&gt;
{{Cad4a|0393-00-23A}}&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [[10389|10389 board]]: interface board&lt;br /&gt;
* [[Trigger_393]]: triggering NC393 camera&lt;br /&gt;
* J2 connector: [http://www.digikey.com/product-detail/en/cui-inc/SJ1-42534-SMT-TR/CP1-42534SJTR-ND/659908 SJ1-42534-SMT-TR] ([http://www.cui.com/product/resource/sj1-4253x-smt-series.pdf datasheet])&lt;br /&gt;
* Sync cable example: [http://www.digikey.com/product-detail/en/tensility-international-corp/10-00331/839-1029-ND/2350237 839-1029-ND]&lt;br /&gt;
&lt;br /&gt;
Connector provides high-current (up to 0.5A) dc-coupled 5V output and optoisolated I/O. When optoisolated pair is used used as an input (common use), external signal is applied between XSYNC1 (+) and XSYNC2(-). When the pair is used as an output (less common), external 5V power source should be connected in series with the receiver and 103891, so that &amp;quot;+&amp;quot; will be applied to XSYNC2, and &amp;quot;-&amp;quot; - to XSYNC1 (opposite to the input mode). Details are available in the circuit diagram of the [[10389]] board.&lt;br /&gt;
&lt;br /&gt;
Output synchronization can be just a pulse or carry additional timestamp data when used to synchronize multiple NC393 cameras. See [[Trigger_393]] for the settings. Pin A is the tip, B - next, then C and D is the closest to the connector housing.&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
|+Connector pinout&lt;br /&gt;
|Name&lt;br /&gt;
|Pin&lt;br /&gt;
|Cable wire color&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|XSYNC1&lt;br /&gt;
|1 (D)&lt;br /&gt;
|black&lt;br /&gt;
|optoisolated, &amp;quot;+&amp;quot; input with respect to XSYNC2&lt;br /&gt;
|-&lt;br /&gt;
|SYNC_DRV&lt;br /&gt;
|2 (A)&lt;br /&gt;
|red&lt;br /&gt;
|Sync output (DC-coupled), +5V pulses with respect to GND&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|3 (B)&lt;br /&gt;
|white&lt;br /&gt;
|Output reference, connected to the camera system ground&lt;br /&gt;
|-&lt;br /&gt;
|XSYNC2&lt;br /&gt;
|4 (C)&lt;br /&gt;
|green&lt;br /&gt;
|optoisolated, &amp;quot;-&amp;quot; input with respect to XSYNC1&lt;br /&gt;
|}&lt;br /&gt;
* [[Trigger_393#Internal_periodic_trigger_.284_fps.2C_from_fpga_generator.29_.2B_output_the_signal_to_external_port|How to output trigger signal to external port]]&lt;br /&gt;
* [[Media:103891a.pdf|103891 Rev &amp;quot;A&amp;quot; Circuit Diagram, Parts List, PCB layout]]&lt;br /&gt;
* [[Media:103891a gerber.tar.gz|103891 Rev &amp;quot;A&amp;quot; Gerber files]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Boards 393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=103891&amp;diff=13973</id>
		<title>103891</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=103891&amp;diff=13973"/>
		<updated>2023-07-09T20:00:35Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: Added A-B-C-D&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;103891 adapter board routes external sync I/O from the  [[10389| 10389 interface board]] to the back panel 2.5mm barrel connector and provide 4-pic connector socket for 3.3V/5.0V fan. It is used in [[10393|Elphel 393 series cameras]]&lt;br /&gt;
&lt;br /&gt;
[[File:103891 top.jpeg|thumb|250px|Fig.1 top]]&lt;br /&gt;
[[File:103891 bot.jpeg|thumb|250px|Fig.2 bot]]&lt;br /&gt;
&lt;br /&gt;
==Mechanical properties==&lt;br /&gt;
* Dimensions: 58 x 38 x 9 mm (all connectors installed)&lt;br /&gt;
* Weight: 3.0 g&lt;br /&gt;
* Mechanical drawings and CAD files for the 103891 board: [[Elphel_camera_parts_0393-00#0393-00-23A_-_103891_rev_A_external_synchronization_and_fan_PCB_assembly|link]]&lt;br /&gt;
&lt;br /&gt;
{{Cad4a|0393-00-23A}}&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [[10389|10389 board]]: interface board&lt;br /&gt;
* [[Trigger_393]]: triggering NC393 camera&lt;br /&gt;
* J2 connector: [http://www.digikey.com/product-detail/en/cui-inc/SJ1-42534-SMT-TR/CP1-42534SJTR-ND/659908 SJ1-42534-SMT-TR] ([http://www.cui.com/product/resource/sj1-4253x-smt-series.pdf datasheet])&lt;br /&gt;
* Sync cable example: [http://www.digikey.com/product-detail/en/tensility-international-corp/10-00331/839-1029-ND/2350237 839-1029-ND]&lt;br /&gt;
&lt;br /&gt;
Connector provides high-current (up to 0.5A) dc-coupled 5V output and optoisolated I/O. When optoisolated pair is used used as an input (common use), external signal is applied between XSYNC1 (+) and XSYNC2(-). When the pair is used as an output (less common), external 5V power source should be connected in series with the receiver and 103891, so that &amp;quot;+&amp;quot; will be applied to XSYNC2, and &amp;quot;-&amp;quot; - to XSYNC1 (opposite to the input mode). Details are available in the circuit diagram of the [[10389]] board.&lt;br /&gt;
&lt;br /&gt;
Output synchronization can be just a pulse or carry additional timestamp data when used to synchronize multiple NC393 cameras. See [[Trigger_393]] for the settings.&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
|+Connector pinout&lt;br /&gt;
|Name&lt;br /&gt;
|Pin&lt;br /&gt;
|Cable wire color&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|XSYNC1&lt;br /&gt;
|1 (D)&lt;br /&gt;
|black&lt;br /&gt;
|optoisolated, &amp;quot;+&amp;quot; input with respect to XSYNC2&lt;br /&gt;
|-&lt;br /&gt;
|SYNC_DRV&lt;br /&gt;
|2 (A)&lt;br /&gt;
|red&lt;br /&gt;
|Sync output (DC-coupled), +5V pulses with respect to GND&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|3 (B)&lt;br /&gt;
|white&lt;br /&gt;
|Output reference, connected to the camera system ground&lt;br /&gt;
|-&lt;br /&gt;
|XSYNC2&lt;br /&gt;
|4 (C)&lt;br /&gt;
|green&lt;br /&gt;
|optoisolated, &amp;quot;-&amp;quot; input with respect to XSYNC1&lt;br /&gt;
|}&lt;br /&gt;
* [[Trigger_393#Internal_periodic_trigger_.284_fps.2C_from_fpga_generator.29_.2B_output_the_signal_to_external_port|How to output trigger signal to external port]]&lt;br /&gt;
* [[Media:103891a.pdf|103891 Rev &amp;quot;A&amp;quot; Circuit Diagram, Parts List, PCB layout]]&lt;br /&gt;
* [[Media:103891a gerber.tar.gz|103891 Rev &amp;quot;A&amp;quot; Gerber files]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Boards 393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13111</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13111"/>
		<updated>2022-06-01T19:22:15Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy libssl-dev&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7 python-numpy&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13110</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13110"/>
		<updated>2022-06-01T17:18:29Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7 python-numpy&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13109</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13109"/>
		<updated>2022-06-01T16:59:57Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk texinfo zlib1g-dev python3-numpy&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Adjusting_sensor_clock_phase&amp;diff=2937</id>
		<title>Adjusting sensor clock phase</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Adjusting_sensor_clock_phase&amp;diff=2937"/>
		<updated>2022-05-01T22:06:14Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Software interface for adjusting the sensor clock phase (firmware 8.0.x) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Elphel cameras architecture - separate computer and sensor boards ===&lt;br /&gt;
Elphel cameras are designed so they can support multiple different sensors, including those that were not available when the particular camera model was first released. That is possible, because the camera functionality is split into the sensor-independent computer (see [[10353]]) and the sensor front end. This board is very simple for the CMOS images sensors, like [[10338]] - basically it includes just the image sensor itself, connector for the cable to the camera main board and the power conditioning circuitry. In other cameras (like Model 363) the high resolution CCD-based sensor front end is much more complex ([[10347]]+[[10342]]), but they all interface the main board through the 30-conductor flex cable that on the [[10353]] side is connected directly to the FPGA pins (all but power supply/ ground pins). That makes the interface universal, as functions of the FPGA pins can be changed with just a new code, no hardware changes are needed.&lt;br /&gt;
&lt;br /&gt;
=== Inter-board cable ===&lt;br /&gt;
The inter-board connection is made of the flex cables (that are available in different length) provide freedom in mutual orientation of the main boards and the sensor front end, allowing the smaller sensor board to get into the tight spaces. But that 30-conductor cable has not enough conductors to make nice transmission lines - there is not enough of the return wires, number of ground+power lines is much less than the number of signal ones, but that is not a big issue for most camera applications where the cable is really short - less than 2 inches (50mm) long, but still the signals (in 5MPix sensor the output 12-bit data has a 96 mpix/sec, the clock lines run at 96MHz both directions) are used with reduced drive strength to reduce the EMI. Fortunately both FPGA and the sensor allow control over the drive strength. With the low output currents on the pins, it takes some time to recharge the parasitic capacitance of the cable wires, and the signals look far from &amp;quot;digital&amp;quot; rectangular shape - it takes most of the pixel period to just transition from &amp;quot;0&amp;quot; to &amp;quot;1&amp;quot; or back from &amp;quot;1&amp;quot; to &amp;quot;0&amp;quot;, so the data on the other end should be sampled at a precise moment during each pixel period.&lt;br /&gt;
&lt;br /&gt;
=== Phase shift of the sensor clock input ===&lt;br /&gt;
In the camera it is achieved by adding controlled phase shift between the clock that synchronizes operation of the sensor-related portion of the FPGA and the clock signal that is sent to the sensor. The sensor output signals have certain delay from that clock (unfortunately in 5MPix sensor that delay is very different for the pixel data and sync signals), so by varying the phase of a clock to sensor it is possible to adjust phase of the sensor data with respect to the FPGA pixel clock. The sensor pixel output clock is not used - it is more convenient when the FPGA clock does not depend on the state of the sensor. But that sensor output clock is connected to the FPGA and is sampled at different phases of the FPGA clock - that data can (and will) be used for the automatic phase adjustment, but current software does not support that yet.&lt;br /&gt;
&lt;br /&gt;
=== Effect of different cable lengths ===&lt;br /&gt;
For the standard camera configuration the phase shift is programmed as a predefined constant, but that does not work when the cable length differs from the original one. If you try the camera with different cable length you may see image that looks like monochrome or purple - if the pixels are sampled at wrong time, red and green (also green and blue) pixels can swap, you may see horizontal lines when the sample moment is close to the pixel-to-pixel transition - in some lines pixels were sampled correctly, in some - colors are swapped (and remember - each pixel is represented by individual 12 bit lines, that can have slightly different delays to the clock). For some reasonable length cables (tested with 8&amp;quot; / 200mm) it is possible to re-adjust the phase shift, sample pixels in the middle of the pixel window and so restore the nice images.&lt;br /&gt;
&lt;br /&gt;
=== On-chip DCM (Digital Clock Management) for sensor clock phase adjustment ===&lt;br /&gt;
Sensor phase control in the camera is achieved with one of the FPGA on-chip DCM (digital clock management) blocks by combining the fine phase adjustment with 4-to-1 multiplexor switching between on of the four outputs shifted by 90 degrees. The fine shift is not precisely known, for these chips it is specified in the 20-40 ps/step, while guaranteed number of phase shift steps (for 96MHz clock) is +/- 140 (so more than +/- 90 degrees in the worst case.&lt;br /&gt;
&lt;br /&gt;
=== Software interface for adjusting the sensor clock phase (firmware 8.0.x) ===&lt;br /&gt;
Open the following URL in the browser (replace 192.168.0.9 if camera has different IP):&lt;br /&gt;
&lt;br /&gt;
 [http://192.168.0.9/parsedit.php?embed=0.25&amp;amp;title=Parameters+for+groups:+phase&amp;amp;SENSOR_PHASE&amp;amp;SENSOR_REGS7&amp;amp;SENSOR_REGS7__0310&amp;amp;SENSOR_REGS7__0307&amp;amp;WOI_HEIGHT&amp;amp;WB_EN&amp;amp;THIS_FRAME http://192.168.0.9/parsedit.php?embed=0.25&amp;amp;title=Parameters+for+groups:+phase&amp;amp;SENSOR_PHASE&amp;amp;SENSOR_REGS7&amp;amp;SENSOR_REGS7__0310&amp;amp;SENSOR_REGS7__0307&amp;amp;WOI_HEIGHT&amp;amp;WB_EN&amp;amp;THIS_FRAME]&lt;br /&gt;
&lt;br /&gt;
That page combines several controls:&lt;br /&gt;
*SENSOR_PHASE - phase shift between the FPGA pixel clock and the sensor pixel clock. Normal adjustment range is 0xff80 (-64) to 0x0080 (+64)&lt;br /&gt;
*SENSOR_REGS7 - sensor register #7 that, among others control drive strengths of the sensor output. It is safer to modify selected bit fields of this register:&lt;br /&gt;
*SENSOR_REGS7__0307 (bits   9:7) is the drive strength of clock output (not used in the current setup)&lt;br /&gt;
*SENSOR_REGS7__0310 (bits 12:10) is the drive strength of all other outputs - pixel data, horizontal and vertical sync&lt;br /&gt;
*WOI_HEIGHT - window if interest height is not related to sensor phase adjustment, but it can be used to restore system (sensor to FPGA) synchronization after it is lost when adjusting sensor phase (that involves restarting the sensor). Just reduce/increase it by 0x10 and press &amp;quot;refresh&amp;quot; button - that should restore the &amp;quot;broken&amp;quot; image caused by losing system sync.&lt;br /&gt;
&lt;br /&gt;
When you change phase and press &amp;quot;apply&amp;quot; the image would not reflect the new settings (changing phase requires complete sensor reset and the regular image acquisition sequence is aborted), so the following sequence is recommended:&lt;br /&gt;
#modify SENSOR_PHASE value&lt;br /&gt;
#press &amp;quot;apply&amp;quot;&lt;br /&gt;
#change WOI_HEIGHT (alternate between 0x790 and 0x780 for the full frame)&lt;br /&gt;
#press &amp;quot;apply&amp;quot;&lt;br /&gt;
#monitor image quality - look for horizontal color stripes &lt;br /&gt;
#repeat with different phase value&lt;br /&gt;
&lt;br /&gt;
If at some point camera will stop responding to http requests (actually requests to PHP scripts) you may restart PHP by issuing&lt;br /&gt;
 killall lighttpd&lt;br /&gt;
from the telnet session - it kills the web server that will be restarted together with the instances of PHP.&lt;br /&gt;
&lt;br /&gt;
The phase default settings in the camera are optimized for a short cable (30 to 50mm), for longer cable it may need adjustment. You may also need to replace /etc/x353.bit file with the one that is generated with higher drive strength of the clock line from the FPGA to the sensor (that will also cause increase of the radiated EMI from the camera)&lt;br /&gt;
&lt;br /&gt;
=== Old instructions - valid for 7.1.x firmware ===&lt;br /&gt;
The phase adjustment value passed to the driver is split into two parts - lower 16 bits represent (signed short) fine shift in steps (20..40ps), next 2 bits - 90-degrees additional shift, higher bits are &amp;quot;don&#039;t care&amp;quot;. In default configuration bit 18 (0x40000) is set, because only non-zero values change the phase, so 0x40000 means &amp;quot;set 90-degree phase to 0, fine phase - to zero&amp;quot;, while 0x0 means &amp;quot;no phase changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The phase control parameter has index 513 (0x201), you may read the current value (see [[Driver_parameters]]) with the following command:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=read&amp;amp;addr=0x201&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Default value is:&lt;br /&gt;
 513(0x201):327620(0x4ffc4)&lt;br /&gt;
That is: no 90-degree shifts, fine shift is -60 steps.&lt;br /&gt;
&lt;br /&gt;
Supposing you would like to set new phase shift to +32:&lt;br /&gt;
&lt;br /&gt;
1: Write data to the driver &amp;quot;write&amp;quot; parameter&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=write&amp;amp;addr=0x201&amp;amp;data=0x40020&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may verify it by reading&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=read&amp;amp;addr=0x601&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
it will return&lt;br /&gt;
 1537(0x601):262176(0x40020)&lt;br /&gt;
2. Driver &amp;quot;looks&amp;quot; at the phase shift value only there is a request to change the sensor clock frequency. Even as we do not need to change it, we write 96000000 (frequnecy in Hz) to the appropriate register - it will be replaced with zero (no changes required) when applied:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=write&amp;amp;addr=14&amp;amp;data=96000000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
3. Now - apply changes:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=write&amp;amp;addr=0&amp;amp;data=3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That will cause sensor to be reset and then re-programmed to the current parameters (current settings are erased during reset). The sensor has to be reset after any clock changes, as it &amp;quot;assumes&amp;quot; that clock is stable after the reset signal (input pin or software command) is released. Experimentally we&#039;ve found that the Micron 5MPix sensor can be confused if the clock frequency changes and in 50% instances develops a 1 pixel delay in the pixel output (effectively getting wrong colors). Strangely that applies only to the real sensor data, simulated test patters in the sensor are not influenced by this effect.&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Adjusting_sensor_clock_phase&amp;diff=2936</id>
		<title>Adjusting sensor clock phase</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Adjusting_sensor_clock_phase&amp;diff=2936"/>
		<updated>2022-05-01T21:58:41Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Software interface for adjusting the sensor clock phase (firmware 8.0.x) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Elphel cameras architecture - separate computer and sensor boards ===&lt;br /&gt;
Elphel cameras are designed so they can support multiple different sensors, including those that were not available when the particular camera model was first released. That is possible, because the camera functionality is split into the sensor-independent computer (see [[10353]]) and the sensor front end. This board is very simple for the CMOS images sensors, like [[10338]] - basically it includes just the image sensor itself, connector for the cable to the camera main board and the power conditioning circuitry. In other cameras (like Model 363) the high resolution CCD-based sensor front end is much more complex ([[10347]]+[[10342]]), but they all interface the main board through the 30-conductor flex cable that on the [[10353]] side is connected directly to the FPGA pins (all but power supply/ ground pins). That makes the interface universal, as functions of the FPGA pins can be changed with just a new code, no hardware changes are needed.&lt;br /&gt;
&lt;br /&gt;
=== Inter-board cable ===&lt;br /&gt;
The inter-board connection is made of the flex cables (that are available in different length) provide freedom in mutual orientation of the main boards and the sensor front end, allowing the smaller sensor board to get into the tight spaces. But that 30-conductor cable has not enough conductors to make nice transmission lines - there is not enough of the return wires, number of ground+power lines is much less than the number of signal ones, but that is not a big issue for most camera applications where the cable is really short - less than 2 inches (50mm) long, but still the signals (in 5MPix sensor the output 12-bit data has a 96 mpix/sec, the clock lines run at 96MHz both directions) are used with reduced drive strength to reduce the EMI. Fortunately both FPGA and the sensor allow control over the drive strength. With the low output currents on the pins, it takes some time to recharge the parasitic capacitance of the cable wires, and the signals look far from &amp;quot;digital&amp;quot; rectangular shape - it takes most of the pixel period to just transition from &amp;quot;0&amp;quot; to &amp;quot;1&amp;quot; or back from &amp;quot;1&amp;quot; to &amp;quot;0&amp;quot;, so the data on the other end should be sampled at a precise moment during each pixel period.&lt;br /&gt;
&lt;br /&gt;
=== Phase shift of the sensor clock input ===&lt;br /&gt;
In the camera it is achieved by adding controlled phase shift between the clock that synchronizes operation of the sensor-related portion of the FPGA and the clock signal that is sent to the sensor. The sensor output signals have certain delay from that clock (unfortunately in 5MPix sensor that delay is very different for the pixel data and sync signals), so by varying the phase of a clock to sensor it is possible to adjust phase of the sensor data with respect to the FPGA pixel clock. The sensor pixel output clock is not used - it is more convenient when the FPGA clock does not depend on the state of the sensor. But that sensor output clock is connected to the FPGA and is sampled at different phases of the FPGA clock - that data can (and will) be used for the automatic phase adjustment, but current software does not support that yet.&lt;br /&gt;
&lt;br /&gt;
=== Effect of different cable lengths ===&lt;br /&gt;
For the standard camera configuration the phase shift is programmed as a predefined constant, but that does not work when the cable length differs from the original one. If you try the camera with different cable length you may see image that looks like monochrome or purple - if the pixels are sampled at wrong time, red and green (also green and blue) pixels can swap, you may see horizontal lines when the sample moment is close to the pixel-to-pixel transition - in some lines pixels were sampled correctly, in some - colors are swapped (and remember - each pixel is represented by individual 12 bit lines, that can have slightly different delays to the clock). For some reasonable length cables (tested with 8&amp;quot; / 200mm) it is possible to re-adjust the phase shift, sample pixels in the middle of the pixel window and so restore the nice images.&lt;br /&gt;
&lt;br /&gt;
=== On-chip DCM (Digital Clock Management) for sensor clock phase adjustment ===&lt;br /&gt;
Sensor phase control in the camera is achieved with one of the FPGA on-chip DCM (digital clock management) blocks by combining the fine phase adjustment with 4-to-1 multiplexor switching between on of the four outputs shifted by 90 degrees. The fine shift is not precisely known, for these chips it is specified in the 20-40 ps/step, while guaranteed number of phase shift steps (for 96MHz clock) is +/- 140 (so more than +/- 90 degrees in the worst case.&lt;br /&gt;
&lt;br /&gt;
=== Software interface for adjusting the sensor clock phase (firmware 8.0.x) ===&lt;br /&gt;
Open the following URL in the browser (replace 192.168.0.9 if camera has different IP):&lt;br /&gt;
 192.168.0.9/parsedit.php?embed=0.25&amp;amp;title=Parameters+for+groups:+phase&amp;amp;SENSOR_PHASE&amp;amp;SENSOR_REGS7&amp;amp;SENSOR_REGS7__0310&amp;amp;SENSOR_REGS7__0307&amp;amp;WOI_HEIGHT&amp;amp;WB_EN&amp;amp;THIS_FRAME&lt;br /&gt;
&lt;br /&gt;
That page combines several controls:&lt;br /&gt;
*SENSOR_PHASE - phase shift between the FPGA pixel clock and the sensor pixel clock. Normal adjustment range is 0xff80 (-64) to 0x0080 (+64)&lt;br /&gt;
*SENSOR_REGS7 - sensor register #7 that, among others control drive strengths of the sensor output. It is safer to modify selected bit fields of this register:&lt;br /&gt;
*SENSOR_REGS7__0307 (bits   9:7) is the drive strength of clock output (not used in the current setup)&lt;br /&gt;
*SENSOR_REGS7__0310 (bits 12:10) is the drive strength of all other outputs - pixel data, horizontal and vertical sync&lt;br /&gt;
*WOI_HEIGHT - window if interest height is not related to sensor phase adjustment, but it can be used to restore system (sensor to FPGA) synchronization after it is lost when adjusting sensor phase (that involves restarting the sensor). Just reduce/increase it by 0x10 and press &amp;quot;refresh&amp;quot; button - that should restore the &amp;quot;broken&amp;quot; image caused by losing system sync.&lt;br /&gt;
&lt;br /&gt;
When you change phase and press &amp;quot;apply&amp;quot; the image would not reflect the new settings (changing phase requires complete sensor reset and the regular image acquisition sequence is aborted), so the following sequence is recommended:&lt;br /&gt;
#modify SENSOR_PHASE value&lt;br /&gt;
#press &amp;quot;apply&amp;quot;&lt;br /&gt;
#change WOI_HEIGHT (alternate between 0x790 and 0x780 for the full frame)&lt;br /&gt;
#press &amp;quot;apply&amp;quot;&lt;br /&gt;
#monitor image quality - look for horizontal color stripes &lt;br /&gt;
#repeat with different phase value&lt;br /&gt;
&lt;br /&gt;
If at some point camera will stop responding to http requests (actually requests to PHP scripts) you may restart PHP by issuing&lt;br /&gt;
 killall lighttpd&lt;br /&gt;
from the telnet session - it kills the web server that will be restarted together with the instances of PHP.&lt;br /&gt;
&lt;br /&gt;
The phase default settings in the camera are optimized for a short cable (30 to 50mm), for longer cable it may need adjustment. You may also need to replace /etc/x353.bit file with the one that is generated with higher drive strength of the clock line from the FPGA to the sensor (that will also cause increase of the radiated EMI from the camera)&lt;br /&gt;
&lt;br /&gt;
=== Old instructions - valid for 7.1.x firmware ===&lt;br /&gt;
The phase adjustment value passed to the driver is split into two parts - lower 16 bits represent (signed short) fine shift in steps (20..40ps), next 2 bits - 90-degrees additional shift, higher bits are &amp;quot;don&#039;t care&amp;quot;. In default configuration bit 18 (0x40000) is set, because only non-zero values change the phase, so 0x40000 means &amp;quot;set 90-degree phase to 0, fine phase - to zero&amp;quot;, while 0x0 means &amp;quot;no phase changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The phase control parameter has index 513 (0x201), you may read the current value (see [[Driver_parameters]]) with the following command:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=read&amp;amp;addr=0x201&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Default value is:&lt;br /&gt;
 513(0x201):327620(0x4ffc4)&lt;br /&gt;
That is: no 90-degree shifts, fine shift is -60 steps.&lt;br /&gt;
&lt;br /&gt;
Supposing you would like to set new phase shift to +32:&lt;br /&gt;
&lt;br /&gt;
1: Write data to the driver &amp;quot;write&amp;quot; parameter&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=write&amp;amp;addr=0x201&amp;amp;data=0x40020&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may verify it by reading&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=read&amp;amp;addr=0x601&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
it will return&lt;br /&gt;
 1537(0x601):262176(0x40020)&lt;br /&gt;
2. Driver &amp;quot;looks&amp;quot; at the phase shift value only there is a request to change the sensor clock frequency. Even as we do not need to change it, we write 96000000 (frequnecy in Hz) to the appropriate register - it will be replaced with zero (no changes required) when applied:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=write&amp;amp;addr=14&amp;amp;data=96000000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
3. Now - apply changes:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://&amp;lt;camera_ip&amp;gt;:81/senspars.php?cmd=write&amp;amp;addr=0&amp;amp;data=3&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That will cause sensor to be reset and then re-programmed to the current parameters (current settings are erased during reset). The sensor has to be reset after any clock changes, as it &amp;quot;assumes&amp;quot; that clock is stable after the reset signal (input pin or software command) is released. Experimentally we&#039;ve found that the Micron 5MPix sensor can be confused if the clock frequency changes and in 50% instances develops a 1 pixel delay in the pixel output (effectively getting wrong colors). Strangely that applies only to the real sensor data, simulated test patters in the sensor are not influenced by this effect.&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=10393_manual&amp;diff=13559</id>
		<title>10393 manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=10393_manual&amp;diff=13559"/>
		<updated>2022-04-12T17:49:07Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Firmware images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- not anymore!&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Important Notes&amp;lt;/font&amp;gt;==&lt;br /&gt;
* As of 2016/12/15, the software ported from 10353 supports only 5MPix sensors, for 14MPix, please see:&lt;br /&gt;
**[http://wiki.elphel.com/index.php?title=Tmp_manual&amp;amp;oldid=14676 older version of this manual with links to older software images]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;In the package&amp;lt;/font&amp;gt;==&lt;br /&gt;
* 10393 camera system ([[Elphel_camera_assemblies|these 3D models]] might be helpful).&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:NC393-CS marked ports.jpeg|thumb|200px|Fig.1a 10393 interfaces]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393_boards_assembly.png|thumb|265px|Fig.1b Boards connections (NC393-F-CS)]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 dev mmc.jpeg|thumb|150px|Fig.1c Micro SD card for development]]&lt;br /&gt;
|}&lt;br /&gt;
* Power supply options ([[10393_power|more information]]):&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
!Range&lt;br /&gt;
!Power supply&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;36-72V&#039;&#039;&#039; (default)&lt;br /&gt;
| wall adapter (48V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;18-75V&#039;&#039;&#039;&lt;br /&gt;
| wall adapter (48V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;12-36V&#039;&#039;&#039;&lt;br /&gt;
| wall adapter, battery (12V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;3.3V&#039;&#039;&#039;&lt;br /&gt;
| direct, custom&lt;br /&gt;
|}&lt;br /&gt;
* CAT6 network cable&lt;br /&gt;
* &amp;amp;mu;USB-to-USB cable&lt;br /&gt;
* Recovery &amp;amp;mu;SD card&lt;br /&gt;
* If the camera is calibrated the calibration data will be on a separate storage media or on the internal SSD (likely /mnt/sda1)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Interfaces&amp;lt;/font&amp;gt;==&lt;br /&gt;
See Fig.1:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GigE&lt;br /&gt;
| gigabit network&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;mu;SD &lt;br /&gt;
| micro SD card slot - boot or storage&lt;br /&gt;
|-&lt;br /&gt;
! console&lt;br /&gt;
| serial console port, use &amp;amp;mu;USB-to-USB cable&lt;br /&gt;
|-&lt;br /&gt;
! eSATA+USB&lt;br /&gt;
| 2-in-1. Connect USB or eSATA device. USB2.0 host&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;mu;USB&lt;br /&gt;
| USB2.0 host&lt;br /&gt;
|-&lt;br /&gt;
! sync&lt;br /&gt;
| sync multiple cameras or other devices - input/output trigger signal through a 4-conductor 2.5mm audio plug with cable (example: [http://www.digikey.com/products/en?keywords=839-1029-ND digikey])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Power on&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Plug in the power supply&lt;br /&gt;
* Connect to LAN using the network cable&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
* Boot time: ~30s&lt;br /&gt;
* No extra drivers are required on the host PC to operate the camera system. Can be operated from any network device with a browser.&lt;br /&gt;
* The default boot is from the on-board NAND flash. [[Boot_options_393|More information]] on available boot options and recovery boot.&lt;br /&gt;
* For a &amp;lt;font color=&#039;red&#039;&amp;gt;&#039;&#039;&#039;production system&#039;&#039;&#039;&amp;lt;/font&amp;gt; with rare changes to the file system it is recommended to boot from NAND flash. Changes to the file system require running an extra sync command (overlay_sync) followed by a proper reboot.&lt;br /&gt;
* For &amp;lt;font color=&#039;red&#039;&amp;gt;&#039;&#039;&#039;development&#039;&#039;&#039;&amp;lt;/font&amp;gt;, one can boot from the &amp;amp;mu;SD recovery card and use it - saving changes does not require extra sync actions.&lt;br /&gt;
* Camera&#039;s software includes gcc compiler - relatively small projects can be compiled on the camera.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Defaults&amp;lt;/font&amp;gt;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IP Address&lt;br /&gt;
| 192.168.0.9&lt;br /&gt;
|-&lt;br /&gt;
! User &lt;br /&gt;
| root&lt;br /&gt;
|-&lt;br /&gt;
! Password&lt;br /&gt;
| pass&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* The default IP address is set in the &#039;&#039;/etc/elphel393/init_elphel393.py&#039;&#039;.&lt;br /&gt;
* If present the internal SSD  will be formatted into 2 partitions:&lt;br /&gt;
** /dev/sda1 - ext4 (~64-100GB)&lt;br /&gt;
** /dev/sda2 - raw partition (no file system) for fast recording&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Command line access&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ssh from PC&#039;s terminal:&lt;br /&gt;
&amp;lt;font size=&#039;2em&#039;&amp;gt;&lt;br /&gt;
 user@hostname:~$ ssh root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Serial console access&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Use a &#039;&#039;microUSB-USB cable&#039;&#039; to connect &#039;&#039;&#039;console &amp;amp;mu;USB port&#039;&#039;&#039; (see Fig.1) to PC - the cable&#039;s end should be thin enough otherwise interferes with an inserted mmc (&#039;&#039;&#039;m&#039;&#039;&#039;ulti &#039;&#039;&#039;m&#039;&#039;&#039;edia &#039;&#039;&#039;c&#039;&#039;&#039;ard = &amp;amp;mu;SD card).&lt;br /&gt;
&lt;br /&gt;
* In Linux the &#039;&#039;&#039;minicom&#039;&#039;&#039; program can be used&lt;br /&gt;
&amp;lt;font size=&#039;2em&#039;&amp;gt;&lt;br /&gt;
 $ minicom -c on&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Most likely the device will be &amp;lt;b&amp;gt;/dev/ttyUSB0&amp;lt;/b&amp;gt;. Settings:&lt;br /&gt;
* &amp;lt;b&amp;gt;115200 8N1, no&amp;lt;/b&amp;gt; for hardware/software flow control&lt;br /&gt;
Refer to the following article for more details on using &#039;&#039;&#039;minicom&#039;&#039;&#039;: [http://wiki.elphel.com/index.php?title=Using_minicom_to_connect_to_Elphel393_camera Using minicom to connect to Elphel393 camera]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Web user interface (camvc)&amp;lt;/font&amp;gt;==&lt;br /&gt;
&#039;&#039;&#039;http://192.168.0.9/&#039;&#039;&#039;&lt;br /&gt;
* The page contains links to camvc user interface for each individual camera port.&lt;br /&gt;
* camvc was ported from the 10353 camera series:&lt;br /&gt;
** change parameters like image format, resolution, auto exposure, auto white balance and more. Alternative way to change parameters is described [[Tmp_manual#Change_parameters|below]].&lt;br /&gt;
** pause compressor and search within buffered images&lt;br /&gt;
** help tips available - see Fig.3 - select then mouse over a control element of interest&lt;br /&gt;
{|&lt;br /&gt;
| valign=&#039;top&#039;|[[File:10393 starting page.png|thumb|600px|Fig.2 http://192.168.0.9]]&lt;br /&gt;
| valign=&#039;top&#039;|[[image:Help tips.jpeg|250px|thumb|Fig.3 enable camvc help tips]]&lt;br /&gt;
| valign=&#039;top&#039;|[[File:Controls with blank.jpeg|300px|thumb|Fig.4 camvc controls]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Download live images&amp;lt;/font&amp;gt;==&lt;br /&gt;
====camvc====&lt;br /&gt;
* For a currently opened port (displayed in the window title and as &amp;quot;...sensor_port=0...&amp;quot; in the URL):&lt;br /&gt;
{|&lt;br /&gt;
|[[image:Camvc image capture.jpeg|250px|thumb|Fig.5 Acquire an image from the Camera Control Interface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====browser====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 port 0: http://192.168.0.9:2323/img&lt;br /&gt;
 port 1: http://192.168.0.9:2324/img&lt;br /&gt;
 port 2: http://192.168.0.9:2325/img&lt;br /&gt;
 port 3: http://192.168.0.9:2326/img&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
====command line====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 wget http://192.168.0.9:2323/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2324/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2325/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2326/img -O filename.jpeg&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Video&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Display===&lt;br /&gt;
====Multipart JPEG stream====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:2323/mimg&lt;br /&gt;
 http://192.168.0.9:2324/mimg&lt;br /&gt;
 http://192.168.0.9:2325/mimg&lt;br /&gt;
 http://192.168.0.9:2326/mimg&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
====RTSP====&lt;br /&gt;
* Streams with either &#039;&#039;&#039;w&#039;&#039;&#039; or &#039;&#039;&#039;h&#039;&#039;&#039; &amp;gt;2040 might not get played - not supported by live555 often used by various media players. But there&#039;s a [https://git.elphel.com/Elphel/live555_patch live555_patch].&lt;br /&gt;
* turn on:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 root@elphel393:~# /usr/bin/str&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* url:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 rtsp://192.168.0.9:554&lt;br /&gt;
 rtsp://192.168.0.9:556&lt;br /&gt;
 rtsp://192.168.0.9:558&lt;br /&gt;
 rtsp://192.168.0.9:560&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====GStreamer====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 gst-launch-1.0 -v playbin uri=rtsp://192.168.0.9:554 uridecodebin0::source::latency=0&lt;br /&gt;
or&lt;br /&gt;
 gst-launch-1.0 souphttpsrc is-live=true location=http://192.168.0.9:2323/mimg ! jpegdec ! xvimagesink &lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* mjpeg and rtsp&lt;br /&gt;
* More examples at [[Using_gstreamer#Display|Using GStreamer]]&lt;br /&gt;
&lt;br /&gt;
====VLC====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 vlc rtsp://192.168.0.9:554 --network-caching=0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Record===&lt;br /&gt;
* Recording is done by the [[Camogm|&#039;&#039;&#039;camogm&#039;&#039;&#039;]] program&lt;br /&gt;
* If recording to internal or external SSD, please, read about [[Tmp_manual#eSATA_port_switching|eSATA port switching]]&lt;br /&gt;
* &amp;lt;font color=&#039;red&#039;&amp;gt;important:&amp;lt;/font&amp;gt; Event logger (GPS, IMU, IMG, EXT) recording is started/stopped separately. See [[Tmp_manual#Record_the_Event_Logger_data_.28GPS.2CIMU.2CIMG_.26_EXT.29|instructions]] below.&lt;br /&gt;
* For SATA devices camogm supports:&lt;br /&gt;
** recording to a partition with a file system - up to 80MB/s&lt;br /&gt;
** (default) faster recording to a partition without a file system (raw partition) avoiding OS calls - up to 220MB/s&lt;br /&gt;
* To extract data from a raw partition use &#039;&#039;&#039;dd&#039;&#039;&#039; or [https://github.com/Elphel/elphel-tools-x393 these scripts] to get the data and split it into images. Follow [[Extracting_images_from_raw_partition | this link]] for details.&lt;br /&gt;
* Can record to an mmc partiton or usb.&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;lt;font size=&#039;3&#039; color=&#039;red&#039;&amp;gt;[[Using_camogm_with_Elphel393_camera|More info]]&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
* If the &#039;&#039;prefix&#039;&#039; parameter, which is &#039;&#039;absolute path + prefix&#039;&#039;, for a channel is not set the file will be written somewhere to rootfs. &lt;br /&gt;
** if prefix is empty then the &#039;&#039;absolute path&#039;&#039; must end with a slash.&lt;br /&gt;
&lt;br /&gt;
====browser====&lt;br /&gt;
Example 1: (provide a correct media mount point - /mnt/sda1/)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
* http://192.168.0.9/camogmgui.php&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Follow [[Camogmgui|this link]] for GUI description.&lt;br /&gt;
&lt;br /&gt;
====command line====&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/home/root&#039;&#039;&#039;, file prefix=&#039;&#039;&#039;test_&#039;&#039;&#039;, &#039;&#039;&#039;1GB&#039;&#039;&#039; or &#039;&#039;&#039;10min&#039;&#039;&#039; files whichever occurs first&lt;br /&gt;
** setup and start (in one line):&lt;br /&gt;
 echo &amp;quot;format=mov;status=/var/tmp/camogm.status;prefix=/home/root/test_;duration=600;length=1073741824;start&amp;quot; &amp;gt; /var/volatile/camogm_cmd&lt;br /&gt;
** stop recording:&lt;br /&gt;
 echo &amp;quot;stop&amp;quot; &amp;gt; /var/volatile/camogm_cmd&lt;br /&gt;
 sync&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert to a web cam stream===&lt;br /&gt;
See this [https://blog.elphel.com/2020/06/convert-ip-cam-to-web-cam-in-linux-for-jitsi-zoom-etc/ tutorial].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Store/restore configuration&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/autocampars.php - save/restore/initialize camera/sensor parameters per port. To (re)store parameters access the pages below:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=0 (stores to /etc/elphel393/autocampars0.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=1 (stores to /etc/elphel393/autocampars1.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=2 (stores to /etc/elphel393/autocampars2.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=3 (stores to /etc/elphel393/autocampars3.xml)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Autocampars 393|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
* All stored parameters are automatically restored at boot&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Available programmable parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
To inspect all available reprogrammable parameters:&lt;br /&gt;
 1. http://192.168.0.9 -&amp;gt; Parameter Editor&lt;br /&gt;
 2. Follow a link for a particular port, e.g. http://192.168.0.9/autocampars.php?sensor_port=0&lt;br /&gt;
 3. Select groups of interest in the top table -&amp;gt; View/Edit Current&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Change parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/parsedit.php - read/write parameters:&lt;br /&gt;
** POST request&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 Read:   http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;PAR1&amp;amp;PAR2&lt;br /&gt;
 Change: http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;PAR1&amp;amp;PAR2 - update values - submit form&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
** GET request - XML response&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 Read:   &lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1&amp;amp;PAR2&lt;br /&gt;
 Change: &lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1=VAL1&amp;amp;PAR2=VAL2&lt;br /&gt;
 Change for multiple ports at once:&lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1=VAL1&amp;amp;*PAR1=MASK1&amp;amp;PAR2=VAL2&amp;amp;*PAR2=MASK2&lt;br /&gt;
 &lt;br /&gt;
 # A port bit mask is set by adding a &#039;&#039;&#039;*&#039;&#039;&#039; to a parameter name, like &#039;&#039;&#039;*PAR1&#039;&#039;&#039; - it is individual for each parameter.&lt;br /&gt;
 # The mask is 4 bits - 1 bit per port, bit[0] = port 0,... bit[3] = port 3, where 1 - enabled, 0 - disabled:&lt;br /&gt;
 #   0xf - the parameter&#039;s new value will be applied to all ports.&lt;br /&gt;
 # [[Parsedit.php#change_multiple_ports|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note 1: if the parameter&#039;s value is specified in URL it will be applied. The call can have mixed specified and unspecified parameters.&lt;br /&gt;
&lt;br /&gt;
Note 2: The new value is read on the next call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
* set 10 fps and enable output trigger signal&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=10000000&amp;amp;TRIG=4&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Parsedit.php|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* parsedit.php and autocampars.php were ported from 353 camera series. There are a few changes from the originals related to 4x sensor ports:&lt;br /&gt;
** parameters are individual for each sensor port - writing parameters to multiple port at once is controlled with a (bit-)&#039;&#039;&#039;mask&#039;&#039;&#039; input box&lt;br /&gt;
** if opened w/o sensor_port specified the page will show links to available ports&lt;br /&gt;
** &#039;&#039;&#039;sensor_port=x&#039;&#039;&#039;, where x=0..3 - in the address string - for a single sensor camera it is normally 0&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Image formats&amp;lt;/font&amp;gt;==&lt;br /&gt;
====JPEG====&lt;br /&gt;
* &#039;&#039;color&#039;&#039;: YCbCr 4:2:0, 3x3 pixels&lt;br /&gt;
* &#039;&#039;mono6&#039;&#039;: monochrome - color YCbCr 4:2:0 with zeroed out color components&lt;br /&gt;
* &#039;&#039;mono&#039;&#039; : monochrome - color YCbCr 4:0:0 with omitted color components&lt;br /&gt;
&lt;br /&gt;
Note: JPEG is not the best for processing since some information gets lost when demosaicing is applied.&lt;br /&gt;
====JP4====&lt;br /&gt;
* provides a quality of RAW with compression, no demosaicing&lt;br /&gt;
* [[JP4|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Proper shutdown&amp;lt;/font&amp;gt;==&lt;br /&gt;
* if not properly shutdown - in a rare case the &amp;amp;mu;SD card can get corrupted (it&#039;s always safer to run &#039;&#039;&#039;sync&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ~# sync&lt;br /&gt;
 ~# shutdown -hP now&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Same effect:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/autocampars.php?reboot&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Temperature monitor&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/hwmon.html:&lt;br /&gt;
** T&amp;lt;sub&amp;gt;shutdown&amp;lt;/sub&amp;gt; - automatic shutdown temperature level (default is 90&amp;amp;deg;C)&lt;br /&gt;
{|&lt;br /&gt;
|[[File:10393_hwmon.jpeg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Event Logger (GPS, IMU, IMG &amp;amp; EXT)&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
The FPGA-based Event Logger uses local clock for time-stamping data from Image Acquisition, External (Trigger) Input, GPS and IMU.&lt;br /&gt;
&lt;br /&gt;
* [[Event_logger|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
===Record===&lt;br /&gt;
====web====&lt;br /&gt;
* Start: &lt;br /&gt;
http://192.168.0.9/logger_launcher.php?cmd=start&amp;amp;file=/mnt/sda1/test.log&amp;amp;index=1&amp;amp;n=10000000&lt;br /&gt;
* Stop:&lt;br /&gt;
http://192.168.0.9/logger_launcher.php?cmd=stop&lt;br /&gt;
* Help:&lt;br /&gt;
http://192.168.0.9/logger_launcher.php&lt;br /&gt;
&lt;br /&gt;
====command line====&lt;br /&gt;
* start:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 root@elphel393:~# cat /dev/imu &amp;gt; /path/filename.log&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* stop - CTRL-C or kill the process&lt;br /&gt;
&lt;br /&gt;
===Read===&lt;br /&gt;
* http://192.168.0.9/read_imu_log.php (will display help)&lt;br /&gt;
** on the first access creates /www/pages/logs/ (http://192.168.0.9/logs/)&lt;br /&gt;
** link the recorded logs to /www/pages/logs/&lt;br /&gt;
** refresh http://192.168.0.9/read_imu_log.php&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Set system time&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===Command line from PC===&lt;br /&gt;
 &amp;lt;font size=&#039;2&#039;&amp;gt;# Compare PC and camera clocks&lt;br /&gt;
 ~$ ssh root@192.168.0.9 date;date -u&lt;br /&gt;
 # Write PC time into camera clock&lt;br /&gt;
 ~$ ssh root@192.168.0.9 &amp;quot;date -s @`( date -u +&amp;quot;%s&amp;quot; )` &amp;amp;&amp;amp;  hwclock -w&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
If in the current firmware includes &#039;&#039;&#039;http://192.168.0.9/utils.php&#039;&#039;&#039; then the clock is checked every time the index page is opened (&#039;&#039;&#039;http://192.168.0.9&#039;&#039;&#039;). The clock is then updated if the browser time differs from the camera time by more than 24h.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to force apply time using the following GET request:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://192.168.0.9/utils.php?cmd=time&amp;amp;apply&amp;amp;ts=&amp;lt;timestamp_in_ms&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 #example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://192.168.0.9/utils.php?cmd=time&amp;amp;apply&amp;amp;ts=1589913066650&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;eSATA port switching&amp;lt;/font&amp;gt;==&lt;br /&gt;
* requres [[10389]]&lt;br /&gt;
* available connections:&lt;br /&gt;
** camera &amp;lt;=&amp;gt; internal SSD (default)&lt;br /&gt;
** camera &amp;lt;=&amp;gt; external drive (external drive requires a separate power source)&lt;br /&gt;
** PC &amp;lt;=&amp;gt; internal SSD&lt;br /&gt;
* [[Sata_multiplexer_10389|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Firmware/software update&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Poky_2.0_manual#Write_files_to_media_and_boot|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Firmware images&amp;lt;/font&amp;gt;==&lt;br /&gt;
* [https://community.elphel.com/files/393/20220412/ &#039;&#039;&#039;20220412&#039;&#039;&#039;]&lt;br /&gt;
* [https://community.elphel.com/files/393/20210628/ 20210628]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200903/ 20200903]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200520/ 20200520]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200508/ 20200508]&lt;br /&gt;
&lt;br /&gt;
===Changelog===&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20220412==&#039;&#039;&#039;&lt;br /&gt;
 * Added websockets test&lt;br /&gt;
 * More options in format_disk (single partition, reformat already formatted disk,...)&lt;br /&gt;
 * Bug fixes&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20210628==&#039;&#039;&#039;&lt;br /&gt;
 * Added support for FLIR Boson sensors&lt;br /&gt;
 * Added decimation to external synchronization (triggering on each N-th incoming pulse). That was needed to run slower RGB sensors @12 Hz with Boson as a master at 60Hz&lt;br /&gt;
 * Enhanced inter-camera synchronization, added related kernel and PHP extension functionality.&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20200903==&#039;&#039;&#039;&lt;br /&gt;
 * switched to warrior branch for build&lt;br /&gt;
 * updated to kernel 4.19. This build was being under test for a while.&lt;br /&gt;
 &#039;&#039;&#039;==20200520==&#039;&#039;&#039;&lt;br /&gt;
 (rocko build)&lt;br /&gt;
 * Set time on main page access - taking browser time and writing to 10393 if times differ by 24h+.&lt;br /&gt;
 * Added script for sensor testing (switch to test pattern, check md5sum).&lt;br /&gt;
   Supporting MT9P006. Linked to main page.&lt;br /&gt;
 * Main page:&lt;br /&gt;
   * Added links to page displaying MJPEG stream in canvas&lt;br /&gt;
   * Added more controls (FPS, Manual Exposure and Auto Exposure Limit)&lt;br /&gt;
   * Added quick switch to 1080p@30fps (MT9P006)&lt;br /&gt;
 * Updated JPEG/JP4 decoding javascript plugin - less time (-10ms) spent on EXIF reading.&lt;br /&gt;
 * Created utils.php, currenty helps to GET-request:&lt;br /&gt;
   * ports configuration&lt;br /&gt;
   * set/get system time&lt;br /&gt;
 * Fixed snapshot button for cameras with unused ports in multicam/ UI.&lt;br /&gt;
 &#039;&#039;&#039;==20200508==&#039;&#039;&#039;&lt;br /&gt;
 (rocko build)&lt;br /&gt;
 * updated camogm&lt;br /&gt;
 * added FLIR Lepton driver to kernel&lt;br /&gt;
 * added FLIR Lepton record to device tree&lt;br /&gt;
 &#039;&#039;&#039;==20190321==&#039;&#039;&#039;&lt;br /&gt;
 * overall minor changes&lt;br /&gt;
   * fixed photofinish demo&lt;br /&gt;
 &#039;&#039;&#039;==20180511==&#039;&#039;&#039;&lt;br /&gt;
 * added cron program&lt;br /&gt;
 * multi cameras control interface&lt;br /&gt;
 * multi camera system info reporting&lt;br /&gt;
 * fixed rtc&lt;br /&gt;
 &#039;&#039;&#039;==20180416==&#039;&#039;&#039;&lt;br /&gt;
 * 20180419 - mt9f002: fixed changing window size&lt;br /&gt;
 * mt9f002: added triggered mode&lt;br /&gt;
 * mt9f002: added vertical and horizontal flips (mirror)&lt;br /&gt;
 &#039;&#039;&#039;==20180406==&#039;&#039;&#039;&lt;br /&gt;
 * added initial support for MT9F002 sensor: no triggered mode, no binning/decimation&lt;br /&gt;
 * display serial number in http://camera-ip:port/meta&lt;br /&gt;
 * decode jp4s on the index page (http://camera-ip)&lt;br /&gt;
 * turn off auto wb button for all ports on the index page&lt;br /&gt;
 &#039;&#039;&#039;==20180130==&#039;&#039;&#039;&lt;br /&gt;
 * added photo finish demo&lt;br /&gt;
 * fixed fps limit calcs for triggered mode&lt;br /&gt;
 &#039;&#039;&#039;==20180118==&#039;&#039;&#039;&lt;br /&gt;
 * raw.py &amp;amp; raw.php, see wiki.elphel.com&lt;br /&gt;
 * added python3 and python3-opencv&lt;br /&gt;
 &#039;&#039;&#039;==20180116==&#039;&#039;&#039;&lt;br /&gt;
 * raw pixel data downloading through membridge&lt;br /&gt;
 * added gcc,make&lt;br /&gt;
 &#039;&#039;&#039;==20180109==&#039;&#039;&#039;&lt;br /&gt;
 * fixed autoexposure&lt;br /&gt;
 &#039;&#039;&#039;==20171228==&#039;&#039;&#039;&lt;br /&gt;
 * + strace, ltrace, dmsetup&lt;br /&gt;
 * added to drivers: register devs to sysfs - nodes then created by udev&lt;br /&gt;
 &#039;&#039;&#039;==20171226==&#039;&#039;&#039;&lt;br /&gt;
 * kernel updated to 4.9 (from 4.0)&lt;br /&gt;
 * lots of drivers is updated to newer versions&lt;br /&gt;
 * +dm-crypt and cryptsetup&lt;br /&gt;
 &#039;&#039;&#039;==20171120==&#039;&#039;&#039;&lt;br /&gt;
 * bugfix - incorrect displaying of TRIG_PERIOD at init&lt;br /&gt;
 &#039;&#039;&#039;==20171115==&#039;&#039;&#039;&lt;br /&gt;
 * Fixed autocampars to let 10393 work with the mux board - 10359, see wiki.elphel.com for&lt;br /&gt;
   docs&lt;br /&gt;
 &#039;&#039;&#039;==20170823==&#039;&#039;&#039;&lt;br /&gt;
 * Fixed autocampars for multiple sensors getting desynced at init&lt;br /&gt;
 * Fixed Garmin GPS 18x USB driver&lt;br /&gt;
 &#039;&#039;&#039;==20170802==&#039;&#039;&#039;&lt;br /&gt;
 * fixed a page for taking snapshots - works in chrome and firefox for bigger images (&amp;gt;2MB)&lt;br /&gt;
 * enabled &amp;quot;Access-Control-Expose-Headers: Content-Disposition&amp;quot; and CORS&lt;br /&gt;
 &#039;&#039;&#039;==20170627==&#039;&#039;&#039;&lt;br /&gt;
 * viewing decoded jp4 format in camvc&lt;br /&gt;
 &#039;&#039;&#039;==20170623==&#039;&#039;&#039;&lt;br /&gt;
 * fixed incorrect default setting of the master channel&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Development&amp;lt;/font&amp;gt;==&lt;br /&gt;
Usage of [[Poky_manual|SDK]], which is Eclipse and project tree cloned from git.elphel.com, simplifies the development.&lt;br /&gt;
At the same time lots of things can be done using Python, PHP, JavaScript or C/C++ (if compiled on hardware) and do not require SDK.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other info&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Change default ip address===&lt;br /&gt;
Modify &#039;&#039;&#039;&#039;&#039;/etc/network/interfaces&#039;&#039;&#039;&#039;&#039;, sync the changes to the file system and reboot (or rerun init scripts).&lt;br /&gt;
&lt;br /&gt;
For firmware 20180511 or older, follow [[Fix_network_configuration|these instructions]] to fix network configuration (= disable setting ip address via &#039;&#039;&#039;/etc/elphel393/init_elphel393.py&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
===Add a program or a shell command to autostart on boot===&lt;br /&gt;
There&#039;s a way to do this using [https://unix.stackexchange.com/questions/56957/how-to-start-an-application-automatically-on-boot cron or init.d] but it might run before the sensors are initialized by init_elphel393.py. The recommended way is the following:&lt;br /&gt;
* &#039;&#039;&#039;nano&#039;&#039;&#039; or &#039;&#039;&#039;vi&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ssh root@192.168.0.9&lt;br /&gt;
 &#039;&#039;pass&#039;&#039;&lt;br /&gt;
 root@elphel393:~# nano /etc/elphel393/init_elphel393.py&lt;br /&gt;
 &#039;&#039;edit - save&#039;&#039;&lt;br /&gt;
 &#039;&#039;example: to launch the rtsp streamer - add &#039;&#039;&#039;shout(&amp;quot;/usr/bin/str&amp;quot;)&#039;&#039;&#039; to the end of the file&#039;&#039;. shout() function is just a wrapper for &#039;&#039;&#039;subprocess.call(cmd,shell=True)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Then:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 #boot from NAND flash?&lt;br /&gt;
 root@elphel393:~# overlay_sync 1 &lt;br /&gt;
 root@elphel393:~# shutdown -hP now&lt;br /&gt;
 #powercycle&lt;br /&gt;
&lt;br /&gt;
 #boot from card?&lt;br /&gt;
 root@elphel393:~# sync&lt;br /&gt;
 root@elphel393:~# reboot -f&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set up histogram window and autoexposure parameters===&lt;br /&gt;
[[Autoexposure|Read article]]&lt;br /&gt;
===Tools for calibrated systems===&lt;br /&gt;
* [[Elphel_Software_Kit_for_Ubuntu#ImageJ_and_Elphel_plugins_for_imageJ|Install ImageJ plugins]]&lt;br /&gt;
** decode jp4 raw format&lt;br /&gt;
** aberrations correction&lt;br /&gt;
** distortion correction (pixel mapping)&lt;br /&gt;
** rectification and projection&lt;br /&gt;
** &#039;&#039;&#039;JP46 Reader camera&#039;&#039;&#039; - decode JP4/JP46&lt;br /&gt;
** &#039;&#039;&#039;Eyesis correction&#039;&#039;&#039; - post-process JP4s using calibration data&lt;br /&gt;
&lt;br /&gt;
===Switch between ERS and GRR modes in MT9P006===&lt;br /&gt;
* [[Electronic_Rolling_Shutter#ERS_and_GRR_in_MT9P001_on_10393|Read article]]&lt;br /&gt;
===External/internal synchronization &amp;amp; triggering and FPS control for single/multi-camera systems===&lt;br /&gt;
* [[Trigger_393]]&lt;br /&gt;
&lt;br /&gt;
===SSD/MMC/USB formatting===&lt;br /&gt;
* [[Format_SSD_MMC]]&lt;br /&gt;
===Boot modes===&lt;br /&gt;
* [[Boot_options_393|Boot options]]&lt;br /&gt;
===Pointers monitor===&lt;br /&gt;
* Displays sensor, compressor and buffer states per 10393 port:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/pointers/&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Powering from batteries (12V or 48V)===&lt;br /&gt;
[[10393_power#Powering_from_batteries| 12V and 48V power options]]&lt;br /&gt;
===Accessing raw pixel values===&lt;br /&gt;
[[Working_with_raw_image_data|Working with raw pixel data (how to capture raw images)]]&lt;br /&gt;
&lt;br /&gt;
===Photo finish (linescan mode)===&lt;br /&gt;
[[Photo-finish|Photo Finish]] (works for JP4 image format)&lt;br /&gt;
&lt;br /&gt;
===Controlling multiple cameras from single GUI===&lt;br /&gt;
* [[Multi_camera_system_operation|Recording]]&lt;br /&gt;
&lt;br /&gt;
===Developers version&#039;s half enclosure===&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 half enclosure 1.jpeg|thumb|200px]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 half enclosure 2.jpeg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Available lengths for cables for connecting sensors in custom setups===&lt;br /&gt;
* [[FPC_cables|FPC cables]] - click for available lengths.&lt;br /&gt;
* The cables are &amp;lt;font color=&#039;red&#039;&amp;gt;asymmetrical&amp;lt;/font&amp;gt; - for correct connecting a sensor to a system board see the figure below. As a rule of thumb, the cable&#039;s back side (no contacts) will be on the same side with the connector&#039;s cover.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:Fpc_cable_conn_10393.jpeg|300px|thumb|Connecting sensors to the system board]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Known problems&amp;lt;/font&amp;gt;==&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Vertical artifacts in jpegs. Images are ok at 100% quality. Fixed, testing.&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; http://192.168.0.9:232x/noexif/mimg - multipart jpeg displays corrupted frames from time to time. Reason: network bandwidth?&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Sometimes on power-on (NAND flash boot) cannot mount the card&#039;s rootfs partition. Kernel Panics. Power off/on. Soft &amp;quot;reboot -f&amp;quot; works ok.&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;b&amp;gt;Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[VFS:_Unable_to_mount_root_fs_on_unknown-block(179,2)|More info]]&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Changing exposure/quality/gains - can corrupt images - needs testing.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; After rewriting rootfs to &amp;amp;mu;SD card - some of the cards get a corrupted partition - re-partitioning (reformatting?) solves the problem.&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 On the camera the rootfs is mounted as RW and some of the files are changed (also links created) -&lt;br /&gt;
 most of the changes are now moved to tmpfs but something might have been missed.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Notes&amp;lt;/font&amp;gt;==&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; In case rootfs is on flash, it might make sense (or maybe not as the history is updated only once on session exit) to disable bash sessions command history - [http://stackoverflow.com/questions/18663078/disable-history-in-linux disable bash history]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; When using &#039;&#039;&#039;overlays&#039;&#039;&#039;, deleting, existing in the lower layer, dirs can cause errors (hopefully it gets fixed someday), example: &lt;br /&gt;
** /mnt/sda1 exists in lower layer: /tmp/rootfs.ro/tmp&lt;br /&gt;
** upper layer is mounted to &amp;quot;/&amp;quot;&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 # rmdir /mnt/sda1&lt;br /&gt;
 # mkdir /mnt/sda1&lt;br /&gt;
 mkdir: cannot create directory &#039;/mnt/sda1&#039;: Operation not supported&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Category:393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=10393_manual&amp;diff=13558</id>
		<title>10393 manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=10393_manual&amp;diff=13558"/>
		<updated>2022-04-12T17:48:11Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- not anymore!&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Important Notes&amp;lt;/font&amp;gt;==&lt;br /&gt;
* As of 2016/12/15, the software ported from 10353 supports only 5MPix sensors, for 14MPix, please see:&lt;br /&gt;
**[http://wiki.elphel.com/index.php?title=Tmp_manual&amp;amp;oldid=14676 older version of this manual with links to older software images]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;In the package&amp;lt;/font&amp;gt;==&lt;br /&gt;
* 10393 camera system ([[Elphel_camera_assemblies|these 3D models]] might be helpful).&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:NC393-CS marked ports.jpeg|thumb|200px|Fig.1a 10393 interfaces]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393_boards_assembly.png|thumb|265px|Fig.1b Boards connections (NC393-F-CS)]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 dev mmc.jpeg|thumb|150px|Fig.1c Micro SD card for development]]&lt;br /&gt;
|}&lt;br /&gt;
* Power supply options ([[10393_power|more information]]):&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
!Range&lt;br /&gt;
!Power supply&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;36-72V&#039;&#039;&#039; (default)&lt;br /&gt;
| wall adapter (48V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;18-75V&#039;&#039;&#039;&lt;br /&gt;
| wall adapter (48V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;12-36V&#039;&#039;&#039;&lt;br /&gt;
| wall adapter, battery (12V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;3.3V&#039;&#039;&#039;&lt;br /&gt;
| direct, custom&lt;br /&gt;
|}&lt;br /&gt;
* CAT6 network cable&lt;br /&gt;
* &amp;amp;mu;USB-to-USB cable&lt;br /&gt;
* Recovery &amp;amp;mu;SD card&lt;br /&gt;
* If the camera is calibrated the calibration data will be on a separate storage media or on the internal SSD (likely /mnt/sda1)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Interfaces&amp;lt;/font&amp;gt;==&lt;br /&gt;
See Fig.1:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GigE&lt;br /&gt;
| gigabit network&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;mu;SD &lt;br /&gt;
| micro SD card slot - boot or storage&lt;br /&gt;
|-&lt;br /&gt;
! console&lt;br /&gt;
| serial console port, use &amp;amp;mu;USB-to-USB cable&lt;br /&gt;
|-&lt;br /&gt;
! eSATA+USB&lt;br /&gt;
| 2-in-1. Connect USB or eSATA device. USB2.0 host&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;mu;USB&lt;br /&gt;
| USB2.0 host&lt;br /&gt;
|-&lt;br /&gt;
! sync&lt;br /&gt;
| sync multiple cameras or other devices - input/output trigger signal through a 4-conductor 2.5mm audio plug with cable (example: [http://www.digikey.com/products/en?keywords=839-1029-ND digikey])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Power on&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Plug in the power supply&lt;br /&gt;
* Connect to LAN using the network cable&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
* Boot time: ~30s&lt;br /&gt;
* No extra drivers are required on the host PC to operate the camera system. Can be operated from any network device with a browser.&lt;br /&gt;
* The default boot is from the on-board NAND flash. [[Boot_options_393|More information]] on available boot options and recovery boot.&lt;br /&gt;
* For a &amp;lt;font color=&#039;red&#039;&amp;gt;&#039;&#039;&#039;production system&#039;&#039;&#039;&amp;lt;/font&amp;gt; with rare changes to the file system it is recommended to boot from NAND flash. Changes to the file system require running an extra sync command (overlay_sync) followed by a proper reboot.&lt;br /&gt;
* For &amp;lt;font color=&#039;red&#039;&amp;gt;&#039;&#039;&#039;development&#039;&#039;&#039;&amp;lt;/font&amp;gt;, one can boot from the &amp;amp;mu;SD recovery card and use it - saving changes does not require extra sync actions.&lt;br /&gt;
* Camera&#039;s software includes gcc compiler - relatively small projects can be compiled on the camera.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Defaults&amp;lt;/font&amp;gt;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IP Address&lt;br /&gt;
| 192.168.0.9&lt;br /&gt;
|-&lt;br /&gt;
! User &lt;br /&gt;
| root&lt;br /&gt;
|-&lt;br /&gt;
! Password&lt;br /&gt;
| pass&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* The default IP address is set in the &#039;&#039;/etc/elphel393/init_elphel393.py&#039;&#039;.&lt;br /&gt;
* If present the internal SSD  will be formatted into 2 partitions:&lt;br /&gt;
** /dev/sda1 - ext4 (~64-100GB)&lt;br /&gt;
** /dev/sda2 - raw partition (no file system) for fast recording&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Command line access&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ssh from PC&#039;s terminal:&lt;br /&gt;
&amp;lt;font size=&#039;2em&#039;&amp;gt;&lt;br /&gt;
 user@hostname:~$ ssh root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Serial console access&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Use a &#039;&#039;microUSB-USB cable&#039;&#039; to connect &#039;&#039;&#039;console &amp;amp;mu;USB port&#039;&#039;&#039; (see Fig.1) to PC - the cable&#039;s end should be thin enough otherwise interferes with an inserted mmc (&#039;&#039;&#039;m&#039;&#039;&#039;ulti &#039;&#039;&#039;m&#039;&#039;&#039;edia &#039;&#039;&#039;c&#039;&#039;&#039;ard = &amp;amp;mu;SD card).&lt;br /&gt;
&lt;br /&gt;
* In Linux the &#039;&#039;&#039;minicom&#039;&#039;&#039; program can be used&lt;br /&gt;
&amp;lt;font size=&#039;2em&#039;&amp;gt;&lt;br /&gt;
 $ minicom -c on&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Most likely the device will be &amp;lt;b&amp;gt;/dev/ttyUSB0&amp;lt;/b&amp;gt;. Settings:&lt;br /&gt;
* &amp;lt;b&amp;gt;115200 8N1, no&amp;lt;/b&amp;gt; for hardware/software flow control&lt;br /&gt;
Refer to the following article for more details on using &#039;&#039;&#039;minicom&#039;&#039;&#039;: [http://wiki.elphel.com/index.php?title=Using_minicom_to_connect_to_Elphel393_camera Using minicom to connect to Elphel393 camera]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Web user interface (camvc)&amp;lt;/font&amp;gt;==&lt;br /&gt;
&#039;&#039;&#039;http://192.168.0.9/&#039;&#039;&#039;&lt;br /&gt;
* The page contains links to camvc user interface for each individual camera port.&lt;br /&gt;
* camvc was ported from the 10353 camera series:&lt;br /&gt;
** change parameters like image format, resolution, auto exposure, auto white balance and more. Alternative way to change parameters is described [[Tmp_manual#Change_parameters|below]].&lt;br /&gt;
** pause compressor and search within buffered images&lt;br /&gt;
** help tips available - see Fig.3 - select then mouse over a control element of interest&lt;br /&gt;
{|&lt;br /&gt;
| valign=&#039;top&#039;|[[File:10393 starting page.png|thumb|600px|Fig.2 http://192.168.0.9]]&lt;br /&gt;
| valign=&#039;top&#039;|[[image:Help tips.jpeg|250px|thumb|Fig.3 enable camvc help tips]]&lt;br /&gt;
| valign=&#039;top&#039;|[[File:Controls with blank.jpeg|300px|thumb|Fig.4 camvc controls]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Download live images&amp;lt;/font&amp;gt;==&lt;br /&gt;
====camvc====&lt;br /&gt;
* For a currently opened port (displayed in the window title and as &amp;quot;...sensor_port=0...&amp;quot; in the URL):&lt;br /&gt;
{|&lt;br /&gt;
|[[image:Camvc image capture.jpeg|250px|thumb|Fig.5 Acquire an image from the Camera Control Interface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====browser====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 port 0: http://192.168.0.9:2323/img&lt;br /&gt;
 port 1: http://192.168.0.9:2324/img&lt;br /&gt;
 port 2: http://192.168.0.9:2325/img&lt;br /&gt;
 port 3: http://192.168.0.9:2326/img&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
====command line====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 wget http://192.168.0.9:2323/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2324/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2325/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2326/img -O filename.jpeg&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Video&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Display===&lt;br /&gt;
====Multipart JPEG stream====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:2323/mimg&lt;br /&gt;
 http://192.168.0.9:2324/mimg&lt;br /&gt;
 http://192.168.0.9:2325/mimg&lt;br /&gt;
 http://192.168.0.9:2326/mimg&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
====RTSP====&lt;br /&gt;
* Streams with either &#039;&#039;&#039;w&#039;&#039;&#039; or &#039;&#039;&#039;h&#039;&#039;&#039; &amp;gt;2040 might not get played - not supported by live555 often used by various media players. But there&#039;s a [https://git.elphel.com/Elphel/live555_patch live555_patch].&lt;br /&gt;
* turn on:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 root@elphel393:~# /usr/bin/str&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* url:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 rtsp://192.168.0.9:554&lt;br /&gt;
 rtsp://192.168.0.9:556&lt;br /&gt;
 rtsp://192.168.0.9:558&lt;br /&gt;
 rtsp://192.168.0.9:560&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====GStreamer====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 gst-launch-1.0 -v playbin uri=rtsp://192.168.0.9:554 uridecodebin0::source::latency=0&lt;br /&gt;
or&lt;br /&gt;
 gst-launch-1.0 souphttpsrc is-live=true location=http://192.168.0.9:2323/mimg ! jpegdec ! xvimagesink &lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* mjpeg and rtsp&lt;br /&gt;
* More examples at [[Using_gstreamer#Display|Using GStreamer]]&lt;br /&gt;
&lt;br /&gt;
====VLC====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 vlc rtsp://192.168.0.9:554 --network-caching=0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Record===&lt;br /&gt;
* Recording is done by the [[Camogm|&#039;&#039;&#039;camogm&#039;&#039;&#039;]] program&lt;br /&gt;
* If recording to internal or external SSD, please, read about [[Tmp_manual#eSATA_port_switching|eSATA port switching]]&lt;br /&gt;
* &amp;lt;font color=&#039;red&#039;&amp;gt;important:&amp;lt;/font&amp;gt; Event logger (GPS, IMU, IMG, EXT) recording is started/stopped separately. See [[Tmp_manual#Record_the_Event_Logger_data_.28GPS.2CIMU.2CIMG_.26_EXT.29|instructions]] below.&lt;br /&gt;
* For SATA devices camogm supports:&lt;br /&gt;
** recording to a partition with a file system - up to 80MB/s&lt;br /&gt;
** (default) faster recording to a partition without a file system (raw partition) avoiding OS calls - up to 220MB/s&lt;br /&gt;
* To extract data from a raw partition use &#039;&#039;&#039;dd&#039;&#039;&#039; or [https://github.com/Elphel/elphel-tools-x393 these scripts] to get the data and split it into images. Follow [[Extracting_images_from_raw_partition | this link]] for details.&lt;br /&gt;
* Can record to an mmc partiton or usb.&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;lt;font size=&#039;3&#039; color=&#039;red&#039;&amp;gt;[[Using_camogm_with_Elphel393_camera|More info]]&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
* If the &#039;&#039;prefix&#039;&#039; parameter, which is &#039;&#039;absolute path + prefix&#039;&#039;, for a channel is not set the file will be written somewhere to rootfs. &lt;br /&gt;
** if prefix is empty then the &#039;&#039;absolute path&#039;&#039; must end with a slash.&lt;br /&gt;
&lt;br /&gt;
====browser====&lt;br /&gt;
Example 1: (provide a correct media mount point - /mnt/sda1/)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
* http://192.168.0.9/camogmgui.php&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Follow [[Camogmgui|this link]] for GUI description.&lt;br /&gt;
&lt;br /&gt;
====command line====&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/home/root&#039;&#039;&#039;, file prefix=&#039;&#039;&#039;test_&#039;&#039;&#039;, &#039;&#039;&#039;1GB&#039;&#039;&#039; or &#039;&#039;&#039;10min&#039;&#039;&#039; files whichever occurs first&lt;br /&gt;
** setup and start (in one line):&lt;br /&gt;
 echo &amp;quot;format=mov;status=/var/tmp/camogm.status;prefix=/home/root/test_;duration=600;length=1073741824;start&amp;quot; &amp;gt; /var/volatile/camogm_cmd&lt;br /&gt;
** stop recording:&lt;br /&gt;
 echo &amp;quot;stop&amp;quot; &amp;gt; /var/volatile/camogm_cmd&lt;br /&gt;
 sync&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert to a web cam stream===&lt;br /&gt;
See this [https://blog.elphel.com/2020/06/convert-ip-cam-to-web-cam-in-linux-for-jitsi-zoom-etc/ tutorial].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Store/restore configuration&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/autocampars.php - save/restore/initialize camera/sensor parameters per port. To (re)store parameters access the pages below:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=0 (stores to /etc/elphel393/autocampars0.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=1 (stores to /etc/elphel393/autocampars1.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=2 (stores to /etc/elphel393/autocampars2.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=3 (stores to /etc/elphel393/autocampars3.xml)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Autocampars 393|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
* All stored parameters are automatically restored at boot&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Available programmable parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
To inspect all available reprogrammable parameters:&lt;br /&gt;
 1. http://192.168.0.9 -&amp;gt; Parameter Editor&lt;br /&gt;
 2. Follow a link for a particular port, e.g. http://192.168.0.9/autocampars.php?sensor_port=0&lt;br /&gt;
 3. Select groups of interest in the top table -&amp;gt; View/Edit Current&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Change parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/parsedit.php - read/write parameters:&lt;br /&gt;
** POST request&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 Read:   http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;PAR1&amp;amp;PAR2&lt;br /&gt;
 Change: http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;PAR1&amp;amp;PAR2 - update values - submit form&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
** GET request - XML response&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 Read:   &lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1&amp;amp;PAR2&lt;br /&gt;
 Change: &lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1=VAL1&amp;amp;PAR2=VAL2&lt;br /&gt;
 Change for multiple ports at once:&lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1=VAL1&amp;amp;*PAR1=MASK1&amp;amp;PAR2=VAL2&amp;amp;*PAR2=MASK2&lt;br /&gt;
 &lt;br /&gt;
 # A port bit mask is set by adding a &#039;&#039;&#039;*&#039;&#039;&#039; to a parameter name, like &#039;&#039;&#039;*PAR1&#039;&#039;&#039; - it is individual for each parameter.&lt;br /&gt;
 # The mask is 4 bits - 1 bit per port, bit[0] = port 0,... bit[3] = port 3, where 1 - enabled, 0 - disabled:&lt;br /&gt;
 #   0xf - the parameter&#039;s new value will be applied to all ports.&lt;br /&gt;
 # [[Parsedit.php#change_multiple_ports|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note 1: if the parameter&#039;s value is specified in URL it will be applied. The call can have mixed specified and unspecified parameters.&lt;br /&gt;
&lt;br /&gt;
Note 2: The new value is read on the next call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
* set 10 fps and enable output trigger signal&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=10000000&amp;amp;TRIG=4&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Parsedit.php|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* parsedit.php and autocampars.php were ported from 353 camera series. There are a few changes from the originals related to 4x sensor ports:&lt;br /&gt;
** parameters are individual for each sensor port - writing parameters to multiple port at once is controlled with a (bit-)&#039;&#039;&#039;mask&#039;&#039;&#039; input box&lt;br /&gt;
** if opened w/o sensor_port specified the page will show links to available ports&lt;br /&gt;
** &#039;&#039;&#039;sensor_port=x&#039;&#039;&#039;, where x=0..3 - in the address string - for a single sensor camera it is normally 0&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Image formats&amp;lt;/font&amp;gt;==&lt;br /&gt;
====JPEG====&lt;br /&gt;
* &#039;&#039;color&#039;&#039;: YCbCr 4:2:0, 3x3 pixels&lt;br /&gt;
* &#039;&#039;mono6&#039;&#039;: monochrome - color YCbCr 4:2:0 with zeroed out color components&lt;br /&gt;
* &#039;&#039;mono&#039;&#039; : monochrome - color YCbCr 4:0:0 with omitted color components&lt;br /&gt;
&lt;br /&gt;
Note: JPEG is not the best for processing since some information gets lost when demosaicing is applied.&lt;br /&gt;
====JP4====&lt;br /&gt;
* provides a quality of RAW with compression, no demosaicing&lt;br /&gt;
* [[JP4|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Proper shutdown&amp;lt;/font&amp;gt;==&lt;br /&gt;
* if not properly shutdown - in a rare case the &amp;amp;mu;SD card can get corrupted (it&#039;s always safer to run &#039;&#039;&#039;sync&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ~# sync&lt;br /&gt;
 ~# shutdown -hP now&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Same effect:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/autocampars.php?reboot&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Temperature monitor&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/hwmon.html:&lt;br /&gt;
** T&amp;lt;sub&amp;gt;shutdown&amp;lt;/sub&amp;gt; - automatic shutdown temperature level (default is 90&amp;amp;deg;C)&lt;br /&gt;
{|&lt;br /&gt;
|[[File:10393_hwmon.jpeg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Event Logger (GPS, IMU, IMG &amp;amp; EXT)&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
The FPGA-based Event Logger uses local clock for time-stamping data from Image Acquisition, External (Trigger) Input, GPS and IMU.&lt;br /&gt;
&lt;br /&gt;
* [[Event_logger|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
===Record===&lt;br /&gt;
====web====&lt;br /&gt;
* Start: &lt;br /&gt;
http://192.168.0.9/logger_launcher.php?cmd=start&amp;amp;file=/mnt/sda1/test.log&amp;amp;index=1&amp;amp;n=10000000&lt;br /&gt;
* Stop:&lt;br /&gt;
http://192.168.0.9/logger_launcher.php?cmd=stop&lt;br /&gt;
* Help:&lt;br /&gt;
http://192.168.0.9/logger_launcher.php&lt;br /&gt;
&lt;br /&gt;
====command line====&lt;br /&gt;
* start:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 root@elphel393:~# cat /dev/imu &amp;gt; /path/filename.log&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* stop - CTRL-C or kill the process&lt;br /&gt;
&lt;br /&gt;
===Read===&lt;br /&gt;
* http://192.168.0.9/read_imu_log.php (will display help)&lt;br /&gt;
** on the first access creates /www/pages/logs/ (http://192.168.0.9/logs/)&lt;br /&gt;
** link the recorded logs to /www/pages/logs/&lt;br /&gt;
** refresh http://192.168.0.9/read_imu_log.php&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Set system time&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===Command line from PC===&lt;br /&gt;
 &amp;lt;font size=&#039;2&#039;&amp;gt;# Compare PC and camera clocks&lt;br /&gt;
 ~$ ssh root@192.168.0.9 date;date -u&lt;br /&gt;
 # Write PC time into camera clock&lt;br /&gt;
 ~$ ssh root@192.168.0.9 &amp;quot;date -s @`( date -u +&amp;quot;%s&amp;quot; )` &amp;amp;&amp;amp;  hwclock -w&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
If in the current firmware includes &#039;&#039;&#039;http://192.168.0.9/utils.php&#039;&#039;&#039; then the clock is checked every time the index page is opened (&#039;&#039;&#039;http://192.168.0.9&#039;&#039;&#039;). The clock is then updated if the browser time differs from the camera time by more than 24h.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to force apply time using the following GET request:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://192.168.0.9/utils.php?cmd=time&amp;amp;apply&amp;amp;ts=&amp;lt;timestamp_in_ms&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 #example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://192.168.0.9/utils.php?cmd=time&amp;amp;apply&amp;amp;ts=1589913066650&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;eSATA port switching&amp;lt;/font&amp;gt;==&lt;br /&gt;
* requres [[10389]]&lt;br /&gt;
* available connections:&lt;br /&gt;
** camera &amp;lt;=&amp;gt; internal SSD (default)&lt;br /&gt;
** camera &amp;lt;=&amp;gt; external drive (external drive requires a separate power source)&lt;br /&gt;
** PC &amp;lt;=&amp;gt; internal SSD&lt;br /&gt;
* [[Sata_multiplexer_10389|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Firmware/software update&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Poky_2.0_manual#Write_files_to_media_and_boot|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Firmware images&amp;lt;/font&amp;gt;==&lt;br /&gt;
* [https://community.elphel.com/files/393/20210628/ &#039;&#039;&#039;20210628&#039;&#039;&#039;]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200903/ 20200903]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200520/ 20200520]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200508/ 20200508]&lt;br /&gt;
&lt;br /&gt;
===Changelog===&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20220412==&#039;&#039;&#039;&lt;br /&gt;
 * Added websockets test&lt;br /&gt;
 * More options in format_disk (single partition, reformat already formatted disk,...)&lt;br /&gt;
 * Bug fixes&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20210628==&#039;&#039;&#039;&lt;br /&gt;
 * Added support for FLIR Boson sensors&lt;br /&gt;
 * Added decimation to external synchronization (triggering on each N-th incoming pulse). That was needed to run slower RGB sensors @12 Hz with Boson as a master at 60Hz&lt;br /&gt;
 * Enhanced inter-camera synchronization, added related kernel and PHP extension functionality.&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20200903==&#039;&#039;&#039;&lt;br /&gt;
 * switched to warrior branch for build&lt;br /&gt;
 * updated to kernel 4.19. This build was being under test for a while.&lt;br /&gt;
 &#039;&#039;&#039;==20200520==&#039;&#039;&#039;&lt;br /&gt;
 (rocko build)&lt;br /&gt;
 * Set time on main page access - taking browser time and writing to 10393 if times differ by 24h+.&lt;br /&gt;
 * Added script for sensor testing (switch to test pattern, check md5sum).&lt;br /&gt;
   Supporting MT9P006. Linked to main page.&lt;br /&gt;
 * Main page:&lt;br /&gt;
   * Added links to page displaying MJPEG stream in canvas&lt;br /&gt;
   * Added more controls (FPS, Manual Exposure and Auto Exposure Limit)&lt;br /&gt;
   * Added quick switch to 1080p@30fps (MT9P006)&lt;br /&gt;
 * Updated JPEG/JP4 decoding javascript plugin - less time (-10ms) spent on EXIF reading.&lt;br /&gt;
 * Created utils.php, currenty helps to GET-request:&lt;br /&gt;
   * ports configuration&lt;br /&gt;
   * set/get system time&lt;br /&gt;
 * Fixed snapshot button for cameras with unused ports in multicam/ UI.&lt;br /&gt;
 &#039;&#039;&#039;==20200508==&#039;&#039;&#039;&lt;br /&gt;
 (rocko build)&lt;br /&gt;
 * updated camogm&lt;br /&gt;
 * added FLIR Lepton driver to kernel&lt;br /&gt;
 * added FLIR Lepton record to device tree&lt;br /&gt;
 &#039;&#039;&#039;==20190321==&#039;&#039;&#039;&lt;br /&gt;
 * overall minor changes&lt;br /&gt;
   * fixed photofinish demo&lt;br /&gt;
 &#039;&#039;&#039;==20180511==&#039;&#039;&#039;&lt;br /&gt;
 * added cron program&lt;br /&gt;
 * multi cameras control interface&lt;br /&gt;
 * multi camera system info reporting&lt;br /&gt;
 * fixed rtc&lt;br /&gt;
 &#039;&#039;&#039;==20180416==&#039;&#039;&#039;&lt;br /&gt;
 * 20180419 - mt9f002: fixed changing window size&lt;br /&gt;
 * mt9f002: added triggered mode&lt;br /&gt;
 * mt9f002: added vertical and horizontal flips (mirror)&lt;br /&gt;
 &#039;&#039;&#039;==20180406==&#039;&#039;&#039;&lt;br /&gt;
 * added initial support for MT9F002 sensor: no triggered mode, no binning/decimation&lt;br /&gt;
 * display serial number in http://camera-ip:port/meta&lt;br /&gt;
 * decode jp4s on the index page (http://camera-ip)&lt;br /&gt;
 * turn off auto wb button for all ports on the index page&lt;br /&gt;
 &#039;&#039;&#039;==20180130==&#039;&#039;&#039;&lt;br /&gt;
 * added photo finish demo&lt;br /&gt;
 * fixed fps limit calcs for triggered mode&lt;br /&gt;
 &#039;&#039;&#039;==20180118==&#039;&#039;&#039;&lt;br /&gt;
 * raw.py &amp;amp; raw.php, see wiki.elphel.com&lt;br /&gt;
 * added python3 and python3-opencv&lt;br /&gt;
 &#039;&#039;&#039;==20180116==&#039;&#039;&#039;&lt;br /&gt;
 * raw pixel data downloading through membridge&lt;br /&gt;
 * added gcc,make&lt;br /&gt;
 &#039;&#039;&#039;==20180109==&#039;&#039;&#039;&lt;br /&gt;
 * fixed autoexposure&lt;br /&gt;
 &#039;&#039;&#039;==20171228==&#039;&#039;&#039;&lt;br /&gt;
 * + strace, ltrace, dmsetup&lt;br /&gt;
 * added to drivers: register devs to sysfs - nodes then created by udev&lt;br /&gt;
 &#039;&#039;&#039;==20171226==&#039;&#039;&#039;&lt;br /&gt;
 * kernel updated to 4.9 (from 4.0)&lt;br /&gt;
 * lots of drivers is updated to newer versions&lt;br /&gt;
 * +dm-crypt and cryptsetup&lt;br /&gt;
 &#039;&#039;&#039;==20171120==&#039;&#039;&#039;&lt;br /&gt;
 * bugfix - incorrect displaying of TRIG_PERIOD at init&lt;br /&gt;
 &#039;&#039;&#039;==20171115==&#039;&#039;&#039;&lt;br /&gt;
 * Fixed autocampars to let 10393 work with the mux board - 10359, see wiki.elphel.com for&lt;br /&gt;
   docs&lt;br /&gt;
 &#039;&#039;&#039;==20170823==&#039;&#039;&#039;&lt;br /&gt;
 * Fixed autocampars for multiple sensors getting desynced at init&lt;br /&gt;
 * Fixed Garmin GPS 18x USB driver&lt;br /&gt;
 &#039;&#039;&#039;==20170802==&#039;&#039;&#039;&lt;br /&gt;
 * fixed a page for taking snapshots - works in chrome and firefox for bigger images (&amp;gt;2MB)&lt;br /&gt;
 * enabled &amp;quot;Access-Control-Expose-Headers: Content-Disposition&amp;quot; and CORS&lt;br /&gt;
 &#039;&#039;&#039;==20170627==&#039;&#039;&#039;&lt;br /&gt;
 * viewing decoded jp4 format in camvc&lt;br /&gt;
 &#039;&#039;&#039;==20170623==&#039;&#039;&#039;&lt;br /&gt;
 * fixed incorrect default setting of the master channel&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Development&amp;lt;/font&amp;gt;==&lt;br /&gt;
Usage of [[Poky_manual|SDK]], which is Eclipse and project tree cloned from git.elphel.com, simplifies the development.&lt;br /&gt;
At the same time lots of things can be done using Python, PHP, JavaScript or C/C++ (if compiled on hardware) and do not require SDK.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other info&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Change default ip address===&lt;br /&gt;
Modify &#039;&#039;&#039;&#039;&#039;/etc/network/interfaces&#039;&#039;&#039;&#039;&#039;, sync the changes to the file system and reboot (or rerun init scripts).&lt;br /&gt;
&lt;br /&gt;
For firmware 20180511 or older, follow [[Fix_network_configuration|these instructions]] to fix network configuration (= disable setting ip address via &#039;&#039;&#039;/etc/elphel393/init_elphel393.py&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
===Add a program or a shell command to autostart on boot===&lt;br /&gt;
There&#039;s a way to do this using [https://unix.stackexchange.com/questions/56957/how-to-start-an-application-automatically-on-boot cron or init.d] but it might run before the sensors are initialized by init_elphel393.py. The recommended way is the following:&lt;br /&gt;
* &#039;&#039;&#039;nano&#039;&#039;&#039; or &#039;&#039;&#039;vi&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ssh root@192.168.0.9&lt;br /&gt;
 &#039;&#039;pass&#039;&#039;&lt;br /&gt;
 root@elphel393:~# nano /etc/elphel393/init_elphel393.py&lt;br /&gt;
 &#039;&#039;edit - save&#039;&#039;&lt;br /&gt;
 &#039;&#039;example: to launch the rtsp streamer - add &#039;&#039;&#039;shout(&amp;quot;/usr/bin/str&amp;quot;)&#039;&#039;&#039; to the end of the file&#039;&#039;. shout() function is just a wrapper for &#039;&#039;&#039;subprocess.call(cmd,shell=True)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Then:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 #boot from NAND flash?&lt;br /&gt;
 root@elphel393:~# overlay_sync 1 &lt;br /&gt;
 root@elphel393:~# shutdown -hP now&lt;br /&gt;
 #powercycle&lt;br /&gt;
&lt;br /&gt;
 #boot from card?&lt;br /&gt;
 root@elphel393:~# sync&lt;br /&gt;
 root@elphel393:~# reboot -f&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set up histogram window and autoexposure parameters===&lt;br /&gt;
[[Autoexposure|Read article]]&lt;br /&gt;
===Tools for calibrated systems===&lt;br /&gt;
* [[Elphel_Software_Kit_for_Ubuntu#ImageJ_and_Elphel_plugins_for_imageJ|Install ImageJ plugins]]&lt;br /&gt;
** decode jp4 raw format&lt;br /&gt;
** aberrations correction&lt;br /&gt;
** distortion correction (pixel mapping)&lt;br /&gt;
** rectification and projection&lt;br /&gt;
** &#039;&#039;&#039;JP46 Reader camera&#039;&#039;&#039; - decode JP4/JP46&lt;br /&gt;
** &#039;&#039;&#039;Eyesis correction&#039;&#039;&#039; - post-process JP4s using calibration data&lt;br /&gt;
&lt;br /&gt;
===Switch between ERS and GRR modes in MT9P006===&lt;br /&gt;
* [[Electronic_Rolling_Shutter#ERS_and_GRR_in_MT9P001_on_10393|Read article]]&lt;br /&gt;
===External/internal synchronization &amp;amp; triggering and FPS control for single/multi-camera systems===&lt;br /&gt;
* [[Trigger_393]]&lt;br /&gt;
&lt;br /&gt;
===SSD/MMC/USB formatting===&lt;br /&gt;
* [[Format_SSD_MMC]]&lt;br /&gt;
===Boot modes===&lt;br /&gt;
* [[Boot_options_393|Boot options]]&lt;br /&gt;
===Pointers monitor===&lt;br /&gt;
* Displays sensor, compressor and buffer states per 10393 port:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/pointers/&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Powering from batteries (12V or 48V)===&lt;br /&gt;
[[10393_power#Powering_from_batteries| 12V and 48V power options]]&lt;br /&gt;
===Accessing raw pixel values===&lt;br /&gt;
[[Working_with_raw_image_data|Working with raw pixel data (how to capture raw images)]]&lt;br /&gt;
&lt;br /&gt;
===Photo finish (linescan mode)===&lt;br /&gt;
[[Photo-finish|Photo Finish]] (works for JP4 image format)&lt;br /&gt;
&lt;br /&gt;
===Controlling multiple cameras from single GUI===&lt;br /&gt;
* [[Multi_camera_system_operation|Recording]]&lt;br /&gt;
&lt;br /&gt;
===Developers version&#039;s half enclosure===&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 half enclosure 1.jpeg|thumb|200px]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 half enclosure 2.jpeg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Available lengths for cables for connecting sensors in custom setups===&lt;br /&gt;
* [[FPC_cables|FPC cables]] - click for available lengths.&lt;br /&gt;
* The cables are &amp;lt;font color=&#039;red&#039;&amp;gt;asymmetrical&amp;lt;/font&amp;gt; - for correct connecting a sensor to a system board see the figure below. As a rule of thumb, the cable&#039;s back side (no contacts) will be on the same side with the connector&#039;s cover.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:Fpc_cable_conn_10393.jpeg|300px|thumb|Connecting sensors to the system board]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Known problems&amp;lt;/font&amp;gt;==&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Vertical artifacts in jpegs. Images are ok at 100% quality. Fixed, testing.&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; http://192.168.0.9:232x/noexif/mimg - multipart jpeg displays corrupted frames from time to time. Reason: network bandwidth?&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Sometimes on power-on (NAND flash boot) cannot mount the card&#039;s rootfs partition. Kernel Panics. Power off/on. Soft &amp;quot;reboot -f&amp;quot; works ok.&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;b&amp;gt;Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[VFS:_Unable_to_mount_root_fs_on_unknown-block(179,2)|More info]]&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Changing exposure/quality/gains - can corrupt images - needs testing.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; After rewriting rootfs to &amp;amp;mu;SD card - some of the cards get a corrupted partition - re-partitioning (reformatting?) solves the problem.&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 On the camera the rootfs is mounted as RW and some of the files are changed (also links created) -&lt;br /&gt;
 most of the changes are now moved to tmpfs but something might have been missed.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Notes&amp;lt;/font&amp;gt;==&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; In case rootfs is on flash, it might make sense (or maybe not as the history is updated only once on session exit) to disable bash sessions command history - [http://stackoverflow.com/questions/18663078/disable-history-in-linux disable bash history]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; When using &#039;&#039;&#039;overlays&#039;&#039;&#039;, deleting, existing in the lower layer, dirs can cause errors (hopefully it gets fixed someday), example: &lt;br /&gt;
** /mnt/sda1 exists in lower layer: /tmp/rootfs.ro/tmp&lt;br /&gt;
** upper layer is mounted to &amp;quot;/&amp;quot;&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 # rmdir /mnt/sda1&lt;br /&gt;
 # mkdir /mnt/sda1&lt;br /&gt;
 mkdir: cannot create directory &#039;/mnt/sda1&#039;: Operation not supported&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Category:393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Trigger_393&amp;diff=13851</id>
		<title>Trigger 393</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Trigger_393&amp;diff=13851"/>
		<updated>2022-04-10T18:45:04Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* External connector */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[10389]] board is required (and possibly [[103891]]).&lt;br /&gt;
&lt;br /&gt;
Use cases:&lt;br /&gt;
* Trigger a single camera from external source&lt;br /&gt;
* Synchronize multiple cameras to a master camera or external trigger source&lt;br /&gt;
* Program frame rate&lt;br /&gt;
&lt;br /&gt;
The conditions of the trigger can be generated either internally or externally:&lt;br /&gt;
* for external triggering a [[103891]] board and a 4-conductor 2.5mm audio plug with cable (example: [http://www.digikey.com/products/en?keywords=839-1029-ND digikey]) is required.&lt;br /&gt;
* for internal triggering use J4-J6 connectors with a 4-pin flex cable: J4 - internal trigger source (also transmits timestamps that can be decoded by other cameras), J5-6 - receive trigger&lt;br /&gt;
&lt;br /&gt;
To program trigger go to: &#039;&#039;&#039;http://192.168.0.9/parsedit.php =&amp;gt; External Trigger Controls&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: Be careful with changing parameters when TRIG=4. Camera drivers are driven by the frame sync interrupts from the sensor, so if the sensor is not triggered - everything can get stuck. The Program Ahead value sets the number of frame sync interrupts the camera will wait wait for until a parameter is reprogrammed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Parsedit screenshot 3.png|thumb|750px|External Trigger Controls page]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;parameter&#039;&#039; &lt;br /&gt;
| &#039;&#039;description&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| TRIG &lt;br /&gt;
| Trigger mode. &#039;&#039;&#039;0x0&#039;&#039;&#039; - free running, &#039;&#039;&#039;0x4&#039;&#039;&#039; - triggered by external signal or FPGA timing generator, &#039;&#039;&#039;0x14&#039;&#039;&#039; - triggered in GRR mode&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_MASTER&lt;br /&gt;
| Master sensor_port (0..3) for triggering setup, other ports will have settings duplicated&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_CONDITION &lt;br /&gt;
| FPGA trigger sequencer trigger condition, 0 - internal, else dibits: 00 - do not use, 01 - keep, 10 - active low, 11 - active high for each GPIO[9:0] pin). 10389 board inverts signals, so 0x80000 - input from external connector,  0x08000 - input from internal flex cable (as in Eyesis)&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_DELAY &lt;br /&gt;
| FPGA trigger sequencer trigger delay, 32 bits in pixel clocks (100MHz or 10ns)&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_OUT &lt;br /&gt;
| FPGA trigger sequencer trigger output to GPIO, dibits: 00 - do not use, 01 - keep, 10 - active low GPIO output, 11 - active high GPIO output. 10389 board inverts signals, so 0x02000 - output to external connector (active high), 0x20000 - output to internal flex connector&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_PERIOD &lt;br /&gt;
| FPGA trigger sequencer output sync period (32 bits, in pixel clocks (100MHz or 10ns)). 0- stop. 1 - single, &amp;gt;=256 repetitive with specified period&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_BITLENGTH &lt;br /&gt;
| Bit length minus 1 (in pixel clock cycles) when transmitting/receiving timestamps, without timestamps the output pulse width is 8*(TRIG_BITLENGTH+1). Legal values 2..255&lt;br /&gt;
|-&lt;br /&gt;
| EXTERN_TIMESTAMP &lt;br /&gt;
| When 1 camera will use external timestamp (received over inter-camera synchronization cable) if it is available (no action when external syncronization is not connected), when 0 - local timestamp will be used&lt;br /&gt;
|-&lt;br /&gt;
| XMIT_TIMESTAMP &lt;br /&gt;
| Specify output signal sent through internal/external connector (defined by TRIG_OUT). 0 - transmit just sync pulse (8*(TRIG_BITLENGTH+1) pixel clock periods long), 1 - pulse+timestamp 64*(TRIG_BITLENGTH+1) pixel clock periods long&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Examples&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Internal periodic trigger (10 fps, from fpga generator)===&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_PERIOD=10000000&amp;amp;TRIG=4&lt;br /&gt;
&lt;br /&gt;
===Internal periodic trigger (4 fps, from fpga generator) + output the signal to external port===&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
&lt;br /&gt;
===External trigger receive (with possible self-triggering loop)===&lt;br /&gt;
Here, internal generator is routed to sync the cable output wires.&lt;br /&gt;
&#039;&#039;&#039;If the output wires are connected to the input wires (red+black and white+green) the camera will be self-triggering. &#039;&#039;&#039;&lt;br /&gt;
If the wires are not connected - use external source - apply &amp;quot;plus&amp;quot; to black, &amp;quot;minus&amp;quot; to green ([[103891|check colors and pinout]]):&lt;br /&gt;
&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x95555&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=100000000&amp;amp;TRIG=4&lt;br /&gt;
* at the same time the fpga generator outputs a 1 fps signal - if the sync cable wires are properly connected the camera can be triggered from this &#039;external&#039; signal&lt;br /&gt;
&lt;br /&gt;
===External trigger receive (external source only)===&lt;br /&gt;
The sync cable wires can be looped or not - does not matter.&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x95555&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=100000000&amp;amp;TRIG=4&lt;br /&gt;
* at the same time the fpga generator outputs a 1 fps signal - if the sync cable wires are properly connected the camera can be triggered from this &#039;external&#039; signal&lt;br /&gt;
&lt;br /&gt;
===Recover from missing external trigger signal to internal trigger===&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0*-2&lt;br /&gt;
** &#039;&#039;&#039;*-2&#039;&#039;&#039; - apply value parameter in the current frame (if not specified, the default is 3)&lt;br /&gt;
&lt;br /&gt;
===Manual triggering from PC===&lt;br /&gt;
====Enable====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:2323/trig/pointers&lt;br /&gt;
&lt;br /&gt;
* TRIG=4 should be set in advance&lt;br /&gt;
* The command automatically sets a single-shot trigger mode with TRIG_PERIOD=0x1, but it writes the register directly into the FPGA, &lt;br /&gt;
not updating the TRIG_PERIOD in the PHP interface:&lt;br /&gt;
 http://192.168.0.9/parsedit.php?TRIG&amp;amp;TRIG_CONDITION&amp;amp;TRIG_DELAY&amp;amp;TRIG_OUT&amp;amp;TRIG_PERIOD&amp;amp;TRIG_BITLENGTH&amp;amp;EXTERN_TIMESTAMP&amp;amp;XMIT_TIMESTAMP&amp;amp;refresh&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Trigger/Refresh====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:8081/trig/pointers&lt;br /&gt;
&lt;br /&gt;
====Check status====&lt;br /&gt;
 http://192.168.0.9/parsedit.php?immediate&amp;amp;TRIG&amp;amp;TRIG_PERIOD&amp;amp;SENS_AVAIL&amp;amp;FRAME&lt;br /&gt;
&lt;br /&gt;
====Disable====&lt;br /&gt;
=====Update the TRIG_PERIOD in the current frame=====&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_PERIOD=10000000*-2&lt;br /&gt;
&lt;br /&gt;
=====Update the TRIG_PERIOD from the user interface=====&lt;br /&gt;
* http://192.168.0.9/parsedit.php?TRIG&amp;amp;TRIG_CONDITION&amp;amp;TRIG_DELAY&amp;amp;TRIG_OUT&amp;amp;TRIG_PERIOD&amp;amp;TRIG_BITLENGTH&amp;amp;EXTERN_TIMESTAMP&amp;amp;XMIT_TIMESTAMP&amp;amp;refresh&lt;br /&gt;
* Refresh until the changes are applied (with Program Ahead = 3 it&#039;s 3 times):&lt;br /&gt;
 http://192.168.0.9:8081/trig/pointers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Links&amp;lt;/font&amp;gt;==&lt;br /&gt;
* [[10389]] extension board&lt;br /&gt;
* [[103891]] adapter board for external trigger connection&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;10389 trigger testing&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===External connector===&lt;br /&gt;
In this test the camera triggers itself via audio cable. For cable wiring see [[103891]]. &lt;br /&gt;
* To test:&lt;br /&gt;
 - connect a sensor to port 0&lt;br /&gt;
 - http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
 visual: LED is blinking&lt;br /&gt;
 software: frame counter is running&lt;br /&gt;
&lt;br /&gt;
* It&#039;s easy to modify the cable to trigger itself and other multiple cameras by connecting together red and black wires (+) and white with green (-). For self-testing (external trigger loop back) it is sufficient, for LED - connect anode to &amp;quot;+&amp;quot; (red+black), cathode - to &amp;quot;-&amp;quot; (white+green).&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:10389 extsync selftest.jpeg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Turn on external trigger loop back (cable should be inserted):&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x80000&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
&lt;br /&gt;
Or use interactive page:&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;embed=0.25&amp;amp;title=Parameters+for+groups:+trigger+&amp;amp;TRIG&amp;amp;TRIG_MASTER&amp;amp;TRIG_CONDITION=0x80000&amp;amp;TRIG_DELAY&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG_BITLENGTH&amp;amp;EXTERN_TIMESTAMP&amp;amp;XMIT_TIMESTAMP&amp;amp;TRIG_DECIMATE&amp;amp;THIS_FRAME&amp;amp;refresh&lt;br /&gt;
&lt;br /&gt;
And then click &amp;quot;Apply&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
Both variants should turn camera into external loop back mode with 0.25s period (4 fps). If the page (and the camera) hangs, the loop is not working. For troubleshooting you may restart the camera, open&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;embed=0.25&amp;amp;title=Parameters+for+groups:+trigger+&amp;amp;TRIG&amp;amp;TRIG_MASTER&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_DELAY&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG_BITLENGTH&amp;amp;EXTERN_TIMESTAMP&amp;amp;XMIT_TIMESTAMP&amp;amp;TRIG_DECIMATE&amp;amp;THIS_FRAME&amp;amp;refresh&lt;br /&gt;
&lt;br /&gt;
and press &amp;quot;apply&amp;quot;. The camera will continue using internal trigger (TRIG_CONDITION=0) but still generate trigger output (TRIG_OUT=0x66555). This output can be controlled by either the LED soldered to the cable or the oscilloscope (ground to the green+white, signal - red+black - it should show not just a pulse but a encoded timestamp some 22us long. Changing TRIG_CONDITION to 0x80000 (enter 80000 into &amp;quot;New value/Hex&amp;quot; field without &amp;quot;0x&amp;quot; and press &amp;quot;Apply&amp;quot;) should activate loop back, and if it works then &amp;quot;Refresh&amp;quot; button should cause new &amp;quot;THIS_FRAME&amp;quot; field value. If it does not work - trigger input does not reach camera - bad cable or connector.&lt;br /&gt;
&lt;br /&gt;
===Internal connectors===&lt;br /&gt;
In this test the camera triggers itself via 4-pin flex cable. &lt;br /&gt;
* Connect as displayed on the pictures below.&lt;br /&gt;
** J4 - trigger output (master port)&lt;br /&gt;
** J5-J6 - trigger input (slave ports)&lt;br /&gt;
* To test:&lt;br /&gt;
 - connect a sensor to port 0&lt;br /&gt;
 - http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x8000&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
 software: frame counter is running&lt;br /&gt;
* To sync multiple camera, example:&lt;br /&gt;
 cable 1: camera1 (J4) -&amp;gt; camera2 (J6)&lt;br /&gt;
 cable 2: camera2 (J5) -&amp;gt; camera3 (J6)&lt;br /&gt;
 cable 3: camera3 (J5) -&amp;gt; camera4 (J6)&lt;br /&gt;
 etc.&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10389 intsync selftest.jpeg|thumb|400px]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10389 intsync selftest closeup.jpeg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sync example: from external to internal (chaining)===&lt;br /&gt;
* The simplest synchronization would be making a custom audio cable to sync all cameras in the system&lt;br /&gt;
* In case there are multiple cameras in the same enclosure it might make sense to sync them by chaining using 4-pin flex cables&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10389 sync example 1.jpeg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13108</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13108"/>
		<updated>2022-01-27T21:00:42Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk makeinfo zlib1g-dev python3-numpy&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
&lt;br /&gt;
If you are a developer and plan to commit changes you should use ssh access instead: git clone -b warrior git@git.elphel.com:Elphel/elphel393.git&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Using_minicom_to_connect_to_Elphel393_camera&amp;diff=13586</id>
		<title>Using minicom to connect to Elphel393 camera</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Using_minicom_to_connect_to_Elphel393_camera&amp;diff=13586"/>
		<updated>2022-01-27T19:05:41Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Elphel393 series cameras have built-in USB to serial converter which allows users to get access to serial console. You need microUSB-USB cable to connect a camera to your PC and a terminal software installed on the PC. We use minicom on Kubuntu for this purpose so this short note will describe how to connect to a camera using minicom.&lt;br /&gt;
&lt;br /&gt;
First, you need to install minicom on the PC if have not done it before. Open a terminal on your PC and use the following command on Debian based systems like Ubuntu or Kubuntu:&lt;br /&gt;
&lt;br /&gt;
 ~$sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
or do the same with your preferred package manager.&lt;br /&gt;
minicom connects to a camera via /dev/ttyUSB0 device which is in &#039;&#039;dialout&#039;&#039; group by default:&lt;br /&gt;
&lt;br /&gt;
 ~$ ls -l /dev/ttyUSB0 &lt;br /&gt;
 crw-rw---- 1 root dialout 188, 0 May 14 14:26 /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
You should add your user to &#039;&#039;dialout&#039;&#039; group to make it easier to connect to camera without root permissions:&lt;br /&gt;
&lt;br /&gt;
 ~$ sudo adduser elphel dialout&lt;br /&gt;
 [sudo] password for elphel: &lt;br /&gt;
 Adding user `elphel&#039; to group `dialout&#039; ...&lt;br /&gt;
 Adding user elphel to group dialout&lt;br /&gt;
 Done.&lt;br /&gt;
&lt;br /&gt;
Now user &#039;&#039;elphel&#039;&#039; is in group &#039;&#039;dialout&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
 $ cat /etc/group | grep dialout&lt;br /&gt;
 dialout:x:20:elphel&lt;br /&gt;
&lt;br /&gt;
but new settings have not been applyed yet:&lt;br /&gt;
&lt;br /&gt;
 ~$ groups&lt;br /&gt;
 elphel adm sudo lpadmin sambashare libvirtd&lt;br /&gt;
&lt;br /&gt;
You need to logout from the system and login again. Now your user is added to the group and new settings are applied:&lt;br /&gt;
&lt;br /&gt;
 ~$ groups&lt;br /&gt;
 elphel adm dialout sudo lpadmin sambashare libvirtd&lt;br /&gt;
&lt;br /&gt;
The last step is minicom configuration. minicom tries to connect to a device which is specified in its configuration file /etc/minicom/minrc.dfl and this device is not what we are trying to connect to. If you start minicom with its default config file you will get an error:&lt;br /&gt;
&lt;br /&gt;
 ~$ minicom -c on&lt;br /&gt;
 minicom: cannot open /dev/tty8: Permission denied&lt;br /&gt;
&lt;br /&gt;
It should be started in setup mode with root permissions:&lt;br /&gt;
&lt;br /&gt;
 ~$ sudo minicom -s&lt;br /&gt;
&lt;br /&gt;
Go to &#039;Serial port setup&#039;,&lt;br /&gt;
 change &#039;Serial Device&#039;(A) to /dev/ttyUSB0,&lt;br /&gt;
 turn off &#039;Hardware Flow Control&#039;(F), &lt;br /&gt;
 leave default &#039;Bps/Par/Bits&#039; (E) at 115200 8N1&lt;br /&gt;
 and &#039;Save setup as dfl&#039; in the higher menu.&lt;br /&gt;
Now you can start minicom&lt;br /&gt;
&lt;br /&gt;
 ~$ minicom -c on&lt;br /&gt;
&lt;br /&gt;
and it will connect to a camera.&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13107</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13107"/>
		<updated>2022-01-26T22:26:08Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk makeinfo zlib1g-dev python3-numpy&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions are already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13106</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13106"/>
		<updated>2022-01-26T22:25:00Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Before building&lt;br /&gt;
Installing some dependencies:&lt;br /&gt;
 sudo apt install git build-essential chrpath diffstat gawk makeinfo zlib1g-dev python3-numpy&lt;br /&gt;
Installing old python2.7 (bitbake snapshot that we used has problem with python3.8):&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes (required actions already listed above): When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13105</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13105"/>
		<updated>2022-01-26T22:12:53Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes: When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
When building php: configure: error: zip support requires ZLIB. Use --with-zlib-dir=&amp;lt;DIR&amp;gt; to specify prefix where ZLIB include and library are located&lt;br /&gt;
 sudo apt install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13104</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13104"/>
		<updated>2022-01-26T21:48:43Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes: When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
If you did not notice missing numpy, then during bitbake you will get error &amp;quot;build No rule to make target &#039;drivers/elphel/x393.o&#039;, needed by &#039;drivers/elphel/built-in.a&#039;.  Stop.&amp;quot; in that case you need to install numpy, re-run setup.py (make sure numpy error is gone) then re-create linux kernel links during next build by erasing old ones:&lt;br /&gt;
 bitbake linux-xlnx -c clean&lt;br /&gt;
and re-running&lt;br /&gt;
 bitbake linux-xlnx device-tree core-image-elphel393&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13103</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13103"/>
		<updated>2022-01-26T21:32:55Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes: When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
Program test_mcntrl.py that builds x393.h header files from FPGA code that runs during ./setup.py requires numpy and results in error output if missing Still setup.py continues, you need to look through its output few lines after&lt;br /&gt;
 * x393&lt;br /&gt;
 git host: git.elphel.com&lt;br /&gt;
 Clone and checkout: x393&lt;br /&gt;
&lt;br /&gt;
You may install numpy with&lt;br /&gt;
 sudo apt install python3-numpy&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13102</id>
		<title>Poky manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Poky_manual&amp;diff=13102"/>
		<updated>2022-01-26T20:19:27Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
Build the firmware for Elphel 10393 series camera systems from scratch.&lt;br /&gt;
&lt;br /&gt;
Prebuilt releases can be found [https://community.elphel.com/files/393/ here].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Use cases&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Update Linux Kernel when developing a driver&lt;br /&gt;
* Include application to the default firmware package&lt;br /&gt;
* Update Elphel&#039;s PHP extension&lt;br /&gt;
* C/C++ applications if developed on PC require a cross-compiler and require Yocto installation or some other alternative.&lt;br /&gt;
&lt;br /&gt;
Other projects written in Python, PHP, Javascript, HTML, C/C++ (gcc is installed on the system board) can be developed on the camera. Installing the framework is not required but it can simplify the development process.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Building embedded Linux image for Zynq ARMv7 platform - Elphel 10393 board&lt;br /&gt;
* Yocto Poky revision = 2.7.1 (Warrior) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 20.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Older OSes are not supported. Roll back to get built in 16.04.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.4 (Rocko) - &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;builds in Kubuntu 16.04.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Won&#039;t build in 18.04 or 20.04.&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Yocto Poky revision = 2.0 (Jethro)&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Features&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Environment is set up with a single script&lt;br /&gt;
* All Elphel projects are configured for Eclipse IDE:&lt;br /&gt;
** fpga projects (verilog)&lt;br /&gt;
** kernel&lt;br /&gt;
** applications projects&lt;br /&gt;
* All steps for fpga projects are run from Eclipse IDE&lt;br /&gt;
** Read about [http://blog.elphel.com/2016/05/tutorial-02-eclipse-based-fpga-development-environment-for-elphel-cameras/ setting up Eclipse based FPGA development]&lt;br /&gt;
** [https://git.elphel.com/Elphel/vdt-plugin VDT Plugin repository]&lt;br /&gt;
&lt;br /&gt;
* Once everything is built it supports updating software projects (files and binaries) on the target system&lt;br /&gt;
** access is set up in yocto&#039;s &#039;&#039;local.conf&#039;&#039; (see &#039;&#039;setup.py&#039;&#039; output) + &#039;&#039;ssh-copy-id&#039;&#039;&lt;br /&gt;
** &#039;&#039;bitbake some-app -c target_scp&#039;&#039; from the command line or Eclipse IDE - see examples in &#039;&#039;&#039;elphel-apps-...&#039;&#039;&#039; at [https://git.elphel.com/Elphel Git]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Requirements&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Kubuntu 20.04 x64&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 18.04 x64 (as of Dec 2018) - Poky: 2.7.1 Warrior (not tested but might build w/o problems)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;Kubuntu 16.04 x64 (as of Dec 2018) - Poky: 2.4 Rocko, 2.7.1 Warrior&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Output files&amp;lt;/font&amp;gt;==&lt;br /&gt;
The names are listed as they appear in the u-boot configuration header file - actual output files have different names:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! File(s)&lt;br /&gt;
! Build Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;boot.bin&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| u-boot as the first stage bootloader = Secondary Program Loader (SPL) that boots &#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;u-boot-dtb.img&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake u-boot&#039;&#039;&lt;br /&gt;
| full size u-boot with a stripped device tree (&#039;&#039;cat u-boot.img some_stripped_devicetree.dtb &amp;gt; u-boot-dtb.img&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|valign=&#039;top&#039;| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;devicetree.dtb&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| bitbake device-tree&lt;br /&gt;
| device tree with listed interfaces, zynq registers, interrupts and drivers&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/mmc/devicetree.dtb&#039;&#039; - mount rootfs from mmc partition&lt;br /&gt;
* &#039;&#039;elphel393/bootable-images/nand/devicetree.dtb&#039;&#039; - mount rootfs from NAND flash&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake linux-xlnx&#039;&#039;&lt;br /&gt;
| kernel, drivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;font color=&#039;darkblue&#039;&amp;gt;&#039;&#039;&#039;rootfs.ubifs&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.ubi&#039;&#039;&#039;, &#039;&#039;&#039;rootfs.tar.gz&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
| &#039;&#039;bitbake core-image-elphel393&#039;&#039;&lt;br /&gt;
| rootfs in different formats - *.ubi* for NAND, *.tar.gz for mmc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file are located at &#039;&#039;&#039;elphel393/bootable-images/&#039;&#039;&#039;, which is a link to poky&#039;s deploy directory &#039;&#039;&#039;elphel393/poky/build/tmp/deploy/images/elphel393/&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* complete set of files for rootfs in NAND Flash: &#039;&#039;elphel393/bootable-images/nand/&#039;&#039;&lt;br /&gt;
* complete set of files for rootfs on MMC (micro SD card): &#039;&#039;elphel393/bootable-images/mmc/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Write files to media and boot&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Boot from micro SD card===&lt;br /&gt;
* Use recovery or regular &amp;amp;mu;SD card&lt;br /&gt;
* EXT4 partition mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[Sd_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Boot from NAND flash===&lt;br /&gt;
* The default boot option - power on.&lt;br /&gt;
* A UBIFS image is written to /dev/mtd4 - is mounted as &#039;&#039;&#039;/&#039;&#039;&#039;&lt;br /&gt;
[[NAND_flash_boot_rootfs|Detailed instructions]]&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* [[Boot_options_393|&#039;&#039;&#039;Read more&#039;&#039;&#039;]] about boot options.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Setup&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
* Poky 2.7.1 Warrior (Kubuntu 20.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;warrior&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;Poky 2.4 Rocko (Kubuntu 16.04)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 git clone -b &#039;&#039;&#039;rocko&#039;&#039;&#039; https://git.elphel.com/Elphel/elphel393.git&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./setup.py&lt;br /&gt;
 cd poky&lt;br /&gt;
 . ./oe-init-build-env&lt;br /&gt;
 bitbake u-boot device-tree linux-xlnx core-image-elphel393&lt;br /&gt;
&amp;lt;!--&#039;&#039;Temporary: linux-xlnx in Rocko depends on branch &#039;lwir&#039; for x393. Change in projects.json line 42 from &#039;master&#039; to &#039;lwir&#039;.&#039;&#039;--&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Notes: When trying to run bitbake on a new install got problems with older bitbake version (current build uses specific snapshot) and python3.8. So I install old python2.7 and linked it:&lt;br /&gt;
 sudo apt install python2.7&lt;br /&gt;
 sudo ln -s python2.7 python2&lt;br /&gt;
 sudo ln -s python2.7 python&lt;br /&gt;
&lt;br /&gt;
After this bitbake just complained about missing tools (git, build-essential were already installed):&lt;br /&gt;
&lt;br /&gt;
 sudo apt install chrpath diffstat gawk makeinfo&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Compare &#039;&#039;&#039;built&#039;&#039;&#039; vs &#039;&#039;&#039;deployed&#039;&#039;&#039; software versions&amp;lt;/font&amp;gt;==&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 cd elphel393&lt;br /&gt;
 ./check_versions.py root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Check versions.png|thumb|400px|check_versions.py output in terminal (web-393 revision on PC is ahead of the one installed on the camera)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Details for development&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Development_for_10393|&#039;&#039;&#039;Development for 10393&#039;&#039;&#039;]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_assemblies&amp;diff=12884</id>
		<title>Elphel camera assemblies</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_assemblies&amp;diff=12884"/>
		<updated>2021-08-30T23:15:32Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393]]&lt;br /&gt;
&lt;br /&gt;
[[Elphel_camera_parts | Elphel_camera_parts_0353]]&lt;br /&gt;
&lt;br /&gt;
[https://blog.elphel.com/2015/12/x3d-assemblies-from-any-cad/ Blog post about the software used to create these models]&lt;br /&gt;
==Camera assemblies ==&lt;br /&gt;
=== LWIR16 prototype ===&lt;br /&gt;
{{Cad4c_assembly|lwir16-37-flat}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== MNC393-XCAM camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC393-XCAM}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== EYESIS4PI-26-393 camera ===&lt;br /&gt;
{{Cad4c_assembly|EYESIS4PI-26-393}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NC393-M2242-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2242-CS}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-CS}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-F-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NC393-M2260-F-CS-IMU camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS-IMU}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-F-CS-IMU-GPS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS-IMU-GPS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== MC393F21 camera ===&lt;br /&gt;
{{Cad4c_assembly|MC393F21}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-4PI4 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-4PI4}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-4PI4-IMU-GPS camera with IMU and GPS modules ===&lt;br /&gt;
{{Cad4c_assembly|NC393-4PI4-IMU-GPS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== EYESIS4PI-26 camera ===&lt;br /&gt;
{{Cad4c_assembly|EYESIS4PI-26}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-369 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-369}}&lt;br /&gt;
----&lt;br /&gt;
=== MNC354-2-STEREO camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC354-2-STEREO}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-PHG camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-PHG}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-PHG3 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-PHG3}}&lt;br /&gt;
----&lt;br /&gt;
=== MNC354-2B camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC354-2B}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_assemblies&amp;diff=12883</id>
		<title>Elphel camera assemblies</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_assemblies&amp;diff=12883"/>
		<updated>2021-08-30T22:58:15Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* LWIR16 prototype */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393]]&lt;br /&gt;
&lt;br /&gt;
[[Elphel_camera_parts | Elphel_camera_parts_0353]]&lt;br /&gt;
&lt;br /&gt;
[https://blog.elphel.com/2015/12/x3d-assemblies-from-any-cad/ Blog post about the software used to create these models]&lt;br /&gt;
==Camera assemblies ==&lt;br /&gt;
=== MNC393-XCAM camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC393-XCAM}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== EYESIS4PI-26-393 camera ===&lt;br /&gt;
{{Cad4c_assembly|EYESIS4PI-26-393}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NC393-M2242-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2242-CS}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-CS}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-F-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NC393-M2260-F-CS-IMU camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS-IMU}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-F-CS-IMU-GPS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS-IMU-GPS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== MC393F21 camera ===&lt;br /&gt;
{{Cad4c_assembly|MC393F21}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-4PI4 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-4PI4}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-4PI4-IMU-GPS camera with IMU and GPS modules ===&lt;br /&gt;
{{Cad4c_assembly|NC393-4PI4-IMU-GPS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== EYESIS4PI-26 camera ===&lt;br /&gt;
{{Cad4c_assembly|EYESIS4PI-26}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-369 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-369}}&lt;br /&gt;
----&lt;br /&gt;
=== MNC354-2-STEREO camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC354-2-STEREO}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-PHG camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-PHG}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-PHG3 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-PHG3}}&lt;br /&gt;
----&lt;br /&gt;
=== MNC354-2B camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC354-2B}}&lt;br /&gt;
----&lt;br /&gt;
=== LWIR16 prototype ===&lt;br /&gt;
{{Cad4c_assembly|lwir16-37-flat}}&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_assemblies&amp;diff=12882</id>
		<title>Elphel camera assemblies</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_assemblies&amp;diff=12882"/>
		<updated>2021-08-30T22:50:54Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393]]&lt;br /&gt;
&lt;br /&gt;
[[Elphel_camera_parts | Elphel_camera_parts_0353]]&lt;br /&gt;
&lt;br /&gt;
[https://blog.elphel.com/2015/12/x3d-assemblies-from-any-cad/ Blog post about the software used to create these models]&lt;br /&gt;
==Camera assemblies ==&lt;br /&gt;
=== MNC393-XCAM camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC393-XCAM}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== EYESIS4PI-26-393 camera ===&lt;br /&gt;
{{Cad4c_assembly|EYESIS4PI-26-393}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NC393-M2242-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2242-CS}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-CS}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-F-CS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NC393-M2260-F-CS-IMU camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS-IMU}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-M2260-F-CS-IMU-GPS camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-M2260-F-CS-IMU-GPS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== MC393F21 camera ===&lt;br /&gt;
{{Cad4c_assembly|MC393F21}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-4PI4 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC393-4PI4}}&lt;br /&gt;
----&lt;br /&gt;
=== NC393-4PI4-IMU-GPS camera with IMU and GPS modules ===&lt;br /&gt;
{{Cad4c_assembly|NC393-4PI4-IMU-GPS}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== EYESIS4PI-26 camera ===&lt;br /&gt;
{{Cad4c_assembly|EYESIS4PI-26}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-369 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-369}}&lt;br /&gt;
----&lt;br /&gt;
=== MNC354-2-STEREO camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC354-2-STEREO}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-PHG camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-PHG}}&lt;br /&gt;
----&lt;br /&gt;
=== NC353L-PHG3 camera ===&lt;br /&gt;
{{Cad4c_assembly|NC353L-PHG3}}&lt;br /&gt;
----&lt;br /&gt;
=== MNC354-2B camera ===&lt;br /&gt;
{{Cad4c_assembly|MNC354-2B}}&lt;br /&gt;
----&lt;br /&gt;
=== LWIR16 prototype ===&lt;br /&gt;
{{Cad4c_assembly|LWIR16}}&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Camogm&amp;diff=3258</id>
		<title>Camogm</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Camogm&amp;diff=3258"/>
		<updated>2021-07-11T21:39:58Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Starting camogm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
This program allows recording of the video/images acquired by Elphel 353/363 series cameras to the storage media. It is developed to use such media as hard disk drives, compact flash cards or USB storage devices (with reduced data rate as ETRAX FS processor currently supports only USB 1.1, not the fast USB 2). But it might work over the NFS and be useful even for the basic model 353 cameras that do not have any additional storage devices attached.&lt;br /&gt;
&lt;br /&gt;
camogm is designed to run in the background and accept commands through a named pipe. It writes JPEG-encoded frames from the camera [[Circbuf|circbuf]]-circular video buffer in any of the 3 formats:&lt;br /&gt;
*&#039;&#039;&#039;ogm&#039;&#039;&#039; - MJPEG video in Xiph Ogg container&lt;br /&gt;
*&#039;&#039;&#039;jpeg&#039;&#039;&#039; - series of the individual JPEG files (1 file per frame)&lt;br /&gt;
*&#039;&#039;&#039;mov&#039;&#039;&#039; - MJPEG video in Apple QuickTime(R) container&lt;br /&gt;
As of today the last one (mov) is probably the fastest one in the camera as it uses the minimum of computational resources. Ogg is optimized for streaming and requires additional memory copying and checksum calculation for all of the recorded data, individual JPEG files grow large directories that can use system resources, while recording mov format simply merges FPGA-encoded frames (with JPEG and optional Exif headers added by the software) and the file header (with frame index) is calculated only once per file.&lt;br /&gt;
&lt;br /&gt;
This program makes use of the [[Circbuf|circbuf]] that can hold several seconds of even high resolution/high frame rate video, so switching from file to file and/or waiting for the search operations on the HDD will not cause the frame loss - that can be verified if the Exif headers are enabled - regardless of the format selected each frame will have the exact timestamp (with 1 microsecond resolution).&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
=== Starting camogm ===&lt;br /&gt;
&lt;br /&gt;
Eventually camogm will be started (and restarted if needed) automatically at boot time, now it is started manually with the command&lt;br /&gt;
&lt;br /&gt;
 camogm &amp;lt;named_pipe_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;named_pipe_name&amp;gt; is the filename that will be used to pass commands to the camogm. A good choice is &amp;quot;/var/state/camogm_cmd&amp;quot; and it is used in a [http://elphel.cvs.sourceforge.net/elphel/elphel353-7.1/apps/camogm/camogmstate.php?view=markup camogmstate.php] - a demo PHP script that can read the current status of the camogm recorder. Running camogm without any parameters or with &amp;quot;--help&amp;quot; will just output the short version of this page. So this is the example of the command that starts camogm as a background process from the shell prompt (i.e. telnet or [[Phpshell]]):&lt;br /&gt;
&lt;br /&gt;
 camogm /var/state/camogm_cmd &amp;amp;&lt;br /&gt;
 camogm -n /var/state/camogm_cmd -p 1234 -s /mnt/sda1/test4&lt;br /&gt;
&lt;br /&gt;
=== Sending Commands to camogm ===&lt;br /&gt;
&lt;br /&gt;
When the camogm is running you may verify that with the command:&lt;br /&gt;
 ps | grep &amp;quot;camogm&amp;quot;&lt;br /&gt;
It is waiting for the commands to be sent to the pipe (/var/state/camogm_cmd above) as text strings. Commands are separated with the new lines (&amp;quot;\n&amp;quot;) and/or semicolons (&amp;quot;;&amp;quot;), command names are separated from the optional parameters by spaces &amp;quot; &amp;quot; and/or equal signs &amp;quot;=&amp;quot;. The following is an example of such command sent from the shell prompt using command &amp;quot;echo&amp;quot; and output redirection &amp;quot;&amp;gt;&amp;quot; to th camogm command pipe&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;status; exif 1; format=jpeg;status=/var/tmp/camogm.status&amp;quot; &amp;gt; /var/state/camogm_cmd&lt;br /&gt;
&lt;br /&gt;
That command will:&lt;br /&gt;
# print current status information sending it to the standard output (may not be visible if the program was not started from the same session),&lt;br /&gt;
# set exif mode ON (each frame will have the full Exif header including a precise time stamp),&lt;br /&gt;
# set output format to a series of individual JPEG files, and then&lt;br /&gt;
# send status information to a file /var/tmp/camogm.status in the camera file system. &lt;br /&gt;
The [http://elphel.cvs.sourceforge.net/elphel/elphel353-7.1/apps/camogm/camogmstate.php?view=markup camogmstate.php] script shows how to use a named pipe for the status information so the caller will wait until camogm returns that status info (the &amp;quot;echo&amp;quot; command by itself will not wait for the status, there can (and will) be a delay between finishing of echo (or equivalent) and the appearance of the status info in the output file. &#039;&#039;With the current state of the software that status info may never come if the camera frame capture process is stopped while camogm was recording video as it checks for the new commands once per frame if it is in the &amp;quot;running&amp;quot; state (in &amp;quot;stopped&amp;quot; state in checks for the incoming commands twice a second)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== camogm Commands ==&lt;br /&gt;
===start===&lt;br /&gt;
No parameters - just start recording video/images. At least two frames in the buffer are needed to start recording (they will not be lost) - the time stamp difference is used to calculate the frame rate. In the case there are not enough frames in the buffer (i.e. video acquisition is not started) the state of the camogm (reported by &#039;&#039;status&#039;&#039; and &#039;&#039;xstatus&#039;&#039;) will be &amp;quot;starting&amp;quot; before it will become &amp;quot;running&amp;quot;. The video will be recorded to the same file (may be a directory for .jpeg format) until explicitly stopped, or until the specified file size/duration/number of frames is exceeded or some critical parameters (like frame dimensions) are changed. In those cases (not explicitly stopped) camogm will restart recording into a new file (filenames are composed from the specified prefix and the timestamp) so that no frames will be lost (if it is not overwhelmed by the incoming frame rate) and the first frame of a new file segment will be the next one acquired after the last one in the previous file.&lt;br /&gt;
===stop===&lt;br /&gt;
Just stop the recording. If the video acquisition is on and camogm is started again before the [[Circbuf|circbuf]] is overrun, there will be no gaps in the recording. But if the pause will be too long some frames will be lost and there will be a gap between the next file and the previous one.&lt;br /&gt;
&lt;br /&gt;
===exit===&lt;br /&gt;
Terminate camogm program (it will execute implied &amp;quot;stop&amp;quot; command first to finish recording if any).&lt;br /&gt;
===duration===&lt;br /&gt;
 duration=&amp;lt;time_in_seconds&amp;gt;&lt;br /&gt;
Specify the maximal duration of each individual file segment. The new file will be started if this time limit will be exceeded. The default duration is 60 seconds, current value is reported by status/xstatus commands.&lt;br /&gt;
===length===&lt;br /&gt;
 length=&amp;lt;file_size_in_bytes&amp;gt;&lt;br /&gt;
Specify the maximal size of each individual file segment in bytes. The new file will be started if this limit will be exceeded. The limit is 2.147.483.647 bytes (~2 GB), current value is reported by status/xstatus commands.&lt;br /&gt;
&lt;br /&gt;
===max_frames===&lt;br /&gt;
 max_frames=&amp;lt;number_of_frames&amp;gt;&lt;br /&gt;
Specify the maximal number of frames of each individual file segment. The new file will be started if this limit is exceeded. The default value is 16384.&lt;br /&gt;
&lt;br /&gt;
===frames_per_chunk===&lt;br /&gt;
 frames_per_chunk=&amp;lt;number_of_frames_per_chunk&amp;gt; (default 10)&lt;br /&gt;
Sets the number of chunk entries in the *.mov header (10 means  there&#039;s 1 chunk entry with an absolute offset  in the header for each 10 frames).&lt;br /&gt;
&lt;br /&gt;
===start_after_timestamp===&lt;br /&gt;
 start_after_timestamp=SS.UU # double (0123456789.012345)&lt;br /&gt;
Delays recording start until a specific time-stamp has been reached.&lt;br /&gt;
This command alone does not start a recording you need to run the &amp;quot;start&amp;quot; command as well after setting start_after_timestamp.&lt;br /&gt;
&lt;br /&gt;
===prefix===&lt;br /&gt;
 prefix=&amp;lt;file_name_prefix&amp;gt;&lt;br /&gt;
prefix value is used by the camogm to generate file names/paths to store video content. Full paths will be generated from the specified prefix, timestamps of the first frame in the segment and appropriate extension (&amp;quot;.ogm&amp;quot;,&amp;quot;.jpeg&amp;quot; or &amp;quot;.mov&amp;quot;). The prefix consists of directory path (everything before the last slash &amp;quot;/&amp;quot;) and the file name prefix (what remains after the last &amp;quot;/&amp;quot;). In the case of video formats (&amp;quot;.ogm&amp;quot;,&amp;quot;.mov&amp;quot;) the directory prefix should point to an existent directory on the mounted writeable media - camogm will not try to create missing directories and will just fail to start recording. In the case of individual JPEG files camogm will try to create the last level in directory structure if it does not exist and place all the frame files there.&lt;br /&gt;
&lt;br /&gt;
===exif===&lt;br /&gt;
Controls generation and output of [[Exif]] headers for each JPEG-encoded frame. These headers slightly (for the large frames) increase the file sizes and add a little of computation to the CPU, but they are very useful for later processing as they provide precise timing information that does not depend on particular file format and timing calculations that involve frame rate and frame numbers.&lt;br /&gt;
 exif=0&lt;br /&gt;
turns it off, while&lt;br /&gt;
 exif=1&lt;br /&gt;
turns it on. Current default value is off, but that may change in the future so it is better to specify the desired value.&lt;br /&gt;
===timescale===&lt;br /&gt;
Currently only works for &amp;quot;mov&amp;quot; format (will add to &amp;quot;ogm&amp;quot; later). Values &amp;gt;1.0 make the video play back slower than recorded (&#039;slow motion&#039;), the values less than 1.0 make the playback faster (time lapse video).&lt;br /&gt;
===frameskip===&lt;br /&gt;
 frameskip=&amp;lt;number_of_frames_to_skip&amp;gt;&lt;br /&gt;
Skip specified number of frames after each frame stored (default 0 - no skip)&lt;br /&gt;
===timelapse===&lt;br /&gt;
 timelapse=&amp;lt;number_seconds_between_frames&amp;gt;&lt;br /&gt;
Alternative way to reduce frame rate of the recorded images - specify required image period (integer value, in seconds). All intermediate images will be skipped, only first after each multiple of the specified interval will be stored. That means, that the time interval between subsequent images maybe slightly different, but the rounding error will not accumulate during long recordings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;timelapse&#039;&#039; and &#039;&#039;frameskip&#039;&#039; are mutually exclusive (they even use the same variable with positive values for frame skip (in frames) and negative - timelapse (in seconds).&lt;br /&gt;
===format===&lt;br /&gt;
 format=[ogm|jpeg|mov]&lt;br /&gt;
*ogm - record video as Ogg Media Stream&lt;br /&gt;
*jpeg - record video as a series of JPEG files&lt;br /&gt;
*mov - record video as Apple Quicktime (R) files&lt;br /&gt;
===reset===&lt;br /&gt;
Mostly a debug feature. Force camogm to start next file from the two most recent images in the circbuf, discarding all the older ones. It is the same action camogm does when the buffer is overrun and frames are lost.&lt;br /&gt;
&lt;br /&gt;
===debug===&lt;br /&gt;
 debug&lt;br /&gt;
 debug=&amp;lt;file&amp;gt;&lt;br /&gt;
The first command form (with to file specified) turns the debug output off, the second - directs it somewhere. camogm recognizes several special names like &amp;quot;stdout&amp;quot; and &amp;quot;stderr&amp;quot;, it also treats file name &amp;quot;none&amp;quot;, &amp;quot;null&amp;quot; and &amp;quot;/dev/null&amp;quot; as empty and turns the debug feature off.&lt;br /&gt;
===debuglev===&lt;br /&gt;
 debuglev=&amp;lt;integer_value&amp;gt;&lt;br /&gt;
Allows to specify debug verbosity level, the higher the level the more information is output (it may slow down camogm and cause it to drop frames even if it could handle it with no/low debug output).&lt;br /&gt;
===save_gp===&lt;br /&gt;
 save_gp=[0|1]&lt;br /&gt;
As a debug feature camogm can set the camera global circbuf read pointer to the current value of camogm&#039;s read pointer. In that case it is possible                                                      to watch the camogm progress by other programs, such as [[Imgsrv|imgsrv]]&lt;br /&gt;
===status===&lt;br /&gt;
 status&lt;br /&gt;
 status=&amp;lt;status_output_file&amp;gt;&lt;br /&gt;
This command provides the current camogm state information and sends it to standard output (maybe invisible if camogm was started from different shell session or by other means) or to the specified output file in plain text format. The same information is available in XML format - see  xstatus command below. The following is a commented sample output generated by the status command:&lt;br /&gt;
&lt;br /&gt;
 state              running                          // may be &#039;&#039;&#039;stopped&#039;&#039;&#039;, &#039;&#039;&#039;running&#039;&#039;&#039; and &#039;&#039;&#039;starting&#039;&#039;&#039;. Usually the last&lt;br /&gt;
                                                     // one can be only visible if there are no images coming to the buffer.&lt;br /&gt;
 file               /tmp/z/qvid1195433980_662716.mov // full path toi the current file being recorded&lt;br /&gt;
 frame              293                              // current frame number (starts from 0)&lt;br /&gt;
 file duration      14.616060 sec                    // current duration of the video in this file segment&lt;br /&gt;
 file length        13167561 B                       // current video file size&lt;br /&gt;
 frame period       50055 (0xc387)                   // frame period in microseconds (this one is approximately 1/20 sec)&lt;br /&gt;
 frames to skip     100 (left 37)                    // number of frames to skip after the frame is acquired. Shown only if frame skip mode is enabled.&lt;br /&gt;
 timelapse period   10 sec (remaining 10 sec)        // frame period for time lapse mode (time till next frame will be stored). Shown only if time lapse mode enabled&lt;br /&gt;
 width              1024 (0x400)                     // frame width in pixels&lt;br /&gt;
 height             768 (0x300)                      // frame height in pixels&lt;br /&gt;
                                                     // - blank line&lt;br /&gt;
 output format      mov                              // output file format - one of &amp;quot;ogm&amp;quot;, &amp;quot;jpeg&amp;quot; and &amp;quot;mov&amp;quot;&lt;br /&gt;
 using exif         yes                              // frames are generated with Exif headers that include time stamps&lt;br /&gt;
 path prefix:       /tmp/z/qvid                      // file prefix as specified in &#039;&#039;&#039;prefix&#039;&#039;&#039; command&lt;br /&gt;
 max file duration: 60 sec                           // maximal file duration as specified in &#039;&#039;&#039;duration&#039;&#039;&#039; command&lt;br /&gt;
 max file length:   100000000 B                      // maximal file length as specified in &#039;&#039;&#039;length&#039;&#039;&#039; command&lt;br /&gt;
 max frames         16384                            // maximal number of frames as specified in ... none yet, uses default&lt;br /&gt;
 timescale          1.000000                         // time scale as specified in &#039;&#039;&#039;timescale&#039;&#039;&#039; command&lt;br /&gt;
 frames per chunk   10                               // &amp;quot;frames per chunk&amp;quot; used in &amp;quot;mov&amp;quot; format&lt;br /&gt;
                                                     // - blank line&lt;br /&gt;
 buffer overruns    0                                // number of buffer overruns while recording since last status/xstatus&lt;br /&gt;
                                                     // (these commands zero the buffer overruns counter). If no overruns &lt;br /&gt;
                                                     // are reported, no frames are lost, including between file segments.&lt;br /&gt;
 buffer minimal     19748288                         // Minimal level of the buffer memory since last status/xstatus command.&lt;br /&gt;
 buffer free        19748192                         // Current amount of free memory in the video buffer (actual value might&lt;br /&gt;
                                                     // be one frame less as the FPGA write pointer is reported only after&lt;br /&gt;
                                                     // the whole frame is stored&lt;br /&gt;
 buffer used        43680                            // Amount of memory currently used in the video buffer.&lt;br /&gt;
 circbuf_rp         10933536 (0xa6d520)              // Current location of the read pointer in the video buffer&lt;br /&gt;
                                                     // - blank line&lt;br /&gt;
 debug output to    stderr                           // where the debug messages are sent to (as specified in &#039;&#039;&#039;debug&#039;&#039;&#039; command)&lt;br /&gt;
 debug level        1                                // Debug verbosity level, the higher - the more &amp;quot;noisier&amp;quot;. Set in&lt;br /&gt;
                                                     // &#039;&#039;&#039;debuglev&#039;&#039;&#039; command.&lt;br /&gt;
 use global pointer no                               // see &#039;&#039;&#039;save_gp&#039;&#039;&#039; command.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;-1&amp;quot; values that status/xstatus commands may return for some parameters mean &amp;quot;undefined&amp;quot;, they are calculated only during video recording.&lt;br /&gt;
&lt;br /&gt;
===xstatus===&lt;br /&gt;
 status&lt;br /&gt;
 status=&amp;lt;status_output_file&amp;gt;&lt;br /&gt;
Same information as described for &#039;&#039;&#039;status&#039;&#039;&#039; command above, but presented in XML format more suitable to be processed by other software while &#039;&#039;&#039;status&#039;&#039;&#039; is easier to read by humans. See [http://elphel.cvs.sourceforge.net/elphel/elphel353-7.1/apps/camogm/camogmstate.php?view=markup camogmstate.php] PHP script that returns this XML data to the HTTP GET requests.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;camogm_state&amp;gt;&lt;br /&gt;
  &amp;lt;state&amp;gt;&amp;quot;running&amp;quot;&amp;lt;/state&amp;gt;&lt;br /&gt;
  &amp;lt;file_name&amp;gt;&amp;quot;/tmp/z/qvid1195440137_027276.mov&amp;quot;&amp;lt;/file_name&amp;gt;&lt;br /&gt;
  &amp;lt;frame_number&amp;gt;281&amp;lt;/frame_number&amp;gt;&lt;br /&gt;
  &amp;lt;file_duration&amp;gt;14.015400&amp;lt;/file_duration&amp;gt;&lt;br /&gt;
  &amp;lt;file_length&amp;gt;12731197&amp;lt;/file_length&amp;gt;&lt;br /&gt;
  &amp;lt;frame_period&amp;gt;50055&amp;lt;/frame_period&amp;gt;&lt;br /&gt;
  &amp;lt;frames_skip&amp;gt;0&amp;lt;/frames_skip&amp;gt;&lt;br /&gt;
  &amp;lt;seconds_skip&amp;gt;10&amp;lt;/seconds_skip&amp;gt;&lt;br /&gt;
  &amp;lt;frames_skip_left&amp;gt;0&amp;lt;/frames_skip_left&amp;gt;&lt;br /&gt;
  &amp;lt;seconds_skip_left&amp;gt;7&amp;lt;/seconds_skip_left&amp;gt;&lt;br /&gt;
  &amp;lt;frame_width&amp;gt;1024&amp;lt;/frame_width&amp;gt;&lt;br /&gt;
  &amp;lt;frame_height&amp;gt;768&amp;lt;/frame_height&amp;gt;&lt;br /&gt;
  &amp;lt;format&amp;gt;&amp;quot;mov&amp;quot;&amp;lt;/format&amp;gt;&lt;br /&gt;
  &amp;lt;exif&amp;gt;&amp;quot;yes&amp;quot;&amp;lt;/exif&amp;gt;&lt;br /&gt;
  &amp;lt;prefix&amp;gt;&amp;quot;/tmp/z/qvid&amp;quot;&amp;lt;/prefix&amp;gt;&lt;br /&gt;
  &amp;lt;max_duration&amp;gt;60&amp;lt;/max_duration&amp;gt;&lt;br /&gt;
  &amp;lt;max_length&amp;gt;100000000&amp;lt;/max_length&amp;gt;&lt;br /&gt;
  &amp;lt;max_frames&amp;gt;16384&amp;lt;/max_frames&amp;gt;&lt;br /&gt;
  &amp;lt;timescale&amp;gt;1.000000&amp;lt;/timescale&amp;gt;&lt;br /&gt;
  &amp;lt;frames_per_chunk&amp;gt;10&amp;lt;/frames_per_chunk&amp;gt;&lt;br /&gt;
  &amp;lt;buffer_overruns&amp;gt;0&amp;lt;/buffer_overruns&amp;gt;&lt;br /&gt;
  &amp;lt;buffer_minimal&amp;gt;19747712&amp;lt;/buffer_minimal&amp;gt;&lt;br /&gt;
  &amp;lt;buffer_free&amp;gt;19747808&amp;lt;/buffer_free&amp;gt;&lt;br /&gt;
  &amp;lt;buffer_used&amp;gt;44064&amp;lt;/buffer_used&amp;gt;&lt;br /&gt;
  &amp;lt;circbuf_rp&amp;gt;16275392&amp;lt;/circbuf_rp&amp;gt;&lt;br /&gt;
  &amp;lt;debug_output&amp;gt;&amp;quot;stderr&amp;quot;&amp;lt;/debug_output&amp;gt;&lt;br /&gt;
  &amp;lt;debug_level&amp;gt;1&amp;lt;/debug_level&amp;gt;&lt;br /&gt;
  &amp;lt;use_global_rp&amp;gt;&amp;quot;no&amp;quot;&amp;lt;/use_global_rp&amp;gt;&lt;br /&gt;
 &amp;lt;/camogm_state&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This program does not control the process of acquisition of the video/images to the camera internal buffer, it only retrieves that data from the buffer (waiting when needed), packages it to selected format and stores the result files.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Geo Tagging Specific Commands==&lt;br /&gt;
&lt;br /&gt;
===kml===&lt;br /&gt;
 kml=1 # turn on geotagging&lt;br /&gt;
&lt;br /&gt;
 kml=0 # turn off geotagging&lt;br /&gt;
&lt;br /&gt;
Enable / Disable KML output (geotagging).&lt;br /&gt;
&lt;br /&gt;
===kml_period===&lt;br /&gt;
 kml_period=&amp;lt;number_seconds_between_kml_entries&amp;gt;&lt;br /&gt;
Set the amount of seconds between KML entries. (default: 2)&lt;br /&gt;
&lt;br /&gt;
===kml_hhf===&lt;br /&gt;
 kml_hhf=45 # set horizontal half FOV to 45° so the full horizontal FOV is 90°&lt;br /&gt;
Set horizontal half FOV in degrees. (default: 20.0)&lt;br /&gt;
&lt;br /&gt;
===kml_vhf===&lt;br /&gt;
 kml_vhf=30 # set half vertical FOV to 30° so the full vertical FOV is 60°&lt;br /&gt;
Set vertical half FOV in degrees. (default: 15.0)&lt;br /&gt;
&lt;br /&gt;
===kml_near===&lt;br /&gt;
???Set &amp;quot;near&amp;quot; distance to PhotoOverlay in metres (Don&#039;t use &amp;quot;0&amp;quot;) (default: 40)???&lt;br /&gt;
&lt;br /&gt;
===kml_alt===&lt;br /&gt;
 kml_alt=[gps|ground]&lt;br /&gt;
Set altitude/height mode.&lt;br /&gt;
* gps - absolute GPS altitude&lt;br /&gt;
* ground - relative to ground (default)&lt;br /&gt;
&lt;br /&gt;
===kml_height===&lt;br /&gt;
 kml_height=100&lt;br /&gt;
Set height offset (added to GPS altitude) in metres. (default: 10)&lt;br /&gt;
&lt;br /&gt;
== Camogm2 ==&lt;br /&gt;
This is modified version of camogm to support audio recording (from the firmware 7.1.7.28 or later). It support recording of audio 16bit mono/stereo, from 11025 to 44100 Hz to QuickTime(MOV) and OGG(OGM) file formats. Source of the audio is the sound card (can be connected to camera over USB), and file storage can be USB-flash, HDD (connected to camera directly) or NFS-mounted disk. Preferred method is HDD drive,  connected to camera directly, because NFS-mounted disk have a non-uniform system load what can cause broken files.&lt;br /&gt;
&lt;br /&gt;
The recorded movie have the same duration of the video and sound, but when play it&#039;s depend on how player work with file - for example, QuickTime player play movie like the sound is shorter than video, MPlayer will repeat the last sound piece at the end of movie etc. - so it&#039;s better to merge movie from the chunks to single movie.&lt;br /&gt;
&lt;br /&gt;
P.S. First check the sound hardware: set volume to maximum by command&lt;br /&gt;
  amixer set PCM 100&lt;br /&gt;
and try to play test sound file:&lt;br /&gt;
  aplay /share/sounds/alsa/Front_Center.wav&lt;br /&gt;
- if you can&#039;t hear any sound, probably you have an old USB card on the camera - this new [http://wiki.elphel.com/images/0/00/10349RevC.jpg 10349 RevC] will work correctly with sound card.&lt;br /&gt;
&lt;br /&gt;
== camogm2 Commands ==&lt;br /&gt;
===audio===&lt;br /&gt;
 audio=&amp;lt;on|off&amp;gt;&lt;br /&gt;
command to enable or disable audio recording. When audio support is disabled, camogm work in the same way as original camogm. By default audio is disabled.&lt;br /&gt;
&lt;br /&gt;
===audio_format===&lt;br /&gt;
 audio_format=&amp;lt;[rate][/channels]&amp;gt;&lt;br /&gt;
command to set audio format - frame rate and number of channels. Frame rate can be from 11025 to 44100 Hz; number of channels - 1 for mono sound, or 2 - for stereo. By default 44100/2&lt;br /&gt;
&lt;br /&gt;
===allow_sync===&lt;br /&gt;
 allow_sync=&amp;lt;enable|disable&amp;gt;&lt;br /&gt;
This option is to force writing to storage after each recorded frame. Using a filesystem the OS will write data to buffer before writing to a real device.&lt;br /&gt;
This is not a problem with a HDD or other storage media mounted directly on the camera, but with NFS mounted folder this causes trouble as the NFS driver will fill up the buffer and only send data over the network once the buffer is full - this causes a short hang on the camera and frames might be lost. (default: disabled)&lt;br /&gt;
===audio_volume===&lt;br /&gt;
 audio_volume=&amp;lt;volume&amp;gt;&lt;br /&gt;
Set recording audio volume in percent.&lt;br /&gt;
&lt;br /&gt;
== camogmgui ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;G&#039;&#039;&#039;raphical &#039;&#039;&#039;U&#039;&#039;&#039;ser &#039;&#039;&#039;I&#039;&#039;&#039;nterface for camogm.&lt;br /&gt;
&lt;br /&gt;
Please see [[Camogmgui]]&lt;br /&gt;
&lt;br /&gt;
== Elphel393 series cameras ==&lt;br /&gt;
The functionality of &#039;&#039;camogm&#039;&#039; has been updated in Elphel393 series of cameras. The new version of the program can write data to a raw disk (disk without file system) and send the data over web sockets. The new version of &#039;&#039;camogm&#039;&#039; should be started with two command line arguments:&lt;br /&gt;
 camogm -n &amp;lt;named_pipe_name&amp;gt; -p &amp;lt;port_number&amp;gt;&lt;br /&gt;
Where &amp;lt;named_pipe_name&amp;gt; is the file name that will be used to pass commands to &#039;&#039;camogm&#039;&#039; and &amp;lt;port_number&amp;gt; is a port number used for web interface. The existing command set has been extended with several new commands addressing new functions.&lt;br /&gt;
&lt;br /&gt;
=== port_enable ===&lt;br /&gt;
 port_enable=&amp;lt;port_number&amp;gt;&lt;br /&gt;
Enable sensor port &amp;lt;port_number&amp;gt;. All sensor ports are enabled by default.&lt;br /&gt;
&lt;br /&gt;
=== port_disable ===&lt;br /&gt;
 port_disable=&amp;lt;port_number&amp;gt;&lt;br /&gt;
Disable sensor port &amp;lt;port_number&amp;gt;. &#039;&#039;camogm&#039;&#039; does not read data from disabled ports.&lt;br /&gt;
&lt;br /&gt;
=== rawdev_path ===&lt;br /&gt;
Use&lt;br /&gt;
 rawdev_path=&amp;lt;path_to_disk&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
 rawdev_path&lt;br /&gt;
commands to set or reset path to raw device buffer. Setting path to raw device buffer along with jpeg format set switches &#039;&#039;camogm&#039;&#039; to raw device buffer operation. All subsequent writes and reads will be performed to or from raw disk. &#039;&#039;camogm&#039;&#039; saves write pointer while the program is running and sequential starts and stops will not lead to data overwrite. &#039;&#039;camogm&#039;&#039; will reject the &#039;start&#039; command if the path to raw device buffer is set and current image format is not jpeg. You should either reset the path with &#039;rawdev_path&#039; command without parameters or set format to jpeg with &#039;format=jpeg&#039; to continue operation. Note, that &#039;&#039;camogm&#039;&#039; does not check the disk in any way and if the path is mistakenly set to a device with file system, the file system and the data on it will be destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;camogm&#039;&#039; can process commands sent over a web socket. A command can be sent as HTTP GET request or as a simple string prefixed with &#039;cmd/&#039;, e.g.:&lt;br /&gt;
 cmd/next_file&lt;br /&gt;
&#039;&#039;camogm&#039;&#039; can process the following commands:&lt;br /&gt;
&lt;br /&gt;
=== find_file ===&lt;br /&gt;
 find_file:2016:07:12_17:14:00&lt;br /&gt;
Find a file with a time stamp which is within one minute time frame from the time stamp given. If such a file was found, &#039;&#039;camogm&#039;&#039; saves the position of the file and &#039;next_file&#039; command can be used to advance to the next file on disk. If file was not found, &#039;&#039;camogm&#039;&#039; silently resets connection without any data sent.&lt;br /&gt;
&lt;br /&gt;
=== next_file ===&lt;br /&gt;
Get next file from disk. This command should only be used after &#039;find_file&#039; command successfully finished and returned a file. If file pointer was not set or file was not found, &#039;&#039;camogm&#039;&#039; silently resets connection without any data sent.&lt;br /&gt;
&lt;br /&gt;
=== read_disk ===&lt;br /&gt;
Read disk dump and send it over socket. The dump is split into several pieces and &#039;&#039;camogm&#039;&#039; returns the number of files to be sent in response to the command:&lt;br /&gt;
 Number of files: &amp;lt;number&amp;gt;&lt;br /&gt;
The socket is closed right after this string is sent. &#039;&#039;camogm&#039;&#039; opens a socket for each file to be send, waits for connection, sends a file and closes connection after a file was sent.&lt;br /&gt;
&lt;br /&gt;
=== build_index ===&lt;br /&gt;
Read raw device buffer and create disk index directory. This directory contains the offsets of all files found on disk and can be used to retrieve files from disk. This command is a prerequisite for get_index, read_file and read_all_files commands. Note that reading disks of several dozens or hundreds of Gib in size can take much time.&lt;br /&gt;
&lt;br /&gt;
=== get_index ===&lt;br /&gt;
Get disk index directory. Each record in the directory corresponds to a single file and has the following format:&lt;br /&gt;
 port_number=&amp;lt;port_number&amp;gt;;unix_time=&amp;lt;unix_time&amp;gt;;usec_time=&amp;lt;usec_time&amp;gt;;offset=&amp;lt;disk_offset&amp;gt;;file_size=&amp;lt;size_in_bytes&amp;gt;&lt;br /&gt;
&amp;lt;unix_time&amp;gt; here is time in Unix format, it represents the number of seconds elapsed since 1970-01-01 00:00:00 +0000 (UTC).&lt;br /&gt;
&lt;br /&gt;
=== read_file ===&lt;br /&gt;
 read_file:port_number=&amp;lt;port_number&amp;gt;;unix_time=&amp;lt;unix_time&amp;gt;;usec_time=&amp;lt;usec_time&amp;gt;;offset=&amp;lt;disk_offset&amp;gt;;file_size=&amp;lt;size_in_bytes&amp;gt;&lt;br /&gt;
Read a file from raw disk buffer and send it over socket. The disk index directory should be built prior this command. If a file was not found in disk index directory (for example, because of a mistake in the command string), &#039;&#039;camogm&#039;&#039; silently resets connection without any data sent.&lt;br /&gt;
&lt;br /&gt;
=== read_all_files ===&lt;br /&gt;
Retrieve all files from disk. Disk index directory should be built before this command can be executed. When this command is received, &#039;&#039;camogm&#039;&#039; sends back the number of files in the disk index directory:&lt;br /&gt;
 Number of files: &amp;lt;number&amp;gt;&lt;br /&gt;
The socket is closed right after this string is sent. &#039;&#039;camogm&#039;&#039; opens a socket for each file to be send, waits for connection, sends a file and closes connection after a file is sent.&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Trigger_393&amp;diff=13850</id>
		<title>Trigger 393</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Trigger_393&amp;diff=13850"/>
		<updated>2021-07-07T14:45:19Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* External trigger receive (with possible self-triggering loop) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Description&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[10389]] board is required (and possibly [[103891]]).&lt;br /&gt;
&lt;br /&gt;
Use cases:&lt;br /&gt;
* Trigger a single camera from external source&lt;br /&gt;
* Synchronize multiple cameras to a master camera or external trigger source&lt;br /&gt;
* Program frame rate&lt;br /&gt;
&lt;br /&gt;
The conditions of the trigger can be generated either internally or externally:&lt;br /&gt;
* for external triggering a [[103891]] board and a 4-conductor 2.5mm audio plug with cable (example: [http://www.digikey.com/products/en?keywords=839-1029-ND digikey]) is required.&lt;br /&gt;
* for internal triggering use J4-J6 connectors with a 4-pin flex cable: J4 - internal trigger source (also transmits timestamps that can be decoded by other cameras), J5-6 - receive trigger&lt;br /&gt;
&lt;br /&gt;
To program trigger go to: &#039;&#039;&#039;http://192.168.0.9/parsedit.php =&amp;gt; External Trigger Controls&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: Be careful with changing parameters when TRIG=4. Camera drivers are driven by the frame sync interrupts from the sensor, so if the sensor is not triggered - everything can get stuck. The Program Ahead value sets the number of frame sync interrupts the camera will wait wait for until a parameter is reprogrammed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Parsedit screenshot 3.png|thumb|750px|External Trigger Controls page]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;parameter&#039;&#039; &lt;br /&gt;
| &#039;&#039;description&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| TRIG &lt;br /&gt;
| Trigger mode. &#039;&#039;&#039;0x0&#039;&#039;&#039; - free running, &#039;&#039;&#039;0x4&#039;&#039;&#039; - triggered by external signal or FPGA timing generator, &#039;&#039;&#039;0x14&#039;&#039;&#039; - triggered in GRR mode&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_MASTER&lt;br /&gt;
| Master sensor_port (0..3) for triggering setup, other ports will have settings duplicated&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_CONDITION &lt;br /&gt;
| FPGA trigger sequencer trigger condition, 0 - internal, else dibits: 00 - do not use, 01 - keep, 10 - active low, 11 - active high for each GPIO[9:0] pin). 10389 board inverts signals, so 0x80000 - input from external connector,  0x08000 - input from internal flex cable (as in Eyesis)&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_DELAY &lt;br /&gt;
| FPGA trigger sequencer trigger delay, 32 bits in pixel clocks (100MHz or 10ns)&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_OUT &lt;br /&gt;
| FPGA trigger sequencer trigger output to GPIO, dibits: 00 - do not use, 01 - keep, 10 - active low GPIO output, 11 - active high GPIO output. 10389 board inverts signals, so 0x02000 - output to external connector (active high), 0x20000 - output to internal flex connector&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_PERIOD &lt;br /&gt;
| FPGA trigger sequencer output sync period (32 bits, in pixel clocks (100MHz or 10ns)). 0- stop. 1 - single, &amp;gt;=256 repetitive with specified period&lt;br /&gt;
|-&lt;br /&gt;
| TRIG_BITLENGTH &lt;br /&gt;
| Bit length minus 1 (in pixel clock cycles) when transmitting/receiving timestamps, without timestamps the output pulse width is 8*(TRIG_BITLENGTH+1). Legal values 2..255&lt;br /&gt;
|-&lt;br /&gt;
| EXTERN_TIMESTAMP &lt;br /&gt;
| When 1 camera will use external timestamp (received over inter-camera synchronization cable) if it is available (no action when external syncronization is not connected), when 0 - local timestamp will be used&lt;br /&gt;
|-&lt;br /&gt;
| XMIT_TIMESTAMP &lt;br /&gt;
| Specify output signal sent through internal/external connector (defined by TRIG_OUT). 0 - transmit just sync pulse (8*(TRIG_BITLENGTH+1) pixel clock periods long), 1 - pulse+timestamp 64*(TRIG_BITLENGTH+1) pixel clock periods long&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Examples&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Internal periodic trigger (10 fps, from fpga generator)===&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_PERIOD=10000000&amp;amp;TRIG=4&lt;br /&gt;
&lt;br /&gt;
===Internal periodic trigger (4 fps, from fpga generator) + output the signal to external port===&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
&lt;br /&gt;
===External trigger receive (with possible self-triggering loop)===&lt;br /&gt;
Here, internal generator is routed to sync the cable output wires.&lt;br /&gt;
&#039;&#039;&#039;If the output wires are connected to the input wires (red+black and white+green) the camera will be self-triggering. &#039;&#039;&#039;&lt;br /&gt;
If the wires are not connected - use external source - apply &amp;quot;plus&amp;quot; to black, &amp;quot;minus&amp;quot; to green ([[103891|check colors and pinout]]):&lt;br /&gt;
&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x95555&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=100000000&amp;amp;TRIG=4&lt;br /&gt;
* at the same time the fpga generator outputs a 1 fps signal - if the sync cable wires are properly connected the camera can be triggered from this &#039;external&#039; signal&lt;br /&gt;
&lt;br /&gt;
===External trigger receive (external source only)===&lt;br /&gt;
The sync cable wires can be looped or not - does not matter.&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x95555&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=100000000&amp;amp;TRIG=4&lt;br /&gt;
* at the same time the fpga generator outputs a 1 fps signal - if the sync cable wires are properly connected the camera can be triggered from this &#039;external&#039; signal&lt;br /&gt;
&lt;br /&gt;
===Recover from missing external trigger signal to internal trigger===&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0*-2&lt;br /&gt;
** &#039;&#039;&#039;*-2&#039;&#039;&#039; - apply value parameter in the current frame (if not specified, the default is 3)&lt;br /&gt;
&lt;br /&gt;
===Manual triggering from PC===&lt;br /&gt;
====Enable====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:2323/trig/pointers&lt;br /&gt;
&lt;br /&gt;
* TRIG=4 should be set in advance&lt;br /&gt;
* The command automatically sets a single-shot trigger mode with TRIG_PERIOD=0x1, but it writes the register directly into the FPGA, &lt;br /&gt;
not updating the TRIG_PERIOD in the PHP interface:&lt;br /&gt;
 http://192.168.0.9/parsedit.php?TRIG&amp;amp;TRIG_CONDITION&amp;amp;TRIG_DELAY&amp;amp;TRIG_OUT&amp;amp;TRIG_PERIOD&amp;amp;TRIG_BITLENGTH&amp;amp;EXTERN_TIMESTAMP&amp;amp;XMIT_TIMESTAMP&amp;amp;refresh&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Trigger/Refresh====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:8081/trig/pointers&lt;br /&gt;
&lt;br /&gt;
====Check status====&lt;br /&gt;
 http://192.168.0.9/parsedit.php?immediate&amp;amp;TRIG&amp;amp;TRIG_PERIOD&amp;amp;SENS_AVAIL&amp;amp;FRAME&lt;br /&gt;
&lt;br /&gt;
====Disable====&lt;br /&gt;
=====Update the TRIG_PERIOD in the current frame=====&lt;br /&gt;
* http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_PERIOD=10000000*-2&lt;br /&gt;
&lt;br /&gt;
=====Update the TRIG_PERIOD from the user interface=====&lt;br /&gt;
* http://192.168.0.9/parsedit.php?TRIG&amp;amp;TRIG_CONDITION&amp;amp;TRIG_DELAY&amp;amp;TRIG_OUT&amp;amp;TRIG_PERIOD&amp;amp;TRIG_BITLENGTH&amp;amp;EXTERN_TIMESTAMP&amp;amp;XMIT_TIMESTAMP&amp;amp;refresh&lt;br /&gt;
* Refresh until the changes are applied (with Program Ahead = 3 it&#039;s 3 times):&lt;br /&gt;
 http://192.168.0.9:8081/trig/pointers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Links&amp;lt;/font&amp;gt;==&lt;br /&gt;
* [[10389]] extension board&lt;br /&gt;
* [[103891]] adapter board for external trigger connection&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;10389 trigger testing&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===External connector===&lt;br /&gt;
In this test the camera triggers itself via audio cable. For cable wiring see [[103891]]. &lt;br /&gt;
* To test:&lt;br /&gt;
 - connect a sensor to port 0&lt;br /&gt;
 - http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
 visual: LED is blinking&lt;br /&gt;
 software: frame counter is running&lt;br /&gt;
&lt;br /&gt;
* It&#039;s easy to modify the cable to trigger itself and other multiple cameras.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:10389 extsync selftest.jpeg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Internal connectors===&lt;br /&gt;
In this test the camera triggers itself via 4-pin flex cable. &lt;br /&gt;
* Connect as displayed on the pictures below.&lt;br /&gt;
** J4 - trigger output (master port)&lt;br /&gt;
** J5-J6 - trigger input (slave ports)&lt;br /&gt;
* To test:&lt;br /&gt;
 - connect a sensor to port 0&lt;br /&gt;
 - http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0x8000&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=25000000&amp;amp;TRIG=4&lt;br /&gt;
 software: frame counter is running&lt;br /&gt;
* To sync multiple camera, example:&lt;br /&gt;
 cable 1: camera1 (J4) -&amp;gt; camera2 (J6)&lt;br /&gt;
 cable 2: camera2 (J5) -&amp;gt; camera3 (J6)&lt;br /&gt;
 cable 3: camera3 (J5) -&amp;gt; camera4 (J6)&lt;br /&gt;
 etc.&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10389 intsync selftest.jpeg|thumb|400px]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10389 intsync selftest closeup.jpeg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sync example: from external to internal (chaining)===&lt;br /&gt;
* The simplest synchronization would be making a custom audio cable to sync all cameras in the system&lt;br /&gt;
* In case there are multiple cameras in the same enclosure it might make sense to sync them by chaining using 4-pin flex cables&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10389 sync example 1.jpeg|thumb|400px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=10393_manual&amp;diff=13557</id>
		<title>10393 manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=10393_manual&amp;diff=13557"/>
		<updated>2021-07-01T19:49:47Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* Firmware images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- not anymore!&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Important Notes&amp;lt;/font&amp;gt;==&lt;br /&gt;
* As of 2016/12/15, the software ported from 10353 supports only 5MPix sensors, for 14MPix, please see:&lt;br /&gt;
**[http://wiki.elphel.com/index.php?title=Tmp_manual&amp;amp;oldid=14676 older version of this manual with links to older software images]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;In the package&amp;lt;/font&amp;gt;==&lt;br /&gt;
* 10393 camera system ([[Elphel_camera_assemblies|these 3D models]] might be helpful).&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:NC393-CS marked ports.jpeg|thumb|200px|Fig.1a 10393 interfaces]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393_boards_assembly.png|thumb|265px|Fig.1b Boards connections (NC393-F-CS)]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 dev mmc.jpeg|thumb|150px|Fig.1c Micro SD card for development]]&lt;br /&gt;
|}&lt;br /&gt;
* Power supply options ([[10393_power|more information]]):&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
!Range&lt;br /&gt;
!Power supply&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;36-72V&#039;&#039;&#039; (default)&lt;br /&gt;
| wall adapter (48V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;18-75V&#039;&#039;&#039;&lt;br /&gt;
| wall adapter (48V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;12-36V&#039;&#039;&#039;&lt;br /&gt;
| wall adapter, battery (12V)&lt;br /&gt;
|-&lt;br /&gt;
|align=&#039;left&#039;|&#039;&#039;&#039;3.3V&#039;&#039;&#039;&lt;br /&gt;
| direct, custom&lt;br /&gt;
|}&lt;br /&gt;
* CAT6 network cable&lt;br /&gt;
* &amp;amp;mu;USB-to-USB cable&lt;br /&gt;
* Recovery &amp;amp;mu;SD card&lt;br /&gt;
* If the camera is calibrated the calibration data will be on a separate storage media or on the internal SSD (likely /mnt/sda1)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Interfaces&amp;lt;/font&amp;gt;==&lt;br /&gt;
See Fig.1:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GigE&lt;br /&gt;
| gigabit network&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;mu;SD &lt;br /&gt;
| micro SD card slot - boot or storage&lt;br /&gt;
|-&lt;br /&gt;
! console&lt;br /&gt;
| serial console port, use &amp;amp;mu;USB-to-USB cable&lt;br /&gt;
|-&lt;br /&gt;
! eSATA+USB&lt;br /&gt;
| 2-in-1. Connect USB or eSATA device. USB2.0 host&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;mu;USB&lt;br /&gt;
| USB2.0 host&lt;br /&gt;
|-&lt;br /&gt;
! sync&lt;br /&gt;
| sync multiple cameras or other devices - input/output trigger signal through a 4-conductor 2.5mm audio plug with cable (example: [http://www.digikey.com/products/en?keywords=839-1029-ND digikey])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Power on&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Plug in the power supply&lt;br /&gt;
* Connect to LAN using the network cable&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
* Boot time: ~30s&lt;br /&gt;
* No extra drivers are required on the host PC to operate the camera system. Can be operated from any network device with a browser.&lt;br /&gt;
* The default boot is from the on-board NAND flash. [[Boot_options_393|More information]] on available boot options and recovery boot.&lt;br /&gt;
* For a &amp;lt;font color=&#039;red&#039;&amp;gt;&#039;&#039;&#039;production system&#039;&#039;&#039;&amp;lt;/font&amp;gt; with rare changes to the file system it is recommended to boot from NAND flash. Changes to the file system require running an extra sync command (overlay_sync) followed by a proper reboot.&lt;br /&gt;
* For &amp;lt;font color=&#039;red&#039;&amp;gt;&#039;&#039;&#039;development&#039;&#039;&#039;&amp;lt;/font&amp;gt;, one can boot from the &amp;amp;mu;SD recovery card and use it - saving changes does not require extra sync actions.&lt;br /&gt;
* Camera&#039;s software includes gcc compiler - relatively small projects can be compiled on the camera.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Defaults&amp;lt;/font&amp;gt;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IP Address&lt;br /&gt;
| 192.168.0.9&lt;br /&gt;
|-&lt;br /&gt;
! User &lt;br /&gt;
| root&lt;br /&gt;
|-&lt;br /&gt;
! Password&lt;br /&gt;
| pass&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* The default IP address is set in the &#039;&#039;/etc/elphel393/init_elphel393.py&#039;&#039;.&lt;br /&gt;
* If present the internal SSD  will be formatted into 2 partitions:&lt;br /&gt;
** /dev/sda1 - ext4 (~64-100GB)&lt;br /&gt;
** /dev/sda2 - raw partition (no file system) for fast recording&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Command line access&amp;lt;/font&amp;gt;==&lt;br /&gt;
* ssh from PC&#039;s terminal:&lt;br /&gt;
&amp;lt;font size=&#039;2em&#039;&amp;gt;&lt;br /&gt;
 user@hostname:~$ ssh root@192.168.0.9&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Serial console access&amp;lt;/font&amp;gt;==&lt;br /&gt;
* Use a &#039;&#039;microUSB-USB cable&#039;&#039; to connect &#039;&#039;&#039;console &amp;amp;mu;USB port&#039;&#039;&#039; (see Fig.1) to PC - the cable&#039;s end should be thin enough otherwise interferes with an inserted mmc (&#039;&#039;&#039;m&#039;&#039;&#039;ulti &#039;&#039;&#039;m&#039;&#039;&#039;edia &#039;&#039;&#039;c&#039;&#039;&#039;ard = &amp;amp;mu;SD card).&lt;br /&gt;
&lt;br /&gt;
* In Linux the &#039;&#039;&#039;minicom&#039;&#039;&#039; program can be used&lt;br /&gt;
&amp;lt;font size=&#039;2em&#039;&amp;gt;&lt;br /&gt;
 $ minicom -c on&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Most likely the device will be &amp;lt;b&amp;gt;/dev/ttyUSB0&amp;lt;/b&amp;gt;. Settings:&lt;br /&gt;
* &amp;lt;b&amp;gt;115200 8N1, no&amp;lt;/b&amp;gt; for hardware/software flow control&lt;br /&gt;
Refer to the following article for more details on using &#039;&#039;&#039;minicom&#039;&#039;&#039;: [http://wiki.elphel.com/index.php?title=Using_minicom_to_connect_to_Elphel393_camera Using minicom to connect to Elphel393 camera]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Web user interface (camvc)&amp;lt;/font&amp;gt;==&lt;br /&gt;
&#039;&#039;&#039;http://192.168.0.9/&#039;&#039;&#039;&lt;br /&gt;
* The page contains links to camvc user interface for each individual camera port.&lt;br /&gt;
* camvc was ported from the 10353 camera series:&lt;br /&gt;
** change parameters like image format, resolution, auto exposure, auto white balance and more. Alternative way to change parameters is described [[Tmp_manual#Change_parameters|below]].&lt;br /&gt;
** pause compressor and search within buffered images&lt;br /&gt;
** help tips available - see Fig.3 - select then mouse over a control element of interest&lt;br /&gt;
{|&lt;br /&gt;
| valign=&#039;top&#039;|[[File:10393 starting page.png|thumb|600px|Fig.2 http://192.168.0.9]]&lt;br /&gt;
| valign=&#039;top&#039;|[[image:Help tips.jpeg|250px|thumb|Fig.3 enable camvc help tips]]&lt;br /&gt;
| valign=&#039;top&#039;|[[File:Controls with blank.jpeg|300px|thumb|Fig.4 camvc controls]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Download live images&amp;lt;/font&amp;gt;==&lt;br /&gt;
====camvc====&lt;br /&gt;
* For a currently opened port (displayed in the window title and as &amp;quot;...sensor_port=0...&amp;quot; in the URL):&lt;br /&gt;
{|&lt;br /&gt;
|[[image:Camvc image capture.jpeg|250px|thumb|Fig.5 Acquire an image from the Camera Control Interface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====browser====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 port 0: http://192.168.0.9:2323/img&lt;br /&gt;
 port 1: http://192.168.0.9:2324/img&lt;br /&gt;
 port 2: http://192.168.0.9:2325/img&lt;br /&gt;
 port 3: http://192.168.0.9:2326/img&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
====command line====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 wget http://192.168.0.9:2323/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2324/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2325/img -O filename.jpeg&lt;br /&gt;
 wget http://192.168.0.9:2326/img -O filename.jpeg&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Video&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Display===&lt;br /&gt;
====Multipart JPEG stream====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9:2323/mimg&lt;br /&gt;
 http://192.168.0.9:2324/mimg&lt;br /&gt;
 http://192.168.0.9:2325/mimg&lt;br /&gt;
 http://192.168.0.9:2326/mimg&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
====RTSP====&lt;br /&gt;
* Streams with either &#039;&#039;&#039;w&#039;&#039;&#039; or &#039;&#039;&#039;h&#039;&#039;&#039; &amp;gt;2040 might not get played - not supported by live555 often used by various media players. But there&#039;s a [https://git.elphel.com/Elphel/live555_patch live555_patch].&lt;br /&gt;
* turn on:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 root@elphel393:~# /usr/bin/str&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* url:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 rtsp://192.168.0.9:554&lt;br /&gt;
 rtsp://192.168.0.9:556&lt;br /&gt;
 rtsp://192.168.0.9:558&lt;br /&gt;
 rtsp://192.168.0.9:560&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====GStreamer====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 gst-launch-1.0 -v playbin uri=rtsp://192.168.0.9:554 uridecodebin0::source::latency=0&lt;br /&gt;
or&lt;br /&gt;
 gst-launch-1.0 souphttpsrc is-live=true location=http://192.168.0.9:2323/mimg ! jpegdec ! xvimagesink &lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* mjpeg and rtsp&lt;br /&gt;
* More examples at [[Using_gstreamer#Display|Using GStreamer]]&lt;br /&gt;
&lt;br /&gt;
====VLC====&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 vlc rtsp://192.168.0.9:554 --network-caching=0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Record===&lt;br /&gt;
* Recording is done by the [[Camogm|&#039;&#039;&#039;camogm&#039;&#039;&#039;]] program&lt;br /&gt;
* If recording to internal or external SSD, please, read about [[Tmp_manual#eSATA_port_switching|eSATA port switching]]&lt;br /&gt;
* &amp;lt;font color=&#039;red&#039;&amp;gt;important:&amp;lt;/font&amp;gt; Event logger (GPS, IMU, IMG, EXT) recording is started/stopped separately. See [[Tmp_manual#Record_the_Event_Logger_data_.28GPS.2CIMU.2CIMG_.26_EXT.29|instructions]] below.&lt;br /&gt;
* For SATA devices camogm supports:&lt;br /&gt;
** recording to a partition with a file system - up to 80MB/s&lt;br /&gt;
** (default) faster recording to a partition without a file system (raw partition) avoiding OS calls - up to 220MB/s&lt;br /&gt;
* To extract data from a raw partition use &#039;&#039;&#039;dd&#039;&#039;&#039; or [https://github.com/Elphel/elphel-tools-x393 these scripts] to get the data and split it into images. Follow [[Extracting_images_from_raw_partition | this link]] for details.&lt;br /&gt;
* Can record to an mmc partiton or usb.&lt;br /&gt;
* &amp;lt;b&amp;gt;&amp;lt;font size=&#039;3&#039; color=&#039;red&#039;&amp;gt;[[Using_camogm_with_Elphel393_camera|More info]]&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
* If the &#039;&#039;prefix&#039;&#039; parameter, which is &#039;&#039;absolute path + prefix&#039;&#039;, for a channel is not set the file will be written somewhere to rootfs. &lt;br /&gt;
** if prefix is empty then the &#039;&#039;absolute path&#039;&#039; must end with a slash.&lt;br /&gt;
&lt;br /&gt;
====browser====&lt;br /&gt;
Example 1: (provide a correct media mount point - /mnt/sda1/)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
* http://192.168.0.9/camogmgui.php&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Follow [[Camogmgui|this link]] for GUI description.&lt;br /&gt;
&lt;br /&gt;
====command line====&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;/home/root&#039;&#039;&#039;, file prefix=&#039;&#039;&#039;test_&#039;&#039;&#039;, &#039;&#039;&#039;1GB&#039;&#039;&#039; or &#039;&#039;&#039;10min&#039;&#039;&#039; files whichever occurs first&lt;br /&gt;
** setup and start (in one line):&lt;br /&gt;
 echo &amp;quot;format=mov;status=/var/tmp/camogm.status;prefix=/home/root/test_;duration=600;length=1073741824;start&amp;quot; &amp;gt; /var/volatile/camogm_cmd&lt;br /&gt;
** stop recording:&lt;br /&gt;
 echo &amp;quot;stop&amp;quot; &amp;gt; /var/volatile/camogm_cmd&lt;br /&gt;
 sync&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Convert to a web cam stream===&lt;br /&gt;
See this [https://blog.elphel.com/2020/06/convert-ip-cam-to-web-cam-in-linux-for-jitsi-zoom-etc/ tutorial].&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Store/restore configuration&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/autocampars.php - save/restore/initialize camera/sensor parameters per port. To (re)store parameters access the pages below:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=0 (stores to /etc/elphel393/autocampars0.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=1 (stores to /etc/elphel393/autocampars1.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=2 (stores to /etc/elphel393/autocampars2.xml)&lt;br /&gt;
 http://192.168.0.9/autocampars.php?sensor_port=3 (stores to /etc/elphel393/autocampars3.xml)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Autocampars 393|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
* All stored parameters are automatically restored at boot&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Available programmable parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
To inspect all available reprogrammable parameters:&lt;br /&gt;
 1. http://192.168.0.9 -&amp;gt; Parameter Editor&lt;br /&gt;
 2. Follow a link for a particular port, e.g. http://192.168.0.9/autocampars.php?sensor_port=0&lt;br /&gt;
 3. Select groups of interest in the top table -&amp;gt; View/Edit Current&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Change parameters&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/parsedit.php - read/write parameters:&lt;br /&gt;
** POST request&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 Read:   http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;PAR1&amp;amp;PAR2&lt;br /&gt;
 Change: http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;PAR1&amp;amp;PAR2 - update values - submit form&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
** GET request - XML response&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 Read:   &lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1&amp;amp;PAR2&lt;br /&gt;
 Change: &lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1=VAL1&amp;amp;PAR2=VAL2&lt;br /&gt;
 Change for multiple ports at once:&lt;br /&gt;
         http://192.168.0.9/parsedit.php?immediate&amp;amp;sensor_port=0&amp;amp;PAR1=VAL1&amp;amp;*PAR1=MASK1&amp;amp;PAR2=VAL2&amp;amp;*PAR2=MASK2&lt;br /&gt;
 &lt;br /&gt;
 # A port bit mask is set by adding a &#039;&#039;&#039;*&#039;&#039;&#039; to a parameter name, like &#039;&#039;&#039;*PAR1&#039;&#039;&#039; - it is individual for each parameter.&lt;br /&gt;
 # The mask is 4 bits - 1 bit per port, bit[0] = port 0,... bit[3] = port 3, where 1 - enabled, 0 - disabled:&lt;br /&gt;
 #   0xf - the parameter&#039;s new value will be applied to all ports.&lt;br /&gt;
 # [[Parsedit.php#change_multiple_ports|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note 1: if the parameter&#039;s value is specified in URL it will be applied. The call can have mixed specified and unspecified parameters.&lt;br /&gt;
&lt;br /&gt;
Note 2: The new value is read on the next call.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
* set 10 fps and enable output trigger signal&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/parsedit.php?sensor_port=0&amp;amp;immediate&amp;amp;TRIG_CONDITION=0&amp;amp;TRIG_OUT=0x66555&amp;amp;TRIG_PERIOD=10000000&amp;amp;TRIG=4&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Parsedit.php|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
* parsedit.php and autocampars.php were ported from 353 camera series. There are a few changes from the originals related to 4x sensor ports:&lt;br /&gt;
** parameters are individual for each sensor port - writing parameters to multiple port at once is controlled with a (bit-)&#039;&#039;&#039;mask&#039;&#039;&#039; input box&lt;br /&gt;
** if opened w/o sensor_port specified the page will show links to available ports&lt;br /&gt;
** &#039;&#039;&#039;sensor_port=x&#039;&#039;&#039;, where x=0..3 - in the address string - for a single sensor camera it is normally 0&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Image formats&amp;lt;/font&amp;gt;==&lt;br /&gt;
====JPEG====&lt;br /&gt;
* &#039;&#039;color&#039;&#039;: YCbCr 4:2:0, 3x3 pixels&lt;br /&gt;
* &#039;&#039;mono6&#039;&#039;: monochrome - color YCbCr 4:2:0 with zeroed out color components&lt;br /&gt;
* &#039;&#039;mono&#039;&#039; : monochrome - color YCbCr 4:0:0 with omitted color components&lt;br /&gt;
&lt;br /&gt;
Note: JPEG is not the best for processing since some information gets lost when demosaicing is applied.&lt;br /&gt;
====JP4====&lt;br /&gt;
* provides a quality of RAW with compression, no demosaicing&lt;br /&gt;
* [[JP4|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Proper shutdown&amp;lt;/font&amp;gt;==&lt;br /&gt;
* if not properly shutdown - in a rare case the &amp;amp;mu;SD card can get corrupted (it&#039;s always safer to run &#039;&#039;&#039;sync&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ~# sync&lt;br /&gt;
 ~# shutdown -hP now&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Same effect:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/autocampars.php?reboot&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Temperature monitor&amp;lt;/font&amp;gt;==&lt;br /&gt;
* http://192.168.0.9/hwmon.html:&lt;br /&gt;
** T&amp;lt;sub&amp;gt;shutdown&amp;lt;/sub&amp;gt; - automatic shutdown temperature level (default is 90&amp;amp;deg;C)&lt;br /&gt;
{|&lt;br /&gt;
|[[File:10393_hwmon.jpeg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Event Logger (GPS, IMU, IMG &amp;amp; EXT)&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
The FPGA-based Event Logger uses local clock for time-stamping data from Image Acquisition, External (Trigger) Input, GPS and IMU.&lt;br /&gt;
&lt;br /&gt;
* [[Event_logger|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
===Record===&lt;br /&gt;
====web====&lt;br /&gt;
* Start: &lt;br /&gt;
http://192.168.0.9/logger_launcher.php?cmd=start&amp;amp;file=/mnt/sda1/test.log&amp;amp;index=1&amp;amp;n=10000000&lt;br /&gt;
* Stop:&lt;br /&gt;
http://192.168.0.9/logger_launcher.php?cmd=stop&lt;br /&gt;
* Help:&lt;br /&gt;
http://192.168.0.9/logger_launcher.php&lt;br /&gt;
&lt;br /&gt;
====command line====&lt;br /&gt;
* start:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 root@elphel393:~# cat /dev/imu &amp;gt; /path/filename.log&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
* stop - CTRL-C or kill the process&lt;br /&gt;
&lt;br /&gt;
===Read===&lt;br /&gt;
* http://192.168.0.9/read_imu_log.php (will display help)&lt;br /&gt;
** on the first access creates /www/pages/logs/ (http://192.168.0.9/logs/)&lt;br /&gt;
** link the recorded logs to /www/pages/logs/&lt;br /&gt;
** refresh http://192.168.0.9/read_imu_log.php&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Set system time&amp;lt;/font&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===Command line from PC===&lt;br /&gt;
 &amp;lt;font size=&#039;2&#039;&amp;gt;# Compare PC and camera clocks&lt;br /&gt;
 ~$ ssh root@192.168.0.9 date;date -u&lt;br /&gt;
 # Write PC time into camera clock&lt;br /&gt;
 ~$ ssh root@192.168.0.9 &amp;quot;date -s @`( date -u +&amp;quot;%s&amp;quot; )` &amp;amp;&amp;amp;  hwclock -w&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
If in the current firmware includes &#039;&#039;&#039;http://192.168.0.9/utils.php&#039;&#039;&#039; then the clock is checked every time the index page is opened (&#039;&#039;&#039;http://192.168.0.9&#039;&#039;&#039;). The clock is then updated if the browser time differs from the camera time by more than 24h.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to force apply time using the following GET request:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://192.168.0.9/utils.php?cmd=time&amp;amp;apply&amp;amp;ts=&amp;lt;timestamp_in_ms&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 #example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://192.168.0.9/utils.php?cmd=time&amp;amp;apply&amp;amp;ts=1589913066650&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;eSATA port switching&amp;lt;/font&amp;gt;==&lt;br /&gt;
* requres [[10389]]&lt;br /&gt;
* available connections:&lt;br /&gt;
** camera &amp;lt;=&amp;gt; internal SSD (default)&lt;br /&gt;
** camera &amp;lt;=&amp;gt; external drive (external drive requires a separate power source)&lt;br /&gt;
** PC &amp;lt;=&amp;gt; internal SSD&lt;br /&gt;
* [[Sata_multiplexer_10389|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Firmware/software update&amp;lt;/font&amp;gt;==&lt;br /&gt;
[[Poky_2.0_manual#Write_files_to_media_and_boot|&#039;&#039;&#039;More information&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Firmware images&amp;lt;/font&amp;gt;==&lt;br /&gt;
* [https://community.elphel.com/files/393/20210628/ &#039;&#039;&#039;20210628&#039;&#039;&#039;]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200903/ 20200903]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200520/ 20200520]&lt;br /&gt;
* [https://community.elphel.com/files/393/20200508/ 20200508]&lt;br /&gt;
&lt;br /&gt;
===Changelog===&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20210628==&#039;&#039;&#039;&lt;br /&gt;
 * Added support for FLIR Boson sensors&lt;br /&gt;
 * Added decimation to external synchronization (triggering on each N-th incoming pulse). That was needed to run slower RGB sensors @12 Hz with Boson as a master at 60Hz&lt;br /&gt;
 * Enhanced inter-camera synchronization, added related kernel and PHP extension functionality.&lt;br /&gt;
 &amp;lt;font size=&#039;1&#039;&amp;gt;&#039;&#039;&#039;==20200903==&#039;&#039;&#039;&lt;br /&gt;
 * switched to warrior branch for build&lt;br /&gt;
 * updated to kernel 4.19. This build was being under test for a while.&lt;br /&gt;
 &#039;&#039;&#039;==20200520==&#039;&#039;&#039;&lt;br /&gt;
 (rocko build)&lt;br /&gt;
 * Set time on main page access - taking browser time and writing to 10393 if times differ by 24h+.&lt;br /&gt;
 * Added script for sensor testing (switch to test pattern, check md5sum).&lt;br /&gt;
   Supporting MT9P006. Linked to main page.&lt;br /&gt;
 * Main page:&lt;br /&gt;
   * Added links to page displaying MJPEG stream in canvas&lt;br /&gt;
   * Added more controls (FPS, Manual Exposure and Auto Exposure Limit)&lt;br /&gt;
   * Added quick switch to 1080p@30fps (MT9P006)&lt;br /&gt;
 * Updated JPEG/JP4 decoding javascript plugin - less time (-10ms) spent on EXIF reading.&lt;br /&gt;
 * Created utils.php, currenty helps to GET-request:&lt;br /&gt;
   * ports configuration&lt;br /&gt;
   * set/get system time&lt;br /&gt;
 * Fixed snapshot button for cameras with unused ports in multicam/ UI.&lt;br /&gt;
 &#039;&#039;&#039;==20200508==&#039;&#039;&#039;&lt;br /&gt;
 (rocko build)&lt;br /&gt;
 * updated camogm&lt;br /&gt;
 * added FLIR Lepton driver to kernel&lt;br /&gt;
 * added FLIR Lepton record to device tree&lt;br /&gt;
 &#039;&#039;&#039;==20190321==&#039;&#039;&#039;&lt;br /&gt;
 * overall minor changes&lt;br /&gt;
   * fixed photofinish demo&lt;br /&gt;
 &#039;&#039;&#039;==20180511==&#039;&#039;&#039;&lt;br /&gt;
 * added cron program&lt;br /&gt;
 * multi cameras control interface&lt;br /&gt;
 * multi camera system info reporting&lt;br /&gt;
 * fixed rtc&lt;br /&gt;
 &#039;&#039;&#039;==20180416==&#039;&#039;&#039;&lt;br /&gt;
 * 20180419 - mt9f002: fixed changing window size&lt;br /&gt;
 * mt9f002: added triggered mode&lt;br /&gt;
 * mt9f002: added vertical and horizontal flips (mirror)&lt;br /&gt;
 &#039;&#039;&#039;==20180406==&#039;&#039;&#039;&lt;br /&gt;
 * added initial support for MT9F002 sensor: no triggered mode, no binning/decimation&lt;br /&gt;
 * display serial number in http://camera-ip:port/meta&lt;br /&gt;
 * decode jp4s on the index page (http://camera-ip)&lt;br /&gt;
 * turn off auto wb button for all ports on the index page&lt;br /&gt;
 &#039;&#039;&#039;==20180130==&#039;&#039;&#039;&lt;br /&gt;
 * added photo finish demo&lt;br /&gt;
 * fixed fps limit calcs for triggered mode&lt;br /&gt;
 &#039;&#039;&#039;==20180118==&#039;&#039;&#039;&lt;br /&gt;
 * raw.py &amp;amp; raw.php, see wiki.elphel.com&lt;br /&gt;
 * added python3 and python3-opencv&lt;br /&gt;
 &#039;&#039;&#039;==20180116==&#039;&#039;&#039;&lt;br /&gt;
 * raw pixel data downloading through membridge&lt;br /&gt;
 * added gcc,make&lt;br /&gt;
 &#039;&#039;&#039;==20180109==&#039;&#039;&#039;&lt;br /&gt;
 * fixed autoexposure&lt;br /&gt;
 &#039;&#039;&#039;==20171228==&#039;&#039;&#039;&lt;br /&gt;
 * + strace, ltrace, dmsetup&lt;br /&gt;
 * added to drivers: register devs to sysfs - nodes then created by udev&lt;br /&gt;
 &#039;&#039;&#039;==20171226==&#039;&#039;&#039;&lt;br /&gt;
 * kernel updated to 4.9 (from 4.0)&lt;br /&gt;
 * lots of drivers is updated to newer versions&lt;br /&gt;
 * +dm-crypt and cryptsetup&lt;br /&gt;
 &#039;&#039;&#039;==20171120==&#039;&#039;&#039;&lt;br /&gt;
 * bugfix - incorrect displaying of TRIG_PERIOD at init&lt;br /&gt;
 &#039;&#039;&#039;==20171115==&#039;&#039;&#039;&lt;br /&gt;
 * Fixed autocampars to let 10393 work with the mux board - 10359, see wiki.elphel.com for&lt;br /&gt;
   docs&lt;br /&gt;
 &#039;&#039;&#039;==20170823==&#039;&#039;&#039;&lt;br /&gt;
 * Fixed autocampars for multiple sensors getting desynced at init&lt;br /&gt;
 * Fixed Garmin GPS 18x USB driver&lt;br /&gt;
 &#039;&#039;&#039;==20170802==&#039;&#039;&#039;&lt;br /&gt;
 * fixed a page for taking snapshots - works in chrome and firefox for bigger images (&amp;gt;2MB)&lt;br /&gt;
 * enabled &amp;quot;Access-Control-Expose-Headers: Content-Disposition&amp;quot; and CORS&lt;br /&gt;
 &#039;&#039;&#039;==20170627==&#039;&#039;&#039;&lt;br /&gt;
 * viewing decoded jp4 format in camvc&lt;br /&gt;
 &#039;&#039;&#039;==20170623==&#039;&#039;&#039;&lt;br /&gt;
 * fixed incorrect default setting of the master channel&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Development&amp;lt;/font&amp;gt;==&lt;br /&gt;
Usage of [[Poky_manual|SDK]], which is Eclipse and project tree cloned from git.elphel.com, simplifies the development.&lt;br /&gt;
At the same time lots of things can be done using Python, PHP, JavaScript or C/C++ (if compiled on hardware) and do not require SDK.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Other info&amp;lt;/font&amp;gt;==&lt;br /&gt;
===Change default ip address===&lt;br /&gt;
Modify &#039;&#039;&#039;&#039;&#039;/etc/network/interfaces&#039;&#039;&#039;&#039;&#039;, sync the changes to the file system and reboot (or rerun init scripts).&lt;br /&gt;
&lt;br /&gt;
For firmware 20180511 or older, follow [[Fix_network_configuration|these instructions]] to fix network configuration (= disable setting ip address via &#039;&#039;&#039;/etc/elphel393/init_elphel393.py&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
===Add a program or a shell command to autostart on boot===&lt;br /&gt;
There&#039;s a way to do this using [https://unix.stackexchange.com/questions/56957/how-to-start-an-application-automatically-on-boot cron or init.d] but it might run before the sensors are initialized by init_elphel393.py. The recommended way is the following:&lt;br /&gt;
* &#039;&#039;&#039;nano&#039;&#039;&#039; or &#039;&#039;&#039;vi&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ssh root@192.168.0.9&lt;br /&gt;
 &#039;&#039;pass&#039;&#039;&lt;br /&gt;
 root@elphel393:~# nano /etc/elphel393/init_elphel393.py&lt;br /&gt;
 &#039;&#039;edit - save&#039;&#039;&lt;br /&gt;
 &#039;&#039;example: to launch the rtsp streamer - add &#039;&#039;&#039;shout(&amp;quot;/usr/bin/str&amp;quot;)&#039;&#039;&#039; to the end of the file&#039;&#039;. shout() function is just a wrapper for &#039;&#039;&#039;subprocess.call(cmd,shell=True)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
Then:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 #boot from NAND flash?&lt;br /&gt;
 root@elphel393:~# overlay_sync 1 &lt;br /&gt;
 root@elphel393:~# shutdown -hP now&lt;br /&gt;
 #powercycle&lt;br /&gt;
&lt;br /&gt;
 #boot from card?&lt;br /&gt;
 root@elphel393:~# sync&lt;br /&gt;
 root@elphel393:~# reboot -f&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set up histogram window and autoexposure parameters===&lt;br /&gt;
[[Autoexposure|Read article]]&lt;br /&gt;
===Tools for calibrated systems===&lt;br /&gt;
* [[Elphel_Software_Kit_for_Ubuntu#ImageJ_and_Elphel_plugins_for_imageJ|Install ImageJ plugins]]&lt;br /&gt;
** decode jp4 raw format&lt;br /&gt;
** aberrations correction&lt;br /&gt;
** distortion correction (pixel mapping)&lt;br /&gt;
** rectification and projection&lt;br /&gt;
** &#039;&#039;&#039;JP46 Reader camera&#039;&#039;&#039; - decode JP4/JP46&lt;br /&gt;
** &#039;&#039;&#039;Eyesis correction&#039;&#039;&#039; - post-process JP4s using calibration data&lt;br /&gt;
&lt;br /&gt;
===Switch between ERS and GRR modes in MT9P006===&lt;br /&gt;
* [[Electronic_Rolling_Shutter#ERS_and_GRR_in_MT9P001_on_10393|Read article]]&lt;br /&gt;
===External/internal synchronization &amp;amp; triggering and FPS control for single/multi-camera systems===&lt;br /&gt;
* [[Trigger_393]]&lt;br /&gt;
&lt;br /&gt;
===SSD/MMC/USB formatting===&lt;br /&gt;
* [[Format_SSD_MMC]]&lt;br /&gt;
===Boot modes===&lt;br /&gt;
* [[Boot_options_393|Boot options]]&lt;br /&gt;
===Pointers monitor===&lt;br /&gt;
* Displays sensor, compressor and buffer states per 10393 port:&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 http://192.168.0.9/pointers/&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Powering from batteries (12V or 48V)===&lt;br /&gt;
[[10393_power#Powering_from_batteries| 12V and 48V power options]]&lt;br /&gt;
===Accessing raw pixel values===&lt;br /&gt;
[[Working_with_raw_image_data|Working with raw pixel data (how to capture raw images)]]&lt;br /&gt;
&lt;br /&gt;
===Photo finish (linescan mode)===&lt;br /&gt;
[[Photo-finish|Photo Finish]] (works for JP4 image format)&lt;br /&gt;
&lt;br /&gt;
===Controlling multiple cameras from single GUI===&lt;br /&gt;
* [[Multi_camera_system_operation|Recording]]&lt;br /&gt;
&lt;br /&gt;
===Developers version&#039;s half enclosure===&lt;br /&gt;
{|&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 half enclosure 1.jpeg|thumb|200px]]&lt;br /&gt;
|valign=&#039;top&#039;|[[File:10393 half enclosure 2.jpeg|thumb|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Available lengths for cables for connecting sensors in custom setups===&lt;br /&gt;
* [[FPC_cables|FPC cables]] - click for available lengths.&lt;br /&gt;
* The cables are &amp;lt;font color=&#039;red&#039;&amp;gt;asymmetrical&amp;lt;/font&amp;gt; - for correct connecting a sensor to a system board see the figure below. As a rule of thumb, the cable&#039;s back side (no contacts) will be on the same side with the connector&#039;s cover.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:Fpc_cable_conn_10393.jpeg|300px|thumb|Connecting sensors to the system board]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Known problems&amp;lt;/font&amp;gt;==&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Vertical artifacts in jpegs. Images are ok at 100% quality. Fixed, testing.&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; http://192.168.0.9:232x/noexif/mimg - multipart jpeg displays corrupted frames from time to time. Reason: network bandwidth?&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Sometimes on power-on (NAND flash boot) cannot mount the card&#039;s rootfs partition. Kernel Panics. Power off/on. Soft &amp;quot;reboot -f&amp;quot; works ok.&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;b&amp;gt;Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[VFS:_Unable_to_mount_root_fs_on_unknown-block(179,2)|More info]]&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; Changing exposure/quality/gains - can corrupt images - needs testing.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; After rewriting rootfs to &amp;amp;mu;SD card - some of the cards get a corrupted partition - re-partitioning (reformatting?) solves the problem.&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 On the camera the rootfs is mounted as RW and some of the files are changed (also links created) -&lt;br /&gt;
 most of the changes are now moved to tmpfs but something might have been missed.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Notes&amp;lt;/font&amp;gt;==&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; In case rootfs is on flash, it might make sense (or maybe not as the history is updated only once on session exit) to disable bash sessions command history - [http://stackoverflow.com/questions/18663078/disable-history-in-linux disable bash history]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&#039;green&#039;&amp;gt;&#039;&#039;&#039;[SOLVED]&#039;&#039;&#039;&amp;lt;/font&amp;gt; When using &#039;&#039;&#039;overlays&#039;&#039;&#039;, deleting, existing in the lower layer, dirs can cause errors (hopefully it gets fixed someday), example: &lt;br /&gt;
** /mnt/sda1 exists in lower layer: /tmp/rootfs.ro/tmp&lt;br /&gt;
** upper layer is mounted to &amp;quot;/&amp;quot;&lt;br /&gt;
&amp;lt;font size=&#039;2&#039;&amp;gt;&lt;br /&gt;
 # rmdir /mnt/sda1&lt;br /&gt;
 # mkdir /mnt/sda1&lt;br /&gt;
 mkdir: cannot create directory &#039;/mnt/sda1&#039;: Operation not supported&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[Category:393]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-94&amp;diff=6295</id>
		<title>Elphel camera parts 0353-94</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-94&amp;diff=6295"/>
		<updated>2021-04-14T22:03:52Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0353-94-22 - Lock Washer for M1.6, stainless steel 18-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts]]&lt;br /&gt;
== 0353-94 - washers for other than M2 and M2.5 ==&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-01 - Washer for M1.6,  stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 93475A190&lt;br /&gt;
{{Cad4|0353-94-01}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-02 - Washer for 1/4&amp;quot;,  stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 90107A029&lt;br /&gt;
{{Cad4|0353-94-02}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-11 - Washer for M3  ===&lt;br /&gt;
t=0.7mm, OD=9mm, ID=3.2mm&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 91116A120&lt;br /&gt;
{{Cad4|0353-94-11}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-12 - Washer for M3, OD=7mm, stainless steel 18-8   ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 93475A210&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-13 - Lock Washer for M3, stainless steel 18-8   ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A150&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-22 - Belleville Spring Lock Washer for M1.6 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 90895A222&lt;br /&gt;
{{Cad4a|0353-94-22}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-41 - Washer for M4, plastic ===&lt;br /&gt;
OD=9mm, ID=4.3mm, t=0.67mm&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 95610A350&lt;br /&gt;
{{Cad4|0353-94-41}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-42 - Washer for M4 ===&lt;br /&gt;
OD=9mm, ID=4.3mm, t=0.7mm&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 93475A230&lt;br /&gt;
{{Cad4|0353-94-42}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-43 - Lock Washer for M4, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A160&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-44 - Lock Washer for M4, OD=7mm, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 91111A121&lt;br /&gt;
{{Cad4|0353-94-44}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-51 - Washer for M5 ===&lt;br /&gt;
McMaster p/n 93475A240&lt;br /&gt;
{{Cad4a|0353-94-51}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-52 - Lock Washer for M5 ===&lt;br /&gt;
McMaster p/n 92148A170&lt;br /&gt;
{{Cad4a|0353-94-52}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-53 Shim washer ===&lt;br /&gt;
ID=5.0mm, OD=10.0mm t=1.0mm &lt;br /&gt;
McMaster p/n 98089A375&lt;br /&gt;
{{Cad4a|0353-94-53}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-61 - Washer, plastic  ===&lt;br /&gt;
ID=0.25&amp;quot;, OD=0.38&amp;quot;, t=0.03+/-0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 95606A120&lt;br /&gt;
{{Cad4|0353-94-61}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-62 - Washer, OD14.0, ID=8.0, t=1.0 ===&lt;br /&gt;
{{Cad4|0353-94-62}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-63 - Washer, shim ID=8mm . OD=14, t=0.3===&lt;br /&gt;
{{Cad4|0353-94-63}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-64 - Lock washer M8, high collar ===&lt;br /&gt;
{{Cad4|0353-94-64}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-65 - Washer for M10, OD=20mm ===&lt;br /&gt;
{{Cad4|0353-94-65}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-66 - Lock washer, M10 ===&lt;br /&gt;
{{Cad4|0353-94-66}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-67 - Lock washer M10, high collar ===&lt;br /&gt;
{{Cad4|0353-94-67}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-71 - Washer for M6, OD=12mm, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 93475A250&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-72 - Lock Washer for M6, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A180&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-75 - Washer for 1/4&amp;quot; ===&lt;br /&gt;
ID=.281&amp;quot;, OD=.625&amp;quot;, t=.04&amp;quot;-.06&amp;quot;&lt;br /&gt;
McMaster p/n 96765A140&lt;br /&gt;
{{Cad4a|0353-94-75}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-81 - Washer for M8, OD=16mm, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 93475A270&lt;br /&gt;
&lt;br /&gt;
{{Cad4|0353-94-81}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-82 - Lock Washer for M8, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A200&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-90 - Washer, shim. OD=18mm, ID=12mm,t=0.5 ===&lt;br /&gt;
{{Cad4|0353-94-90}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-92 - Compensating washer, OD=6mm, t=0.8 ===&lt;br /&gt;
Part of hardware included to Digi-Key p/n 609-1420-ND&lt;br /&gt;
{{Cad4a|0353-94-92}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 0353-95 - washers for M2.5 ==&lt;br /&gt;
&lt;br /&gt;
=== 0353-95-01 Washer for M2.5 ===&lt;br /&gt;
OD=6mm,stainless steel 18-8&lt;br /&gt;
McMaster p/n 90965A110&lt;br /&gt;
{{Cad4a|0353-95-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-95-02 - Lock Washer for M2.5, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 92148A070&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 0353-95-03 - Rubber Washer ID=3mm ===&lt;br /&gt;
EPDM&lt;br /&gt;
McMaster p/n 90130A007&lt;br /&gt;
{{Cad4a|0353-94-53}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 0353-96 - washers for M2 ==&lt;br /&gt;
=== 0353-96-01 - Washer for M2, Stainless Steel 316, OD=5mm, ID=2.2mm, t=-0.3mm ===&lt;br /&gt;
McMaster p/n 90965A110&lt;br /&gt;
{{Cad4|0353-96-01}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-96-02 - M2 washer, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 93475A195&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-96-03 - Lock Washer for M2, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A050&lt;br /&gt;
&lt;br /&gt;
{{Cad4|0353-96-03}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-94&amp;diff=6294</id>
		<title>Elphel camera parts 0353-94</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-94&amp;diff=6294"/>
		<updated>2021-04-14T21:49:40Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0353-94-13 - Lock Washer for M3, stainless steel 18-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts]]&lt;br /&gt;
== 0353-94 - washers for other than M2 and M2.5 ==&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-01 - Washer for M1.6,  stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 93475A190&lt;br /&gt;
{{Cad4|0353-94-01}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-02 - Washer for 1/4&amp;quot;,  stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 90107A029&lt;br /&gt;
{{Cad4|0353-94-02}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-11 - Washer for M3  ===&lt;br /&gt;
t=0.7mm, OD=9mm, ID=3.2mm&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 91116A120&lt;br /&gt;
{{Cad4|0353-94-11}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-12 - Washer for M3, OD=7mm, stainless steel 18-8   ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 93475A210&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-13 - Lock Washer for M3, stainless steel 18-8   ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A150&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-22 - Lock Washer for M1.6, stainless steel 18-8   ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A150&lt;br /&gt;
{{Cad4a|0353-94-22}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-41 - Washer for M4, plastic ===&lt;br /&gt;
OD=9mm, ID=4.3mm, t=0.67mm&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 95610A350&lt;br /&gt;
{{Cad4|0353-94-41}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-42 - Washer for M4 ===&lt;br /&gt;
OD=9mm, ID=4.3mm, t=0.7mm&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 93475A230&lt;br /&gt;
{{Cad4|0353-94-42}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-43 - Lock Washer for M4, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A160&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-44 - Lock Washer for M4, OD=7mm, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 91111A121&lt;br /&gt;
{{Cad4|0353-94-44}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-51 - Washer for M5 ===&lt;br /&gt;
McMaster p/n 93475A240&lt;br /&gt;
{{Cad4a|0353-94-51}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-52 - Lock Washer for M5 ===&lt;br /&gt;
McMaster p/n 92148A170&lt;br /&gt;
{{Cad4a|0353-94-52}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-53 Shim washer ===&lt;br /&gt;
ID=5.0mm, OD=10.0mm t=1.0mm &lt;br /&gt;
McMaster p/n 98089A375&lt;br /&gt;
{{Cad4a|0353-94-53}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-61 - Washer, plastic  ===&lt;br /&gt;
ID=0.25&amp;quot;, OD=0.38&amp;quot;, t=0.03+/-0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 95606A120&lt;br /&gt;
{{Cad4|0353-94-61}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-62 - Washer, OD14.0, ID=8.0, t=1.0 ===&lt;br /&gt;
{{Cad4|0353-94-62}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-63 - Washer, shim ID=8mm . OD=14, t=0.3===&lt;br /&gt;
{{Cad4|0353-94-63}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-64 - Lock washer M8, high collar ===&lt;br /&gt;
{{Cad4|0353-94-64}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-65 - Washer for M10, OD=20mm ===&lt;br /&gt;
{{Cad4|0353-94-65}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-66 - Lock washer, M10 ===&lt;br /&gt;
{{Cad4|0353-94-66}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-67 - Lock washer M10, high collar ===&lt;br /&gt;
{{Cad4|0353-94-67}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-71 - Washer for M6, OD=12mm, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 93475A250&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-72 - Lock Washer for M6, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A180&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-75 - Washer for 1/4&amp;quot; ===&lt;br /&gt;
ID=.281&amp;quot;, OD=.625&amp;quot;, t=.04&amp;quot;-.06&amp;quot;&lt;br /&gt;
McMaster p/n 96765A140&lt;br /&gt;
{{Cad4a|0353-94-75}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-81 - Washer for M8, OD=16mm, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 93475A270&lt;br /&gt;
&lt;br /&gt;
{{Cad4|0353-94-81}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-82 - Lock Washer for M8, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A200&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-94-90 - Washer, shim. OD=18mm, ID=12mm,t=0.5 ===&lt;br /&gt;
{{Cad4|0353-94-90}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-94-92 - Compensating washer, OD=6mm, t=0.8 ===&lt;br /&gt;
Part of hardware included to Digi-Key p/n 609-1420-ND&lt;br /&gt;
{{Cad4a|0353-94-92}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 0353-95 - washers for M2.5 ==&lt;br /&gt;
&lt;br /&gt;
=== 0353-95-01 Washer for M2.5 ===&lt;br /&gt;
OD=6mm,stainless steel 18-8&lt;br /&gt;
McMaster p/n 90965A110&lt;br /&gt;
{{Cad4a|0353-95-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-95-02 - Lock Washer for M2.5, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 92148A070&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 0353-95-03 - Rubber Washer ID=3mm ===&lt;br /&gt;
EPDM&lt;br /&gt;
McMaster p/n 90130A007&lt;br /&gt;
{{Cad4a|0353-94-53}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 0353-96 - washers for M2 ==&lt;br /&gt;
=== 0353-96-01 - Washer for M2, Stainless Steel 316, OD=5mm, ID=2.2mm, t=-0.3mm ===&lt;br /&gt;
McMaster p/n 90965A110&lt;br /&gt;
{{Cad4|0353-96-01}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-96-02 - M2 washer, stainless steel 18-8 ===&lt;br /&gt;
McMaster p/n 93475A195&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-96-03 - Lock Washer for M2, stainless steel 18-8 ===&lt;br /&gt;
&lt;br /&gt;
McMaster p/n 92148A050&lt;br /&gt;
&lt;br /&gt;
{{Cad4|0353-96-03}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-13&amp;diff=12803</id>
		<title>Elphel camera parts 0393-13</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-13&amp;diff=12803"/>
		<updated>2021-04-14T21:47:19Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-13-14 - Half-plate for SFE mount */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
=== 0393-13 - Camera back panels ===&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-01 - Back panel for NC393, connector openings for 10393A and 10389B connectors ====&lt;br /&gt;
{{Cad4a|0393-13-01}}&lt;br /&gt;
----&lt;br /&gt;
==== 0393-13-01A - Back panel for NC393, Rev. &amp;quot;A&amp;quot;, connector openings for 10393A and 10389B connectors ====&lt;br /&gt;
{{Cad4a|0393-13-01a}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-02 - Back panel for NC393, connector openings for 10393 board only ====&lt;br /&gt;
{{Cad4a|0393-13-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-03 - Camera back connection plate ====&lt;br /&gt;
{{Cad4a|0393-13-03}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-14 - Half-plate for SFE mount ====&lt;br /&gt;
{{Cad4a|0393-13-14}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-14A - Half-plate for SFE mount, Rev A ====&lt;br /&gt;
{{Cad4a|0393-13-14A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-15 - Sensor Assembly Cover ====&lt;br /&gt;
{{Cad4a|0393-13-15}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-15B - Sensor Assembly Cover, rev B ====&lt;br /&gt;
{{Cad4a|0393-13-15B}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-15C - Sensor Assembly Cover, rev CB ====&lt;br /&gt;
{{Cad4a|0393-13-15C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-16 - Flex Cables Cover, Side ====&lt;br /&gt;
{{Cad4a|0393-13-16}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-17 - Flex Cables Cover, Bottom ====&lt;br /&gt;
{{Cad4a|0393-13-17}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-18 - Flex Cable Cover Spacer, Corner ====&lt;br /&gt;
{{Cad4a|0393-13-18}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-19 - Flex Cables Cover Spacer, Middle ====&lt;br /&gt;
{{Cad4a|0393-13-19}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-20 - Back Mount Plate ====&lt;br /&gt;
{{Cad4a|0393-13-20}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-21 - Camera Mount Plate, Upper ====&lt;br /&gt;
{{Cad4a|0393-13-21}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-22 - Camera Support ====&lt;br /&gt;
{{Cad4a|0393-13-22}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== 0393-13-23 - Camera Mount Plate, Bottom ====&lt;br /&gt;
{{Cad4a|0393-13-23}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6165</id>
		<title>Elphel camera parts 0353-99</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6165"/>
		<updated>2021-04-14T21:45:49Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0353-99-161 - Screw, M2, Hex Socket Cap, Stainless Steel 18-8, l=4mm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts]]&lt;br /&gt;
== 0353-99 - Screws, metric, M2 ==&lt;br /&gt;
=== 0353-99-01 - Screw, M2, Socket cap, Black anodized, l=6mm  ===&lt;br /&gt;
McMaster p/n 91239A704&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-02 - Screw, M2, Socket cap, Stainless steel 316, l=10mm ===&lt;br /&gt;
McMaster p/n 92290A017&lt;br /&gt;
{{Cad4|0353-99-02}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-03 - Screw, M2, Socket cap, Stainless steel 316, l=12mm  ===&lt;br /&gt;
McMaster p/n 92290A019&lt;br /&gt;
{{Cad4|0353-99-03}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-04 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92125A050&lt;br /&gt;
{{Cad4|0353-99-04}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-05 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 92125A054&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-06 - Screw, M2, Flat Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91294A002&lt;br /&gt;
{{Cad4|0353-99-06}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!-- ???=== 0353-99-10 - Set screw, M2, Socket Cap, Steel, Black, l=3mm === &lt;br /&gt;
McMaster p/n 91390A090--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === 0353-99-10 - Screw, M2, Button Head Socket Cap, Steel, Black, l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-07 - Screw, M2, Flat Socket Cap, Black 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91294A005&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-10 - Screw Socket Head M2, l=3mm ===&lt;br /&gt;
McMaster p/n 91292A003 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-101 - Screw Button Head M2, Black Oxide,  l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700 &lt;br /&gt;
{{Cad4|0353-99-101}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-102 - Screw Button Head M2, Black Oxide, l=12mm ===&lt;br /&gt;
McMaster p/n 91239A707 &lt;br /&gt;
{{Cad4|0353-99-102}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-11 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92015A091&lt;br /&gt;
{{Cad4|0353-99-11}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-111 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=3mm ===&lt;br /&gt;
McMaster p/n 92015A090&lt;br /&gt;
{{Cad4|0353-99-111}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-12 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=6mm ===&lt;br /&gt;
McMaster p/n 92015A093&lt;br /&gt;
{{Cad4|0353-99-12}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-13 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=12mm ===&lt;br /&gt;
McMaster p/n 92015A198&lt;br /&gt;
{{Cad4|0353-99-13}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-15 - Screw, M2, Button Head Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91239A703&lt;br /&gt;
{{Cad4a|0353-99-15}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-16 - Screw, M2, Hex Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91290A011&lt;br /&gt;
{{Cad4a|0353-99-16}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-161 - Screw, M2, Hex Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 91292A004&lt;br /&gt;
{{Cad4a|0353-99-161}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-17 - Screw M2, Flat, Socket, Stainless steel 18-8, l=10mm ===&lt;br /&gt;
McMaster p/n 92125A056&lt;br /&gt;
{{Cad4|0353-99-17}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-18 - Screw, M2, Socket Head, Stainless steel 18-8, l=16mm ===&lt;br /&gt;
McMaster p/n 91292A002&lt;br /&gt;
{{Cad4|0353-99-18}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-19 - Screw, M2, Socket Head, Stainless steel 18-8, l=14mm ===&lt;br /&gt;
McMaster p/n 91292A001&lt;br /&gt;
{{Cad4|0353-99-19}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-20 - Screw, M2, Socket Head, Stainless steel 18-8, l=6mm ===&lt;br /&gt;
McMaster &amp;lt;!--p/n 91292A006--&amp;gt; 91292A831&lt;br /&gt;
{{Cad4|0353-99-20}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-21 - Screw, M2, Socket Head, Stainless steel 18-8, l=25mm ===&lt;br /&gt;
[http://www.microfasteners.com/catalog/products/METSCM.cfm SCM2025]&lt;br /&gt;
(slotted - McMaster p/n 91800A023)&lt;br /&gt;
{{Cad4|0353-99-21}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-22 - Screw, M2, Socket Head, Stainless steel 18-8, l=20mm ===&lt;br /&gt;
McMaster p/n 91292A013&lt;br /&gt;
{{Cad4|0353-99-22}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-25 - Screw, M2, Socket Head, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91292A008, new p/n 91292A832&lt;br /&gt;
{{Cad4|0353-99-25}}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6164</id>
		<title>Elphel camera parts 0353-99</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6164"/>
		<updated>2021-04-14T21:45:23Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0353-99-16 - Screw, M2, Hex Socket Cap, Steel, Black, l=4mm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts]]&lt;br /&gt;
== 0353-99 - Screws, metric, M2 ==&lt;br /&gt;
=== 0353-99-01 - Screw, M2, Socket cap, Black anodized, l=6mm  ===&lt;br /&gt;
McMaster p/n 91239A704&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-02 - Screw, M2, Socket cap, Stainless steel 316, l=10mm ===&lt;br /&gt;
McMaster p/n 92290A017&lt;br /&gt;
{{Cad4|0353-99-02}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-03 - Screw, M2, Socket cap, Stainless steel 316, l=12mm  ===&lt;br /&gt;
McMaster p/n 92290A019&lt;br /&gt;
{{Cad4|0353-99-03}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-04 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92125A050&lt;br /&gt;
{{Cad4|0353-99-04}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-05 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 92125A054&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-06 - Screw, M2, Flat Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91294A002&lt;br /&gt;
{{Cad4|0353-99-06}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!-- ???=== 0353-99-10 - Set screw, M2, Socket Cap, Steel, Black, l=3mm === &lt;br /&gt;
McMaster p/n 91390A090--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === 0353-99-10 - Screw, M2, Button Head Socket Cap, Steel, Black, l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-07 - Screw, M2, Flat Socket Cap, Black 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91294A005&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-10 - Screw Socket Head M2, l=3mm ===&lt;br /&gt;
McMaster p/n 91292A003 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-101 - Screw Button Head M2, Black Oxide,  l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700 &lt;br /&gt;
{{Cad4|0353-99-101}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-102 - Screw Button Head M2, Black Oxide, l=12mm ===&lt;br /&gt;
McMaster p/n 91239A707 &lt;br /&gt;
{{Cad4|0353-99-102}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-11 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92015A091&lt;br /&gt;
{{Cad4|0353-99-11}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-111 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=3mm ===&lt;br /&gt;
McMaster p/n 92015A090&lt;br /&gt;
{{Cad4|0353-99-111}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-12 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=6mm ===&lt;br /&gt;
McMaster p/n 92015A093&lt;br /&gt;
{{Cad4|0353-99-12}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-13 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=12mm ===&lt;br /&gt;
McMaster p/n 92015A198&lt;br /&gt;
{{Cad4|0353-99-13}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-15 - Screw, M2, Button Head Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91239A703&lt;br /&gt;
{{Cad4a|0353-99-15}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-16 - Screw, M2, Hex Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91290A011&lt;br /&gt;
{{Cad4a|0353-99-16}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-161 - Screw, M2, Hex Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 91292A004&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-17 - Screw M2, Flat, Socket, Stainless steel 18-8, l=10mm ===&lt;br /&gt;
McMaster p/n 92125A056&lt;br /&gt;
{{Cad4|0353-99-17}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-18 - Screw, M2, Socket Head, Stainless steel 18-8, l=16mm ===&lt;br /&gt;
McMaster p/n 91292A002&lt;br /&gt;
{{Cad4|0353-99-18}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-19 - Screw, M2, Socket Head, Stainless steel 18-8, l=14mm ===&lt;br /&gt;
McMaster p/n 91292A001&lt;br /&gt;
{{Cad4|0353-99-19}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-20 - Screw, M2, Socket Head, Stainless steel 18-8, l=6mm ===&lt;br /&gt;
McMaster &amp;lt;!--p/n 91292A006--&amp;gt; 91292A831&lt;br /&gt;
{{Cad4|0353-99-20}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-21 - Screw, M2, Socket Head, Stainless steel 18-8, l=25mm ===&lt;br /&gt;
[http://www.microfasteners.com/catalog/products/METSCM.cfm SCM2025]&lt;br /&gt;
(slotted - McMaster p/n 91800A023)&lt;br /&gt;
{{Cad4|0353-99-21}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-22 - Screw, M2, Socket Head, Stainless steel 18-8, l=20mm ===&lt;br /&gt;
McMaster p/n 91292A013&lt;br /&gt;
{{Cad4|0353-99-22}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-25 - Screw, M2, Socket Head, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91292A008, new p/n 91292A832&lt;br /&gt;
{{Cad4|0353-99-25}}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6163</id>
		<title>Elphel camera parts 0353-99</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6163"/>
		<updated>2021-04-14T21:44:32Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0353-99-16 - Screw, M2, Hex Socket Cap, Steel, Black, l=4mm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts]]&lt;br /&gt;
== 0353-99 - Screws, metric, M2 ==&lt;br /&gt;
=== 0353-99-01 - Screw, M2, Socket cap, Black anodized, l=6mm  ===&lt;br /&gt;
McMaster p/n 91239A704&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-02 - Screw, M2, Socket cap, Stainless steel 316, l=10mm ===&lt;br /&gt;
McMaster p/n 92290A017&lt;br /&gt;
{{Cad4|0353-99-02}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-03 - Screw, M2, Socket cap, Stainless steel 316, l=12mm  ===&lt;br /&gt;
McMaster p/n 92290A019&lt;br /&gt;
{{Cad4|0353-99-03}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-04 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92125A050&lt;br /&gt;
{{Cad4|0353-99-04}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-05 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 92125A054&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-06 - Screw, M2, Flat Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91294A002&lt;br /&gt;
{{Cad4|0353-99-06}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!-- ???=== 0353-99-10 - Set screw, M2, Socket Cap, Steel, Black, l=3mm === &lt;br /&gt;
McMaster p/n 91390A090--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === 0353-99-10 - Screw, M2, Button Head Socket Cap, Steel, Black, l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-07 - Screw, M2, Flat Socket Cap, Black 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91294A005&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-10 - Screw Socket Head M2, l=3mm ===&lt;br /&gt;
McMaster p/n 91292A003 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-101 - Screw Button Head M2, Black Oxide,  l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700 &lt;br /&gt;
{{Cad4|0353-99-101}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-102 - Screw Button Head M2, Black Oxide, l=12mm ===&lt;br /&gt;
McMaster p/n 91239A707 &lt;br /&gt;
{{Cad4|0353-99-102}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-11 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92015A091&lt;br /&gt;
{{Cad4|0353-99-11}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-111 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=3mm ===&lt;br /&gt;
McMaster p/n 92015A090&lt;br /&gt;
{{Cad4|0353-99-111}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-12 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=6mm ===&lt;br /&gt;
McMaster p/n 92015A093&lt;br /&gt;
{{Cad4|0353-99-12}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-13 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=12mm ===&lt;br /&gt;
McMaster p/n 92015A198&lt;br /&gt;
{{Cad4|0353-99-13}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-15 - Screw, M2, Button Head Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91239A703&lt;br /&gt;
{{Cad4a|0353-99-15}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-16 - Screw, M2, Hex Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91290A011&lt;br /&gt;
{{Cad4a|0393-99-16}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-161 - Screw, M2, Hex Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 91292A004&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-17 - Screw M2, Flat, Socket, Stainless steel 18-8, l=10mm ===&lt;br /&gt;
McMaster p/n 92125A056&lt;br /&gt;
{{Cad4|0353-99-17}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-18 - Screw, M2, Socket Head, Stainless steel 18-8, l=16mm ===&lt;br /&gt;
McMaster p/n 91292A002&lt;br /&gt;
{{Cad4|0353-99-18}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-19 - Screw, M2, Socket Head, Stainless steel 18-8, l=14mm ===&lt;br /&gt;
McMaster p/n 91292A001&lt;br /&gt;
{{Cad4|0353-99-19}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-20 - Screw, M2, Socket Head, Stainless steel 18-8, l=6mm ===&lt;br /&gt;
McMaster &amp;lt;!--p/n 91292A006--&amp;gt; 91292A831&lt;br /&gt;
{{Cad4|0353-99-20}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-21 - Screw, M2, Socket Head, Stainless steel 18-8, l=25mm ===&lt;br /&gt;
[http://www.microfasteners.com/catalog/products/METSCM.cfm SCM2025]&lt;br /&gt;
(slotted - McMaster p/n 91800A023)&lt;br /&gt;
{{Cad4|0353-99-21}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-22 - Screw, M2, Socket Head, Stainless steel 18-8, l=20mm ===&lt;br /&gt;
McMaster p/n 91292A013&lt;br /&gt;
{{Cad4|0353-99-22}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-25 - Screw, M2, Socket Head, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91292A008, new p/n 91292A832&lt;br /&gt;
{{Cad4|0353-99-25}}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6162</id>
		<title>Elphel camera parts 0353-99</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0353-99&amp;diff=6162"/>
		<updated>2021-04-14T21:43:57Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0353-99-15 - Screw, M2, Button Head Socket Cap, Steel, Black, l=4mm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts]]&lt;br /&gt;
== 0353-99 - Screws, metric, M2 ==&lt;br /&gt;
=== 0353-99-01 - Screw, M2, Socket cap, Black anodized, l=6mm  ===&lt;br /&gt;
McMaster p/n 91239A704&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-02 - Screw, M2, Socket cap, Stainless steel 316, l=10mm ===&lt;br /&gt;
McMaster p/n 92290A017&lt;br /&gt;
{{Cad4|0353-99-02}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-03 - Screw, M2, Socket cap, Stainless steel 316, l=12mm  ===&lt;br /&gt;
McMaster p/n 92290A019&lt;br /&gt;
{{Cad4|0353-99-03}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-04 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92125A050&lt;br /&gt;
{{Cad4|0353-99-04}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-05 - Screw, M2, Flat Socket Cap, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 92125A054&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-06 - Screw, M2, Flat Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91294A002&lt;br /&gt;
{{Cad4|0353-99-06}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!-- ???=== 0353-99-10 - Set screw, M2, Socket Cap, Steel, Black, l=3mm === &lt;br /&gt;
McMaster p/n 91390A090--&amp;gt;&lt;br /&gt;
&amp;lt;!-- === 0353-99-10 - Screw, M2, Button Head Socket Cap, Steel, Black, l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-07 - Screw, M2, Flat Socket Cap, Black 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91294A005&lt;br /&gt;
{{Cad4|0353-99-05}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-10 - Screw Socket Head M2, l=3mm ===&lt;br /&gt;
McMaster p/n 91292A003 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-101 - Screw Button Head M2, Black Oxide,  l=3mm ===&lt;br /&gt;
McMaster p/n 91239A700 &lt;br /&gt;
{{Cad4|0353-99-101}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-102 - Screw Button Head M2, Black Oxide, l=12mm ===&lt;br /&gt;
McMaster p/n 91239A707 &lt;br /&gt;
{{Cad4|0353-99-102}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-11 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 92015A091&lt;br /&gt;
{{Cad4|0353-99-11}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-111 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=3mm ===&lt;br /&gt;
McMaster p/n 92015A090&lt;br /&gt;
{{Cad4|0353-99-111}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-12 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=6mm ===&lt;br /&gt;
McMaster p/n 92015A093&lt;br /&gt;
{{Cad4|0353-99-12}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-13 - Set Screw, M2, Socket Cap, Stainless Steel 18-8, l=12mm ===&lt;br /&gt;
McMaster p/n 92015A198&lt;br /&gt;
{{Cad4|0353-99-13}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-15 - Screw, M2, Button Head Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91239A703&lt;br /&gt;
{{Cad4a|0353-99-15}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-16 - Screw, M2, Hex Socket Cap, Steel, Black, l=4mm ===&lt;br /&gt;
McMaster p/n 91290A011&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-161 - Screw, M2, Hex Socket Cap, Stainless Steel 18-8, l=4mm ===&lt;br /&gt;
McMaster p/n 91292A004&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-17 - Screw M2, Flat, Socket, Stainless steel 18-8, l=10mm ===&lt;br /&gt;
McMaster p/n 92125A056&lt;br /&gt;
{{Cad4|0353-99-17}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-18 - Screw, M2, Socket Head, Stainless steel 18-8, l=16mm ===&lt;br /&gt;
McMaster p/n 91292A002&lt;br /&gt;
{{Cad4|0353-99-18}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-19 - Screw, M2, Socket Head, Stainless steel 18-8, l=14mm ===&lt;br /&gt;
McMaster p/n 91292A001&lt;br /&gt;
{{Cad4|0353-99-19}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== 0353-99-20 - Screw, M2, Socket Head, Stainless steel 18-8, l=6mm ===&lt;br /&gt;
McMaster &amp;lt;!--p/n 91292A006--&amp;gt; 91292A831&lt;br /&gt;
{{Cad4|0353-99-20}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-21 - Screw, M2, Socket Head, Stainless steel 18-8, l=25mm ===&lt;br /&gt;
[http://www.microfasteners.com/catalog/products/METSCM.cfm SCM2025]&lt;br /&gt;
(slotted - McMaster p/n 91800A023)&lt;br /&gt;
{{Cad4|0353-99-21}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-22 - Screw, M2, Socket Head, Stainless steel 18-8, l=20mm ===&lt;br /&gt;
McMaster p/n 91292A013&lt;br /&gt;
{{Cad4|0353-99-22}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-99-25 - Screw, M2, Socket Head, Stainless steel 18-8, l=8mm ===&lt;br /&gt;
McMaster p/n 91292A008, new p/n 91292A832&lt;br /&gt;
{{Cad4|0353-99-25}}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-19&amp;diff=12898</id>
		<title>Elphel camera parts 0393-19</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-19&amp;diff=12898"/>
		<updated>2021-04-14T21:41:50Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-19-44 - Guide Tube */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
=== 0393-19-01 - Heat Transfer Bracket ===&lt;br /&gt;
{{Cad4a|0393-19-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-01A - Heat Transfer Bracket, Rev &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-19-01A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-02 - Heatsink for DC-DC Converter ===&lt;br /&gt;
{{Cad4a|0393-19-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-03 - Heatsink Spacer ===&lt;br /&gt;
{{Cad4a|0393-19-03}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-04 - Heatsink Spacer, Alternative ===&lt;br /&gt;
{{Cad4a|0393-19-04}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-05 - Adjustble Rod Thrust ===&lt;br /&gt;
{{Cad4a|0393-19-05}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-05A - Adjustble Rod Thrust, REV &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-19-05A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-06 - Thrust Coupler ===&lt;br /&gt;
{{Cad4a|0393-19-06}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-07 - Guide Tube ===&lt;br /&gt;
{{Cad4a|0393-19-07}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-08 - Hex Key Extender ===&lt;br /&gt;
{{Cad4a|0393-19-08}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-09 - Hex Key Tip ===&lt;br /&gt;
{{Cad4a|0393-19-09}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-10 - Hex Key Entry Port ===&lt;br /&gt;
{{Cad4a|0393-19-10}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-11 - Modified M8 Washer ===&lt;br /&gt;
{{Cad4a|0393-19-11}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-12 - GPS CTRL Bracket ===&lt;br /&gt;
Mount for 0353-00-25 / 103696&lt;br /&gt;
{{Cad4a|0393-19-12}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-13 - Hex Key Handle ===&lt;br /&gt;
{{Cad4a|0393-19-13}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-14 - Clamp Frame ===&lt;br /&gt;
{{Cad4a|0393-19-14}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-20 - Spacer ===&lt;br /&gt;
{{Cad4a|0393-19-20}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-21 - Disk spring shaft ===&lt;br /&gt;
{{Cad4a|0393-19-21}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-22 -Disk spring shaft ===&lt;br /&gt;
{{Cad4a|0393-19-22}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-43 - Fan Mount Panel  ===&lt;br /&gt;
{{Cad4a|0393-19-43}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-44 - Guide Tube  ===&lt;br /&gt;
{{Cad4a|0393-19-44}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-45 - Guide Tube  ===&lt;br /&gt;
{{Cad4a|0393-19-45}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-46 - Guide Tube  ===&lt;br /&gt;
{{Cad4a|0393-19-46}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-81 - Tube body bottom ===&lt;br /&gt;
{{Cad4a|0393-19-81}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-841 - Tube Rail, OD=0.25&amp;quot;, ID=0.152&amp;quot; ===&lt;br /&gt;
Made of McMaster p/n 9056K622 or equiv.&lt;br /&gt;
{{Cad4a|0393-19-841}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-100 - Antenna plate ===&lt;br /&gt;
{{Cad4a|0393-19-100}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-85 - Heat plate mount ===&lt;br /&gt;
{{Cad4a|0393-19-85}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=103993&amp;diff=15276</id>
		<title>103993</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=103993&amp;diff=15276"/>
		<updated>2021-04-14T05:51:44Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 103993 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==103993==&lt;br /&gt;
Adapter for FLIR Boson 640x512 LWIR sensor module&lt;br /&gt;
[[Image:103993_pcb-layout.png|thumb|400px|&lt;br /&gt;
[[Media:103993_sch.pdf|103993 circuit diagram]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_gerber.tar.gz|103993 Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_assy.tar.gz|103993 placement files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a.pdf|103993 Rev A circuit diagram and parts list]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_gerber.tar.gz|103993 Rev A  Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_assy.tar.gz|103993 Rev A  placement files]]&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
Mechanical CAD files and 3D model (rev 0): [[Elphel_camera_parts_0393-00#0393-00-993_-_103993_rev_0_Adapter_for_FLIR_Boson_640x512_LWIR_camera_core_103993 | 0393-00-993]]&lt;br /&gt;
&lt;br /&gt;
Mechanical CAD files and 3D model (rev A): [[Elphel_camera_parts_0393-00#0393-00-993_-_103993_rev_A_Adapter_for_FLIR_Boson_640x512_LWIR_camera_core_103993 | 0393-00-993A]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=103993&amp;diff=15275</id>
		<title>103993</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=103993&amp;diff=15275"/>
		<updated>2021-04-14T05:51:22Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==103993==&lt;br /&gt;
Adapter for FLIR Boson 640x512 LWIR sensor module&lt;br /&gt;
[[Image:103993_pcb-layout.png|thumb|400px|&lt;br /&gt;
[[Media:103993_sch.pdf|103993 circuit diagram]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_gerber.tar.gz|103993 Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_assy.tar.gz|103993 placement files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a.pdf|103993 Rev A circuit diagram and parts list]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_gerber.tar.gz|103993 Rev A  Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_assy.tar.gz|103993 Rev A  placement files]]&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
Mechanical CAD files and 3D model (rev 0): [[Elphel_camera_parts_0393-00#0393-00-993_-_103993_rev_0_Adapter_for_FLIR_Boson_640x512_LWIR_camera_core_103993 | 0393-00-993]]&lt;br /&gt;
Mechanical CAD files and 3D model (rev A): [[Elphel_camera_parts_0393-00#0393-00-993_-_103993_rev_A_Adapter_for_FLIR_Boson_640x512_LWIR_camera_core_103993 | 0393-00-993A]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=File:103993a_assy.tar.gz&amp;diff=15304</id>
		<title>File:103993a assy.tar.gz</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=File:103993a_assy.tar.gz&amp;diff=15304"/>
		<updated>2021-04-14T05:48:19Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CERN OHLv1.1 }}&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=File:103993a_gerber.tar.gz&amp;diff=15303</id>
		<title>File:103993a gerber.tar.gz</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=File:103993a_gerber.tar.gz&amp;diff=15303"/>
		<updated>2021-04-14T05:47:54Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{CERN OHLv1.1 }}&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=File:103993a.pdf&amp;diff=15302</id>
		<title>File:103993a.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=File:103993a.pdf&amp;diff=15302"/>
		<updated>2021-04-14T05:47:02Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing ==&lt;br /&gt;
{{GNU FDLv1.3 }}&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=103993&amp;diff=15274</id>
		<title>103993</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=103993&amp;diff=15274"/>
		<updated>2021-04-14T05:46:11Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==103993==&lt;br /&gt;
Adapter for FLIR Boson 640x512 LWIR sensor module&lt;br /&gt;
[[Image:103993_pcb-layout.png|thumb|400px|&lt;br /&gt;
[[Media:103993_sch.pdf|103993 circuit diagram]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_gerber.tar.gz|103993 Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_assy.tar.gz|103993 placement files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a.pdf|103993 Rev A circuit diagram and parts list]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_gerber.tar.gz|103993 Rev A  Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_assy.tar.gz|103993 Rev A  placement files]]&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
Mechanical CAD files and 3D model: [[Elphel_camera_parts_0393-00#0393-00-993_-_103993_rev_0_Adapter_for_FLIR_Boson_640x512_LWIR_camera_core_103993 | 0393-00-993]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=103993&amp;diff=15273</id>
		<title>103993</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=103993&amp;diff=15273"/>
		<updated>2021-04-14T05:45:47Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==103993==&lt;br /&gt;
Adapter for FLIR Boson 640x512 LWIR sensor module&lt;br /&gt;
[[Image:103993_pcb-layout.png|thumb|400px|&lt;br /&gt;
[[Media:103993_sch.pdf|103993 circuit diagram]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993_gerber.tar.gz|103993 Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_assy.tar.gz|103993 placement files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a.pdf|103993 Rev A circuit diagram and parts list]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_gerber.tar.gz|103993 Rev A  Gerber files]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Media:103993a_assy.tar.gz|103993 Rev A  placement files]]&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
Mechanical CAD files and 3D model: [[Elphel_camera_parts_0393-00#0393-00-993_-_103993_rev_0_Adapter_for_FLIR_Boson_640x512_LWIR_camera_core_103993 | 0393-00-993]]&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-30&amp;diff=12831</id>
		<title>Elphel camera parts 0393-30</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-30&amp;diff=12831"/>
		<updated>2021-04-14T05:37:59Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-30-32 - Thermal Pad for m.2 2260 SSD, 6W/m-K, 0.5mm, adhesive one one side */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
== 0393-30 - insulator tubing, spacers, tapes, pads ==&lt;br /&gt;
=== 0393-30-18 - O-Ring OD=6mm, ID=4mm ===&lt;br /&gt;
{{Cad4a|0393-30-18}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-30-20 - Sensor board spacer, 5 mil ===&lt;br /&gt;
Mylar, 5 mil&lt;br /&gt;
{{Cad4a|0393-30-20}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-21 - SFE rotation gasket ===&lt;br /&gt;
PTFE 10 mil&lt;br /&gt;
{{Cad4a|0393-30-21}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-30 - Thermal pad, 6W/m-K ===&lt;br /&gt;
Made of Digi-Key p/n H48-6G-300-300-0.3-1A&lt;br /&gt;
{{Cad4a|0393-30-30}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-31 - Thermal Pad for DCDC, 6W/m-K, 0.5mm, adhesive one one side ===&lt;br /&gt;
Cut from H48-6G-150-150-0.5-1A (t-Global Technology),  Digi-Key p/n 1168-1289-ND &lt;br /&gt;
{{Cad4a|0393-30-31}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-32 - Thermal Pad for m.2 2260 SSD, 6W/m-K, 0.5mm, adhesive one one side ===&lt;br /&gt;
Cut from H48-6G-150-150-0.5-1A (t-Global Technology),  Digi-Key p/n 1168-1289-ND &lt;br /&gt;
{{Cad4a|0393-30-32}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-33 - Thermal Pad for 103993B PCBA ===&lt;br /&gt;
Cut from H48-6G-150-150-0.5-1A (t-Global Technology),  Digi-Key p/n 1168-1289-ND &lt;br /&gt;
{{Cad4a|0393-30-33}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-62 - O-ring, OD=24mm, ID=20mm  ===&lt;br /&gt;
Viton, McMaster p/n 1295N247 &lt;br /&gt;
{{Cad4a|0393-30-62}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-63 - O-ring, OD=28mm, ID=24mm  ===&lt;br /&gt;
Viton, McMaster p/n 9263K503 &lt;br /&gt;
{{Cad4a|0393-30-63}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-64 - O-ring, OD=36mm, ID=32mm  ===&lt;br /&gt;
Viton, McMaster p/n 9263K523 &lt;br /&gt;
{{Cad4a|0393-30-64}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-30-65 - O-ring, OD=47mm, ID=45mm  ===&lt;br /&gt;
Viton, McMaster p/n 1295N436 &lt;br /&gt;
{{Cad4a|0393-30-65}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-19&amp;diff=12897</id>
		<title>Elphel camera parts 0393-19</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-19&amp;diff=12897"/>
		<updated>2021-04-14T05:36:38Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-19-43 - Fan Mount Panel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
=== 0393-19-01 - Heat Transfer Bracket ===&lt;br /&gt;
{{Cad4a|0393-19-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-01A - Heat Transfer Bracket, Rev &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-19-01A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-02 - Heatsink for DC-DC Converter ===&lt;br /&gt;
{{Cad4a|0393-19-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-03 - Heatsink Spacer ===&lt;br /&gt;
{{Cad4a|0393-19-03}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-04 - Heatsink Spacer, Alternative ===&lt;br /&gt;
{{Cad4a|0393-19-04}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-05 - Adjustble Rod Thrust ===&lt;br /&gt;
{{Cad4a|0393-19-05}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-05A - Adjustble Rod Thrust, REV &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-19-05A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-06 - Thrust Coupler ===&lt;br /&gt;
{{Cad4a|0393-19-06}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-07 - Guide Tube ===&lt;br /&gt;
{{Cad4a|0393-19-07}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-08 - Hex Key Extender ===&lt;br /&gt;
{{Cad4a|0393-19-08}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-09 - Hex Key Tip ===&lt;br /&gt;
{{Cad4a|0393-19-09}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-10 - Hex Key Entry Port ===&lt;br /&gt;
{{Cad4a|0393-19-10}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-11 - Modified M8 Washer ===&lt;br /&gt;
{{Cad4a|0393-19-11}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-12 - GPS CTRL Bracket ===&lt;br /&gt;
Mount for 0353-00-25 / 103696&lt;br /&gt;
{{Cad4a|0393-19-12}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-13 - Hex Key Handle ===&lt;br /&gt;
{{Cad4a|0393-19-13}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-14 - Clamp Frame ===&lt;br /&gt;
{{Cad4a|0393-19-14}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-20 - Spacer ===&lt;br /&gt;
{{Cad4a|0393-19-20}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-21 - Disk spring shaft ===&lt;br /&gt;
{{Cad4a|0393-19-21}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-22 -Disk spring shaft ===&lt;br /&gt;
{{Cad4a|0393-19-22}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-43 - Fan Mount Panel  ===&lt;br /&gt;
{{Cad4a|0393-19-43}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-44 - Guide Tube  ===&lt;br /&gt;
{{Cad4a|0393-19-44}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-81 - Tube body bottom ===&lt;br /&gt;
{{Cad4a|0393-19-81}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-841 - Tube Rail, OD=0.25&amp;quot;, ID=0.152&amp;quot; ===&lt;br /&gt;
Made of McMaster p/n 9056K622 or equiv.&lt;br /&gt;
{{Cad4a|0393-19-841}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-100 - Antenna plate ===&lt;br /&gt;
{{Cad4a|0393-19-100}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-19-85 - Heat plate mount ===&lt;br /&gt;
{{Cad4a|0393-19-85}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=12822</id>
		<title>Elphel camera parts 0393-18</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=12822"/>
		<updated>2021-04-14T05:35:13Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: /* 0393-18-73A - Adjustment Spherical Mount Inner, Rev A */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
== 0393-18     - parts external other ==&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-01 - Vertical arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-02 - Horizontal arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-30 - tripod mount nut, 1/4-20 thread ===&lt;br /&gt;
{{Cad4a|0393-18-30}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-31 - tripod mount plate ===&lt;br /&gt;
{{Cad4a|0393-18-31}}&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-31A - tripod mount plate, Rev &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-18-31A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-50 - IMU enclosure ===&lt;br /&gt;
{{Cad4a|0393-18-50}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-51 - Camera top with GPS ===&lt;br /&gt;
{{Cad4a|0393-18-51}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-52 - Camera top without GPS ===&lt;br /&gt;
{{Cad4a|0393-18-52}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - GPS cap ===&lt;br /&gt;
{{Cad4a|0393-18-53}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - Fisheye lens shade ===&lt;br /&gt;
{{Cad4a|0393-18-54}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67 - 103993 PCBA Body ===&lt;br /&gt;
{{Cad4a|0393-18-67}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67A - 103993 PCBA Body, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-67a}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-695 - Adjustment Mount Cross Drilled ===&lt;br /&gt;
{{Cad4a|0393-18-69}}&lt;br /&gt;
---- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69A Adjustment Mount Cross Drilled, rev A ===&lt;br /&gt;
{{Cad4a|0393-18-69A}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69B Adjustment Mount Cross Drilled, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-69B}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70 - Adjustable Mount Base for Back Access ===&lt;br /&gt;
{{Cad4a|0393-18-70}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70B - Adjustable Mount Base for Back Access, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-70B}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70C - Adjustable Mount Base for Back Access, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-70C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-71 - Adjustment Mount Cross Threaded ===&lt;br /&gt;
{{Cad4a|0393-18-71}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-72 - Adjustable Mount Base for Helmet ===&lt;br /&gt;
{{Cad4a|0393-18-72}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-73 - Adjustment Spherical Mount Inner ===&lt;br /&gt;
{{Cad4a|0393-18-73}}&lt;br /&gt;
------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73A - Adjustment Spherical Mount Inner, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-73A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73C - Adjustment Spherical Mount Inner, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-73C}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
	<entry>
		<id>https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=12821</id>
		<title>Elphel camera parts 0393-18</title>
		<link rel="alternate" type="text/html" href="https://wiki.elphel.com/index.php?title=Elphel_camera_parts_0393-18&amp;diff=12821"/>
		<updated>2021-04-14T05:34:31Z</updated>

		<summary type="html">&lt;p&gt;Andrey.filippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Elphel_camera_parts_0393|Elphel NC393 series camera parts]]&lt;br /&gt;
== 0393-18     - parts external other ==&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-01 - Vertical arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-01}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-02 - Horizontal arm for H-camera ===&lt;br /&gt;
{{Cad4a|0393-18-02}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-30 - tripod mount nut, 1/4-20 thread ===&lt;br /&gt;
{{Cad4a|0393-18-30}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0353-18-31 - tripod mount plate ===&lt;br /&gt;
{{Cad4a|0393-18-31}}&lt;br /&gt;
----&lt;br /&gt;
=== 0353-18-31A - tripod mount plate, Rev &amp;quot;A&amp;quot; ===&lt;br /&gt;
{{Cad4a|0393-18-31A}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-50 - IMU enclosure ===&lt;br /&gt;
{{Cad4a|0393-18-50}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-51 - Camera top with GPS ===&lt;br /&gt;
{{Cad4a|0393-18-51}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-52 - Camera top without GPS ===&lt;br /&gt;
{{Cad4a|0393-18-52}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - GPS cap ===&lt;br /&gt;
{{Cad4a|0393-18-53}}&lt;br /&gt;
----&lt;br /&gt;
=== 0393-18-53 - Fisheye lens shade ===&lt;br /&gt;
{{Cad4a|0393-18-54}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67 - 103993 PCBA Body ===&lt;br /&gt;
{{Cad4a|0393-18-67}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-67A - 103993 PCBA Body, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-67a}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-695 - Adjustment Mount Cross Drilled ===&lt;br /&gt;
{{Cad4a|0393-18-69}}&lt;br /&gt;
---- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69A Adjustment Mount Cross Drilled, rev A ===&lt;br /&gt;
{{Cad4a|0393-18-69A}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-69B Adjustment Mount Cross Drilled, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-69B}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70 - Adjustable Mount Base for Back Access ===&lt;br /&gt;
{{Cad4a|0393-18-70}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70B - Adjustable Mount Base for Back Access, Rev B ===&lt;br /&gt;
{{Cad4a|0393-18-70B}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-70C - Adjustable Mount Base for Back Access, Rev C ===&lt;br /&gt;
{{Cad4a|0393-18-70C}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-71 - Adjustment Mount Cross Threaded ===&lt;br /&gt;
{{Cad4a|0393-18-71}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-72 - Adjustable Mount Base for Helmet ===&lt;br /&gt;
{{Cad4a|0393-18-72}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== 0393-18-73 - Adjustment Spherical Mount Inner ===&lt;br /&gt;
{{Cad4a|0393-18-73}}&lt;br /&gt;
------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 0393-18-73A - Adjustment Spherical Mount Inner, Rev A ===&lt;br /&gt;
{{Cad4a|0393-18-73A}}&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Andrey.filippov</name></author>
	</entry>
</feed>