Üdv!
RPi-hez (B+) szeretnék egy beágyazott Linux-ot készíteni. Pl. buildroot cuccal:
http://git.buildroot.net/buildroot/tree/board/raspberrypi/readme.txt
* RPi-hez mit javasoltok? A buildroot-al csomagkezelőt nem lehet beletenni? (ha később kell valamilyen csomag, akkor telepíthető legyen)
* Az RPi-hez buildroot-al készülnek az SD image-k? Ha nem, akkor mivel?
* A saját embedded Linux-ba ez kellene majd kb.:
- gpio kezelés (wiringPi)
- webcam kernel modul (bcm2835-v4l2)
- opencv
- exiv2
- ssh
- qt ("wm nélkül" a qt app futna csak.)
- a lényeg, hogy gyors, kicsi Linux legyen. :)
update:
ill. egy Adafruit 2,8" TFT drivere is kellene bele.
- 17794 megtekintés
Hozzászólások
Szia!
* - A buildroot-nak (BR) nincs saját csomagkezelője, mivel gyakorlatilag egy fordítási keretrendszer. Persze az ipkg-t lefordíthatod rá, de akkor neked kell megcsinálni az ipkg csomagokat is, amiket használni akarsz, hogy a dinamikusan linkelt binárisok passzoljanak. Ez nem kevés macera saját használatra, általában ezt a disztribuciók pkg maintainerei végzik.
* - Az RPi-hez az SD-image-t kézzel rakod össze, a BR ehhez ad leírást. Régebben csináltam egy RPi-re kihegyezett BR verziót, ott egy script-tel megcsináltam az SD Image-et. Gyakorlatilag csinálsz egy üres file-t dd-vel, ami a végleges méretű lesz, erre egy partíciós táblát fdisk-el, az első partíció egy FAT32, erre kerül a kernel és az RPi saját firmware-e és config fájljai, a második partíció Linux típusú, erre dd-zed a BR által generált ext* image-et.
A BR igazából arra való, hogy cross-compiler-t tudjál fordítani (kb. amit crosstool-ng is tud) és komplett linux-image-eket tudj készíteni egyszerűen 100%-ban forrásból. Pl. az OpenWRT disztribúció BR-al épül fel.
Ha nincs *nagyon* speciális igényed (patkolt libc meg furcsa kernel patch-ek :)), használj inkább OpenWRT-t az RPi-den, az már le van fordítva, és ipkg-val a csomagok is mind rendelkezésre állnak. http://wiki.openwrt.org/toh/raspberry_pi
Üdv,
KK
- A hozzászóláshoz be kell jelentkezni
Köszönöm! Ez a buildroot lehet a megfelelő. :)
Kérdés, hogy pl. speciálisabb kernel modulokat hogyan lehet beletenni? Pl. TFT kernel modul.
- A hozzászóláshoz be kell jelentkezni
Alapesetben a BR-ot make menuconfig-al tudod külön konfigurálni, itt a kernel almenüben kiválasztod, hogy fordítson neked kernel-t is (érdemes hozzá passzoló header verziójú toolchain-t is választani neki, különben ABI mismatch hibái lehetnek).
Itt megadhatod neki, hogy hol van a már megpatkolt kernel forrásod, vagy melyik vanilla kernelt töltse le, és hol vannak hozzá a felrakandó patch-eid. A kernel konfigot előre el kell készítened, és szintén megadni az elérési útját változóként.
A BR-hoz jönnek defconfig-ok a gyakori beágyazott eszközökhöz, mint az RPi. A leggyorsabb, ha ezt használod. Ez a "make raspberrypi_defconfig" paranccsal megy, ez rögtön készít is egy RPi-n elinduló BR konfigot.
Ezt már sokkal gyorsabban tudod személyre szabni.
Javaslom, hogy két fordítás között tedd a toolchain-t biztonságos helyre, különben a make clean azt is törli, és minden alkalommal újrafordíthatod. Érdemes bekapcsolni a compiler cache-t is a build options-ban, ez brutálisan felgyorsítja az újrafordításokat.
Üdv,
KK
- A hozzászóláshoz be kell jelentkezni
Próbálok egy teszt RPi configot első körben (Fedora 21 x64 alatt): raspberrypi_dt_defconfig
~# make xconfig
// Save...
Egy darabig el is jut, aztán nem tud letölteni:
...
Doing shallow clone
Cloning into bare repository 'linux-246530ff8a4f302b8666c6d9cf509407d8c1257a'...
fatal: unable to connect to github.com:
github.com[0: 192.30.252.129]: errno=Kapcsolat elutasítva
Shallow clone failed, falling back to doing a full clone
Doing full clone
Cloning into bare repository 'linux-246530ff8a4f302b8666c6d9cf509407d8c1257a'...
fatal: unable to connect to github.com:
github.com[0: 192.30.252.129]: errno=Kapcsolat elutasítva
--2015-04-01 10:59:36-- http://sources.buildroot.net/linux-246530ff8a4f302b8666c6d9cf509407d8c1…
sources.buildroot.net (sources.buildroot.net) feloldása… 176.9.16.109
Csatlakozás a következőhöz: sources.buildroot.net (sources.buildroot.net)[176.9.16.109]:80… kapcsolódva.
HTTP kérés elküldve, várakozás válaszra… 404 Not Found
2015-04-01 10:59:37 HIBA 404: Not Found.
package/pkg-generic.mk:73: recipe for target '/home/admin/buildroot-20150401/output/build/linux-246530ff8a4f302b8666c6d9cf509407d8c1257a/.stamp_downloaded' failed
make: *** [/home/admin/buildroot-20150401/output/build/linux-246530ff8a4f302b8666c6d9cf509407d8c1257a/.stamp_downloaded] Error 1
Hiába próbálom a buildroot-2015.02 stable v. mai snapshot-ból a linux-xxxxxxxxx.tar.gz nem jön le.
A linux kernelt próbálja leszedni gondolom, de nem találja. :(
Mit tudok tenni?
- A hozzászóláshoz be kell jelentkezni
A githubot a napokban DDOSolták, gondolom azért nem tud letölteni. Warten Sie, bitte.
- A hozzászóláshoz be kell jelentkezni
update: megy, csak git:// protokollon nem tudtam elérni. :)
- A hozzászóláshoz be kell jelentkezni
Az első fordítás sikeresnek tűnik, legalábbis hibaüzenet nincs. :)
Viszont az output/images könyvtárban csak "zImage" és a "rootfs.tar" van. Az rpi-firmware könyvtár hiányzik és benne levő:
+-- bcm2708-rpi-b.dtb
| +-- bcm2708-rpi-b-plus.dtb # B+ modell
| +-- bcm2709-rpi-2-b.dtb # B2 modell
| +-- bootcode.bin
| +-- config.txt
| +-- fixup.dat
| `-- start.elf
Ezeknek nem kellene ott lenniük, vagy legalább a bootcode.bin, config.txt, bcm2708-rpi-b-plus.dtb fájloknak?
update: Talán a config-ban kimaradt...
- A hozzászóláshoz be kell jelentkezni
Ez alapján a kernelt így kell fordítani/konfigurálni hozzá:
~# make linux-menuconfig
# keletkezik egy: output/build/linux-XYZ/.config
# Másoljuk át pl. cp output/build/linux-XYZ/.config config-kernel_RPi
~# make xconfig
# itt a make config-ban adjuk meg ezt a kernel configuration path-ba: config-kernel_RPi
Ez kimaradt nálam. :)
- A hozzászóláshoz be kell jelentkezni
bookmark
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Sikerült összerakni egy félig működő buildroot-os RPi-t (B+). Elég gyors lett, kb. 4-5mp alatt elindul. :)
A konfigja:
buildroot config
kernel config
Tudna segíteni valaki, hogy mit kellene módosítanom?
Ez lenne a cél:
- gpio kezelés (wiringPi)
- Adafruit 1601 TFT kijelző, elvileg ILI9340.
- webcam eszköz (bcm2835-v4l2 modul volt Raspbian alatt)
- ethernet eszköz (valami SMC opció kell a kernelben?) + wifi
- opencv
- exiv2
- ssh
- samba
- qt
Az eszköz meghajtókat kernelbe fordítottam elvileg (webcam, ethernet adapter), de nem jó valami egészen.
Nincs hálózat és nincs /dev/video0 eszköz sem. Ill. a TFT sem ad képet.
- A hozzászóláshoz be kell jelentkezni
ifconfig mit mond? Létezik az eszköz?
Ha igen, leszel szíves pl. DHCP-zni.
- A hozzászóláshoz be kell jelentkezni
Bocs. Igen, úgy értettem, hogy nincs hálózat -> ifconfig csak a "lo" eszközt látja.
- A hozzászóláshoz be kell jelentkezni
A v4l2 webcam driver esetén a logban annyit látok:
"... bcm2835-v4l2: error -1 while loading driver"
Vagy ezt ne a kernelbe fordítsam, hanem inkább modulként?
- A hozzászóláshoz be kell jelentkezni
Találtam egy cikket, ami jól jöhet, hogy mi kell az RPi kernelbe:
http://raspberrypi.stackexchange.com/questions/24092/kernel-config-nece…
Ill. a udev kernel config:
https://wiki.gentoo.org/wiki/Udev#Kernel
- A hozzászóláshoz be kell jelentkezni
Próbálom a bcm2835-v4l2 betenni a kernelbe/modulba a webcamerahoz, meg is lenne, csak a "modprobe bcm2835-v4l2" azt mondja, hogy "Opeation not permitted".
Mit kellene a kernelben konfigurálnom? Egy firmware kellene neki?
- A hozzászóláshoz be kell jelentkezni
Modul betöltése mezei felhasználóval nem megengedett dolog. Bár remélem, ezt tudod.
Dmesg?
- A hozzászóláshoz be kell jelentkezni
A dmesg-ben is az van (error -1, operation not permitted). Csak a root user van a rendszeren, ezzel mennie kell.
Vagy valamiről megfeledkezem?
- A hozzászóláshoz be kell jelentkezni
Igen, ha jól olvasom:
http://www.raspberrypi.org/forums/viewtopic.php?t=62364&p=475441#p475278
- A hozzászóláshoz be kell jelentkezni
A /boot/config.txt fájlban a "start_x=1" opció kell. Ezt állítja be a raspi-config is.
A /boot-ban természetesen a start_x.elf állománynak (GPU firmware image) is ott kell lennie. A buildroot-ban benne van.
Köszönet wachag-nak! :)
Hasznos lehet:
http://elinux.org/RPiconfig
http://elinux.org/RPi_cmdline.txt
- A hozzászóláshoz be kell jelentkezni
Ne nekem, a netes keresőknek, én általában csak proxy vagyok :-).
- A hozzászóláshoz be kell jelentkezni
Próbálok egy buildroot-ot (2015.02 stable), de az opencv elhasal (host: Fedora 21 x64):
http://pastebin.com/GDjUGn8J
Van valakinek ötlete? :(
- A hozzászóláshoz be kell jelentkezni
Net alapján az OpenCV használja a gstreamert is, de ezek a drága jó lelkek egy inkompatibilis verziót rámoltak mellé. Egy másik (korábbi vagy development) verzió általában működni szokott.
- A hozzászóláshoz be kell jelentkezni
Mindeg a "legfrissebb" csomagot szedi le a buildroot adott package-hez?
A hétvégén simán tudtam fordítani egy buildroot-ot, amiben szintén volt opencv.
- A hozzászóláshoz be kell jelentkezni
Ez alapján nem: http://git.buildroot.net/buildroot/tree/package/opencv/opencv.mk
Nem lehet, hogy azóta belekonfiguráltad a gstreamer supportot? Azt szerintem egyelőre nyugodtan kiszedheted.
- A hozzászóláshoz be kell jelentkezni
kiszedtem. egyelőre dolgozik...
(Észrevétel: 1-2 csomag esetén /pl. xkeyboard-config/ csomag esetén az msgmerge binárist le kell cserélni, mert core dump-ol. cp /usr/bin/msgmerge $BUILDROOT_DIR/output/host/usr/bin/msgmerge)
- A hozzászóláshoz be kell jelentkezni
subscribe
* Én egy indián vagyok. Minden indián hazudik.
- A hozzászóláshoz be kell jelentkezni
Próbálkozom egy opencv demo app-al:
/*
* OpenCV demo app
* g++ opencv.c -o opencv -lopencv_highgui -lopencv_core -lopencv_imgproc
*
*/
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main( int argc, const char** argv )
{
CvCapture* capture = 0;
Mat frame, frameCopy, image;
capture = cvCaptureFromCAM( 0 ); //0=default, -1=any camera, 1..99=your camera
if(!capture) cout << "No camera detected" << endl;
cvNamedWindow( "result", 1 );
if( capture )
{
cout << "In capture ..." << endl;
for(;;)
{
IplImage* iplImg = cvQueryFrame( capture );
frame = iplImg;
if( frame.empty() )
break;
if( iplImg->origin == IPL_ORIGIN_TL )
frame.copyTo( frameCopy );
else
flip( frame, frameCopy, 0 );
if( waitKey( 10 ) >= 0 )
cvReleaseCapture( &capture );
}
waitKey(0);
cvDestroyWindow("result");
return 0;
}
}
# ---------------------------------
"No such file or directory" hibával áll le. A video eszköz létezik (/dev/video0).
Az strace:
~# strace ./opencv
execve("./opencv", ["./opencv"], [/* 19 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40) = 40
exit_group(1) = ?
+++ exited with 1 +++
~# ldd ./opencv
libc.so.6 => /lib/libc.so.6 (0xb6e0e000)
/lib/ld-linux.so.3 (0xb6f44000)
/lib/ld-linux.so.3 (0xb6e55000)
libc.so.6 => /lib/libc.so.6 (0xb6dd2000)
/lib/ld-linux.so.3 (0xb6f08000)
libc.so.6 => /lib/libc.so.6 (0xb6dda000)
/lib/ld-linux.so.3 (0xb6f10000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb6eec000)
libc.so.6 => /lib/libc.so.6 (0xb6db6000)
/lib/ld-linux.so.3 (0xb6f0c000)
checking sub-depends for '/usr/lib/libopencv_highgui.so.2.4'
checking sub-depends for '/usr/lib/libopencv_core.so.2.4'
checking sub-depends for '/usr/lib/libstdc++.so.6'
checking sub-depends for '/lib/libm.so.6'
checking sub-depends for '/lib/libgcc_s.so.1'
checking sub-depends for '/lib/libc.so.6'
checking sub-depends for '/usr/lib/libopencv_imgproc.so.2.4'
checking sub-depends for '/lib/libdl.so.2'
checking sub-depends for '/lib/libpthread.so.0'
checking sub-depends for '/lib/librt.so.1'
checking sub-depends for '/usr/lib/libz.so.1'
checking sub-depends for '/usr/lib/libjpeg.so.9'
checking sub-depends for '/usr/lib/libpng16.so.16'
checking sub-depends for '/usr/lib/libjasper.so.1'
checking sub-depends for '/usr/lib/libgstbase-0.10.so.0'
checking sub-depends for '/usr/lib/libgstreamer-0.10.so.0'
checking sub-depends for '/usr/lib/libgobject-2.0.so.0'
checking sub-depends for '/usr/lib/libgmodule-2.0.so.0'
checking sub-depends for '/usr/lib/libgthread-2.0.so.0'
checking sub-depends for '/usr/lib/libglib-2.0.so.0'
checking sub-depends for '/usr/lib/libgstvideo-0.10.so.0'
checking sub-depends for '/usr/lib/libgstapp-0.10.so.0'
checking sub-depends for '/usr/lib/libgstriff-0.10.so.0'
checking sub-depends for '/usr/lib/libgstpbutils-0.10.so.0'
checking sub-depends for '/usr/lib/libQtGui.so.4'
checking sub-depends for '/usr/lib/libQtTest.so.4'
checking sub-depends for '/usr/lib/libQtCore.so.4'
checking sub-depends for '/usr/lib/libffi.so.6'
checking sub-depends for '/usr/lib/libgstaudio-0.10.so.0'
checking sub-depends for '/usr/lib/libgsttag-0.10.so.0'
checking sub-depends for '/usr/lib/libX11.so.6'
checking sub-depends for '/usr/lib/libXext.so.6'
checking sub-depends for '/usr/lib/libfreetype.so.6'
checking sub-depends for '/usr/lib/libXrender.so.1'
checking sub-depends for '/usr/lib/libfontconfig.so.1'
checking sub-depends for '/usr/lib/libgstinterfaces-0.10.so.0'
checking sub-depends for '/usr/lib/libxcb.so.1'
checking sub-depends for '/usr/lib/libXau.so.6'
checking sub-depends for '/usr/lib/libXdmcp.so.6'
checking sub-depends for '/usr/lib/libexpat.so.1'
libopencv_highgui.so.2.4 => /usr/lib/libopencv_highgui.so.2.4 (0x00000000)
libopencv_core.so.2.4 => /usr/lib/libopencv_core.so.2.4 (0x00000000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00000000)
libm.so.6 => /lib/libm.so.6 (0x00000000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000)
libc.so.6 => /lib/libc.so.6 (0x00000000)
libopencv_imgproc.so.2.4 => /usr/lib/libopencv_imgproc.so.2.4 (0x00000000)
libdl.so.2 => /lib/libdl.so.2 (0x00000000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00000000)
librt.so.1 => /lib/librt.so.1 (0x00000000)
libz.so.1 => /usr/lib/libz.so.1 (0x00000000)
libjpeg.so.9 => /usr/lib/libjpeg.so.9 (0x00000000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00000000)
libjasper.so.1 => /usr/lib/libjasper.so.1 (0x00000000)
libgstbase-0.10.so.0 => /usr/lib/libgstbase-0.10.so.0 (0x00000000)
libgstreamer-0.10.so.0 => /usr/lib/libgstreamer-0.10.so.0 (0x00000000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00000000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00000000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00000000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00000000)
libgstvideo-0.10.so.0 => /usr/lib/libgstvideo-0.10.so.0 (0x00000000)
libgstapp-0.10.so.0 => /usr/lib/libgstapp-0.10.so.0 (0x00000000)
libgstriff-0.10.so.0 => /usr/lib/libgstriff-0.10.so.0 (0x00000000)
libgstpbutils-0.10.so.0 => /usr/lib/libgstpbutils-0.10.so.0 (0x00000000)
libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0x00000000)
libQtTest.so.4 => /usr/lib/libQtTest.so.4 (0x00000000)
libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0x00000000)
/lib/ld-linux.so.3 => /lib/ld-linux.so.3 (0x00000000)
libffi.so.6 => /usr/lib/libffi.so.6 (0x00000000)
libgstaudio-0.10.so.0 => /usr/lib/libgstaudio-0.10.so.0 (0x00000000)
libgsttag-0.10.so.0 => /usr/lib/libgsttag-0.10.so.0 (0x00000000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00000000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x00000000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00000000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00000000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00000000)
libgstinterfaces-0.10.so.0 => /usr/lib/libgstinterfaces-0.10.so.0 (0x00000000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00000000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00000000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00000000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00000000)
not a dynamic executable
Most glibc 2.19 van a buildroot-ban, de nem ez a gondja. Nem igazán értem, hogy mit nem talál.
- A hozzászóláshoz be kell jelentkezni
Nos, a programod indulásáig már el se jutott, ez érdekes...
execve("./opencv", ["./opencv"], [/* 19 vars */]) = -1 ENOENT (No such file or directory)
- A hozzászóláshoz be kell jelentkezni
Ezt hol fordítod amúgy? És hol futtatod?
Egy file ./opencv is érdekes lehet.
- A hozzászóláshoz be kell jelentkezni
Először arra gondoltam én is, hogy magát az opencv binárist nem látja. Ezért használtam: ./opencv
Próbáltam azt is, hogy bemásoltam a /usr/bin alá (ez benne van a PATH-ban), de akkor is ugyanez a hiba.
Ezt nem értem én sem...
A fordítást qemu-ban csináltam (RPi Raspbian OS image). Onnan másoltam át.
A Linux-om (hoszt gép) azt írja erre:
~# file./opencv
./opencv: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.26, BuildID[sha1]=963fec14a6a51cf55acdb96c3385f892dc494504, not stripped
- A hozzászóláshoz be kell jelentkezni
A buildroot-al kellene egy cross compile-t csinálni.
Meg is próbáltam, a demo app a korábbi: http://pastebin.com/34nkbwQk
A buildroot gyökerében megpróbáltam lefordítani (host gépemen):
./output/host/usr/bin/arm-buildroot-linux-gnueabi-g++ -o opencv opencv.c -lopencv_highgui -lopencv_core
Le is fordult, de nem futtatható. A hoszt gépemen:
~# file ./opencv
./opencv: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, not stripped
~# ldd ./opencv
not a dynamic executable
A buildroot-os gépen sem futtott a bináris persze: "cannot execute binary file: Exec format error"
(A hoszt gép libjeit fordította bele a binárisba?)
Jó irányba megyek, csak valamit még elrontok. Hogy tudok megfelelő cross compile-t csinálni a hoszt gépemen?
A sima "hello world" app fut szépen:
/* Hello World program */
#include < stdio.h >
main()
{
printf("Hello World");
}
Ezt fordítom:
./output/host/usr/bin/arm-buildroot-linux-gnueabi-g++ -o hello hello.c
Ha ezt a binárist átmásolom a buildroot-ot RPi-re, akkor az fut (kiírja, hogy: "Hello World").
A shared library-k linkelése a probléma. Azt hogyan kellene megadni?
UPDATE:
Megvan! Működik! Logikus is volt...
./output/host/usr/bin/arm-buildroot-linux-gnueabi-g++ -o opencv opencv.c -L ./output/target/lib/ -lopencv_highgui -lopencv_core
A lefordult bináris már fut is buildroot RPi-n. Ill. futna, mert az Xorg-ot is be kellene konfigolni rendesen hozzá.
- A hozzászóláshoz be kell jelentkezni
Bocs, nem voltam elérhető. Pontosan, a host libekkel linkeltél. Persze az megér egy misét, hogy ezt miért lehet...
Javaslom az Eclipse Buildroot plugin beállítását, pont ezektől fog megkímélni.
- A hozzászóláshoz be kell jelentkezni
Egész szépen alakul. :)
Az xdm is elindul a 'Welcome to clienthost' üzenettel. Be is tudok lépni a grafikus konzolon, igaz egyből a karakteres konzol loginjára dob. Itt ismét be kell lépnem. :) Az xdm-et végülis ki tudom kapcsolni (/etc/init.d/S99xdm).
Mivel lenne a legjobb a grafikus felületet automatikusan indítani egy adott app-al? Az rc.local-ból indítsam Xorg-al v. xinit-el?
Most root-ként elindítva az Xorg-ot nem látok semmit (fekete marad a képernyő). (Egyelőre az Xorg-ot próbálom elindítani.)
~# cat Xorg.0.log
[ 941.487]
X.Org X Server 1.16.4
Release Date: 2014-12-20
[ 941.508] X Protocol Version 11, Revision 0
[ 941.515] Build Operating System: Linux 3.19.3-200.fc21.x86_64 x86_64
[ 941.522] Current Operating System: Linux buildroot 3.18.8 #1 PREEMPT Thu Apr 9 10:39:36 CEST 2015 armv6l
[ 941.522] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080 bcm2708.boardrev=0x10 bcm2708.serial=0x7cdb4fc9 smsc95xx.macaddr=B8:27:EB:DB:4F:C9 bcm2708_fb.fbswap=1 bcm2708.disk_led_gpio=47 bcm2708.disk_led_active_low=0 sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 dwc_otg.fiq_fix_enable=1 sdhci-bcm2708.sync_after_dma=0 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootwait quiet
[ 941.546] Build Date: 09 April 2015 10:25:03AM
[ 941.554]
[ 941.561] Current version of pixman: 0.32.6
[ 941.577] Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
[ 941.577] Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[ 941.609] (==) Log file: "/var/log/Xorg.0.log", Time: Thu Jan 1 00:15:41 1970
[ 941.611] (II) Loader magic: 0x181838
[ 941.611] (II) Module ABI versions:
[ 941.611] X.Org ANSI C Emulation: 0.4
[ 941.611] X.Org Video Driver: 18.0
[ 941.611] X.Org XInput driver : 21.0
[ 941.611] X.Org Server Extension : 8.0
[ 941.619] (==) Using default built-in configuration (21 lines)
[ 941.619] (==) --- Start of built-in configuration ---
[ 941.619] Section "Device"
[ 941.620] Identifier "Builtin Default modesetting Device 0"
[ 941.620] Driver "modesetting"
[ 941.620] EndSection
[ 941.620] Section "Screen"
[ 941.620] Identifier "Builtin Default modesetting Screen 0"
[ 941.620] Device "Builtin Default modesetting Device 0"
[ 941.620] EndSection
[ 941.620] Section "Device"
[ 941.620] Identifier "Builtin Default fbdev Device 0"
[ 941.621] Driver "fbdev"
[ 941.621] EndSection
[ 941.621] Section "Screen"
[ 941.621] Identifier "Builtin Default fbdev Screen 0"
[ 941.621] Device "Builtin Default fbdev Device 0"
[ 941.621] EndSection
[ 941.621] Section "ServerLayout"
[ 941.621] Identifier "Builtin Default Layout"
[ 941.621] Screen "Builtin Default modesetting Screen 0"
[ 941.621] Screen "Builtin Default fbdev Screen 0"
[ 941.621] EndSection
[ 941.621] (==) --- End of built-in configuration ---
[ 941.622] (==) ServerLayout "Builtin Default Layout"
[ 941.622] (**) |-->Screen "Builtin Default modesetting Screen 0" (0)
[ 941.622] (**) | |-->Monitor ""
[ 941.624] (**) | |-->Device "Builtin Default modesetting Device 0"
[ 941.624] (==) No monitor specified for screen "Builtin Default modesetting Screen 0".
Using a default monitor configuration.
[ 941.624] (**) |-->Screen "Builtin Default fbdev Screen 0" (1)
[ 941.624] (**) | |-->Monitor ""
[ 941.625] (**) | |-->Device "Builtin Default fbdev Device 0"
[ 941.625] (==) No monitor specified for screen "Builtin Default fbdev Screen 0".
Using a default monitor configuration.
[ 941.625] (==) Not automatically adding devices
[ 941.626] (==) Not automatically enabling devices
[ 941.626] (==) Not automatically adding GPU devices
[ 941.626] (WW) The directory "/usr/share/fonts/X11//TTF/" does not exist.
[ 941.626] Entry deleted from font path.
[ 941.626] (WW) The directory "/usr/share/fonts/X11//OTF/" does not exist.
[ 941.626] Entry deleted from font path.
[ 941.626] (WW) The directory "/usr/share/fonts/X11//Type1/" does not exist.
[ 941.626] Entry deleted from font path.
[ 941.627] (WW) `fonts.dir' not found (or not valid) in "/usr/share/fonts/X11//100dpi/".
[ 941.627] Entry deleted from font path.
[ 941.627] (Run 'mkfontdir' on "/usr/share/fonts/X11//100dpi/").
[ 941.627] (WW) `fonts.dir' not found (or not valid) in "/usr/share/fonts/X11//75dpi/".
[ 941.627] Entry deleted from font path.
[ 941.627] (Run 'mkfontdir' on "/usr/share/fonts/X11//75dpi/").
[ 941.627] (==) FontPath set to:
/usr/share/fonts/X11//misc/
[ 941.627] (==) ModulePath set to "/usr/lib/xorg/modules"
[ 941.627] (==) |-->Input Device ""
[ 941.627] (==) |-->Input Device ""
[ 941.627] (==) The core pointer device wasn't specified explicitly in the layout.
Using the default mouse configuration.
[ 941.628] (==) The core keyboard device wasn't specified explicitly in the layout.
Using the default keyboard configuration.
[ 941.628] (II) LoadModule: "modesetting"
[ 941.632] (WW) Warning, couldn't open module modesetting
[ 941.632] (II) UnloadModule: "modesetting"
[ 941.632] (II) Unloading modesetting
[ 941.632] (EE) Failed to load module "modesetting" (module does not exist, 0)
[ 941.633] (II) LoadModule: "fbdev"
[ 941.634] (II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
[ 941.635] (II) Module fbdev: vendor="X.Org Foundation"
[ 941.635] compiled for 1.16.4, module version = 0.4.4
[ 941.635] Module class: X.Org Video Driver
[ 941.635] ABI class: X.Org Video Driver, version 18.0
[ 941.635] (II) LoadModule: "mouse"
[ 941.636] (II) Loading /usr/lib/xorg/modules/input/mouse_drv.so
[ 941.638] (II) Module mouse: vendor="X.Org Foundation"
[ 941.638] compiled for 1.16.4, module version = 1.9.1
[ 941.638] Module class: X.Org XInput Driver
[ 941.638] ABI class: X.Org XInput driver, version 21.0
[ 941.638] (II) LoadModule: "kbd"
[ 941.639] (II) Loading /usr/lib/xorg/modules/input/kbd_drv.so
[ 941.640] (II) Module kbd: vendor="X.Org Foundation"
[ 941.641] compiled for 1.16.4, module version = 1.8.0
[ 941.641] Module class: X.Org XInput Driver
[ 941.641] ABI class: X.Org XInput driver, version 21.0
[ 941.641] (II) FBDEV: driver for framebuffer: fbdev
[ 941.641] (--) using VT number 2
[ 941.666] (WW) Falling back to old probe method for fbdev
[ 941.666] (II) Loading sub module "fbdevhw"
[ 941.666] (II) LoadModule: "fbdevhw"
[ 941.667] (II) Loading /usr/lib/xorg/modules/libfbdevhw.so
[ 941.668] (II) Module fbdevhw: vendor="X.Org Foundation"
[ 941.669] compiled for 1.16.4, module version = 0.0.2
[ 941.669] ABI class: X.Org Video Driver, version 18.0
[ 941.669] (II) FBDEV(0): using default device
[ 941.670] (WW) VGA arbiter: cannot open kernel arbiter, no multi-card support
[ 941.671] (II) FBDEV(0): Creating default Display subsection in Screen section
"Builtin Default fbdev Screen 0" for depth/fbbpp 16/16
[ 941.671] (==) FBDEV(0): Depth 16, (==) framebuffer bpp 16
[ 941.671] (==) FBDEV(0): RGB weight 565
[ 941.671] (==) FBDEV(0): Default visual is TrueColor
[ 941.671] (==) FBDEV(0): Using gamma correction (1.0, 1.0, 1.0)
[ 941.671] (II) FBDEV(0): hardware: BCM2708 FB (video memory: 4050kB)
[ 941.672] (II) FBDEV(0): checking modes against framebuffer device...
[ 941.672] (II) FBDEV(0): checking modes against monitor...
[ 941.672] (--) FBDEV(0): Virtual size is 1920x1080 (pitch 1920)
[ 941.672] (**) FBDEV(0): Built-in mode "current"
[ 941.672] (==) FBDEV(0): DPI set to (96, 96)
[ 941.672] (II) Loading sub module "fb"
[ 941.672] (II) LoadModule: "fb"
[ 941.674] (II) Loading /usr/lib/xorg/modules/libfb.so
[ 941.678] (II) Module fb: vendor="X.Org Foundation"
[ 941.678] compiled for 1.16.4, module version = 1.0.0
[ 941.678] ABI class: X.Org ANSI C Emulation, version 0.4
[ 941.678] (**) FBDEV(0): using shadow framebuffer
[ 941.678] (II) Loading sub module "shadow"
[ 941.679] (II) LoadModule: "shadow"
[ 941.680] (II) Loading /usr/lib/xorg/modules/libshadow.so
[ 941.681] (II) Module shadow: vendor="X.Org Foundation"
[ 941.681] compiled for 1.16.4, module version = 1.1.0
[ 941.681] ABI class: X.Org ANSI C Emulation, version 0.4
[ 941.685] (==) FBDEV(0): Backing store disabled
[ 941.686] (==) FBDEV(0): DPMS enabled
[ 941.687] (==) RandR enabled
[ 942.167] (II) Using input driver 'mouse' for ''
[ 942.167] (**) Option "CorePointer" "on"
[ 942.168] (**) : always reports core events
[ 942.168] (WW) : No Device specified, looking for one...
[ 942.220] (II) : Setting Device option to "/dev/input/mice"
[ 942.220] (--) : Device: "/dev/input/mice"
[ 942.220] (==) : Protocol: "Auto"
[ 942.220] (**) : always reports core events
[ 942.220] (**) Option "Device" "/dev/input/mice"
[ 942.280] (==) : Emulate3Buttons, Emulate3Timeout: 50
[ 942.280] (**) : ZAxisMapping: buttons 4 and 5
[ 942.280] (**) : Buttons: 9
[ 942.280] (II) XINPUT: Adding extended input device "" (type: MOUSE, id 6)
[ 942.281] (**) : (accel) keeping acceleration scheme 1
[ 942.281] (**) : (accel) acceleration profile 0
[ 942.282] (**) : (accel) acceleration factor: 2.000
[ 942.282] (**) : (accel) acceleration threshold: 4
[ 942.282] (II) : Setting mouse protocol to "ExplorerPS/2"
[ 942.576] (II) : ps2EnableDataReporting: succeeded
[ 942.576] (II) Using input driver 'kbd' for ''
[ 942.577] (**) Option "CoreKeyboard" "on"
[ 942.577] (**) : always reports core events
[ 942.577] (**) : always reports core events
[ 942.577] (**) Option "Protocol" "standard"
[ 942.577] (**) Option "XkbRules" "base"
[ 942.577] (**) Option "XkbModel" "pc105"
[ 942.578] (**) Option "XkbLayout" "us"
[ 942.578] (II) XINPUT: Adding extended input device "" (type: KEYBOARD, id 7)
[ 956.189] (II) : ps2EnableDataReporting: succeeded
[ 967.198] (II) UnloadModule: "kbd"
[ 967.198] (II) UnloadModule: "mouse"
[ 967.206] (EE) Server terminated successfully (0). Closing log file.
A modesetting ill a fontokat irogatja...
Igaz az "xinit /path/to/opencv" demo app indul. Bár billentyűleütésre ki kellene lépnie az alkalmazásból.
- A hozzászóláshoz be kell jelentkezni
Biztos kell neked az az X11? Engem még mindég nem győztél meg.
http://blog.galemin.com/2011/03/how-to-build-qt-framework-4-7-2-and-ope…
- A hozzászóláshoz be kell jelentkezni
XDM-et miért fordítasz bele? Kell valamire?
- A hozzászóláshoz be kell jelentkezni
Egyelőre próbálkozom, tesztelek. Az optimális megoldást keresem. :)
Az mondod, hogy inkább kapcsoljam ki az Xorg/X11-t és a "Graphic drivers" részben csak a "Linux Framebuffer"-t tegyem be?
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy jobban jársz vele, szerintem érdemes megpróbálni, az X11 IMHO nem annyira embedded. HW gyorsítás persze jó kérdés, hogy lesz-e, ebben most nem vagyok biztos, ki kell próbálni.
- A hozzászóláshoz be kell jelentkezni
A FrameBuffer miatt a Qt alkalmazást egy kicsit át kell írni, ha jól sejtem.
- A hozzászóláshoz be kell jelentkezni
Ez alapján fordítottam egy cross compile qttest app-ot.
Kihasználtam, hogy a hosztgépen van a buildroot/output/target RPi rendszer.
Le is fordult következő Makefile-al:
~# cat Makefile
# ---------------------------------------------------------------
CXX=/home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++
INCLUDEDIR = ./
INCLUDEDIR += /usr/include/Qt/
INCLUDEDIR += /usr/include/QtGui
INCLUDEDIR += /usr/include/QtCore
LIBRARYDIR = /home/admin/buildroot-2015.02/output/target/usr/lib
LIBRARY += QtCore QtGui
XLINK_LIBDIR += /home/admin/buildroot-2015.02/output/target/usr/lib
XLINK_LIBDIR += /home/admin/buildroot-2015.02/output/target/lib
INCDIR = $(patsubst %,-I%,$(INCLUDEDIR))
LIBDIR = $(patsubst %,-L%,$(LIBRARYDIR))
LIB = $(patsubst %,-l%,$(LIBRARY))
XLINKDIR = $(patsubst %,-Xlinker -rpath-link=%,$(XLINK_LIBDIR))
OPT = -O0
DEBUG = -g
WARN= -Wall
PTHREAD= -pthread
CXXFLAGS= $(OPT) $(DEBUG) $(WARN) $(INCDIR)
LDFLAGS= $(LIBDIR) $(LIB) $(XLINKDIR) $(PTHREAD)
INC = qttest.h
SRC = main.cpp qttest.cpp
OBJ = $(SRC:.cpp=.o) $(INC:.h=.moc.o)
TARGET_BIN = qttest.bin
all: $(OBJ)
$(CXX) $(LDFLAGS) $(OBJ) -o $(TARGET_BIN)
%.moc.cpp: $(INC)
moc-qt4 $< -o $@
%.o:%.cpp
$(CXX) $(CXXFLAGS) -c $<
clean:
-rm *.o
-rm $(TARGET_BIN)
# ---------------------------------------------------------------
A buildroot-olt, éles RPi-n az X serverhez akar kapcsolódni a prg:
qttest.bin: cannot connect to X server
A target-en qt-embedded van. Mi kellene, hogy a framebuffert használó qt-embedded-el működjön?
- A hozzászóláshoz be kell jelentkezni
Hogyan adhatom meg a qt project-nek (v. a Makefile-ban), hogy a (RPi-n; pontosabban az output/target alatt levő) qt-embedded-et használja fordításkor?
- A hozzászóláshoz be kell jelentkezni
Megvan. Ha pl. a buildroot-on levő útvonalon a buildroot-al fordított qt-embedded van, akkor azzal fordítja:
/home/admin/buildroot-2015.02/output/target/usr/lib
/home/admin/buildroot-2015.02/output/target/lib
A qttest alkalmazás fut is a buildroot RPi-n a framebuffer TFT kijelzőn (adafruit 1601):
qttest.bin -qws -keyboard -mouse -display "LinuxFb:/dev/fb1:0" -geometry 320x240+0+0
http://doc.qt.io/qt-4.8/qt-embedded-running.html
http://doc.qt.io/qt-4.8/qt-embedded-displaymanagement.html
:)
(Bár a billentyűre nem reagál, pedig kellene.)
- A hozzászóláshoz be kell jelentkezni
Elvileg be lehetne állítani e szerint: http://doc.qt.digia.com/4.6/qt-embedded-envvars.html
Bill.:
export QWS_KEYBOARD=< driver >[:< driver specific options >]
pl.:
export QWS_KEYBOARD=USB:/dev/ttyUSB0
Csakhogy nincs ttyUSB0 eszközfájl. Ilyen egér device van egyébként:
/dev/input/mice
/dev/input/mouse0
A billentyűzetre milyen eszközfájlt tudok használni? Az RPi-n megy az USB billentyű, csak mivel tudok rá hivatkozni?
- A hozzászóláshoz be kell jelentkezni
Van ötlete valakinek, hogy a buildroot-ban hogyan tudnám a kernelbe tenni az Adafruit 1601 TFT-t? (frambuffer, Xorg nélkül)
Kernel config-om eddig itt.
- A hozzászóláshoz be kell jelentkezni
Én ennek a kapacitív verzióját használom egy régebbi adafruitos kernellel:
lsmod|grep fbtft
fbtft_device 28788 0
fbtft 31153 2 fb_ili9340,fbtft_device
syscopyarea 3135 1 fbtft
sysfillrect 3301 1 fbtft
sysimgblt 2194 1 fbtft
fb_sys_fops 1403 1 fbtft
Ha minden igaz ezek a modulok kellenek hozzá, meg a touch driver, bármi legyen is az (nálam ft6x06_ts). Elvileg az fbtft már mergelve van a raspberry pi kernelbe.
- A hozzászóláshoz be kell jelentkezni
Így sikerült működésre bírni a TFT-t buildroot-on:
* A "start_x=1" opció a /boot/config.txt-ben célszerű.
* A /boot/config.txt-ben:
[pi1]
device_tree=bcm2708-rpi-b-plus.dtb
[pi2]
device_tree=bcm2709-rpi-2-b.dtb
[all]
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c_arm=on
dtoverlay=pitft28r,rotate=90,speed=32000000,fps=20
* Egy korábbi 3.12.26+ kernellel (raspbian-ból kiszedve) működik (sajnos a kernel config fájlja nincs meg. :()
* Az /etc/init.d/S99autoloadmodules script:
#!/bin/sh
#
# Start the autoload modules....
#
CONFIG_FILE=/etc/modules
case "$1" in
start)
echo "Starting autoload modules..."
while read l;
do
modprobe "$l"
done< $CONFIG_FILE
;;
stop)
echo "Modules removing..."
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
* Az /etc/modules fájlba:
bcm2835-v4l2
spi-bcm2708
fb_ili9340
fbtft_device
* Az /etc/modprobe.d/adafruit.conf fájlba:
options fbtft_device name=adafruitrt28 rotate=90 frequency=32000000
Ez utóbbi volt asszem a lényeg, hogy csak az "adafruitrt28" opcióval működött. Az újabb kernelekben nem lehetett használni ezt a beállítást ("not supported" üzenet).
- A hozzászóláshoz be kell jelentkezni
Ha még hozzáférsz könnyen az újabb kernelekhez, érdemes lehet megnézni miket ismer az fbtft_device:
sudo modprobe fbtft_device name=list; dmesg | tail -30
Ha csak az adafruitrt28-at nem tudja, meg lehet próbálni custom-ként beállítani (valahogy meg lehet adni melyik gpio-ra van kötve, milyen chip, stb).
De azt se tartom kizártnak, hogy az fbtft_device modul megszűnőfélben van, mert ha jól értem csak annyit csinál, hogy betölti a megfelelő modult (itt pl az fb_ili9340-et) a megfelelő paraméterezéssel (melyik gpio-n mi van). De erre alkalmasabbnak tűnik a device tree, amit ha jól tudom mostmár támogat a raspi kernel.
Ajánlott olvasmány, csak nem tudom mennyire érvényes még :S
- A hozzászóláshoz be kell jelentkezni
Igen, a notro féle fbtft bekerült a kernelbe, igaz még csak staging állapotban. Raspbianban egy rpi-update után felkerülő legfrissebb kernelben már ott vannak a modulok. Egyetlen problémát találtam csak ezzel. Amennyiben más CE vezetéken akarod engedélyezni az SPI kommunikációt, azt csak a klasszikus kernel modulban teheted meg, device tree-ben nem. Miért lehet erre szükség? Mi néhány PiFace Digital 2 boardot módosítottunk úgy, hogy rá lehessen ültetni egy másik PiFace Digital 2-t, vagy egy kijelzőt. Ám amíg a PiFace-t támogatják, hogy közös CE-t használjanak, addig a kijelző már nem. És persze mindegyik a CE0-t akarja használni.
Megoldásnak azt találtam, hogy a kijelző felé vezető tüskesorból kivágtam a CE0-t és a kijelzőn összeforrasztottam a CE0-t a CE1-el. Utána már csak a kernelmodulnak kellett megmondani, hogy a kijelzőt a CE1-en találja, nem a CE0-n. (persze így meg a kijelző és az érintő része osztozik a CE1-n, de ezt az áldozatot el tudtuk fogadni, az érintés érzékelőt nem használjuk)
Ave, Saabi.
- A hozzászóláshoz be kell jelentkezni
Ez elég meglepő, biztos vagy benne? Pl ez a dts láthatóan külön spi device-t használ a touch felülethez meg a kijelzőhöz:
https://github.com/raspberrypi/linux/blob/025bcc9d8f595734bcc8d4fc96533…
- A hozzászóláshoz be kell jelentkezni
Mármint miben? Hogy nem tudom megmondani DT-ben, hogy a display driver melyik CE-t használja? Nem vagyok biztos benne, csak még nem találtam rá választ.
Ave, Saabi.
- A hozzászóláshoz be kell jelentkezni
Igen. Amit linkeltem az nem jó? Nem teljesen értem a dts szintaktikát, de azt tudom, hogy a linux spidev0.1-en (bus 0, device 1) "címzi" a CE1-et, és nagyon úgy látszik, hogy ebben ilyesmi van.
- A hozzászóláshoz be kell jelentkezni
Ki fogom próbálni, tetszene, ha így működne...
- A hozzászóláshoz be kell jelentkezni
A wiringPi-t szeretném betenni a buildroot-ba:
Addig el is jutok, hogy:
* Könyvárat létrehoztam: BUILDROOT/package/wiringpi
Tartalma:
Config.in
COPYING.LESSER
drcSerial.c
drcSerial.h
Makefile
max31855.c
max31855.h
max5322.c
max5322.h
mcp23008.c
mcp23008.h
mcp23016.c
mcp23016.h
mcp23016reg.h
mcp23017.c
mcp23017.h
mcp23s08.c
mcp23s08.h
mcp23s17.c
mcp23s17.h
mcp23x0817.h
mcp23x08.h
mcp3002.c
mcp3002.h
mcp3004.c
mcp3004.h
mcp3422.c
mcp3422.h
mcp4802.c
mcp4802.h
pcf8574.c
pcf8574.h
pcf8591.c
pcf8591.h
piHiPri.c
piThread.c
sn3218.c
sn3218.h
softPwm.c
softPwm.h
softServo.c
softServo.h
softTone.c
softTone.h
sr595.c
sr595.h
wiringPi.c
wiringPi.h
wiringPiI2C.c
wiringPiI2C.h
wiringPiSPI.c
wiringPiSPI.h
wiringSerial.c
wiringSerial.h
wiringShift.c
wiringShift.h
* A wiringPi Makefile fájlja:
#################################################################################
DYN_VERS_MAJ=2
DYN_VERS_MIN=0
VERSION=$(DYN_VERS_MAJ).$(DYN_VERS_MIN)
DESTDIR=/usr
PREFIX=/local
STATIC=libwiringPi.a
DYNAMIC=libwiringPi.so.$(VERSION)
#DEBUG = -g -O0
DEBUG = -O2
CC = gcc
INCLUDE = -I.
DEFS = -D_GNU_SOURCE
CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC
LIBS =
SRC = wiringPi.c \
wiringSerial.c wiringShift.c \
piHiPri.c piThread.c \
wiringPiSPI.c wiringPiI2C.c \
softPwm.c softTone.c \
mcp23008.c mcp23016.c mcp23017.c \
mcp23s08.c mcp23s17.c \
sr595.c \
pcf8574.c pcf8591.c \
mcp3002.c mcp3004.c mcp4802.c mcp3422.c \
max31855.c max5322.c \
sn3218.c \
drcSerial.c
OBJ = $(SRC:.c=.o)
all: $(DYNAMIC)
static: $(STATIC)
$(STATIC): $(OBJ)
@echo "[Link (Static)]"
@ar rcs $(STATIC) $(OBJ)
@ranlib $(STATIC)
# @size $(STATIC)
$(DYNAMIC): $(OBJ)
@echo "[Link (Dynamic)]"
@$(CC) -shared -Wl,-soname,libwiringPi.so -o libwiringPi.so.$(VERSION) -lpthread $(OBJ)
.c.o:
@echo [Compile] $<
@$(CC) -c $(CFLAGS) $< -o $@
.PHONEY: clean
clean:
@echo "[Clean]"
@rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.*
.PHONEY: tags
tags: $(SRC)
@echo [ctags]
@ctags $(SRC)
.PHONEY: install-headers
install-headers:
@echo "[Install Headers]"
@install -m 0755 -d $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringPi.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringSerial.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringShift.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 softPwm.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 softTone.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringPiSPI.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringPiI2C.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 drcSerial.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23008.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23016.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23017.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23s08.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23s17.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 max31855.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 max5322.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp3002.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp3004.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp4802.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp3422.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 sr595.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 pcf8574.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 pcf8591.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 sn3218.h $(DESTDIR)$(PREFIX)/include
.PHONEY: install
install: $(DYNAMIC) install-headers
@echo "[Install Dynamic Lib]"
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
@install -m 0755 libwiringPi.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)
@ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so
@ldconfig
.PHONEY: install-static
install-static: $(STATIC) install-headers
@echo "[Install Static Lib]"
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
@install -m 0755 libwiringPi.a $(DESTDIR)$(PREFIX)/lib
.PHONEY: uninstall
uninstall:
@echo "[UnInstall]"
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPi.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringSerial.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringShift.h
@rm -f $(DESTDIR)$(PREFIX)/include/softPwm.h
@rm -f $(DESTDIR)$(PREFIX)/include/softTone.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiSPI.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiI2C.h
@rm -f $(DESTDIR)$(PREFIX)/include/drcSerial.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23008.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23016.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23017.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s08.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s17.h
@rm -f $(DESTDIR)$(PREFIX)/include/max31855.h
@rm -f $(DESTDIR)$(PREFIX)/include/max5322.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3002.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3004.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp4802.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3422.h
@rm -f $(DESTDIR)$(PREFIX)/include/sr595.h
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8574.h
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8591.h
@rm -f $(DESTDIR)$(PREFIX)/include/sn3218.h
@rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPi.*
@ldconfig
.PHONEY: depend
depend:
makedepend -Y $(SRC) $(SRC_I2C)
# DO NOT DELETE
wiringPi.o: softPwm.h softTone.h wiringPi.h
wiringSerial.o: wiringSerial.h
wiringShift.o: wiringPi.h wiringShift.h
piHiPri.o: wiringPi.h
piThread.o: wiringPi.h
wiringPiSPI.o: wiringPi.h wiringPiSPI.h
wiringPiI2C.o: wiringPi.h wiringPiI2C.h
softPwm.o: wiringPi.h softPwm.h
softTone.o: wiringPi.h softTone.h
mcp23008.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23008.h
mcp23016.o: wiringPi.h wiringPiI2C.h mcp23016.h mcp23016reg.h
mcp23017.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23017.h
mcp23s08.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s08.h
mcp23s17.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s17.h
sr595.o: wiringPi.h sr595.h
pcf8574.o: wiringPi.h wiringPiI2C.h pcf8574.h
pcf8591.o: wiringPi.h wiringPiI2C.h pcf8591.h
mcp3002.o: wiringPi.h wiringPiSPI.h mcp3002.h
mcp3004.o: wiringPi.h wiringPiSPI.h mcp3004.h
mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h
mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h
max31855.o: wiringPi.h wiringPiSPI.h max31855.h
max5322.o: wiringPi.h wiringPiSPI.h max5322.h
sn3218.o: wiringPi.h wiringPiI2C.h sn3218.h
drcSerial.o: wiringPi.h wiringSerial.h drcSerial.h
###############################################################################
* A Config.in fájlt létrehoztam package/wiringpi könyvtár alatt:
config BR2_PACKAGE_WIRINGPI
bool "wiringPi"
help
WiringPi library for RaspberryPi GPIO, serial... ports
* A BUILDROOT/package/Config.in fájlhoz betettem:
menu "Development tools"
source "package/wiringpi/Config.in"
A make xconfig-ban meg is jelenik a wiringPi, be is lehet check-olni.
Most hogyan tudom újrafordítani ezt a csomagot?
http://buildroot.uclibc.org/downloads/manual/manual.html#rebuild-pkg
Ha a csomag könyvtárában adom ki a "make" parancsot, akkor egy hoszt fordítást csinál (azaz x64-re lefordította).
Hogyan tudom buildroot-tal arm-ra fordítani?
update:
Egy package/wiringpi/wiringpi.mk fájlt kellene létehozni, ami a letöltést, fordítást írja le.
- A hozzászóláshoz be kell jelentkezni
Nem "szenvedek" a .mk fájllal, keresztfordítom a wiringPi-t:
~$ cat Makefile
#################################################################################
DYN_VERS_MAJ=2
DYN_VERS_MIN=0
VERSION=$(DYN_VERS_MAJ).$(DYN_VERS_MIN)
DESTDIR=/usr
PREFIX=/local
STATIC=libwiringPi.a
DYNAMIC=libwiringPi.so.$(VERSION)
#DEBUG = -g -O0
DEBUG = -O2
CC = /home/admin/buildroot-2015.02/output/host/usr/bin/arm-buildroot-linux-gnueabi-g++
#CC = gcc
INCLUDE = -I.
DEFS = -D_GNU_SOURCE
CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC
#LIBS
LIBS = -L/home/admin/buildroot-2015.02/output/target/usr/lib
###############################################################################
SRC = wiringPi.c \
wiringSerial.c wiringShift.c \
piHiPri.c piThread.c \
wiringPiSPI.c wiringPiI2C.c \
softPwm.c softTone.c \
mcp23008.c mcp23016.c mcp23017.c \
mcp23s08.c mcp23s17.c \
sr595.c \
pcf8574.c pcf8591.c \
mcp3002.c mcp3004.c mcp4802.c mcp3422.c \
max31855.c max5322.c \
sn3218.c \
drcSerial.c
OBJ = $(SRC:.c=.o)
all: $(DYNAMIC)
static: $(STATIC)
$(STATIC): $(OBJ)
@echo "[Link (Static)]"
@ar rcs $(STATIC) $(OBJ)
@ranlib $(STATIC)
# @size $(STATIC)
$(DYNAMIC): $(OBJ)
@echo "[Link (Dynamic)]"
@$(CC) -shared -Wl,-soname,libwiringPi.so -o libwiringPi.so.$(VERSION) -lpthread $(OBJ)
.c.o:
@echo [Compile] $<
@$(CC) -c $(CFLAGS) $< -o $@
.PHONEY: clean
clean:
@echo "[Clean]"
@rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.*
.PHONEY: tags
tags: $(SRC)
@echo [ctags]
@ctags $(SRC)
.PHONEY: install-headers
install-headers:
@echo "[Install Headers]"
@install -m 0755 -d $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringPi.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringSerial.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringShift.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 softPwm.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 softTone.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringPiSPI.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 wiringPiI2C.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 drcSerial.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23008.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23016.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23017.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23s08.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp23s17.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 max31855.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 max5322.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp3002.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp3004.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp4802.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 mcp3422.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 sr595.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 pcf8574.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 pcf8591.h $(DESTDIR)$(PREFIX)/include
@install -m 0644 sn3218.h $(DESTDIR)$(PREFIX)/include
.PHONEY: install
install: $(DYNAMIC) install-headers
@echo "[Install Dynamic Lib]"
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
@install -m 0755 libwiringPi.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)
@ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so
@ldconfig
.PHONEY: install-static
install-static: $(STATIC) install-headers
@echo "[Install Static Lib]"
@install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
@install -m 0755 libwiringPi.a $(DESTDIR)$(PREFIX)/lib
.PHONEY: uninstall
uninstall:
@echo "[UnInstall]"
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPi.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringSerial.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringShift.h
@rm -f $(DESTDIR)$(PREFIX)/include/softPwm.h
@rm -f $(DESTDIR)$(PREFIX)/include/softTone.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiSPI.h
@rm -f $(DESTDIR)$(PREFIX)/include/wiringPiI2C.h
@rm -f $(DESTDIR)$(PREFIX)/include/drcSerial.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23008.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23016.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23017.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s08.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp23s17.h
@rm -f $(DESTDIR)$(PREFIX)/include/max31855.h
@rm -f $(DESTDIR)$(PREFIX)/include/max5322.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3002.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3004.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp4802.h
@rm -f $(DESTDIR)$(PREFIX)/include/mcp3422.h
@rm -f $(DESTDIR)$(PREFIX)/include/sr595.h
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8574.h
@rm -f $(DESTDIR)$(PREFIX)/include/pcf8591.h
@rm -f $(DESTDIR)$(PREFIX)/include/sn3218.h
@rm -f $(DESTDIR)$(PREFIX)/lib/libwiringPi.*
@ldconfig
.PHONEY: depend
depend:
makedepend -Y $(SRC) $(SRC_I2C)
# DO NOT DELETE
wiringPi.o: softPwm.h softTone.h wiringPi.h
wiringSerial.o: wiringSerial.h
wiringShift.o: wiringPi.h wiringShift.h
piHiPri.o: wiringPi.h
piThread.o: wiringPi.h
wiringPiSPI.o: wiringPi.h wiringPiSPI.h
wiringPiI2C.o: wiringPi.h wiringPiI2C.h
softPwm.o: wiringPi.h softPwm.h
softTone.o: wiringPi.h softTone.h
mcp23008.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23008.h
mcp23016.o: wiringPi.h wiringPiI2C.h mcp23016.h mcp23016reg.h
mcp23017.o: wiringPi.h wiringPiI2C.h mcp23x0817.h mcp23017.h
mcp23s08.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s08.h
mcp23s17.o: wiringPi.h wiringPiSPI.h mcp23x0817.h mcp23s17.h
sr595.o: wiringPi.h sr595.h
pcf8574.o: wiringPi.h wiringPiI2C.h pcf8574.h
pcf8591.o: wiringPi.h wiringPiI2C.h pcf8591.h
mcp3002.o: wiringPi.h wiringPiSPI.h mcp3002.h
mcp3004.o: wiringPi.h wiringPiSPI.h mcp3004.h
mcp4802.o: wiringPi.h wiringPiSPI.h mcp4802.h
mcp3422.o: wiringPi.h wiringPiI2C.h mcp3422.h
max31855.o: wiringPi.h wiringPiSPI.h max31855.h
max5322.o: wiringPi.h wiringPiSPI.h max5322.h
sn3218.o: wiringPi.h wiringPiI2C.h sn3218.h
drcSerial.o: wiringPi.h wiringSerial.h drcSerial.h
#################################################################################
Ezzel le is fordult. :)
- A hozzászóláshoz be kell jelentkezni
Mi az a .PHONEY? (azon kívül, hogy marhaság...)
- A hozzászóláshoz be kell jelentkezni
nem tudom én se. :)
- A hozzászóláshoz be kell jelentkezni
Na, azt látom. Csinálj egy clean nevű üres file-t a forrásfában, és adj ki egy make clean-t.
Aztán olvasd el, hogy mit jelent a .PHONY ("e" nélkül)
- A hozzászóláshoz be kell jelentkezni
-
- A hozzászóláshoz be kell jelentkezni
subscribe
* Én egy indián vagyok. Minden indián hazudik.
- A hozzászóláshoz be kell jelentkezni