Linux - dowi

Ogólne pytania dotyczące systemu
FunLnx
Posty: 61
Rejestracja: 16 lutego 2014, 10:59

Linux - dowiązania zamiast źródła

Post autor: FunLnx »

Witam

Zajmuje się programowaniem systemów wbudowanych, a konkretnie jestem na początku przygody jeśli chodzi o linux embedded. Nie wiem jak poradzić sobie z następującym problemem i czy to w ogóle jest problem, bo może system robi coś automatycznie . Może przybliżę na szybko temat tym, którzy nie orientują się w systemach embedded. Generalnie Linux embedded to taki sam linux jak na naszych PC tylko, że jądro jest bardziej okrojone z programów, funkcji itd. Jeśli chcemy, aby system wystartował z karty SD należy na tej karcie umiescić binarke obrazu linuxa zImage, binarke boot loadera 2 poziomu np u-boot.bin itd i należy również umieść cały File System. Czyli katalogi etc, usr, lib , root w tych katalogach muszą się również znaleźć niezbędne programy, które mają działać na urządzeniu docelowym. Takim potrzebnym programem jest min. busybox. Jego instalacje przeprowadzam następująco
Pobieram ze WEB źródło -> uruchamiam make z opcja kros kompilacji (pod ARM) -> kopiuje zainstalowane narzędzia do docelowego systemu plików w innym miejscu na razie na PC.
Czyli wszystkie zainstalowane pliki busybox trafiają jakby do szkieletu nowego systemu. Problem polega na tym, że zainstalowany busybox w katalogach bin nie posiada programów tylko odnieśienia. Jak domyślam się to dlatego, że te programy istnieją już w systemie wieć system uznał po co jeszcze raz je tworzyć ja se walnie dowiązanie, i teraz już pewnie rozumiecie co się stanie jak przeniosę taki system plików na urządzenie docelowe. Takie coś nie może działać, bo w urządzeniu są dowiązania a nie programy tutaj listing katalogu bin który miałby się znalejsć w target. Zatem pytanie jak sprawić, że zainstalują się faktycznie programy, a nie dowiązania.

Kod: Zaznacz cały

lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 ash -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 base64 -> busybox
-rwxrwxrwx 1 rafal rafal 941368 mar 31 11:36 busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 cat -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 catv -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 chattr -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 chgrp -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 chmod -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 chown -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 conspy -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 cp -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 cpio -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 cttyhack -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 date -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 dd -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 df -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 dmesg -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 dnsdomainname -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 dumpkmap -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 echo -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 ed -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 egrep -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 false -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 fatattr -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 fdflush -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 fgrep -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 fsync -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 getopt -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 grep -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 gunzip -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 gzip -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 hostname -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 hush -> busybox
lrwxrwxrwx 1 rafal rafal      7 mar 31 11:36 ionice -> busybox
Jesttego oczywiście dwa razy więcej. Jednak zauważcie, że busybox jest programem źródłowym.
Dodam jeszcze, że taka sama sytuacja dotyczy modułów, bibliotek itd. Dotyczy również innych programów np doinstaluje serwer ssh to tworzy się dowiązanie a nie binarka.
Awatar użytkownika
diabolic3
Beginner
Posty: 121
Rejestracja: 12 grudnia 2007, 19:45
Lokalizacja: okolice Leżajska

Post autor: diabolic3 »

Problem polega na tym, że zainstalowany busybox w katalogach bin nie posiada programów tylko odnieśienia. Jak domyślam się to dlatego, że te programy istnieją już w systemie wieć system uznał po co jeszcze raz je tworzyć ja se walnie dowiązanie, i teraz już pewnie rozumiecie co się stanie jak przeniosę taki system plików na urządzenie docelowe. Takie coś nie może działać, bo w urządzeniu są dowiązania a nie programy tutaj listing katalogu bin który miałby się znalejsć w target. Zatem pytanie jak sprawić, że zainstalują się faktycznie programy, a nie dowiązania.
Tak powinno być z tymi dowiązaniami. Jak poczytasz na stronie projektu busybox to tak w skrócie: busybox jest pojedyńczą binarką zastępującą podstawowe programy/polecenia linuksowe. Dlatego wszystkie dowiązania odwołują się do samego busyboxa, żeby nie było potrzeby przed każdym wywołaniem danego polecenia dopisywać busybox. Więcej na ten temat powinieneś się dowiedzieć już na stronie projektu.
Takie coś nie może działać, bo w urządzeniu są dowiązania a nie programy tutaj listing katalogu bin który miałby się znalejsć w target.
Będzie działać. Dlaczego to wytłumaczyłem powyżej.
Zatem pytanie jak sprawić, że zainstalują się faktycznie programy, a nie dowiązania.
Co prawda są dystrybucje przeznaczone dla urządzeń embedded, gdzie bez problemu można mieć oddzielnie całą gamę oddzielnych programów, ale to się już wiąże ze zwiększoną zajętością miejsca na docelowym urządzeniu, a także większym zużyciem pamięci. Kwestia tylko na jakie to urządzenie tworzysz ten system, oraz jakie zasoby on posiada (ilość flasha/ramu, jaki procesor). W przypadku użycia "czystego" busyboxa stosowany jest mechanizm z dowiązaniami, oczywiście można sobie dodatkowo coś skompilować i wrzucić do systemu docelowego już binarkę/bibliotekę, ale trzeba już to robić samemu.
FunLnx
Posty: 61
Rejestracja: 16 lutego 2014, 10:59

Post autor: FunLnx »

Witaj i dziękuję za odpowiedź.

Właśnie do tego doszedłem. Zastanawia mnie jeszcze jeden fakt, ponieważ nie testowałem jeszcze tego. Mamy jakiś dowolny program do pobrania ze źródeł. Kompiluje go kompilatorem do żądanej architektury i instaluje, a powstałą binarke przenoszę do katalogu np /usr/bin. W swoim ram disc i czy takie coś będzie działać
Awatar użytkownika
diabolic3
Beginner
Posty: 121
Rejestracja: 12 grudnia 2007, 19:45
Lokalizacja: okolice Leżajska

Post autor: diabolic3 »

Kompiluje go kompilatorem do żądanej architektury i instaluje, a powstałą binarke przenoszę do katalogu np /usr/bin. W swoim ram disc i czy takie coś będzie działać
Nie bardzo mogę odgadnąć o co ci dokładnie z tym ram disc chodzi. Mógłbyś to bardziej rozwinąć?
FunLnx
Posty: 61
Rejestracja: 16 lutego 2014, 10:59

Post autor: FunLnx »

Ok. RamDisk to po prostu cały rootfs czyli system plików linux czyli wszystkie niezbędne katalogi + moduły i programy np busybox ssh serwer itp. Programy w tym rootfs takie jak busybox są skompilowane przez kross kompilator. Teraz jeśli ja sobie przykładowo zażyczę w swoim rootfs programu npo takiego jak
http://monkey-project.com/

to skompiluje go tak:

Kod: Zaznacz cały


$ ./configure
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
$ bin/monkey
powinna mi powstać binarka, ale powstanie ona w katalogu ze źródłami programu monkey na PC. Zatem jeśli teraz będę chciał, aby ten daemon działał mi w moim rootfs na (target) arm rozumiem, że musszę go umieścić np w /ust/bin, a jeśli program potrzebuje jakiś bibliotek to należy je również skrośnie skompilować i przenieść do katalogu /lib w danym rootfs ?
Awatar użytkownika
diabolic3
Beginner
Posty: 121
Rejestracja: 12 grudnia 2007, 19:45
Lokalizacja: okolice Leżajska

Post autor: diabolic3 »

Zatem jeśli teraz będę chciał, aby ten daemon działał mi w moim rootfs na (target) arm rozumiem, że musszę go umieścić np w /ust/bin, a jeśli program potrzebuje jakiś bibliotek to należy je również skrośnie skompilować i przenieść do katalogu /lib w danym rootfs ?
Tak dokładnie. Z tym, że temu serwerowi monkey pewnie wystarczą tylko biblioteki zawarte w toolchainie. Nigdy nie używałem tego serwera www. A nie wystarczy ci zawarty w busyboxie httpd? Można wiedzieć co to za urządzonko tworzysz ewentualnie na czym to bazuje (procesor itp)?
FunLnx
Posty: 61
Rejestracja: 16 lutego 2014, 10:59

Post autor: FunLnx »

Z tym serwerem monkey to był tylko przykład, równie dobrze mogłem znaleźć kalkulator :) ale właśnie odpowiedziałeś na moje wątpliwości za co dziękuję :) urządzenie to moduł bazujący na TI Sitara 335x coś jak beaglebone. Nie lubię sytuacji gdzie coś klikam, coś błyśnie, wypisze i działa. Staram się dobrze poznać pewne procesy i mechanizmy rządzące tamtym światem z tond te pytania. Nie ukrywam, że wiedzy jest w .... :|
Awatar użytkownika
diabolic3
Beginner
Posty: 121
Rejestracja: 12 grudnia 2007, 19:45
Lokalizacja: okolice Leżajska

Post autor: diabolic3 »

Akurat w przypadku tego procesora możesz się jeszcze posiłkować gotowym całym SDK od TI. W przypadku tej rodziny procesorów TI ze wsparciem się świetnie spisuje, i tam już masz cały system z otoczką bazujący na Angstrom/OpenEmbedded, możesz też coś "liznąć" na temat Yocto projectu. Akurat w swoim osobistym zasobie urządzeń posiadam beablebone black i z tego korzystam do celów hobbystycznych. Ostatnio też na necie znalazłem jakiś fajny moduł bazujący na tym procesorze produkowany i to produkowany w Polsce co mnie trochę zdziwiło firma z Wrocławia niestety nie było tam ceny ;|, bo z ciekawości chciałbym wiedzieć jak ich urządzenia (głównie panel hmi) mają się do ceny bbb + dodatkowy touchscreen.
FunLnx
Posty: 61
Rejestracja: 16 lutego 2014, 10:59

Post autor: FunLnx »

Już pobrałem SDK od TI i sobie po nim przelatuje. Myślę, że temat jest raczej wyczerpany. Dziękuje za całą pomoc i odpowiedzi.
ODPOWIEDZ