Telepräsenzpanzer: Unterschied zwischen den Versionen

Aus bytewerk-Wiki
Zur Navigation springen Zur Suche springen
(Coffee hat Spaß am Bootloader)
 
(49 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:Projekt]] [[Category:Telepräsenzpanzer]]

Wir haben eine Netzwerkkamera (sogar mit WLAN), in der [[Benutzer:Coffee|coffee]] und [[Benutzer:HKay|hk]] ein embedded Linux und das Potenzial zur Steuerung der ebenfalls vorhandenen Ketten-Roboter-Basis <s>vermuten</s> erwarteten und fanden.
Wir haben eine Netzwerkkamera (sogar mit WLAN), in der [[Benutzer:Coffee|coffee]] und [[Benutzer:HKay|hk]] ein embedded Linux und das Potenzial zur Steuerung der ebenfalls vorhandenen Ketten-Roboter-Basis <s>vermuten</s> erwarteten und fanden.


[[Datei:Camera_board_backside.jpeg|right|320x240px|thumb|backside scan of main camera PCB]]
[[Datei:Camera_board_frontside.jpg|right|320x240px|thumb|frontside scan of main camera PCB]]
== Technische Daten ==
=== CPU ===

{|
|'''Hersteller''' || Nuvoton
|-
|'''Modell''' || W90N745
|}
Möglicherweise wechselte die Bezeichnung irgendwann zu [http://www.nuvoton.com/hq/products/microprocessors/arm7-mpus/nuc700-series/nuc745adn/ NUC745].

=== Kameramodul ===
{|
|'''Schnittstelle''' || USB
|-
|'''Vendor ID''' || 0x1d0f
|-
|'''Product ID''' || 0x1801
|}

=== WLAN ===
{|
|'''Chipset-Hersteller''' || Ralink
|-
|'''FCC-ID''' || [http://fcc.io/XON/SR806000 XONSR806000]
|-
|'''Chipset''' || RT3070
|}


== Reverse Engineering ==
== Projektlog ==
=== 2015-12-07 ===
=== 2015-12-07 ===
Ein USART ist schon gefunden, da dieser sogar auf dem Board markiert war. (Wie zuvorkommend…)
Ein USART ist schon gefunden, da dieser sogar auf dem Board markiert war. (Wie zuvorkommend…)
Zeile 125: Zeile 156:
fx 6 rootfs 0x7F0E0000 0x7F0E0000 -af
fx 6 rootfs 0x7F0E0000 0x7F0E0000 -af
</pre>
</pre>
<s>[[Benutzer:coffee|coffee]] hatte weder mit <code>minicom</code> noch mit <code>picocom</code> Erfolg beim Versuch ein neues Image hochzuladen.
Eine angeblich funktionierende Config für Kermit, um per XMODEM ein neues Image hochzuladen, gibt's hier: http://wiki.openipcam.com/index.php/Serial_Console
Eine angeblich funktionierende Config für Kermit, um per XMODEM ein neues Image hochzuladen, gibt's hier: http://wiki.openipcam.com/index.php/Serial_Console</s>
Images können geflasht werden, siehe unten.

=== 2015-12-11 ===
<pre>
# picocom -b 115200 /dev/ttyUSB0 --flow n --send-cmd 'lsz -X'
</pre>
für stressfreie Kommunikation mit dem Bootloader, so dass auch das Flashen von Images klappt.

=== 2015-12-14 ===
Zufallsfund im Web: https://justreadthecode.wordpress.com/2013/10/04/ipcamera-fun-part-2/
Der Autor erklärt, wie man die Kamera-Applikation debuggen kann.


=== 2015-12-19 ===
Auflistung der derzeit im Flash befindlichen Images:
<pre>
bootloader > ls
Image: 0 name:BOOT INFO base:0x7F010000 size:0x00000038 exec:0x7F010000 -af
Image: 7 name:linux base:0x7F020000 size:0x000AE96C exec:0x00008000 -acxz
Image: 6 name:rootfs base:0x7F0E0000 size:0x00104C00 exec:0x7F0E0000 -af
</pre>

[[Benutzer:Coffee|coffee]] versucht sich mal an diesem Buildroot, und hat außerdem das Board entführt, um mal daheim bessere Nahaufnahmen zu machen.

Kommando zum Flashen eines Kernel-Images:
<pre>
bootloader > fx 7 linux 0x7F020000 0x8000 -acxz
</pre>

=== 2015-12-21 ===

Ein wenig Recherche führt zu folgenden zwei Repositories (Buildroot und ein Kernel):
* https://github.com/Malvineous/buildroot-openipcam
* https://github.com/Malvineous/linux-nuc700

=== 2015-12-23 ===

Die inzwischen doch leicht angestaubte Buildroot-Version von
[https://github.com/Malvineous Malvineous] hat bei [[Benutzer:Coffee|Coffee]]
nie gebaut, also wurden Malvineous' Anpassungen in eine aktuelle
Buildroot-Version übertragen.
Mit dieser konnte wenigstens eine funktionierende Toolchain gebaut werden.
Interessanter ist jedoch der von Malvineous angepasste Kernel.
Dieser lässt sich nicht erfolgreich kompilieren, da eine Datei zu fehlen
scheint.
<pre>
arch/arm/mach-nuc700/dev.c:22:32: fatal error: mach/nuc700_keypad.h: No such file or directory
#include <mach/nuc700_keypad.h>
</pre>

=== 2015-12-27 ===
Nach einer Mail an Malvineous ist klar, dass der gepatchte Kernel schon damals nur Work-In-Progress war, siehe auch [[#2015-12-23|den vorherigen Eintrag]].

=== 2016-02-04 ===
* https://github.com/rhuitl/linux
* https://github.com/rhuitl/uClinux
* https://packages.gentoo.org/packages/dev-embedded/sgpp-lite-arm-uclinux-bin
uClinux und der Kernel, gepatcht von [https://github.com/rhuitl rhuitl], lassen sich kompilieren mit der ARM-Toolchain von CodeSourcery.
Beim Boot passiert aber ein Fehler:
<pre>
Processing image 1 ...
Processing image 2 ...
Processing image 3 ...
Processing image 4 ...
Processing image 5 ...
Processing image 6 ...
Processing image 7 ...
ERROR: Invalid zip file
Executing image 7 ...
Uncompressing Linux...
ERROR: Prefetch Abort @ pc=0x01687F00
</pre>

=== 2016-02-06 ===
Kaum nimmt man die gut abgehangene Toolchain aus dem BSP, schon lässt sich Software kompilieren und ausführen!

=== 2016-02-08 ===
Nach Anstarren der Board-Scans und vorsichtigem Pieksen mit Multimeter und Oszi scheint es, als könnten wir keinen freien UART haben, ohne andere Funktionen zu opfern.

{|
| '''UART0''' || dient für die Linux-Konsole
|-
| '''UART1, UART2''' || lägen auf den Pins, die für den [http://cache.nxp.com/documents/data_sheet/74HC_HCT259.pdf?pspll=1 74HC259] benutzt werden. Diese Pins toggelten, als die Originalsoftware die Schwenk-Neige-Antriebe betätigte.
|-
| '''UART3''' || läge auf den Pins, die für den Audio-Codec genutzt werden
|}

=== 2016-02-09 – selbstkompilierter Kernel! ===
<pre>
/ # busybox echo foo > /dev/ttyS3
sh: error opening /dev/ttyS3: No such device
</pre>
Vermutlich wird eine neue Kernel-Config benötigt, um UART3 tatsächlich benutzen zu können.

Empirisch wurde ermittelt, dass man eine alte GCC-Version braucht, um einen Kernel zu bauen, den das SOC auch booten will.
[[Benutzer:Coffee|coffee]] hat festgestellt, dass GCC 4.1.2 funktioniert, um den von rhuitl gepatchten Kernel zu bauen.
Der [https://github.com/rhuitl/linux eben genannte Kernel] lässt sich dann aber brav vom SOC booten!

Da der neue Kernel größer ist, und sein Image sich selbst dekomprimiert, ändern sich die Kommandos zum Flashen wie folgt:
<pre>
fx 7 linux 0x7F020000 0x8000 -acx
fx 6 rootfs 0x7F150000 0x7F150000 -af
</pre>

Mit dem neuen Kernel funktionieren auch `ifconfig` und `iwconfig` einfach so, aber gefunkt wird wegen fehlender WLAN-Firmware leider noch nicht.

=== 2016-02-10 ===
<pre>
/ # iwconfig wlan0 essid Freifunk
/ # ifconfig wlan0 up
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
SIOCSIFFLAGS: No such file or directory
</pre>

Zufallsfund bei der Web-Recherche: [http://customcam.blogspot.ch/ Steuerung der Positionierantriebe]

=== 2016-02-11 ===
Der von [https://github.com/rhuitl/ rhuitl] [https://github.com/rhuitl/linux gepatchte Kernel],
die [https://github.com/rhuitl/uClinux uClinux-Änderungen] desselben Users
und [https://sourceforge.net/projects/uclinux/files/uClinux%20Stable/dist-20160208/ das neueste uClinux]
wurden zusammengeführt,
um ein aktuelles Userland zu bekommen.
(Die alte uClinux-Version von rhuitl baute nicht richtig.)

=== 2016-02-13 ===
Nun ist auch [https://github.com/rhuitl rhuitls] <code>ipcamd</code> in das neueste uClinux integriert.
Die per USB angeschlossene Kamera wird auch tatsächlich von Linux unterstützt.
Der <code>ipcamd</code> wirft aber folgenden Fehler bei seinem Versuch, die Kamera zu konfigurieren:
<pre>
VIDIOC_S_FMT error 22, Invalid argument
</pre>

WLAN geht auch immer noch nicht.


=== 2016-03-20 ===
Es wurde festgestellt, dass die Firmwaredatei unter einem falschen Namen abgelegt war.
Ein Experiment mit <code>mdev</code> aus Busybox und korrekt benannter Firmware führte zu einer heftigen Kernel-Fehlermeldung:
<pre>
/ # echo /bin/mdev > /proc/sys/kernel/hotplug
/ # ifconfig wlan0 up
kernel BUG at mm/nommu.c:415!
</pre>

=== 2016-03-21 ===
Mit richtig benannter, in den Kernel einkompilierter WLAN-Firmware kann diese nun auch richtig geladen werden.

=== 2016-06-17 ===
Neue Gehversuche mit Buildroot, nun mit externer Toolchain.

=== 2016-06-18 ===
[[Benutzer:Coffee|coffee]] hat die Schnauze voll von dem Nuvoton-SOC, weil wpa_supplicant anscheinend nicht ohne MMU funktionieren kann.
Es wird irgendwann ein beliebiger Einplatinenrechner verwendet werden.
Die gute Nachricht: Die [http://emartee.com/product/41426/24BYJ%2048%20High%20Quality%20Stepper%20Motor%205V Motoren] sind einfache Stepper.

==== Wie treibt das Original-Board Schrittmotoren ohne Schrittmotortreiber? ====
Interessanterweise befindet sich auf dem Board kein Schrittmotortreiber, aber ein [http://www.ti.com/lit/ds/symlink/uln2003a.pdf Array von acht Darlington-Transistoren].
Bei den Steppern handelt es sich um Unipolar-Schrittmotoren. Zu den fünf Polen jedes Motors gehören die vier Enden der zwei Spulen und die zusammengeschalteten Mittenanzapfungen der Spulen.
Somit genügen vier Transistoren pro Motor, und das Darlington-Array reicht aus.


== TO DO ==
== TO DO ==
* Single-Board-Computer beschaffen (beispielsweise Raspberry Pi)
* sobald wie möglich wieder irgendein funktionierendes Root-FS flashen
* Anschlüsse der USB-Kamera identifizieren
* existierende Dokumentation sichten
* Treiberschaltung für Schwenk-Neige-Schrittmotoren aufbauen (benötigt werden 8 Ausgänge)
* neues Firmware-Image bauen
** Build-Prozess für neue Firmware-Images erarbeiten (in Progress)
** Komische Nachhausetelefoniererei abschalten (seltsames Original-Dynamic-DNS)
** <code>busybox</code> bauen
* Steuerung der DC-Motoren und Relais-Ausgänge identifizieren
* ???
* Profit!

Aktuelle Version vom 20. Juni 2016, 12:51 Uhr


Wir haben eine Netzwerkkamera (sogar mit WLAN), in der coffee und hk ein embedded Linux und das Potenzial zur Steuerung der ebenfalls vorhandenen Ketten-Roboter-Basis vermuten erwarteten und fanden.

backside scan of main camera PCB
frontside scan of main camera PCB

Technische Daten

CPU

Hersteller Nuvoton
Modell W90N745

Möglicherweise wechselte die Bezeichnung irgendwann zu NUC745.

Kameramodul

Schnittstelle USB
Vendor ID 0x1d0f
Product ID 0x1801

WLAN

Chipset-Hersteller Ralink
FCC-ID XONSR806000
Chipset RT3070

Projektlog

2015-12-07

Ein USART ist schon gefunden, da dieser sogar auf dem Board markiert war. (Wie zuvorkommend…)

Details: 115200 Bits/s, 8bit words, 1 stop, no parity, LSB first, non-inverted]

2015-12-09

Das Geraet ist ein "IP-Farbkamera PIPC-011"

Der Bootloader ist anscheinend ab Werk komplett offen, und auch das System bietet eine Shell auf dem USART. Strike!

bootlog: Datei:Ipcam boot dump.zip

Pollin-Produktbeschreibung: Link

/> ls /proc
1 14 15 16 18 19 2 21 22 26 28 3 30 4 5 6 7 8 9 bus cmdline cpuinfo devices
dma driver execdomains filesystems flash_4m fs interrupts iomem ioports
kcore kmsg loadavg locks meminfo misc mounts net p1_p1 partitions self
slabinfo stat swaps tty uptime version wau881


/> cat /proc/cpuinfo
Processor       : Winbond W90N745 rev 1 (v3l)
BogoMIPS        : 39.83
Hardware        : W90N745
Revision        : 0000
Serial          : 0000000000000000


/> cat /proc/version
Linux version 2.4.20-uc0 (root@maverick-linux) (gcc version 3.0) #1460 ¶þ 12ÔÂ 7 23:30:28 CST 2010


/> cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  15007744  6209536  8798208        0    53248  1368064
Swap:        0        0        0
MemTotal:        14656 kB
MemFree:          8592 kB
MemShared:           0 kB
Buffers:            52 kB
Cached:           1336 kB
SwapCached:          0 kB
Active:            220 kB
Inactive:         1168 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:        14656 kB
LowFree:          8592 kB
SwapTotal:           0 kB
SwapFree:            0 kB

W90P745 Boot Loader [ Version 1.1 $Revision: 1 $ ] Rebuilt on May 11 2010
Memory Size is 0x1000000 Bytes, Flash Size is 0x400000 Bytes             
Board designed by Winbond                                   
Hardware support provided at Winbond
Copyright (c) Winbond Limited 2001 - 2006. All rights reserved.
Boot Loader Configuration:                                     
                          
	MAC Address         : 00:0D:C5:DA:E5:76
	IP Address          : 0.0.0.0          
	DHCP Client         : Enabled
	CACHE               : Enabled
	BL buffer base      : 0x00300000
	BL buffer size      : 0x00100000
	Baud Rate           : -1        
	USB Interface       : Disabled
	Serial Number       : 0xFFFFFFFF
                                        

For help on the available commands type 'h'
                                           
Press ESC to enter debug mode .....
                                   
bootloader > h
              
W90P745 Command Shell v1.0 Rebuilt on May 06 2010 at 13:00:07
                                                             
H        Display the available commands
B        Set Baud Rate                 
D        Display memory. D -? for help
E        Edit memory. E -? for help   
G        Goto address              
I        information 
MX       Xmodem download
MT       TFTP/USB download
FT       Program the flash by TFTP/USB. FT -? for help
FX       Program the flash by Xmodem. FX -? for help  
CP       Memory copy                                
LS       List the images in the flash
SET      Setting boot loader configuration. SET -? for help
CHK      Check the flash                                   
RUN      Execute image  
DEL      DEL the image or flash block
MSET     Fill memory                 
TERM     Change the terminal output port
BOOT     Reboot the system              
CACHE    Cache setting    
USB      USB interface setting
UNZIP    Unzip image          
ATTRIB   Change the image attribution
INTF     Print bootloader supported interface, ether USB or MA

Das Gerät scheint ein seltsames Binary-Format zu verwenden: kein ELF, sondern BFLT. Anscheinend gibt es eine Compiler-Option für den ARM-GCC, um BFLT zu erzeugen.

Ein Build-Prozess für neue Firmware-Images ist in Arbeit.

/bin/camera scheint den Großteil der Funktionalität zu implementieren, denn ein gesonderter HTTPD ist nicht auffindbar.


Anscheinend haben sich noch andere Leute mit diesen Kameras befasst http://www.openipcam.com/, und sogar etwas ausgegraben, das wie ein BSP aussieht: http://www.openipcam.com/files/BSP/W90N745BSP05262008.tar.gz

2015-12-10

coffee hat das Gerät halb gebrickt beim Versuch, ein neues Root-FS hochzuladen. Der Bootloader beklagte sich erst nach dem Löschen des existierenden Root-FS über falsche Parameter. Nächstes mal für weniger Ärger direkt mit diesem Bootloader-Kommando versuchen:

fx 6 rootfs 0x7F0E0000 0x7F0E0000 -af

coffee hatte weder mit minicom noch mit picocom Erfolg beim Versuch ein neues Image hochzuladen. Eine angeblich funktionierende Config für Kermit, um per XMODEM ein neues Image hochzuladen, gibt's hier: http://wiki.openipcam.com/index.php/Serial_Console Images können geflasht werden, siehe unten.

2015-12-11

# picocom -b 115200 /dev/ttyUSB0 --flow n --send-cmd 'lsz -X'

für stressfreie Kommunikation mit dem Bootloader, so dass auch das Flashen von Images klappt.

2015-12-14

Zufallsfund im Web: https://justreadthecode.wordpress.com/2013/10/04/ipcamera-fun-part-2/ Der Autor erklärt, wie man die Kamera-Applikation debuggen kann.


2015-12-19

Auflistung der derzeit im Flash befindlichen Images:

bootloader > ls
Image: 0 name:BOOT INFO base:0x7F010000 size:0x00000038 exec:0x7F010000 -af
Image: 7 name:linux base:0x7F020000 size:0x000AE96C exec:0x00008000 -acxz  
Image: 6 name:rootfs base:0x7F0E0000 size:0x00104C00 exec:0x7F0E0000 -af

coffee versucht sich mal an diesem Buildroot, und hat außerdem das Board entführt, um mal daheim bessere Nahaufnahmen zu machen.

Kommando zum Flashen eines Kernel-Images:

bootloader > fx 7 linux 0x7F020000 0x8000 -acxz

2015-12-21

Ein wenig Recherche führt zu folgenden zwei Repositories (Buildroot und ein Kernel):

2015-12-23

Die inzwischen doch leicht angestaubte Buildroot-Version von Malvineous hat bei Coffee nie gebaut, also wurden Malvineous' Anpassungen in eine aktuelle Buildroot-Version übertragen. Mit dieser konnte wenigstens eine funktionierende Toolchain gebaut werden. Interessanter ist jedoch der von Malvineous angepasste Kernel. Dieser lässt sich nicht erfolgreich kompilieren, da eine Datei zu fehlen scheint.

arch/arm/mach-nuc700/dev.c:22:32: fatal error: mach/nuc700_keypad.h: No such file or directory
 #include <mach/nuc700_keypad.h>

2015-12-27

Nach einer Mail an Malvineous ist klar, dass der gepatchte Kernel schon damals nur Work-In-Progress war, siehe auch den vorherigen Eintrag.

2016-02-04

uClinux und der Kernel, gepatcht von rhuitl, lassen sich kompilieren mit der ARM-Toolchain von CodeSourcery. Beim Boot passiert aber ein Fehler:

Processing image 1 ... 
Processing image 2 ... 
Processing image 3 ... 
Processing image 4 ... 
Processing image 5 ... 
Processing image 6 ... 
Processing image 7 ... 
ERROR: Invalid zip file
Executing image 7 ...  
Uncompressing Linux...
                      
ERROR: Prefetch Abort @ pc=0x01687F00

2016-02-06

Kaum nimmt man die gut abgehangene Toolchain aus dem BSP, schon lässt sich Software kompilieren und ausführen!

2016-02-08

Nach Anstarren der Board-Scans und vorsichtigem Pieksen mit Multimeter und Oszi scheint es, als könnten wir keinen freien UART haben, ohne andere Funktionen zu opfern.

UART0 dient für die Linux-Konsole
UART1, UART2 lägen auf den Pins, die für den 74HC259 benutzt werden. Diese Pins toggelten, als die Originalsoftware die Schwenk-Neige-Antriebe betätigte.
UART3 läge auf den Pins, die für den Audio-Codec genutzt werden

2016-02-09 – selbstkompilierter Kernel!

/ # busybox echo foo > /dev/ttyS3
sh: error opening /dev/ttyS3: No such device

Vermutlich wird eine neue Kernel-Config benötigt, um UART3 tatsächlich benutzen zu können.

Empirisch wurde ermittelt, dass man eine alte GCC-Version braucht, um einen Kernel zu bauen, den das SOC auch booten will. coffee hat festgestellt, dass GCC 4.1.2 funktioniert, um den von rhuitl gepatchten Kernel zu bauen. Der eben genannte Kernel lässt sich dann aber brav vom SOC booten!

Da der neue Kernel größer ist, und sein Image sich selbst dekomprimiert, ändern sich die Kommandos zum Flashen wie folgt:

fx 7 linux 0x7F020000 0x8000 -acx
fx 6 rootfs 0x7F150000 0x7F150000 -af

Mit dem neuen Kernel funktionieren auch `ifconfig` und `iwconfig` einfach so, aber gefunkt wird wegen fehlender WLAN-Firmware leider noch nicht.

2016-02-10

/ # iwconfig wlan0 essid Freifunk
/ # ifconfig wlan0 up
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
SIOCSIFFLAGS: No such file or directory

Zufallsfund bei der Web-Recherche: Steuerung der Positionierantriebe

2016-02-11

Der von rhuitl gepatchte Kernel, die uClinux-Änderungen desselben Users und das neueste uClinux wurden zusammengeführt, um ein aktuelles Userland zu bekommen. (Die alte uClinux-Version von rhuitl baute nicht richtig.)

2016-02-13

Nun ist auch rhuitls ipcamd in das neueste uClinux integriert. Die per USB angeschlossene Kamera wird auch tatsächlich von Linux unterstützt. Der ipcamd wirft aber folgenden Fehler bei seinem Versuch, die Kamera zu konfigurieren:

VIDIOC_S_FMT error 22, Invalid argument

WLAN geht auch immer noch nicht.


2016-03-20

Es wurde festgestellt, dass die Firmwaredatei unter einem falschen Namen abgelegt war. Ein Experiment mit mdev aus Busybox und korrekt benannter Firmware führte zu einer heftigen Kernel-Fehlermeldung:

/ # echo /bin/mdev > /proc/sys/kernel/hotplug
/ # ifconfig wlan0 up
kernel BUG at mm/nommu.c:415!

2016-03-21

Mit richtig benannter, in den Kernel einkompilierter WLAN-Firmware kann diese nun auch richtig geladen werden.

2016-06-17

Neue Gehversuche mit Buildroot, nun mit externer Toolchain.

2016-06-18

coffee hat die Schnauze voll von dem Nuvoton-SOC, weil wpa_supplicant anscheinend nicht ohne MMU funktionieren kann. Es wird irgendwann ein beliebiger Einplatinenrechner verwendet werden. Die gute Nachricht: Die Motoren sind einfache Stepper.

Wie treibt das Original-Board Schrittmotoren ohne Schrittmotortreiber?

Interessanterweise befindet sich auf dem Board kein Schrittmotortreiber, aber ein Array von acht Darlington-Transistoren. Bei den Steppern handelt es sich um Unipolar-Schrittmotoren. Zu den fünf Polen jedes Motors gehören die vier Enden der zwei Spulen und die zusammengeschalteten Mittenanzapfungen der Spulen. Somit genügen vier Transistoren pro Motor, und das Darlington-Array reicht aus.

TO DO

  • Single-Board-Computer beschaffen (beispielsweise Raspberry Pi)
  • Anschlüsse der USB-Kamera identifizieren
  • Treiberschaltung für Schwenk-Neige-Schrittmotoren aufbauen (benötigt werden 8 Ausgänge)