Raspberry Pi NFS serveris ir Windows klientas

Įžanga

Microsoft pateikiamas NFS klientas yra prieinamas tik Enterprise ir Ultimate Windows versijose, tad šiame straipsnyje aprašysiu kaip paleisti NFS serverį Raspberry Pi 3 kompiuteryje ir prie jo prisijungti iš Windows 10 Home kliento (viskas turėtų veikti ir su kitomis Windows versijomis).

Raspberry Pi serveris

titulinis

Disko prijungimas

Prijungiam diską prie Raspberry Pi ir vykdom komandą fdisk -l. Sužinome kokį žymėjimą gavo prijungtas diskas:

fdisk

Sukuriame prijungimo vietą:

sudo mkdir /media/transcend

Kadangi prijungtas diskas yra NTFS failų sistemos, įsitikiname, kad įdiegtas NTFS skaitymo – rašymo draiveris:

sudo apt-get update

sudo apt-get install ntfs-3g

/etc/fstab faile sukuriame tokį įrašą:

Perkrauname Raspberry ir naujai prijungtame diske sukuriame katalogą, kuriame saugosime NFS share:

mkdir /media/transcend/NFS

NFS serverio nustatymas

sudo apt-get install nfs-common nfs-server

Pridedame tokią eilutę į /etc/exports failą:

exports

192.168.8.0/255.255.255.0 reiškia, kad bus priimti prisijungimai iš vietinio tinklo adresų diapazono 192.168.8.1 – 192.168.8.254. Opcija insecure pridėta, nes kitaip Windows klientas neprisijungia.

Windows klientas

Parsisiunčiame sukompiliuotus NFS Windows kliento failus iš čia.

išarchyvuojame ir sekame šiais žingsniais:

  1. (Jei neįdiegta) įdiegiame vcredist*.exe bibliotekas.
  2. Du kartus spaudžiame ant nfs41_driver.cer failo, pasirenkame Install Certificate ir įkeliame jį į Trusted Root Certification Authorities saugyklą.
  3. Atidarome komandinę eilutę kaip administratorius.
  4. Vykdome install.bat failą.
  5. Kopijuojame konfigūracinius failus:
    1. mkdir C:\etc
    2. copy etc_netconfig C:\etc\netconfig
    3. copy ms-nfs41-idmap.conf C:\etc\
  6. Leidžiame Windows užkrauti bandomaisiais sertifikatais pasirašytus failus:
    bcdedit /set testsigning on
  7. Perkrauname kompiuterį.
  8. Išjungiame DFS klientą:
    1. Paleidžiame regedit ir keliaujame į HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Mup
    2. Pridedame DWORD reikšme pavadinimu DisableDfs ir reikšme 1.
    1. Pridedame DNS priesagą, jei jos nėra:dns_suffix
    2. Perkrauname kompiuterį.
  9. Išbandome NFS klientą vykdydami komandą:
    nfsd_debug.exe --noldap --uid 1000 --gid 1000 -d 3
  10. Jei klientas nenulūžo ir veikia, atsidarome kitą komandinės eilutės langą ir prijungiame NFS share kaip Z diską:
    nfs_mount.exe Z: 192.168.8.103:\media\transcend\NFS

    kur 192.168.8.103 yra Raspberry Pi adresas.

Veikia:

veikia

Jei prijungiant NFS share meta panašią klaidą:

failed_mount

o NFS serveris paleistas, bet jį perkrovus:

sudo /etc/init.d/nfs-kernel-server restart

viskas sėkmingai prijungiama, vadinasi tikėtina, kad kraunantis Raspberry Pi nfs-kernel-server yra paleidžiamas anksčiau negu prijungiamas išorinis diskas. Tam pataisyti, galima uždelsti nfs-kernel-server paleidimą, tarkim 10 sekundžių, redaguojant /etc/init.d/nfs-kernel-server failą – po start sekcijos pridėjus sleep 10 eilutę:

sleep_nfs_kernel

Automatinis paleidimas ir prijungimas

Įsitikinus, kad viskas veikia, paleidžiame cmd.exe kaip administratorius, grįžtame į išarchyvuotą NFS kliento katalogą ir įrašome NFS klientą kaip servisą:

nfsd.exe -install

Tada per Run paleidžiame services.msc, susirandame pnfs client įrašą ir jo paleidimo tipą pakeičiame į automatinį:

servicesmsc

Automatiniam NFS share prijungimui, paleidžiam Task Scheduler, kairėje pusėje pasirenkam Task Scheduler Library ir sukuriame naują užduotį, dešinėje panėleje spausdami Create Task. Užduočiai suteikiame pavadinimą, Triggers kortelėje sukuriam trigerį, kuris suveiktų sistemos paleidimo metu su kokių 30 sekundžių uždelsimu, Actions kortelėje sukuriame Start a program veiksmą, kuris paleistų skriptą su panašiu turiniu:

C:\Users\User\Desktop\ms-nfs41-client-x64\nfs_mount.exe Z: 192.168.8.103:\media\transcend\NFS

Conditions kortelėje nuimame paukštuką nuo start the task only if computer is on AC power.

taskscheduler

Spaudžiam OK.

Kitą kartą paleidus kompiuterį, NFS klientas bus paleistas ir share prijungtas automatiškai.

Šaltiniai

  1. Raspberry Pi: How to Create an NFS Server
  2. NFSv4.1 Client for Windows
  3. NFSv4.1 Client for Windows (Mailing list)
  4. nfs-kernel-server starts too early

Boscam HD19 ir Raspberry Pi

Atrodo, kad yra tik vienas būdas teikti vaizdą realiu laiku iš Boscam HD19 vaizdo kameros į Raspberry Pi kompiuterį. Tam reikės AV to USB capture card įrenginio. Šiam reikalui nusprendžiau išbandyti KWorld VS-USB2800D, kuris kažkada buvo naudotas miniDV įrašams skaitmeninti ir jau ilgus metus dūlėjo stalčiuje (1-2 Pav.)

KWorld VS-USB2800D

1 Pav. KWorld VS-USB2800D priekis

KWorld VS-USB2800D

2 Pav. KWorld VS-USB2800D galas

Prijungiam Boscam kamerą prie capture card su pateiktu mini USB į kompozitinį AV laidu. Sujungiam pateiktą su Boscam multifunkcinio prievado maitinimo laidą su 12 V baterija (pagal Boscam specifikaciją). Aš naudojau Turnigy 3S 11.1 V bateriją, įtampos atrodo pakanka. Žr. nuotraukas žemiau.

Pic 3. Boscam HD19 with composite and power cables connected

3 Pav. Boscam HD19 su prijungtu kompozitiniu ir maitinimo laidais

Pic 4. Turingy 3S 11.1 V battery

4 Pav. Turnigy 3S 11.1 V baterija

Pic 5. Everything's connected

5 Pav. Viskas sujungta

Prijungiam capture card prie Raspberry Pi USB prievado (6 Pav.)

Pic 6. And... It's a mess

6 Pav. Laidų šiukšlynas

Įjungiam Boscam kamerą laikydami įjungimo mygtuką ir paleidžiam Raspberry. Jei tau sekasi, tai Raspberry Pi aptiks tavo capture card automatiškai ir pasikrovus operacinei sistemai galėsi ja naudotis. Dalinį palaikomos įrangos sąrašą galima rasti LinuxTV tinklapyje. Greitas būdas išbandyti ar viskas veikia yra naudojant guvcview programinę įrangą.

Mano atveju, nors viskas buvo aptikta, bet guvcview rodė tik juodą ekraną. Problema yra tame, kad KWorld capture card turi du įėjimus: S-Video ir kompozitinį ir pagal nutylėjimą laukia vaizdo signalo iš S-Video įėjimo.

Problemai išspręsti peržiūrėjau aptiktus įėjimus:

enum_channels

7 Pav. Prieinamų kanalų peržiūra

ir pasirinkau kompozitinį:

select_channel

8 Pav. Kanalo pasirinkimas

Veikia!

Pic 7. guvcview works

9 Pav. guvcview veikia

Samsung Galaxy S2 i9100 ir Samsung Galaxy Note 10.1 N8000 pagreitinimas

Samsung Galaxy S2 ir Samsung Galaxy Tab 10.1 įsigijau prieš porą metų ir jau gerą pusmetį pastebiu, kad tiek vieno tiek kito prietaiso greitaveika sumažėjo iki vėžlio greičio. Šiukšlių valymas ir RAM atlaisvinimas su įvairiom programom nepadėjo, tad viską nurašiau ant „programos pastoviai atnaujinamos ir didėja tiek savo dydžiu, tiek reikalavimais”, kol neseniai neperskaičiau apie tai, kad Android neturėjo TRIM palaikymo iki 4.3 versijos (plačiau apie tai galima paskaityti čia) Bėda ta, kad tiek Galaxy S2, tiek Galaxy Note 10.1 aukščiausia gamintojo pateikiama Android versija yra 4.1.2. Neoficialių Android versijų naudoti nesinorėjo, tad problemą sprendžiau su trečios šalies programine įranga Trimmer (fstrim). Prieš naudojant šią programą, reikalingos root teisės, kaip tai padaryti aprašyta čia (Galaxy S2) ir čia (Galaxy Tab 10.1).

Įvykdžius Trimmer (fstrim) programą abu prietaisai pagreitėjo akivaizdžiai.

P. S. Vykdant aukščiau aprašytus veiksmus yra tikimybė sugadinti savo įrenginius, tad jei bijote ir/ar gerai nesuprantate ką darote – nedarykite.

bgslibrary naudojimas savoje programoje

Prieš pradedant sistemoje turi būti įdiegta OpenCV >= 2.4 versija.

Tarkime norima sukompiliuoti ir sulinkinti tokią pavyzdinę programą:

#include <iostream>
#include <cv.h>
#include <highgui.h>

#include „package_bgs/FrameDifferenceBGS.h”

int main(int argc, char **argv)
{
CvCapture *capture = 0;
capture = cvCaptureFromCAM(0);

if(!capture){
std::cerr << „Cannot initialize video!” << std::endl;
return -1;
}

IBGS *bgs;
bgs = new FrameDifferenceBGS;

IplImage *frame;
while(1)
{
frame = cvQueryFrame(capture);
if(!frame) break;

cv::Mat img_input(frame);
cv::imshow(„Input”, img_input);

cv::Mat img_mask;
cv::Mat img_bkgmodel;

// by default, it shows automatically the foreground mask image
bgs->process(img_input, img_mask, img_bkgmodel);

//if(!img_mask.empty())
// cv::imshow(„Foreground”, img_mask);
// do something

if(cvWaitKey(33) >= 0)
break;
}

delete bgs;

cvDestroyAllWindows();
cvReleaseCapture(&capture);

return 0;
}

Šis kodas išsaugomas main.cpp faile, į tą patį katalogą iš bgslibrary nukopijuojamas package_bgs aplankalas ir sukuriamas config katalogas.

Kompiliavimas

g++ -c `pkg-config opencv --cflags` main.cpp package_bgs/FrameDifferenceBGS.cpp

Bibliotekų keliai

pi@raspberrypi ~ $ cat /etc/ld.so.conf.d/opencv.conf
/usr/local/lib/

pi@raspberrypi ~ $ sudo ldconfig -v

Linkinimas

g++ -o out `pkg-config opencv --libs` main.o FrameDifferenceBGS.o

Vykdymas

./out

Trečios ašies pridėjimas dviašiam gimbalui

Kadangi triašiai gimbalai yra ganėtinai brangūs, nusprendžiau nusipirkti pigų dviašį ir pabandyti jam pritaisyti trečią ašį.

Pirkiniai:

  1. HobbyKing Brushless ActionCam Gimbal With 2208 Motors and 3K Carbon Construction
  2. Quanum 2208 Precision Brushless Gimbal Motor
  3. Anglies plokštelė 3x25x1000
  4. Epoksidiniai klijai 10min.

Eiga:

2014-10-08 11.17.34

Surinktas dviejų ašių gimbalas, be pakabinimo dalies, trečias variklis ir anglies plastiko lentelė.

2014-10-11 13.52.42

Pagal trečio variklio skylutes ant anglies plastiko lentelės išgręžiau keturias skylutes prie kurių bus tvirtinamas variklis. Kaip pirmą kartą dirbant su anglies plastiku pastebėjimas yra vienas – bjauri medžiaga – daug dulkių, kurios ne tik kad yra nesveikos kvėpuoti, bet dar ir baisiai tepasi.

2014-10-11 13.52.49

Ant anglies plokštelės pažymėta pjovimo vieta.

2014-10-15 14.03.26

Pasiruošimas pjovimui. Anglies plastiko plokštelę pritvirtinu.

2014-10-15 14.03.53

Kampinis šlifuoklis paruoštas.

2014-10-15 14.04.49

Nelabai lygiai, bet tiks.

2014-10-16 13.13.05

Variklis prisuktas prie ką tik nupjautos anglies plokštelės dalies.

2014-10-16 13.13.11

Iš arčiau.

2014-10-16 13.13.22

Iš kitos pusės.

2014-10-16 13.13.53

Pasiruošimas klijuoti.

2014-10-16 13.14.04

Guli gražiai.

2014-10-16 13.14.10

Iš viršaus atrodo irgi gerai.

2014-10-16 13.18.30

Ruošiu klijus.

2014-10-16 13.20.00

Tepu klijavimo vietą.

2014-10-16 13.22.06

Sodinu variklį.

2014-10-16 13.22.25

Galą prispaudžiu, kad gulėtų lygiai.

2014-10-16 13.22.31

Guli lygiai.

2014-10-16 13.22.38

Po klijavimo.

2014-10-27 10.11.04

Suklijavus.

2014-10-27 12.54.51

Išdžiuvo.

2014-10-27 12.55.11

Vaizdas iš šono.

2014-10-27 12.55.30

Vaizdas iš kito šono.