Difference between revisions of "10393 manual"

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

Latest revision as of 09:49, 12 April 2022



In the package

Fig.1a 10393 interfaces
Fig.1b Boards connections (NC393-F-CS)
Fig.1c Micro SD card for development
Range Power supply
36-72V (default) wall adapter (48V)
18-75V wall adapter (48V)
12-36V wall adapter, battery (12V)
3.3V direct, custom
  • CAT6 network cable
  • μUSB-to-USB cable
  • Recovery μSD card
  • If the camera is calibrated the calibration data will be on a separate storage media or on the internal SSD (likely /mnt/sda1)

Interfaces

See Fig.1:

GigE gigabit network
μSD micro SD card slot - boot or storage
console serial console port, use μUSB-to-USB cable
eSATA+USB 2-in-1. Connect USB or eSATA device. USB2.0 host
μUSB USB2.0 host
sync sync multiple cameras or other devices - input/output trigger signal through a 4-conductor 2.5mm audio plug with cable (example: digikey)


Power on

  • Plug in the power supply
  • Connect to LAN using the network cable

Notes

  • Boot time: ~30s
  • No extra drivers are required on the host PC to operate the camera system. Can be operated from any network device with a browser.
  • The default boot is from the on-board NAND flash. More information on available boot options and recovery boot.
  • For a production system 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.
  • For development, one can boot from the μSD recovery card and use it - saving changes does not require extra sync actions.
  • Camera's software includes gcc compiler - relatively small projects can be compiled on the camera.

Defaults

IP Address 192.168.0.9
User root
Password pass
  • The default IP address is set in the /etc/elphel393/init_elphel393.py.
  • If present the internal SSD will be formatted into 2 partitions:
    • /dev/sda1 - ext4 (~64-100GB)
    • /dev/sda2 - raw partition (no file system) for fast recording

Command line access

  • ssh from PC's terminal:

user@hostname:~$ ssh root@192.168.0.9

Serial console access

  • Use a microUSB-USB cable to connect console μUSB port (see Fig.1) to PC - the cable's end should be thin enough otherwise interferes with an inserted mmc (multi media card = μSD card).
  • In Linux the minicom program can be used

$ minicom -c on

Most likely the device will be /dev/ttyUSB0. Settings:

  • 115200 8N1, no for hardware/software flow control

Refer to the following article for more details on using minicom: Using minicom to connect to Elphel393 camera

Web user interface (camvc)

http://192.168.0.9/

  • The page contains links to camvc user interface for each individual camera port.
  • camvc was ported from the 10353 camera series:
    • change parameters like image format, resolution, auto exposure, auto white balance and more. Alternative way to change parameters is described below.
    • pause compressor and search within buffered images
    • help tips available - see Fig.3 - select then mouse over a control element of interest
Fig.3 enable camvc help tips
Fig.4 camvc controls

Download live images

camvc

  • For a currently opened port (displayed in the window title and as "...sensor_port=0..." in the URL):
Fig.5 Acquire an image from the Camera Control Interface

browser

port 0: http://192.168.0.9:2323/img
port 1: http://192.168.0.9:2324/img
port 2: http://192.168.0.9:2325/img
port 3: http://192.168.0.9:2326/img

command line

wget http://192.168.0.9:2323/img -O filename.jpeg
wget http://192.168.0.9:2324/img -O filename.jpeg
wget http://192.168.0.9:2325/img -O filename.jpeg
wget http://192.168.0.9:2326/img -O filename.jpeg

Video

Display

Multipart JPEG stream

http://192.168.0.9:2323/mimg
http://192.168.0.9:2324/mimg
http://192.168.0.9:2325/mimg
http://192.168.0.9:2326/mimg

RTSP

  • Streams with either w or h >2040 might not get played - not supported by live555 often used by various media players. But there's a live555_patch.
  • turn on:

root@elphel393:~# /usr/bin/str

  • url:

rtsp://192.168.0.9:554
rtsp://192.168.0.9:556
rtsp://192.168.0.9:558
rtsp://192.168.0.9:560

GStreamer

gst-launch-1.0 -v playbin uri=rtsp://192.168.0.9:554 uridecodebin0::source::latency=0

or

gst-launch-1.0 souphttpsrc is-live=true location=http://192.168.0.9:2323/mimg ! jpegdec ! xvimagesink 

VLC

vlc rtsp://192.168.0.9:554 --network-caching=0

Record

  • Recording is done by the camogm program
  • If recording to internal or external SSD, please, read about eSATA port switching
  • important: Event logger (GPS, IMU, IMG, EXT) recording is started/stopped separately. See instructions below.
  • For SATA devices camogm supports:
    • recording to a partition with a file system - up to 80MB/s
    • (default) faster recording to a partition without a file system (raw partition) avoiding OS calls - up to 220MB/s
  • To extract data from a raw partition use dd or these scripts to get the data and split it into images. Follow this link for details.
  • Can record to an mmc partiton or usb.
  • More info
  • If the prefix parameter, which is absolute path + prefix, for a channel is not set the file will be written somewhere to rootfs.
    • if prefix is empty then the absolute path must end with a slash.

browser

Example 1: (provide a correct media mount point - /mnt/sda1/)

Follow this link for GUI description.

command line

Example:

  • /home/root, file prefix=test_, 1GB or 10min files whichever occurs first
    • setup and start (in one line):
echo "format=mov;status=/var/tmp/camogm.status;prefix=/home/root/test_;duration=600;length=1073741824;start" > /var/volatile/camogm_cmd
    • stop recording:
echo "stop" > /var/volatile/camogm_cmd
sync

Convert to a web cam stream

See this tutorial.

Store/restore configuration

http://192.168.0.9/autocampars.php?sensor_port=0 (stores to /etc/elphel393/autocampars0.xml)
http://192.168.0.9/autocampars.php?sensor_port=1 (stores to /etc/elphel393/autocampars1.xml)
http://192.168.0.9/autocampars.php?sensor_port=2 (stores to /etc/elphel393/autocampars2.xml)
http://192.168.0.9/autocampars.php?sensor_port=3 (stores to /etc/elphel393/autocampars3.xml)

More information

  • All stored parameters are automatically restored at boot

Available programmable parameters

To inspect all available reprogrammable parameters:

1. http://192.168.0.9 -> Parameter Editor
2. Follow a link for a particular port, e.g. http://192.168.0.9/autocampars.php?sensor_port=0
3. Select groups of interest in the top table -> View/Edit Current

Change parameters

Read:   http://192.168.0.9/parsedit.php?sensor_port=0&PAR1&PAR2
Change: http://192.168.0.9/parsedit.php?sensor_port=0&PAR1&PAR2 - update values - submit form

    • GET request - XML response

Read:   
        http://192.168.0.9/parsedit.php?immediate&sensor_port=0&PAR1&PAR2
Change: 
        http://192.168.0.9/parsedit.php?immediate&sensor_port=0&PAR1=VAL1&PAR2=VAL2
Change for multiple ports at once:
        http://192.168.0.9/parsedit.php?immediate&sensor_port=0&PAR1=VAL1&*PAR1=MASK1&PAR2=VAL2&*PAR2=MASK2

# A port bit mask is set by adding a * to a parameter name, like *PAR1 - it is individual for each parameter.
# The mask is 4 bits - 1 bit per port, bit[0] = port 0,... bit[3] = port 3, where 1 - enabled, 0 - disabled:
#   0xf - the parameter's new value will be applied to all ports.
# More information

Note 1: if the parameter's value is specified in URL it will be applied. The call can have mixed specified and unspecified parameters.

Note 2: The new value is read on the next call.

Example:

  • set 10 fps and enable output trigger signal

http://192.168.0.9/parsedit.php?sensor_port=0&immediate&TRIG_CONDITION=0&TRIG_OUT=0x66555&TRIG_PERIOD=10000000&TRIG=4

More information


Notes:

  • parsedit.php and autocampars.php were ported from 353 camera series. There are a few changes from the originals related to 4x sensor ports:
    • parameters are individual for each sensor port - writing parameters to multiple port at once is controlled with a (bit-)mask input box
    • if opened w/o sensor_port specified the page will show links to available ports
    • sensor_port=x, where x=0..3 - in the address string - for a single sensor camera it is normally 0

Image formats

JPEG

  • color: YCbCr 4:2:0, 3x3 pixels
  • mono6: monochrome - color YCbCr 4:2:0 with zeroed out color components
  • mono : monochrome - color YCbCr 4:0:0 with omitted color components

Note: JPEG is not the best for processing since some information gets lost when demosaicing is applied.

JP4

Proper shutdown

  • if not properly shutdown - in a rare case the μSD card can get corrupted (it's always safer to run sync)

~# sync
~# shutdown -hP now

Same effect:

http://192.168.0.9/autocampars.php?reboot

Temperature monitor

10393 hwmon.jpeg

Event Logger (GPS, IMU, IMG & EXT)

The FPGA-based Event Logger uses local clock for time-stamping data from Image Acquisition, External (Trigger) Input, GPS and IMU.

Record

web

  • Start:

http://192.168.0.9/logger_launcher.php?cmd=start&file=/mnt/sda1/test.log&index=1&n=10000000

  • Stop:

http://192.168.0.9/logger_launcher.php?cmd=stop

  • Help:

http://192.168.0.9/logger_launcher.php

command line

  • start:

root@elphel393:~# cat /dev/imu > /path/filename.log

  • stop - CTRL-C or kill the process

Read

Set system time

Command line from PC

# Compare PC and camera clocks
~$ ssh root@192.168.0.9 date;date -u
# Write PC time into camera clock
~$ ssh root@192.168.0.9 "date -s @`( date -u +"%s" )` &&  hwclock -w"

PHP

If in the current firmware includes http://192.168.0.9/utils.php then the clock is checked every time the index page is opened (http://192.168.0.9). The clock is then updated if the browser time differs from the camera time by more than 24h.

It's also possible to force apply time using the following GET request:

http://192.168.0.9/utils.php?cmd=time&apply&ts=<timestamp_in_ms>
#example:
http://192.168.0.9/utils.php?cmd=time&apply&ts=1589913066650

eSATA port switching

  • requres 10389
  • available connections:
    • camera <=> internal SSD (default)
    • camera <=> external drive (external drive requires a separate power source)
    • PC <=> internal SSD
  • More information

Firmware/software update

More information

Firmware images

Changelog

==20220412==
* Added websockets test
* More options in format_disk (single partition, reformat already formatted disk,...)
* Bug fixes
==20210628==
* Added support for FLIR Boson sensors
* 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
* Enhanced inter-camera synchronization, added related kernel and PHP extension functionality.
==20200903==
* switched to warrior branch for build
* updated to kernel 4.19. This build was being under test for a while.
==20200520==
(rocko build)
* Set time on main page access - taking browser time and writing to 10393 if times differ by 24h+.
* Added script for sensor testing (switch to test pattern, check md5sum).
  Supporting MT9P006. Linked to main page.
* Main page:
  * Added links to page displaying MJPEG stream in canvas
  * Added more controls (FPS, Manual Exposure and Auto Exposure Limit)
  * Added quick switch to 1080p@30fps (MT9P006)
* Updated JPEG/JP4 decoding javascript plugin - less time (-10ms) spent on EXIF reading.
* Created utils.php, currenty helps to GET-request:
  * ports configuration
  * set/get system time
* Fixed snapshot button for cameras with unused ports in multicam/ UI.
==20200508==
(rocko build)
* updated camogm
* added FLIR Lepton driver to kernel
* added FLIR Lepton record to device tree
==20190321==
* overall minor changes
  * fixed photofinish demo
==20180511==
* added cron program
* multi cameras control interface
* multi camera system info reporting
* fixed rtc
==20180416==
* 20180419 - mt9f002: fixed changing window size
* mt9f002: added triggered mode
* mt9f002: added vertical and horizontal flips (mirror)
==20180406==
* added initial support for MT9F002 sensor: no triggered mode, no binning/decimation
* display serial number in http://camera-ip:port/meta
* decode jp4s on the index page (http://camera-ip)
* turn off auto wb button for all ports on the index page
==20180130==
* added photo finish demo
* fixed fps limit calcs for triggered mode
==20180118==
* raw.py & raw.php, see wiki.elphel.com
* added python3 and python3-opencv
==20180116==
* raw pixel data downloading through membridge
* added gcc,make
==20180109==
* fixed autoexposure
==20171228==
* + strace, ltrace, dmsetup
* added to drivers: register devs to sysfs - nodes then created by udev
==20171226==
* kernel updated to 4.9 (from 4.0)
* lots of drivers is updated to newer versions
* +dm-crypt and cryptsetup
==20171120==
* bugfix - incorrect displaying of TRIG_PERIOD at init
==20171115==
* Fixed autocampars to let 10393 work with the mux board - 10359, see wiki.elphel.com for
  docs
==20170823==
* Fixed autocampars for multiple sensors getting desynced at init
* Fixed Garmin GPS 18x USB driver
==20170802==
* fixed a page for taking snapshots - works in chrome and firefox for bigger images (>2MB)
* enabled "Access-Control-Expose-Headers: Content-Disposition" and CORS
==20170627==
* viewing decoded jp4 format in camvc
==20170623==
* fixed incorrect default setting of the master channel

Development

Usage of SDK, which is Eclipse and project tree cloned from git.elphel.com, simplifies the development. 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.

Other info

Change default ip address

Modify /etc/network/interfaces, sync the changes to the file system and reboot (or rerun init scripts).

For firmware 20180511 or older, follow these instructions to fix network configuration (= disable setting ip address via /etc/elphel393/init_elphel393.py).

Add a program or a shell command to autostart on boot

There's a way to do this using cron or init.d but it might run before the sensors are initialized by init_elphel393.py. The recommended way is the following:

  • nano or vi

ssh root@192.168.0.9
pass
root@elphel393:~# nano /etc/elphel393/init_elphel393.py
edit - save
example: to launch the rtsp streamer - add shout("/usr/bin/str") to the end of the file. shout() function is just a wrapper for subprocess.call(cmd,shell=True)

Then:

#boot from NAND flash?
root@elphel393:~# overlay_sync 1 
root@elphel393:~# shutdown -hP now
#powercycle
#boot from card?
root@elphel393:~# sync
root@elphel393:~# reboot -f

Set up histogram window and autoexposure parameters

Read article

Tools for calibrated systems

  • Install ImageJ plugins
    • decode jp4 raw format
    • aberrations correction
    • distortion correction (pixel mapping)
    • rectification and projection
    • JP46 Reader camera - decode JP4/JP46
    • Eyesis correction - post-process JP4s using calibration data

Switch between ERS and GRR modes in MT9P006

External/internal synchronization & triggering and FPS control for single/multi-camera systems

SSD/MMC/USB formatting

Boot modes

Pointers monitor

  • Displays sensor, compressor and buffer states per 10393 port:

http://192.168.0.9/pointers/

Powering from batteries (12V or 48V)

12V and 48V power options

Accessing raw pixel values

Working with raw pixel data (how to capture raw images)

Photo finish (linescan mode)

Photo Finish (works for JP4 image format)

Controlling multiple cameras from single GUI

Developers version's half enclosure

10393 half enclosure 1.jpeg
10393 half enclosure 2.jpeg

Available lengths for cables for connecting sensors in custom setups

  • FPC cables - click for available lengths.
  • The cables are asymmetrical - for correct connecting a sensor to a system board see the figure below. As a rule of thumb, the cable's back side (no contacts) will be on the same side with the connector's cover.
Connecting sensors to the system board

Known problems

  • [SOLVED] Vertical artifacts in jpegs. Images are ok at 100% quality. Fixed, testing.
  • [SOLVED] http://192.168.0.9:232x/noexif/mimg - multipart jpeg displays corrupted frames from time to time. Reason: network bandwidth?
  • [SOLVED] Sometimes on power-on (NAND flash boot) cannot mount the card's rootfs partition. Kernel Panics. Power off/on. Soft "reboot -f" works ok.

...
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)
...

More info

  • [SOLVED] Changing exposure/quality/gains - can corrupt images - needs testing.
  • [SOLVED] After rewriting rootfs to μSD card - some of the cards get a corrupted partition - re-partitioning (reformatting?) solves the problem.

On the camera the rootfs is mounted as RW and some of the files are changed (also links created) -
most of the changes are now moved to tmpfs but something might have been missed.

Notes

  • [SOLVED] 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 - disable bash history
  • [SOLVED] When using overlays, deleting, existing in the lower layer, dirs can cause errors (hopefully it gets fixed someday), example:
    • /mnt/sda1 exists in lower layer: /tmp/rootfs.ro/tmp
    • upper layer is mounted to "/"

# rmdir /mnt/sda1
# mkdir /mnt/sda1
mkdir: cannot create directory '/mnt/sda1': Operation not supported