- Status Zamknięte
- Procent zaawansowania:
- Typ zgłoszenia Pozostałe
- Kategoria Konfigurator
-
Przydzielone do
LWPM - Samochód wszystkie
- Priorytet Normalny
- Rozpoznane w wersji v0.3
- Do realizacji w wersji Nie zdecydowano
- Głosy 2
- Prywatne
Zgłoszone przez Ostap - 25.09.2018
Ostatnio edytował LWPM - 14.04.2020
FS#182 - Skanowanie CAN
Jak wykorzystać kabelek OP-COMa to podglądu danych na CAN?
!!! Uwaga !!!
Uzyskując bezpośredni dostęp do CAN samochodu, trzeba uważać! Przez CAN przesyłanych jest mnóstwo danych, których znaczenia nikt poza GM nie zna. Wysyłając przypadkowe dane na CAN można wprowadzić jakiś moduł/sterownik w nieokreślony stan, z którego może być go później trudno wyprowadzić! Zwykle odłączenie zasilania (akumulatora) pomaga.
Nie odpowiadam za jakiekolwiek szkody spowodowane bezpośrednim dostępem do CAN.
Wymagania sprzętowe/programowe
wszystkie narzędzia były sprawdzane/testowane tylko w systemie Linux/Debian i tutaj powinny działać. Wymagania od strony Linuxa:
- SocketCAN (każda nowsza dystrybucja posiada wbudowaną obsługę)
- Python 3.4+
- pakiety Pythona: pyserial, python-can
- interfejs/kabel OP-COMa, testowane tylko z oprogramowaniem 1.59. Samego OP-COMa nie potrzebujemy.
Możemy także wykorzystać gotową maszynę wirtualną Linuxa i uruchomić ją z VirtualBox
Maszynę pobieramy z https://mega.nz/file/YXxVjYLB#MX5TJBJFsxWFL7ovvLTF-LcP08oQ0U4IhAPNni07XEY
Maszynę importujemy do VirtualBoxa i uruchamiamy
login: osboxes hasło: lwpm hasło roota: lwpm
Przygotowanie systemu
Wszystkie wymagane pliki są dostępne w katalogu /home/osboxes/opel, natomiast wszystkie narzędzia są tekstowe, a więc wszystko wykonujemy z terminala.
Jeśli jednak chcesz sam przygotować sobie system, zakładam, że wiesz jak go skonfigurować:
- instalujemy python3.4+
- instalujemy can-utils (apt-get install can-utils)
- instalujemy pip (apt-get install python3-pip)
- instalujemy pyserial oraz python-can (pip3 install pyserial && pip3 install python-can)
W innych systemach niż Debian/Ubuntu polecenia mogą być inne.
Pierwszym krokiem do zrobienia jest uruchomienie vcan_init, który stworzy wirtualne interfejsy (LSCAN, MSCAN, HSCAN) w Linuxie. Będą one używane do dostępu do fizycznych CANów w samochodzie.
a więc logujemy się w systemie, uruchamiamy terminal, przechodzimy do katalogu opel (cd opel) i wpisujemy:
sudo ./vcan_init
potwierdzamy hasłem roota (lwpm)
W tym momencie mamy już utworzone wirtualne interfejsy CAN, z których już teraz możemy korzystać.
Następnym krokiem jest podłączenie do maszyny wirtualnej interfejsu OP-COMa i podpięcie go pod któryś z CANów. Służy do tego program opcom.py, który uruchamiamy następująco:
./opcom.py /dev/ttyUSB0 lscan
aby połączyć interfejs OP-COMa z naszym wirtualnym CANem (LSCAN)
aby podłaczyć się do mscan wpisujemy odpowiednio
./opcom.py /dev/ttyUSB0 mscan
analogicznie robimy to dla HSCAN
./opcom.py /dev/ttyUSB0 hscan
W przypadku HSCAN OP-COM bardzo szybko się zawiesi ze względu na zbyt dużą ilość danych, których nie jest on w stanie przetworzyć, dlatego wywołujemy program z odpowiednim filtrowaniem przychodzących pakietów, np:
./opcom.py /dev/ttyUSB0 hscan filter:-1,-1,7DF,7E0,5E8,7E8
w ten sposób będziemy przechwytywać tylko komunikację ze sterownikiem silnika (ECU)
Pierwsze dwa parametry filtru to maska bitowa. Nie końca wiem jak jej używać, dlatego używamy -1,-1, aby odfiltrować wszystko, natomiast kolejne wartości to już konkretne identyfikatory PIDów, które potrzebujemy. Możemy podać maksymalnie 6 identyfikatorów!
Sniffer CAN
Skoro mamy już połączony samochód z naszym komputerem, możemy podejrzeć co się w nim dzieje :)
najważniejsze polecenia to cansniffer oraz candump
candump lscan cansniffer lscan
pierwszy z nich wypisuje na ekranie wszystkie przychodzące pakiety, natomiast drugi robi dokładnie to samo, z tym, że grupuje je wg identyfikatora pokazując tylko to co się zmieniło. Warto poczytać pomoc do tych poleceń, aby uzyskać lepszą prezentację danych (użyj parametru –help).
Najważniejsze wywołania to:
candump -a -c lscan candump -l lscan
Pierwszy wypisuje pakiety w kolorze i pokazując zawarte w nich teksty
drugi zapisuje wszystkie pobranie pakiety do pliku np w celu dalszej ich analizy
Wysyłanie pakietów
Do wysyłania pakietów na CAN mamy w zasadzie dwa najważniejsze programy: cansend oraz canplayer Za pomocą canplayer możemy wysłać na CAN poprzednio zapisane pakiety,
natomiast za pomocą candump możemy wysłać konkretny pakiet na CAN, np:
cansend mscan 223#00772823
polecenie to wyśle pakiet o identyfikatorze 223 i długości 4 bajtów na MSCAN.
w załącznikach programy vcan_init, opcom.py oraz instrukcja instalacji przygotowana przez Łukasza Ostapiuk
Wczytywanie...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Dodaj nowe zgłoszenie
- Alt + ⇧ Shift + m Moje wyszukiwania
- Alt + ⇧ Shift + t focus taskid search
Lista zgłoszeń
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Następne zgłoszenie
- p Poprzednie zgłoszenie
- Alt + ⇧ Shift + e ↵ Enter Edytuj zgłoszenie
- Alt + ⇧ Shift + w Obserwuj zgłoszenie
- Alt + ⇧ Shift + y Zamknij zgłoszenie
Task Editing
- Alt + ⇧ Shift + s save task
no właśnie zacytowałeś instrukcję jak to się robi...
który krok jest niezrozumiały?
Wszystkie Łukasz, wszystkie.
Chciałbym aby to było krok po kroku co trzeba zainstalować na gołym systemie, jak to zrobić, co wpisać w wierszu poleceń, co robić dalej itp itd
Jak zainstalować opcoma, jak sprawdzić i połączyć go z tymi programami itp. itd.
Po prostu krok po kroku.
Ja wiem, że dla Ciebie to jest oczywiste (jak dla mnie łowienie ryb, robienie zanęt, przynęt, zestawów, łódek zanętowych itp itd) ale ja chciałbym instrukcję jak dla debila, po prostu.
Witam
Jakieś info? :)
Dla zafiry czy astry h i tak jest wszystko rozpracowane. Same ramki i tak ci nic nie dadza wg mnie bo wszystko musi byc w sofcie. Jedynie co to do rozpracowania jest vc a tego auta nie masz.
Podgrzewanie foteli też? Diody od podgrzewania? Przycisk dds? Ryglowanie?
To, że ramki mi nic nie dadzą to wiem, ale umieścić je w soft to najmniejszy problem.
rzuć okiem na opis i spróbuj podziałać
daj znać, czy coś jest nie jasne, poprawię, uzupełnię
O człowieku ;) będzie co robić ;)
Tak na szybko
Czy ta maszyna Linux jest x32 czy x64?
Ruszy z pendrive czy tylko z virtuala?
Pytam bo mój laptop nie obsługuje virtualboxa
w jakim sensie nie obsługuje VirtualBoxa? to przecież zwykły program :)
chyba, ze faktycznie masz jakiś antyk...
maszyna jest 32 bit
ew. zainstaluj to co trzeba wg spisu u góry i skorzystaj z dołączonych programów
jak ktoś umie z tego zrobić obraz dla pendrive... nie ma problemu - ja nie bardzo wiem jak się za to zabrać
Mój laptop jest wiekowy ;)
Jeśli obraz jest ISO lub podobny to pendrive zrobić można rufusem lub podobnym.
VirtualBox niestety nie działa już na x32 ;)
Wiekowy lamptop tzn? Stary sprzet to nieraz ograniczenia. Moj laptop z i3 jakos z 2014r i radzi sobie virtualem. Moze lepiej kupic cos w miare uzywanego a antyka oddac do muzeum ;)?
Pomieszałem ;) virtualbox działa tylko, że jest coś takiego przy starcie obrazu
Inny program do virtuali nie działa, zapomniałem nazwy.
Zainstalowałem Debian na pendrive i jest coś takiego
Na Linux mint jest to samo bo mam go zainstalowanego na dysku
co do Minta: nie zainstalowałeś pakietów pythona: standardowo:
co co Debiana... to nie wiem... może procesor PAE nie wspiera?
Sprawdzę to po pracy ;)
No i kupa z mojego testowania :)
Jak na złość u mnie nie chce działać ani na debianie ani na mincie. Ten sam błąd.
Masz jakiś pomysł?
xxx@xxx:~$ python3
Python 3.6.6 (default, Sep 12 2018, 18:26:19)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
xxx@xxx:~$ pip3
Command 'pip3' not found, but can be installed with:
sudo apt install python3-pip
xxx@xxx:~$ sudo apt install python3-pip
[sudo] hasło użytkownika xxx:
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
The following additional packages will be installed:
Polecane pakiety:
Zostaną zainstalowane następujące NOWE pakiety:
0 aktualizowanych, 4 nowo instalowanych, 0 usuwanych i 0 nieaktualizowanych.
Konieczne pobranie 1 984 kB archiwów.
Po tej operacji zostanie dodatkowo użyte 4 572 kB miejsca na dysku.
Kontynuować? [T/n] t
Pobieranie:1 http://archive.ubuntu.com/ubuntu bionic-updates/universe i386 python-pip-whl all 9.0.1-2.3~ubuntu1 [1 652 kB]
Pobieranie:2 http://archive.ubuntu.com/ubuntu bionic/main i386 python3-lib2to3 all 3.6.5-3 [76,6 kB]
Pobieranie:3 http://archive.ubuntu.com/ubuntu bionic/main i386 python3-distutils all 3.6.5-3 [141 kB]
Pobieranie:4 http://archive.ubuntu.com/ubuntu bionic-updates/universe i386 python3-pip all 9.0.1-2.3~ubuntu1 [114 kB]
Pobrano 1 984 kB w 2s (893 kB/s)
Wybieranie wcześniej niewybranego pakietu python-pip-whl.
(Odczytywanie bazy danych ... 275435 plików i katalogów obecnie zainstalowanych.)
Przygotowywanie do rozpakowania pakietu .../python-pip-whl_9.0.1-2.3~ubuntu1_all.deb ...
Rozpakowywanie pakietu python-pip-whl (9.0.1-2.3~ubuntu1) ...
Wybieranie wcześniej niewybranego pakietu python3-lib2to3.
Przygotowywanie do rozpakowania pakietu .../python3-lib2to3_3.6.5-3_all.deb ...
Rozpakowywanie pakietu python3-lib2to3 (3.6.5-3) ...
Wybieranie wcześniej niewybranego pakietu python3-distutils.
Przygotowywanie do rozpakowania pakietu .../python3-distutils_3.6.5-3_all.deb ...
Rozpakowywanie pakietu python3-distutils (3.6.5-3) ...
Wybieranie wcześniej niewybranego pakietu python3-pip.
Przygotowywanie do rozpakowania pakietu .../python3-pip_9.0.1-2.3~ubuntu1_all.deb ...
Rozpakowywanie pakietu python3-pip (9.0.1-2.3~ubuntu1) ...
Konfigurowanie pakietu python-pip-whl (9.0.1-2.3~ubuntu1) ...
Przetwarzanie wyzwalaczy pakietu man-db (2.8.3-2ubuntu0.1)...
Konfigurowanie pakietu python3-lib2to3 (3.6.5-3) ...
Konfigurowanie pakietu python3-distutils (3.6.5-3) ...
Konfigurowanie pakietu python3-pip (9.0.1-2.3~ubuntu1) ...
xxx@xxx:~$ sudo apt-get update
Stary:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Stary:2 http://archive.canonical.com/ubuntu bionic InRelease
Stary:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Stary:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Ign.:5 http://packages.linuxmint.com tara InRelease
Stary:6 http://security.ubuntu.com/ubuntu bionic-security InRelease
Stary:7 http://packages.linuxmint.com tara Release
Czytanie list pakietów... Gotowe
xxx@xxx:~$ pip3 install pycan
Collecting pycan
No matching distribution found for pycan
xxx@xxx:~$ pip3 install pyserial
Collecting pyserial
Installing collected packages: pyserial
Successfully installed pyserial-3.4
xxx@xxx:~$
pycan nie idzie zainstalować :(
Tak mało mi brakuje a zarazem tak wiele do skanowania :(
Może poprostu can zamiast pycan?
xxx@xxx:~$ pip3 install can
Collecting can
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-zbluu68v/can/
xxx@xxx:~$ pip3 install pycan
Collecting pycan
No matching distribution found for pycan
xxx@xxx:~$
Tu jeszcze info odnośnie mojego systemu :)
System: Host: xxx Kernel: 4.15.0-38-generic i686 bits: 32 gcc: 7.3.0
Machine: Device: laptop System: Hewlett-Packard product: HP Pavilion dv6000 (RT133EA#AKD) v: Rev 1 serial: N/A
Battery BAT0: charge: 36.5 Wh 98.7% condition: 36.9/88.8 Wh (42%) volts: 11.4/14.8
CPU: Dual core Intel T2250 (-MCP-) arch: Yonah rev.8 cache: 2048 KB
Graphics: Card: Intel Mobile 945GM/GMS 943/940GML Express Integrated Graphics Controller
Audio: Card Intel NM10/ICH7 Family High Def. Audio Controller
Network: Card-1: Intel PRO/Wireless 4965 AG or AGN [Kedron] Network Connection
Drives: HDD Total Size: 320.1GB (7.1% used)
Partition: ID-1: / size: 19G used: 6.4G (37%) fs: ext4 dev: /dev/sdb5
RAID: System: supported: N/A
Sensors: System Temperatures: cpu: 51.0C mobo: N/A
Repos: Active apt sources in file: /etc/apt/sources.list.d/official-package-repositories.list
Info: Processes: 190 Uptime: 11 min Memory: 551.7/3016.8MB
http://termbin.com/z921
Na ubuntu 16 jest coś takiego
xxx@xxx:~/Pulpit/tools$ pip3 install pycan
Collecting pycan
No matching distribution found for pycan
You are using pip version 8.1.1, however version 18.1 is available.
You should consider upgrading via the 'pip install –upgrade pip' command.
xxx@xxx:~/Pulpit/tools$ pip3 install can
Collecting can
Installing collected packages: can
Successfully installed can-2.0
You are using pip version 8.1.1, however version 18.1 is available.
You should consider upgrading via the 'pip install –upgrade pip' command.
xxx@xxx:~/Pulpit/tools$ pip3 install pyserial
Collecting pyserial
Installing collected packages: pyserial
Successfully installed pyserial-3.4
You are using pip version 8.1.1, however version 18.1 is available.
You should consider upgrading via the 'pip install –upgrade pip' command.
xxx@xxx:~/Pulpit/tools$ sudo ./vcan_init
[sudo] hasło użytkownika xxx:
RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists
xxx@xxx:~/Pulpit/tools$ ./opcom_sniffer.py /dev/ttyUSB0 mscan
Traceback (most recent call last):
ImportError: No module named 'can'
xxx@xxx:~/Pulpit/tools$ sudo ./opcom.py /dev/ttyUSB0 lscan
sudo: ./opcom.py: nie znaleziono polecenia
xxx@xxx:~/Pulpit/tools$ ./opcom_sniffer.py /dev/ttyUSB0 mscan
Traceback (most recent call last):
ImportError: No module named 'can'
xxx@xxx:~/Pulpit/tools$ sudo ./opcom_sniffer.py /dev/ttyUSB0 lscan
Traceback (most recent call last):
ImportError: No module named 'can'
xxx@xxx:~/Pulpit/tools$ ????????
Czy startując polecenie ./opcom_sniffer.py /dev/ttyUSB0 mscan
Auto musi być podłączone pod laptopa?
No raczej. A przynajmniej pod opcoma. Bez opka wywali bledy.
Sam interfejs mam podłączony ale wszystko robię w domu.
Wydaje mi się, że nie będzie miało to znaczenie czy auto będzie podłączone.
Sprawdzę dziś w aucie.
Pod auto nie musi być połączone aby zadziałało
Trochę podpowiedzi
Podanym chyba instalujesz pakiety na python3 a używasz python2.7
Uruchamiaj w ten sposób:
Pokaż co pokazuje
No bez auta powinno dojsc do momentu gdzie sniffer wysle jakies dane na can i czeka na odpowiedz. Ty to jakies bledy, moze interface nie wykrywa?
Wydaje mi się, że mój interfejs nie jest 1.59 tylko coś 1.43 lub podobnie.
Jak sprawdzić czy system widzi interfejs i pod jaką nazwą jest on?
lsusb
Chyba tym ;)
Powinno być pod /dev/ttyUSBx albo /dev/ttyACMx.
Podłącz OPCOM
Pokaż co pokazuje lsusb
Odłączyć OPCOM
Uruchom van_init
Podłącz OPCOM
Zobacz czy jest widoczny w /dev/tty
Ew pokaż pokaż co widzisz w dmesg w momencie podłączania OPCOM
chyba jest wszystko ok
teraz wcześniejsza część
/dev/ttyUSB0
spróbuj:
tak się u mnie ten pakiet nazywa :)
jak zwykle nie miałem czasu przez weekend :)
Myślisz, że ja miałem :) wiem jak to jest :)
Dziś zainstalowałem ubuntu na dysku wewnętrznym, o dziwo nie było błędów przy instalacji pakietów itp
Udało mi się uzyskać coś takiego :)
Chyba dobrze?
Tak. Teraz do auta.
Bez przejścia na root nie chce uruchomić poleceń nawet z sudo. Gdy dam su root to wtedy wszystko rusza. Co najlepsze wczoraj nie ruszało ale nie było w sumie tego pip3 install python-can
Idę chyba do auta :)
Mam na 13 to może coś uda się zeskanować :)
z tym, że opcom.py uruchamiasz jednocześnie tylko dla jednego CANa... jak uruchomisz dla trzech, to nie zadziała wcale prawdopodobnie :)
tak więc... 2 z trzech okien do zamknięcia i wtedy do auta (tutaj LSCAN daje prawidłowe dane, reszta się nie połączyła, ale być może też zepsuła połączenie z LSCAN)
żeby sudo działało, trzeba je dobrze skonfigurować :)
wszystko w tej maszynie wirtualnej jest poustawiana, ale generalnie z roota też możesz wszystko robić
No dobra byłem i szczerze to można dostać oczopląsu :)
Muszę chwilę pomyśleć jak mam to ugryźć.
Miliony cyferek
Jak w tym się poruszać?
Właśnie zauważyłem, że wszystkiego nie da się jednocześnie skanować ale to w domu tylko na próbę robiłem.
log z któregoś podłączenia
Jak w nim odszukać np przycisk dds? :)
Trzeba pewnie więcej filtrów ustawić w candump candump -a -c lscan?
W tym problem ze musisz wiedziec co cie interesuje i znac adresy, wtedy ustawic filtry na te adresy. Ale skad wziasc adresy to nie wiem.
no przecież ostrzegałem... na CANie mnóstwo danych lata :)
proponuję popróbować z cansniffer, będziesz widział co się w pakietach zmienia. na początek:
uruchom can sniffer, odczekaj chwilę aż się wszystko ustabilizuje
i obserwuj co się dzieje po naciśnięciu przycisku naciśnięcia zamykania drzwi
i potem spróbuj zasymulować naciśnięcie tego guzika poprzez cansend...
szukaj wszystkiego na LSCAN - to takie ćwiczenie na początek
generalnie - cała zabawa to wiele godzin spędzonych w aucie i szukanie zarówno identyfikatorów jak i konkretnych bitów za co odpowiadają... :)
ale to nie jest problem tego buga, powiedz co poprawić w opisie, żeby można było zamknąć. opis gdzieś przypnę, żeby nie zniknął, ale muszę mieć pewność, że każdy sobie z tym poradzi...
Filtr na adresy ustawiasz w opcom_sniffer. Wtedy leca ci pakiety tylko z tego adresu. A tak to trzdba orzeanalizowac log metoda prob i bledow. Mysle ze np siedzac w aucie i zgrywajac log wciskasz tylko raz przycisk dds.potem analizujesz log szukajac wpisow ktore wystapily tylko raz. Jesli poszula kilka to pokolei wysylasz te ramki na can i obserwujesz co sie dzieje.
filtry możesz ustawić w opcom.py, albo w candump, albo w cansniffer - na każdym etapie możesz poustawiać sobie filtry jakie chcesz
ale skoro już Ci działa, to będziesz mógł pomóc z TPMSem w Zafirze, bo nie poradzę sobie bez pomocy kogoś kto ma takie coś w aucie
Oczywiście, że pomogę z TPMS. Za kilka dni zakładam zimówki w których są sprawne czujniki i będzie wszystko działać jak powinno. Teraz system mi widzi tylko 3 bo jeden leży przy lewarku zmiany biegów ;)
Co do buga to postaram się napisać wszystko co trzeba zrobić aby to uruchomić na systemie zainstalowanym a nie z Twojej maszyny bo jak widać nie u każdego ona zadziała.
Może w pracy znajdę chwilę to opiszę co i jak.
Widziałem, że po uspokojeniu lscan gdy wciskam zamknij to tylko z 2 dane się pojawiły a jak dałem drugi raz na ryglowanie to jakby tylko 1 lub też dwa.
Teraz tylko czas jest potrzebny ;)
lscan 350#02017701
Nie wiem czy to nie to jest przycisk DDS tylko, że jak wyślę to polecenie po can to i tak się nic nie zmieni bo on działa po kilku sekundach przytrzymania.
eksperymentuj - to wymaga wszystko czasu w kilka minut nie wiele się dowiesz jak nie masz wprawy
To wiedziałem od samego początku ;) czas to towar deficytowy u mnie ale teraz będzie długi weekend to może uda się posiedzieć ;)
Zasadniczo muszę odczytać tylko kilka rzeczy no chyba, że mnie wciągnie ;)
Bardzo Ci dziękuję, że wszystko już u mnie działa ;)
Kiedyś używałem linuxa i teraz muszę sobie to wszystko przypomnieć. Nie byłem expertem ale coś tam się robiło ;)
Napisałem tak na szybko. Trzeba to sformatować. Mogę to jeszcze zmienić ale to już nie dziś.