Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: kapetr 17. 11. 2014, 15:54:59
-
Zdravím.
Jakožto pouhý uživatel Linuxu se ve vývojářských nástrojích nevyznám a potřebuji radu.
Pro svůj USB DVB-T tuner jsem si dosud úspěšně překládal ovladač/modul sekvencí příkazů:
git clone --depth=1 git://linuxtv.org/media_build.git
cd media-build
./build
sudo make instal
Jenže po posledním udate jádra jsem provedl totéž a zjistil, že modul který potřebuji není (na rozdíl od jiných) překládán. Nevěděl jsem proč. Až na chatu mi poradili, že mám dost staré jádro (3.2).
Zdá se, že problém je v tom, že vývojáři V4L udělali v "mém" ovladači změnu, která vyžaduje jádro min v. 3.4.
Ale já nechci upgrade distribuce - tudíž se snažím marně zjistit, jak získat verzi V4L zdrojáků před tou změnou.
Čili něco místo toho:
git clone --depth=1 git://linuxtv.org/media_build.git
co by stáhlo verzi např. před 4 měsíci.
viz: http://linuxtv.org/
Díky za rady :-)
-
git checkout _hash commitu_
hash mozes najst cez git log alebo si vycheckoutuj nejaky tag (git checkout _tag_), najdi tag cez git tag -l
-
hash najdes tady http://git.linuxtv.org/cgit.cgi/media_build.git/log/
-
Díky, ale potřeboval bych detailní postup "pro blbý".
Na http://git.linuxtv.org/cgit.cgi/media_build.git/log/
si zvolím třeba 2014-09-23:
http://git.linuxtv.org/cgit.cgi/media_build.git/commit/?id=66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
tam je commit: 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
A teď co. Co, odkud, jakým příkazem mám stáhnout ?
git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
mi těžko něco stáhne.
A git clone --depth=1 git://linuxtv.org/media_build.git mi stáhne jen nejnovější verzi, ne ?
A bez "--depth=1" to stahovat nemohu - nemám místo na disku.
-
Musíš to stáhnout bez --depth=1. Klidně na jiném počítači, kde máš místo.
git clone git://linuxtv.org/media_build.git
cd media-build
Stáhne všechny verze
git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
Přepne se na vybranou verzi.
Teď můžeš zkopírovat všechny soubory z té složky (kromě složky .git) třeba na flashku a přenést je do počítače, kde chceš kompilovat.
Tam je z flashky zkopíruješ na disk a použiješ
./build
make install
-
Děkuji. Jakmile budu moci, vyzkouším.
-
vono bez toho depth te to vo moc mista vic stat ani nebude, git to komprimuje
-
Zdar,
malo by fungovat
git fetch <origin url> <sha>[:remoteBranch]
git fetch --depth=1 git://linuxtv.org/media_build.git 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
-
1. - MartinP Tak to nepomohlo - stahuje totéž, co bez "--depth=1".
git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
sice nezahlásí chybu, ale je bez efektu - stejný průběh překladu - dez modulu, co potřebuji.
2. Zkusil jsem stáhnout (asi celý ?) git dle instrukcí:
http://linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers
Po několika hodinách stahování ...
tedy:~ $ git clone git://linuxtv.org/media_build.git
~ $ cd media_build
~/media_build $./build --main-git
ale už u patchů to skončilo s chybami, s nimiž si nevím rady.
git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e ani ruční odebrání patchů nepomohlo.
:/mnt/x/media_build$ make all
make -C /mnt/x/media_build/v4l all
make[1]: Entering directory `/mnt/x/media_build/v4l'
perl scripts/make_config_compat.pl /lib/modules/3.2.0-70-generic/build ./.myconfig ./config-compat.h
creating symbolic links...
make -C firmware prep
make[2]: Entering directory `/mnt/x/media_build/v4l/firmware'
make[2]: Leaving directory `/mnt/x/media_build/v4l/firmware'
make -C firmware
make[2]: Entering directory `/mnt/x/media_build/v4l/firmware'
CC ihex2fw
Generating vicam/firmware.fw
Generating ttusb-budget/dspbootcode.bin
Generating cpia2/stv0672_vp4.bin
Generating av7110/bootcode.bin
make[2]: Leaving directory `/mnt/x/media_build/v4l/firmware'
Kernel build directory is /lib/modules/3.2.0-70-generic/build
make -C ../linux apply_patches
make[2]: Entering directory `/mnt/x/media_build/linux'
Syncing with dir ../media/
Patches for 3.2.0-70-generic already applied.
make[2]: Leaving directory `/mnt/x/media_build/linux'
make -C /lib/modules/3.2.0-70-generic/build SUBDIRS=/mnt/x/media_build/v4l modules
make[2]: Entering directory `/usr/src/linux-headers-3.2.0-70-generic'
CC [M] /mnt/x/media_build/v4l/altera-lpt.o
In file included from <command-line>:0:0:
/mnt/x/media_build/v4l/compat.h: In function 'prandom_u32_max':
/mnt/x/media_build/v4l/compat.h:1473:9: error: implicit declaration of function 'prandom_u32' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[3]: *** [/mnt/x/media_build/v4l/altera-lpt.o] Error 1
make[2]: *** [_module_/mnt/x/media_build/v4l] Error 2
make[2]: Leaving directory `/usr/src/linux-headers-3.2.0-70-generic'
make[1]: *** [default] Error 2
make[1]: Leaving directory `/mnt/x/media_build/v4l'
make: *** [all] Error 2
3. - soyo Také bohužel nefunguje.
$ git fetch --depth=1 git://linuxtv.org/media_build.git 033fe939a61944e8af546f7912829889ce2a935c
fatal: Not a git repository (or any parent up to mount parent /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
Kdybych tušil, co může vzejít za problémy, tak bych si schoval zdrojáky V4L z dob, kdy pro jádro 3.2.0 fungovaly.
Jak je ksakru mám teď vydolovat.
Nějaké další nápady ?
Díky.
-
ad 2.
ta chybová hlášení původně vypadala jinak - to vložené je až po novém pokusu po make clean.
Čili se navíc ten strom nějak pokazil.
Jde to tím git příkazem nějak opravit ? Tedy aby se stáhlo jen to, co je na serveru jiné, než na lokální kopii ?
(Raději to totiž celé vykopnu z baráku, než bych to celé ještě jednou stahoval :-) !! )
-
Udělal jsem si clone a ten checkout normálně prošel. Zabalil jsem ti to, má to pár kilo. Netuším, co jsi na tom stahoval celé hodiny.
https://dl.dropboxusercontent.com/u/21634266/dvb-t.tgz
Postup byl takový:
git clone git://linuxtv.org/media_build.git
cd media_build/
git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495
-
Petr Krčmář:
díky, ale to vlastní stahování zdrojáků, FW, ... dělá až ten příkaz ./build. Pak teprve začne ta legrace.
-
Aha, v tom případě už to ale nemá s Gitem nic společného a je zřejmě chyba v tom skriptu nebo přestaly existovat cesty pro staré verze nebo čert ví proč. Ale Git v tom už namočený není.
-
otázkou je, jak vlastně o tu starou verzi "požádat".
Ten ./buld to stáhne a pak začne překládat. Proto jsem to na začátku překladu přerušil (pokud to neskončilo chybou samo) a po make clean jsem začal zakazovat patche, ..., a zkoušel i zde zadat to: git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495
... a on to bral - znal ten checkout (protože když jsem jsem zadal místo toho 66f40303e5fb32f8a8ed83cce3ffd0d5d725495 cokoli jiného, tak skončil s chybou).
Čili ten git s tím stromem nějak pracovat umí.
Jak říkám, nejsem vývojář a proto se zde ptám.
Odmítám uvěřit tomu, že takovýto velký SW projekt (určitě spravovaný v git-u) neumožňuje získání nějaké určité dřívější verze.
To musí jít - jen vědět jak. A pro mě jsou tyhle věci španělská vesnice a metodou pokusů/omylů je nemožné se něčeho dobrat.
-
Ty mícháš dohromady dvě věci: jedna je získání podoby toho repozitáře ve stavu, v jakém byl v září. To uděláš pomocí toho checkoutu. Objeví se ti tam nějaké zdrojáky a nějaký build skript. Tím s Gitem končíš a musíš přijít na to, proč ti nefunguje ten skript a proč se to nechce sestavit. Ale v tu chvíli používáš skutečně stav z 23. září, tohle se ti podařilo.
-
nemáte bohužel pravdu - přečtěte si prosím znovu, co jsem napsal v posledním příspěvku.
Ten úvodní git NESTAHUJE žádné zdrojáky - ostatně - sám jste to zjistil (pár KiB)
Autoři to míchají, ne já.
Znovu - až ten ./build skript je stahuje, ale
znovu - současně ten git stažené zdrojáky zřejmě zná (ví, co je commit xyz).
-
Já tomu rozumím velmi dobře. Problém je, že tady existují dva různé repozitáře: jeden se jmenuje media_build a stahuje ty build skripty (a s tím teď manipulujeme, v něm existuje ten commit ze září) a v tom druhém s názvem media_tree jsou zdrojáky samotné. Do toho ale už má automaticky sahat ten build skript, který jsme vytáhli ve starší verzi z repozitáře. Doporučuji si naklonovat media_tree a podívat se do něj. Tam vyhledat správný commit a vrátit se checkoutem k němu.
$ git clone git://linuxtv.org/media_tree.git
-
Zkus to polopaticky:
git clone --depth=1 git://linuxtv.org/media_build.git
git checkout 'master@{2014-08-01 00:00:00}'
edit build.sh:
radek cca 20:
my $main_branch = "master";
na
'master@{2014-08-01 00:00:00}';
./build
Datum dle libosti. Build jsem netestoval.
-
eL:
Tak bohužel - zero efekt.
modifikoval jsem ./build:
#my $main_branch = "master";
my $main_branch = 'master@{2014-09-01 00:00:00}';
ale zjevně to nemá vliv na stahované zdrojáky ani na jejich překlad.
Na začátku se objeví m.j. hláška:
MEDIA_TUNER_IT913X: Requires at least kernel 3.4.0
která, jak soudím, je zdrojem problému. Mám totiž tuner IT9135, který spadá pod ovladač AF9035, který potřebuji.
Zjevně se tedy stále stahuje/překládá pro aktuální verzi.
Jak vidno po skončení překladu, AF9035 není, pro srovnání kupř. s AF9015, překládán:
$ find . -iname "*9035*"
./v4l/af9035.c
./v4l/af9035.h
./linux/drivers/media/usb/dvb-usb-v2/af9035.c
./linux/drivers/media/usb/dvb-usb-v2/af9035.h
$ find . -iname "*9015*"
./v4l/dvb-usb-af9015.ko
./v4l/.dvb-usb-af9015.mod.o.cmd
./v4l/.dvb-usb-af9015.o.cmd
./v4l/.dvb-usb-af9015.ko.cmd
./v4l/dvb-usb-af9015.mod.c
./v4l/af9015.o
./v4l/af9015.h
./v4l/.tmp_versions/dvb-usb-af9015.mod
./v4l/af9015.c
./v4l/dvb-usb-af9015.o
./v4l/.af9015.o.cmd
./v4l/dvb-usb-af9015.mod.o
./linux/drivers/media/usb/dvb-usb-v2/af9015.h
./linux/drivers/media/usb/dvb-usb-v2/af9015.c
Ještě jednou pro jistotu zkusím stažení přímo: git clone git://linuxtv.org/media_tree.git
jak mi radí kolega Krčmář, ale již jednou to nepomohlo :/ a navíc to děsně dlouho trvá.
HELP >:-O
-
Tkže ... v tom media_tree git checkout skončí s chybou:
/tmp/media_tree$ git checkout 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
fatal: reference is not a tree: 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e
-
Pořád pleteš dva repozitáře dohromady. 66f40303e5fb32f8a8ed83cce3ffd0d5d725495e je commit v media_build, tedy nepoužitelný v media_tree. Pokud dokážeš obejít build script a pomůže ti, pokud stáhneš správnou verzi media_tree, potřebuješ najít vhodný commit z media_tree.
Ten lze najít na webu na obdobné adrese, jako tu někdo poslal, pomocí git log, git rev-list -1 --before="Jan 17 2014" master, případně git tag
-
A jeste bych se zameril na linux/Makefile:65 a wget http://linuxtv.org/downloads/drivers/linux-media-LATEST.tar.bz2, to asi taky nebude delat dobrotu, ale jsou tam i nejake jine verze: http://linuxtv.org/downloads/drivers/
-
eL:
To vypadá nadějně .... ale nezdařilo se.
Zřejmě se perou nové patrche se saršími zdrojáky, či co. Zkrátka make all skončí s chybou.
Možná by kompilace prošla, kdyby se nekompilovalo všechno - takhle se kompilují i moduly, které mě nezajímají a jsou jen zdrojem potenciálních chyb kompilace.
Kdybych věděl, jak kompilovat jen můj modul (samozřejmě včetně těch, na kterých závisí).
-
P.S.: samozřejmě jsem zkoušel vynechat patche pro jádra a zlobivé moduly, které mě nezajímají.
-
No a opytat sa priamo na ich IRC pripadne mailing list? http://linuxtv.org/lists.php
Inac drivre sa daju staihnut aj manualne z http://linuxtv.org/downloads/drivers/ (verzie idu naspat do 02/2014).
-
Nebo si proste updatuj jadro, toto je silene mrhani casem a usilim.
-
Díky za rady, ale nic se nedaří :-(
aaa158
tak jsem se ptal primárně, ale nikoho tam můj problém nezajímá - žádná odpověď.
A co mám dělat se zdrojáky http://linuxtv.org/downloads/drivers/ nevím. Nevím jak je přeložit: žádné readme, ... a kdyzž zkusím v jakémkoli adresáři, kde je makefile spustit make (all), tak to skončí s chybou, že není zadán target.
Tomas Rehak mno ..., když nejsem schpen sehnat a přeložit zdrojáky několika modulů, tak už vidím, jak se mi podaří zkompilovat celé jádro i s těmito zdrojáky.
A že je to "šílené mrhání časem a úsilím" ? Ano, ale jenom proto, že nikdo neví, jak dosáhnout na první pohled tak triviálního a standardního cíle, jako je získání zdrojáků/git stromu, jaké byly před 2 měsíci.
To s dovolením není moje chyba, ale nedostatek dokumentace V4L kombinovaný s neochotou pomoci na jejich fóru a chatu. Přitom jsem přesvědčen, že pro programátory těchto ovladačů by to bylo triviální - jen znát tu správnou sekvenci několika příkazů.
Jen na vysvětlenou - ačkoli se to z mého snažení nezdá, mám nyní jiné, velmi vážné starosti, a proto nemám chuť se teď pouštět do upgradu distra, když nemám kam zálohovat vše důležité.
V každém případě Vám všem děkuji za snahu mi pomoci. Škoda, že mailinglistu V4L se nenašel ani jediný podobně ochotný ...
-
ad upgrade jen jadra, co je to za distribuci ? ubuntu 12.04 ?? nebylo by treba kompilovat jadro, pouze nainstalovat prislusne balicky novejsiho jadra (se zachovanim zbytku distribuce tak jak je..)
napr. pro ubuntu 12.04 bych zkusil posledni 3.4 jadro dostupne pro 12.10:
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4.104-quantal/linux-headers-3.4.104-0304104-generic_3.4.104-0304104.201409250437_i386.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4.104-quantal/linux-headers-3.4.104-0304104_3.4.104-0304104.201409250437_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4.104-quantal/linux-image-3.4.104-0304104-generic_3.4.104-0304104.201409250437_i386.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4.104-quantal/linux-image-extra-3.4.104-0304104-generic_3.4.104-0304104.201409250437_i386.deb
sudo dpkg -i linux-*3.4.104*.deb
-
Tak by som asi skusil nieco take:
1. manualne stiahnut verziu driverov "spred 2 mesiacov" z http://linuxtv.org/downloads/drivers/, stiahnuty subor premenovat na linux-media-LATEST.tar.bz2
2. nahrat to niekam na web (dropbox, ulozto, ... :-) ) pripadne ked mas vlastny webserver tak tam, zapisat si URL
3. git clone to male repo s instalacnym skriptom, potom (datum podla chuti): git checkout 'HEAD@{Sept 20 2014}'
4. editovat instalacny skript aby linux-media-LATEST.tar.bz2 stiahol z toho dropboxu / ulozto URL
5. profit!
-
nobody a to jde jádro jen tak bez ničeho takto instalovat ? Matně si vzpomínám, že jádru MUSÍ odpovídat i další balíky (např. ty pracující s /proc, /sys, ...) - tedy že to nejde jen takto jednoduše.
aaa158: to už jsem zkoušel dle rady od eL - viz příspěvek #21-22
-
git reset --hard as456df4a56sd4f
git clean -x -f -d
cd media-build
./build
sudo make instal
-
nobody a to jde jádro jen tak bez ničeho takto instalovat ? Matně si vzpomínám, že jádru MUSÍ odpovídat i další balíky (např. ty pracující s /proc, /sys, ...) - tedy že to nejde jen takto jednoduše.
v podstate jde a nemusi, maximalne ti neco nepujde co by vyzadovalo novejsi/jine userspace, hlavne nainstalovat i headers stejne verze pro potreby dokompilovavani modulu :)