czwartek, 17 marca 2016

Z motyką na Księżyc - Powiększanie przestrzeni na karcie micro SD z użyciem platformy Embedded BeagleBone Black



Nadszedł czas na napisanie kolejnego nikomu niepotrzebnego tutoriala. Ah - jak to dobrze że mam takie odruchy - coraz trudniej bowiem o filantropów. Słuchając suity Tangerine Dream - RUBYCON - dzielę się więc kolejnymi przemyśleniami o amatorszczyźnie i egzystencji na tym łez padole :->
Od kiedy zajmuję się amatorsko platformą BeagleBone Black, od zawsze zastanawiał mnie temat  - jak i gdzie pomieścić wszystkie aplikacje które mogą mi być przydatne podczas tworzenia projektów robotycznych, komputerowych i innych na tę platformę albo i też kompletnie nieprzydatne - przecież nie mam o tym zielonego pojęcia i w ogóle porywam się z motyką na Księżyc!!!
Ludzie ja nawet prostego Arduino nie potrafię "ZACZAIĆ", skonstruować prostego obwodu elektronicznego też nie jetem w stanie - "bo Pan potrafi tylko bateryjkę podłączyć" - z sarkazmem i niekłamaną pogardą ciamkał w roku 1998 na zajęciach mój wykładowca od elektroniki - więc z czym do cholery do ludzi - poważnego Linuxa odpalać!!!. Takich jak ja powinni utylizować za brak odpowiedniej ilości IQ!!!
W każdym razie kiedyś, gdzieś zacząłem drążyć temat i poczytałem jak rozszerzyć istniejącą partycję Linux'a ze standardowego rozmiaru na cały dysk lub urządzenie blokowe na którym jest on zainstalowany.
W przypadku BBB standardowo producent zaleca pierwsze uruchamianie i konfigurację z wbudowanego w ten system eMMC o pojemności 4GB lub 2GB (zależy od wersji). Niemniej każdy użytkownik szybko stwierdzi że to jednak trochę mało na np. biblioteki openCV i inne rzeczy.
Jako, że BBB posiada slot karty SD oraz możliwość uruchomienia z niej systemu uprzednio tam "wpreparowanego" z obrazu dostępnego TUTAJ, Ja osobiście zakupiłem do tego celu kartę o pojemności SanDisk ExtremePRO16GB.
Po zaimplementowaniu na niej bootowalnego obrazu Debian Wheezy ciągle reszta tej karty (~12GB) pozostawała nieużywana. Zdecydowałem się posiedzieć nad tym problemem i poszukać rozwiązania a następnie w miarę możliwości podzielić się tym co udało się zrobić.
Wszystkie poniższe polecenia wykonałem na systemie Debian Wheezy ale powinny one działać też na instalowanym wcześniej na tych platformach Angstrom a nawet Ubuntu.
Doradzam jednak aby każdy we własnym zakresie wykonał sobie kopię tego co już ma na swojej karcie SD, żeby potem uniknąć niepotrzebnych problemów i konfiguracji Beagle na nowo.
Oto dodatkowo jeszcze w rozwiązaniu tego problemu wydatnie pomógł kolega Jakub K. z miasta "Karakowa", PER - FE - KCYJ - NIE biegły w temacie, "Linuksów" któremu dziękuję za naprowadzenie na ideę działania urządzeń blokowych w Linuksach.

No dobrze po pierwsze przyjrzyjmy się z czym mamy do czynienie i na jakim urządzeniu będziemy pracowali:
Będąc zalogowani jako root, wpisujemy:

fdisk -l

Polecenia pokaże nam partycje naszego systemu uruchomionego na BBB. Ta którą będziemy zmieniać - powiększać ma oznaczenie mmcblk0 (tak będzie widziana nasza karta SD po uruchomieniu z niej systemu).
Teraz używając programu fdisk - bo w istocie jest to program, możemy zmienić rozmiar naszej istniejącej partycji - warunek musi być "niezalokowane" miejsce na naszym dysku (karcie SD). Wykonamy usunięcie istniejącej partycji, a potem stworzymy nową, rozszerzając jej pojemność na całą kartę SD.
Wpisujemy polecenie:

fdisk /dev/mmcblk0

Polecenie powinno otworzyć dostęp programowi fdisk do urządzenia blokowego mmcblk0 - naszej karty SD.
Otrzymamy komunikat:

Command (m for help):
Komenda 'm' uruchomi nam pomoc programu - dla początkujących. Jak do tej pory nasza karta jest bezpieczna - a bezpieczna jest dopóki nie wprowadzimy komendy 'w' zatwierdzającej zmiany!
Jeśli nie jesteśmy pewni naszych poczynań, w każdej chwili możemy poniechać naszych zmian naciskając 'q' - zakończenie bez żadnych zmian.
No dobrze - poniżej zamieszczam właściwy - przykładowy scenariusz - jak powiększyć partycję na karcie dla platformy BBB:

fdisk /dev/mmcblk0

Command (m for help): d

Partition number (1-4): 2


Command (m for help): n

Partition type:

 p primary (1 primary, 0 extended, 3 free)

 e extended

Select (default p): p

Partition number (1-4, default 2): 2

First sector (numer początkowego sektora karty SD, default 4096): <enter>

Using default value na przykład 4096

Last sector, +sectors or +size{K,M,G} (numer ostatniego sektora karty SD, default 15523839): <enter>

Using default value Użyj domyślnych wartości zaproponowanych przez program dla Twojej karty SD

Command (m for help): w - zapisanie wszystkiego

Po tym pokażą się nam jeszcze następujące komunikaty:

The partition table has been altered!
Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16:
Device or resource busy. The kernel still uses the old table.
The new table will be used at the next reboot or after you run
partprobe(8) or kpartx(8)
Syncing disks.

Po czym otrzymamy standardowy znak zachęty:
Partycja jest w użyciu i powiększona, nie zobaczymy jednak żadnych zmian dokąd nie zrestartujemy Beagle. Do dzieła:

shutdown -r now

Kiedy BBB się zrestartuje, mamy nadal 4GB do dyspozycji pomimo, że system widzi 16GB, nie wiem jak dokładnie to wyjaśnić ale opiszę sposób uzyskania dostępu do pełnej powiększonej 16GB partycji.
Poniżej polecenie. Jako root wpisujemy komendę:

resize2fs /dev/mmcblk0p2

Kiedy komenda się wykona, resetujemy BBB jeszcze raz i po zalogowaniu wydajemy polecenie ‘df -h‘.

Po jego zastosowaniu powinniśmy dostać następująca informację tak było w przypadku mojej karty (U Was może być inaczej):

Uważam to rozwiązanie za lepsze niż męczenie się z zewnętrznymi nośnikami na dane np pendrive, inna sprawa, że jeśli mamy dobrej jakości kartę SD (ja użyłem SanDisk Extreme PRO 90MB/s - zapis; 95MB/s odczyt) to tym bardziej jest to korzystne rozwiązanie.

Do następnego razu i następnych zmagań z Motyką. Bedzie ich chyba jeszcze trochę. W międzyczasie Posłuchajcie tego: https://www.youtube.com/watch?v=pCri6lFSJAQ

wtorek, 16 lutego 2016

Beagle Bone Black - jak uporałem się z Hub'em USB?

Jako, że BeagleBone Black posiada tylko jedno gniazdo USB do tego w standardzie 2.0, do zasilania i komunikacji z większą ilością potrzebnych urządzeń: kart sieciowych, kamer, klawiatury, myszy, sterowników itp. - potrzebny jest aktywny Hub USB.
Pardon - bo zaraz fachowcy się przywalą, że piszę głupoty - BBB posiada oczywiście dwa złącza, z tym, że jedno miniUSB jako klient, ale nie o nim będzie tu mowa. Potraktuję o tym standardowym 2.0 oznaczonym w specyfikacji jako USB1.
W handlu dostępne żniste rozgałęziacze, Hub'y USB zarówno pod złącze 3.0 jak i 2.0. Ja wybrałem Hub w standardzie 2.0 ponieważ lepszy nie był mi potrzebny i takowe gniazdo (tego standardu) jest w BBB fabrycznie.
Należy pamiętać, że Hub USB powinien posiadać aktywne, zewnętrzne zasilenie, czyli ma to być Hub aktywny.
Dlaczego taka uwaga? Z tego co się orientowałem nadmierne obciążenie portu USB w Beagle może doprowadzić do jego uszkodzenia - inaczej - nie jest przystosowane do zasilania urządzeń o poborze prądu większym niż przewidziane dla standardu USB  - 500mA czyli 0,5A. Zatem jeżeli planujemy w naszym projekcie użycie większej liczby urządzeń USB, aktywny Hub to doskonałe rozwiązanie:).
Poniżej przedstawiono listę urządzeń, które powinny bezproblemowo współpracować z BeagleBone Black bez żadnych magicznych sztuczek:
  • Manhattan 10-port HUB,
  • D-LINK DUB-H7 7 Port USB 2.0 Hub,
  • Trust HU-5770 7-Port Powered Hub.
Oczywiście w moim przypadku, chciałem aby było bardziej "hakersko", nabyłem za kwotę 14,50zł wynalazek "no name" prezentowany na zdjęciu poniżej:
Hub USB z podłączoną kartą sieciową z mojego poprzedniego posta.
Tak jest bez obudowy, tak zdjąłem ją z premedytacją. Wielkie było moje zdziwienie kiedy po podłączeniu do BBB i zasilania okazało się, że Hub po prostu nie działa i nie działa... . Świeci mruga ale nie wykrywa kart i innych urządzeń. Nie wiem czy to kwestia konfiguracji BeagleBone Black i jego Debiana czy coś innego. Zacząłem poszukiwania, jak  rozwiązać ten problem - przecież nie chcę zasilania USB z BBB tylko z Hub'a - z sieci!
Znalazłem - okazuje się bowiem, że tańsze Hub'y mają rozwiązanie w postaci małej diody prostowniczej łączącej zasilanie gniazda USB z zasilaniem płytki z gniazda zasilacza. Prezentuje to foto poniżej:
I po kłopocie z niesfornym zasilaniem Hub'a USB
Wyczytałem, że rozwiązaniem takiego problemu może być jedynie odcięcie przewodu zasilania z kabla USB (uprzednio należy rozpruć jego otulinę), co ze względów estetycznych nie wchodziło w grę, lub odnalezienie na płytce takiego właśnie elementu i jego odlutowanie. Ja przezornie tę diodę pozostawiłem i jedynie rozłączyłem zasilanie via USB na rzecz bardziej przydatnego zasilania z zasilacza (aktywnego). Teraz już wystarczy zasilacz 5V / 2 - 3A i można podłączać to co nam potrzeba do realizacji wymarzonych projektów:).
Oczywiście Hub'y wymienione wcześniej, powyżej w tym poście nie powinny mieć takiego problemu, bo one fabrycznie są robione jako aktywne i nie ciągną zasilania via USB komputera czy BBB, z tego też tytułu są droższe. 
Dobra poniżej zamieszczam kilka fotek i okienko z VNC na dowód, że to wszystko funkcjonuje jak trzeba.
Hub z usuniętą diodą prostowniczą:) Lampka na karcie WiFi świadczy, że przynajmniej jest zasilanie:)
Cukierkowe podświetlenie taniego Hub'a USB:)
Przy okazji - taki mam radiator na Sitarze:)
Polecenie / lsusb / - utrwala mnie w przekonaniu, że o to chodziło.
Czy tak to powinno być zrobione? Pewnie jest inna metoda i grzebanie w konfiguracji Debiana, ale że nie jestem fachurą od Linuxów, takie rozwiązanie wydaje się być ze wszech miar prawidłowe i do zadań "amatorskich" chyba wystarczające.
I tak kolejny problem z Beagle został w miarę prosto rozwiązany. Pozdrawiam i dużo sukcesów z tą zabawną platfor.
Ponieważ to sztywny blog technologiczny na koniec On :)
 

niedziela, 6 grudnia 2015

BeagleBone Black konfiguracja WIFI dalsze zmagania.

Jest chyba 10 dnia kolejnego. Pora zatem na ciąg dalszy. Włączamy naszego Beagle i na razie bez podłączania karty WIFI instalujemy usługę obsługi WIFI. Wykonujemy szereg następujących po sobie poleceń:

cd ~
ntpdate -b -s -u pool.ntp.org
apt-get update && apt-get install git
git clone https://github.com/adafruit/wifi-reset.git
cd wifi-reset
chmod +x install.sh
./install.sh

Każde polecenie zatwierdzamy klawiszem Enter. Po wykonaniu prawidłowo wszystkich powinniśmy na ekranie otrzymać takie oto komunikaty:

Installing wifi reset service to /opt/wifi-reset.
Installing systemd service to run at boot.
Enabling systemd service.

Gdy coś pójdzie nie tak proszę koniecznie sprawdzić składnię poleceń opisanych powyżej.

Nareszcie nadeszła pora na właściwe uruchomienie sieci bezprzewodowej w naszym BeagleBone Black. Najpierw wyłączamy BBB potem podłączamy naszą kartę sieciową i włączamy ponownie nasz system. Wykonujemy połączenie przez USB lub UART za pomocą terminala a następnie wykonujemy komendy które pozwolą nam sprawdzić, czy nasz interfejs działa prawidłowo. Komenda jest następująca:

iwconfig

Po jej zatwierdzeniu klawiszem Enter dostajemy informację o zainstalowanych interfejsach sieciowych, w tym naszej karcie WIFI.
Jedną z ostatnich operacji jest edycja pliku, który będzie "przechowywał" ustawienia naszej sieci. Należy go oczywiście sobie wyedytować. Wpisujemy polecenie:

nano /etc/network/interfaces

Nano to popularny prosty edytor tekstowy a /etc/network/interfaces to oczywiście ścieżka dostępu do pożądanego pliku z konfiguracją sieci. Po otwarciu w edytorze nano poszukujemy następującej składni pliku:

# WiFi Example
#auto wlan0
#iface wlan0 inet dhcp
# wpa-ssid "essid"
# wpa-psk "password"


Jedyne co musimy zrobić to zedytować go tak żeby "odhashować" następujące linijki:

# WiFi Example
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "moja_siec_WIFI"
wpa-psk "moje_haslo_WIFI"


Chyba nie muszę wyjaśniać co i jak, bo powyższy przykład dla osób obznajomionych z sieciami WIFI powinien być czytelny. wpa-ssid to nazwa naszej sieci a z kolei wpa-psk to hasło ją zabezpieczające :)
Po zakończeniu edycji plik zapisujemy kombinacja klawiszy Ctrl-O i zatwierdzamy nasz zapis zawartości pliku Enterem.
Kombinacją Ctrl-X wychodzimy z edytora Nano.
Testujemy nasze "łącze" poleceniem:

ifup wlan0

I na ekranie terminala powinna pojawić się kompletna informacja o przydzieleniu naszemu interfejsowi adresu IP przypisanym z DHCP.

Możemy także sprawdzić połączenie sieciowe BeagleBone Black wykonując polecenie:

ifconfig wlan0

No i w końcu je przetestować poleceniem np.:

ping www.wp.pl

Zobaczymy wtedy potwierdzenie połączenia w postaci poprawnych pingów. Ctrl-C zamknie nam pingowanie.
Wykonujemy polecenie reboot i po ponownym uruchomieniu - połączenie nie działa! Trzeba na nowo wklepywać polecenie ifup wlan0 i tak za każdym razem - tylko podstawowe pytanie po co? Skoro ma to działać automatycznie i cieszyć nas zdalnym dostępem via WIFI:)
Aby rozwiązać tę niedogodność musimy znowu wrócić się do edycji pliku interfaces:

nano /etc/network/interfaces

I znowu odszukać linijki składni:

# WiFi Example
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "moja_siec_WIFI"
wpa-psk "moje_haslo_WIFI"


Dodajemy następujące polecenie ("hashując" jednocześnie linijkę - auto wlan0):

allow-hotplug wlan0

Tak, że nasz plik po wyedytowaniu będzie miał następująca składnię:

# WiFi Example
# auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "moja_siec_WIFI"
wpa-psk "moje_haslo_WIFI"




Poniżej zamieszczam zrzuty z obu plików tak aby wyeliminować wątpliwości związane z ich konfiguracją.

 Edycja pliku  - rc.local

Edycja pliku intefaces

Może nie jest to najlepszy pomysł ale ten sposób u mnie zadziałał znakomicie i wydaje się, że do potrzeb amatorskich w zupełności wystarczy.
Można jeszcze wykonać polecenie włączające:

ifup wlan0

I po kolejnym restarcie cieszyć się WIFI z BeagleBone Black.
I tak się sprawy z niesfornym Beaglem i siecią WIFI miały. mam nadzieję, ze komuś się przyda taka konfiguracja np. do sterowania robotem via WIFI no i oczywiście za pomocą BBB.
Pozdrawiam kolegów i koleżanki życzę sukcesów w zmaganiu się z tą platformą.