[debian] hoe moet de source tree / gcc er uit zien

Pagina: 1
Acties:

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 15-08 17:31

LEiPiE

... (ing. van weinig woorden)

Topicstarter
Ik zit helemaal vast... de hele middag alleen maar bezig geweest om iets simpels te compilen, maar het lukt gewoon niet. Al gegoogled, maar alleen dezelfde vraag gevonden, nooit een nuttig antwoord.
Probleem: waar moeten kernelsources nou staan?
apt-get zet ze schijnbaar verkeerd neer, of mijn (standaard) gcc snapt 't niet.
De bedoeling is een device driver te schrijven, maar de meest simpele ( http://www.tldp.org/LDP/lkmpg/node11.html )stopt met compilen met schermen vol met regels als:
code:
1
2
3
4
5
6
7
8
In file included from /usr/include/linux/fs.h:262,
             from /usr/include/linux/capability.h:13,
             from /usr/include/linux/binfmts.h:5,
             from /usr/include/linux/sched.h:8,
             from comchannel.c:8:
/usr/include/linux/hpfs_fs_i.h:5: parse error before `ino_t'
/usr/include/linux/hpfs_fs_i.h:5: warning: no semicolon at end of struct or union
/usr/include/linux/hpfs_fs_i.h:12: parse error before `:'

heb al wat met /usr/include/linux als symlink (het is normaal al een dir met headerfiles) zitten klooien, maar dat geeft alleen maar andere errors.

voor zover ik weet heeft apt-get de sources in /usr/src/kernel-source-2.2.17 gezet.
Ik heb een zelfgebouwde kernel (da's toen wel gelukt, waarom dat wel en dit niet?) omdat ik een dualcpu-met-maar-een-cpu-systeem heb.

* LEiPiE vraagt zich echt af waarom mensen altijd roepen dat Linux zo simpel is... geef mij gewoon een ontwikkelomgeving waar je amper commandline opties hebt (javac) of op een compile hotkey kan rammen :(

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


  • Lethalis
  • Registratie: April 2002
  • Niet online
Ik download altijd de nieuwste kernel en drop deze in /usr/src .. waarna ik hem uitpak.

Ask yourself if you are happy and then you cease to be.


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Ik gooi de kernels altijd in /usr/src/kernel-source-<kernelversie>
en daar gooi ik weer een symlink naartoe met de naam /usr/src/linux. Het laatste hoeft trouwens niet :)
Daarna 'make menuconfig' en dan het rijtje uit /usr/doc/kernel-package/README uitvoeren, en dan krijg ik een pracht van een deb :)

Een standaard kernel build wel prima op je systeem :?
(apt-get install kernel-source) ?

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • PipoDeClown
  • Registratie: September 2000
  • Niet online

PipoDeClown

Izze Zimpell

kernels moeten onder /usr/src staan

zie bijvoorbeeld http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/ref-guide/s1-filesystem-fhs.html

deze bedoel ik eigenlijk http://www.pathname.com/fhs/2.2/

God weet alles, want hij is lid van de Mosad. To protect your freedom i will take that away from you. Mijn drankgebruik heeft ernstig te lijden onder mijn gezondheid.


  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 15-08 17:31

LEiPiE

... (ing. van weinig woorden)

Topicstarter
gcc vindt dit in ieder geval:
(ff nieuwe layout :) vind het maar vage paden hoor...)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@mrbluesky:/kernelsrc/_cc> gcc -print-search-dirs
install: /usr/lib/gcc-lib/i386-linux/2.95.2/

programs: /usr/lib/gcc-lib/i386-linux/2.95.2/
:/usr/lib/gcc-lib/i386-linux/
:/usr/lib/gcc/i386-linux/2.95.2/
:/usr/lib/gcc/i386-linux/
:/usr/i386-linux/bin/i386-linux/2.95.2/
:/usr/i386-linux/bin/

libraries: /usr/lib/gcc-lib/i386-linux/2.95.2/
:/usr/lib/gcc/i386-linux/2.95.2/
:/usr/i386-linux/lib/i386-linux/2.95.2/
:/usr/i386-linux/lib/
:/usr/lib/i386-linux/2.95.2/
:/usr/lib/
:/lib/i386-linux/2.95.2/
:/lib/
:/usr/lib/i386-linux/2.95.2/
:/usr/lib/

en kernel-source is dus geinstalleerd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@mrbluesky:/kernelsrc/_cc> apt-get install kernel-source
Reading Package Lists... Done
Building Dependency Tree... Done
Package kernel-source is a virtual package provided by:
  kernel-source-2.2.17 2.2.17pre6-1
  kernel-source-2.2.19 2.2.19.1-4
  kernel-source-2.0.38 2.0.38-3
You should explicitly select one to install.
E: Package kernel-source has no installation candidate
root@mrbluesky:/kernelsrc/_cc> apt-get install kernel-source-2.2.17
Reading Package Lists... Done
Building Dependency Tree... Done
Sorry, kernel-source-2.2.17 is already the newest version
0 packages upgraded, 0 newly installed, 0 to remove and 90 not upgraded.
root@mrbluesky:/kernelsrc/_cc>

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 23:01

odysseus

Debian GNU/Linux Sid

Probeer eens om een extra include op te geven, dus iets als 'gcc -o mod.o -I/usr/src/linux/include mod.c'. Zie ook hier.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 15-08 17:31

LEiPiE

... (ing. van weinig woorden)

Topicstarter
ook extra paden geprobeerd, ik snap alleen te weinig van die hele compiler zooi (ik snap m'n opdracht perfect, maar ben nu al 2 weken bezig om uberhaupt de zooi te kunnen compilen :()
Ik zit er nu hard aan te denken om het hele systeem opnieuw te installen via de "ik-ben-een-debiel-mag-ikasjeblieft-op-een-knopje-klikken" modus :( (vorige versie kaal geinstalleerd en via apt al het noodzakelijke er op gezet.
Denk dat ik dat maar ga doen, want ik ben dit nu wel zat.
Heb ik meteen weer een standaard kernel (2e cpu slot is kapot helaas en zonder SMP kernel werkt ie ook goed).

gcc kan linux/module.h enzo niet vinden, tja die staan (officiele tree) helemaal in :/usr/src/linux/include/linux/ |:(
de eerste linux is een symlink naar 't officiele kernelsourcepackage in /usr/src/kernel-sources-xxx.

Naja, reinstalling, mocht 't dan nog niet werken dan horen jullie 't snel genoeg >:)

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Debian raadt in principe aan om ze onder /usr/local/src te zetten. Daar zijn vrij goede redenen voor, maar ik weet niet meer waar ik die gelezen heb.
Zie ook:
http://www.debian.org/releases/stable/i386/ch-post-install.en.html#s-kernel-baking

Wie trösten wir uns, die Mörder aller Mörder?


  • Rudoli
  • Registratie: Juni 1999
  • Laatst online: 28-04-2025
edit:

ik zat niet goed op te letten, laat maar


Standaard komt de source als tar.gz binnen in /usr/src en verwacht daar ook uitgepakt te worden, daarna ff symlink naar maken met de pakkende naam: linux :)

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Rudoli schreef:
Standaard komt de source als tar.gz binnen in /usr/src en verwacht daar ook uitgepakt te worden,
Volgens de aanwijzingen in hun installation manual niet. Ze hebben liever dan je hem onder /usr/local/src uitpakt, in een directory waarvan root niet de eigenaar is.

Wie trösten wir uns, die Mörder aller Mörder?


  • Rudoli
  • Registratie: Juni 1999
  • Laatst online: 28-04-2025
Kijk meteen even of de kernel die je draait wel degene is die je denkt te draaien. uname -a zou je onder andere moeten vertellen welke je draait.

* Rudoli heeft z'n source in /usr/src staan en heeft nooit probs gehad met compilen...

Heb net ff url zitten lezen en ik zet ze de volgende keer ook in /usr/local/src

Verwijderd

<totaal offtopic>
Op dinsdag 11 juni 2002 20:49 schreef leipie het volgende:

* LEiPiE vraagt zich echt af waarom mensen altijd roepen dat Linux zo simpel is... geef mij gewoon een ontwikkelomgeving waar je amper commandline opties hebt (javac) of op een compile hotkey kan rammen :(
Volgens mij heeft het wat te maken met je motto ;)

</totaal offtopic>

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 15-08 17:31

LEiPiE

... (ing. van weinig woorden)

Topicstarter
nou, ik ben weer een stapje verder hoor!
Misschien dat alles nu al werkt.
Probleem was dat de kernel-headers op m'n vorige install de verkeerde versie waren (als je apt-get install kernel-headers doet dan zou je verwachten dat ie de juiste neemt... nee dus (2.0.38 ipv 2.2.18pre21).
Nieuwe install had geen kernel-headers nog, nu wel.
Daarna bleek ie alles alsnog voor 2.2.15 te compilen... /usr/include is waar gcc alles eerst zoekt (waarom in 's hemelsnaam???), na veel zoeken in m'n profile 't volgende regeltje gepleurd:
code:
1
CPATH="/usr/src/kernel-headers-2.2.18pre21/include"

en dat lijkt goed te gaan.

is wel zoeken hoor... krijg hier "display department" voorstellingen van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"But Mr Dent, the plans have been available in the
local planning office for the last nine month."
- "Oh yes, well as soon as I heard I went straight round  
to see them, yesterday afternoon. You hadn't exactly gone 
out of your way to call attention to them had you? I mean
like actually telling anybody or anything."
"But the plans were on display ..."
- "On display? I eventually had to go down to the 
cellar to find them."
"That's the display department."
- "With a torch."
"Ah, well the lights had probably gone."
- "So had the stairs."
"But look, you found the notice didn't you?"
- "Yes," said Arthur, "yes I did. It was on display in
the bottom of a locked filing cabinet stuck in a disused 
lavatory with a sign on the door saying Beware of the 
Leopard."

:P
(Hitch Hiker's Guide to the Galaxy voor de wat minder ontwikkelden hier >:))

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 15-08 17:31

LEiPiE

... (ing. van weinig woorden)

Topicstarter
Op maandag 17 juni 2002 18:08 schreef r3b00t het volgende:
<totaal offtopic>
[..]

Volgens mij heeft het wat te maken met je motto ;)

</totaal offtopic>
hehe, da's waar :)
in dit geval de lange weg via de HIO, terwijl ik beter 5 jaar geleden bij een webdesign bedrijf had kunnen aan kloppen... dan had ik nu een huis, dikke auto en vast een vriendin gehad (maar had ik wel 5 jaar studententijd gemist :))

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


Verwijderd

Op maandag 17 juni 2002 18:38 schreef leipie het volgende:
Probleem was dat de kernel-headers op m'n vorige install de verkeerde versie waren (als je apt-get install kernel-headers doet dan zou je verwachten dat ie de juiste neemt... nee dus (2.0.38 ipv 2.2.18pre21).
Kernel-headers in /usr/include zijn bedoeld voor userspace software.
Glibc wordt tegen deze headers gecompileerd en afhankelijk van de kernel-headers, worden de glibc-headers gemaakt.
Als je deze headers aanpast, is het aan te raden glibc opnieuw te compileren.
Zeker als je ze van 2.0 naar 2.2 upgrade. Veel userspace progs kunnen dan in de problemen komen met compileren.
Daarna bleek ie alles alsnog voor 2.2.15 te compilen... /usr/include is waar gcc alles eerst zoekt (waarom in 's hemelsnaam???), na veel zoeken in m'n profile 't volgende regeltje gepleurd:
code:
1
CPATH="/usr/src/kernel-headers-2.2.18pre21/include"

en dat lijkt goed te gaan.
Volgens mij moet je dat in de Makefile zetten.
Dat hij dus compileert tegen /usr/src/linux/include
En die /usr/src/linux is dan dus een symlink naar de kernel-source waar jij nu een binary kernel van draait.

Ik kan geen Makefiles schrijven, maar je zou eens wat Makefiles kunnen bekijken. Bijv. die van vmware of nvidia.
Al is het vaak zo dat veel kernel modules die op het net slingeren tegen /usr/include/linux compileren. Die kun je gerust "broken" noemen.

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 15-08 17:31

LEiPiE

... (ing. van weinig woorden)

Topicstarter
Op maandag 17 juni 2002 19:27 schreef MarcelP het volgende:

[..]

Kernel-headers in /usr/include zijn bedoeld voor userspace software.
Glibc wordt tegen deze headers gecompileerd en afhankelijk van de kernel-headers, worden de glibc-headers gemaakt.
Als je deze headers aanpast, is het aan te raden glibc opnieuw te compileren.
Zeker als je ze van 2.0 naar 2.2 upgrade. Veel userspace progs kunnen dan in de problemen komen met compileren.
Die blijven er ook lekker staan hoor :)
Volgens mij moet je dat in de Makefile zetten.
Dat hij dus compileert tegen /usr/src/linux/include
En die /usr/src/linux is dan dus een symlink naar de kernel-source waar jij nu een binary kernel van draait.
Ik heb het nu zo dat m'n gcc dus altijd "de echte" headers gebruikt.
Makkelijker dan een makefile aangezien ik amper Makefiles nodig heb (en anders vergeet ik gegarandeerd dat regeltje er in te zetten :))
Voor de rest gebruik ik toch meestal binary packages (te lui). Dit systeem hoeft gelukkig niet veel te kunnen, de enige reden dat dit mijn enige linux machine is, is omdat ik voor school een linux device driver moet schrijven... gebruik verder dagelijks NetBSD en WinXP... heb Linux aan de kant geschoven (kan ik dat hier wel zeggen? ja dat kan, want NetBSD is ook een non-Windows OS :Y))

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber

Pagina: 1