When you receive your camera it is delivered with a recent firmware version and factory default settings. The camera doesn't provide a serial RS232 connection. Instead you log in via Telnet to the default IP address. Please setup your network appropriately to reach the camera from your connecting PC. You must connect from the same subnet since the camera's factory defaults doesn't contain a default gateway (see Network Configuration for more details on how to setup your camera's IP address). An often used way to initially connect is to unplug your computer from enterprise network, set it up with a fixed IP address like 192.168.2.20 and connect to the camera by means of a cross link network cable (if no switch is at hand):
> telnet 192.168.2.10 Trying 192.168.2.10... Connected to 192.168.2.10. Escape character is '^]'. sbo-00-0e-f0-01-02-a3 login: root Password: Festo BusyBox v1.5.1 (2007-10-11 10:48:56 CEST) Built-in shell (ash) Enter 'help' for a list of built-in commands. ~ $
Now you are logged in.
To have a first orientation about file systems you can display the mount list:
~ $ mount rootfs on / type rootfs (rw) /dev/root on / type ext2 (rw) /proc on /proc type proc (rw,nodiratime) /devpts on /dev/pts type devpts (rw) /dev/mtdblock5 on /ffx type jffs2 (rw,noatime) /dev/mtdblock6 on /ffxusr type jffs2 (rw,noatime) /dev/ram1 on /tmp type minix (rw) ~ $
This file systems have the following meaning:
init
process and a system wide startup script /etc/init.d/rcS
is part of the RFS. The RFS is actually a RAM disk which is unpacked from flash during Linux kernel bootup. This ensures a reliable boot process, but keep in mind that any change you make in the RFS is lost when you power down the camera./proc
file system is a pseudo file system that acts as a communication interface to the kernel. Most kernel level information needed by user space applications is transported by reading from the /proc
file system (e.g. displaying Available RAM Memory)./devpts
is the pseudo terminal device file system that is located under /dev/pts
which provides on demand pseudo terminal devices. This kind of devices are necessary for remote terminal connections, e.g. telnet. They act as a meeting point between the locally running shell and the remotely connected terminal./ffx
. It is of type JFFS2
(Journaling Flash File System Nr. 2), i.e. any data written to this file system is programmed into non-volatile flash memory. JFFS2
supports data compression and optimizes flash access to avoid single flash sectors to reach the maximum allowed program/erase cycles too early (usual flash memory can be programmed/erased a guaranteed number of 100.000 times). The user can treat the /ffx
file system as the disk storage of the camera. Data written to it doesn't get lost when power is down./ffxusr
is similar to /ffx
. It is a JFFS2
file system, too. The only difference is that /ffxusr
is strictly dedicated to user usage. It will not be modified in any way during firmware update. /tmp
. It's purpose is to hold temporary user data which may can be lost during power down. Please note, that a RAM disk is several times faster than a flash file system and RAM disks only consume that amount of memory needed to hold currently stored data. See Tips&Tricks for more details on how to create additional RAM disks.
User applications should be best stored under /ffx
or /ffxusr
and started from there. To start applications automatically each time the camera boots, the user may modify the startup script /ffx/rcS
. This script is executed at the end of boot process.
Logged in on the camera, you can display the currently running processes with the command ps
:
~ $ ps PID Uid VSZ Stat Command 1 root 1964 S init 2 root SWN [ksoftirqd/0] 3 root SW< [events/0] 4 root SW< [kblockd/0] 5 root SW< [khelper] 6 root SW [pdflush] 7 root SW [pdflush] 9 root SW< [aio/0] 8 root SW [kswapd0] 10 root SW [mtdblockd] 41 root 1964 S syslogd -s 100 -m 0 45 root 1972 S telnetd -l /bin/login 48 root SWN [jffs2_gcd_mtd5] 51 root SWN [jffs2_gcd_mtd6] 55 root 1972 S httpd -h /ffx/online-doku/ -c /ffx/etc/httpd.conf 56 root 1976 S -ash 57 root 2048 S -ash 58 root 1968 R ps ~ $
All processes are listed with their process number (PID), the user who created the process (Uid), the virtual memory size in kByte (VSZ), the current process status (Stat) and the command that started the process. You can see the init process an the first line with PID 1, which is the first process created on the camera. The PID is incremented every time a new process is spawned. Process states are: S = sleeping, R = running, W = swap candidate (which is not possible in case of the disk less camera), N = low priority (nice to other processes), < = high priority (not nice to other processes). Command names in brackets denote so called Italic Textkernel threads, i.e. processes spawned by the kernel, not by any user command (see the Linux kernel documentation for further information about individual meaning of individual kernel threads). You can see that syslog http and telnet daemons are running and that two shell processes (ash) are started. The currently running process is the ps
command itself.
To see which commands are available on the camera you can use the command completion functionality of the shell by pressing the TAB key twice:
~ $ <TAB><TAB> [ date gdbserver last netstat startftp time [[ dd getty ldconfig nice starthttp top adduser df grep ldd nohup startimgsrv touch ar diff gunzip less nslookup startservices tr arp dirname gzip ln passwd starttftp tty arping dmesg halt loadfpga php stat udhcpc ash du head logger pidof strace umount basename echo hexdump login ping strings uname bunzip2 egrep hostid losetup poweroff stty unzip busybox env hostname ls printf sum uptime bzcat expr httpd lsmod ps sync usleep cat false id makepasswd pwd syslogd vi chgrp fconfig ifconfig md5sum reboot tail vsftpd chmod fgrep imgsrv mkdir reset tar watchdog chown find init mkfifo rm tcpdump wc chroot flash_eraseall insmod mkfs.minix rmdir tee wget clear flash_info ipcrm mknod rmmod telnet xargs cmp flash_unlock ipcs mount route telnetd yes cp free ipkg-cl mounttarget sed test zcat cpio ftpget kill mv sh tftp cut ftpput killall nc sleep tftpd ~ $
You should find the most important shell commands in this list. The majority of commands is just a symbolic link to the single binary busybox
. The busybox project aims to provide a wide range of shell commands in a single binary to save as much program code as possible. Embedded systems typically make use of busybox to save file system space. See the busybox web site for further information.
Please note that vi
is available as editor to modify startup scripts etc. In addition some debugging tools, like strace
, tcpdump
and gdbserver
are available, too.
To see which drivers are loaded you can use the command lsmod
. See the table below for explanation of individual drivers:
~ $ lsmod Module Size Used by fpgapi 2656 0 fram 5224 0 mcp2515 74240 0 inout 8380 0 datamap 2092 0 ds18s20 3504 0 i2cfpga 3624 0 camlink 560268 0 dm9000x 13240 0 config 8684 0 ~ $
Driver | Puropse | Interface | Explanation |
---|---|---|---|
fpgapi | Visual Applets | /dev/fpgapi0, /include/fpgapi.h | Access to Visual Applet parameters |
fram | FRAM | /dev/fram0 | Access to FRAM chip via SPI |
mcp2515 | CAN | /dev/can0, /include/can.h | CAN messages driver interface |
inout | I/O and LEDs | /proc/inputs, /proc/outputs, /proc/leds | Digital IO and status LED interface |
ds18s20 | Unique ID, Temperature | /proc/id, /proc/temp | Access to Unique ID and temperature |
i2cfpga | I2C Interface | /dev/i2c0 | Used for communication with image sensors |
camlink | Image sensor | /dev/camlink0, /include/OCamera.h | Image qcquisition API |
dm9000x | Ethernet | /dev/eth0 | Ethernet network interface, BSD socket API |
config | Configuration | /proc/config/*, fconfig | Configuration settings driver |
Several useful information about the camera can be accessed from the /proc/config
filesystem (a complete list can be found here). E.g. the current firmware version can be read by
~ $ cat /proc/config/firmware 3.1.4-festo0
The firmware version can also be read from /etc/issue
:
~ $ cat /etc/issue Firmware version 3.1.4-festo0 - revision: 226
The additional revision code at the end of line gives information about the exact firmware repository revision at the manufacturer.