kernel header linkelés

Fórumok

Valahol olvastam, ha az ember maga fordít kernelt vanilla forrásból, akkor készítsen szimbolikus linkeket az "/usr/include"-ba az /usr/src/linux/include/valami"-re. Fordításnál bizonyos programok, ha jól emlékszem igénylik a "linux/config.h"-t és a "linux/version.h"-t, a kernelforrásban van, másoknak viszont a "net/if.h" stb. kell, ami nincs benne a kernelforrásban.

Most akkor milyen könyvtárakról kell linket készíteni vagy hogy van ez?

Hozzászólások

> Forításnál bizonyos programok, ha jól emlékszem igénylik a "linux/config.h"-t > és a "linux/version.h"-t,
amik ilyeneket igenyelnek azok nagyvaloszinuseggel szinten kernelmodulok. ezeknel meg forditaskor a sok egyeb (szukseges) gcc-kapcsolo melle' meg kell adni a -I/usr/src/linux/include -t is, es akkor nem kell semmit se symlinkelni. sot, talan kicsit kulturaltabb, ha -I/lib/modules/`uname -r`/build/include-t ad meg az ember (ebbol a build egy symlink, az /usr/src/linux-`uname -r`-re, altalaban).

es akkor igy minden fasza lesz ;]

A.

Ha sima'n gya'ri kernelt forditasz, es nincs semmi fennakadas, akkor nem kell semmi, make menuconfig; make dep, ... (2.4), vagy csak siman make (2.6). Kernelforditaskor ebbe az inkludosdiba _nem_ kell belenyulni, megcsinalja magatol es jol megcsinalja (a 2.4-es ilyenszempontbol szerencsesebb, mert ott forditas kozbe latszik, hogy mit csinal, milyen flag-eket hasznal, a 2.6-nal mar nem).

ha magadnak forditasz kernelforras-fa'n kivuli modulokat (csak ugy hobbibol, pl.), akkor kell ilyen vackolas, -I/usr/src/linux/include, vagy ekvivalens (+ fel tonna egyeb, -D__KERNEL__ -DMODULE, ...). Hogy ezt akkor hogy csinalod, az reszletkerdes, saja't modulnal egyszerubb talan maga'ba a makefile-ba beleirni ezeket.

Gyari kernelnel csak egy esetben kell beleavatkozni (pontosabban nekem csak egy esetben kellett eddig), amikor 2.4-est forditasz olyan gcc-vel, ami alapertelmezesben 4.0 vagy 4.1. ekkor explicite bele kell turni a makefile-ba es a CC=gcc-t atirni CC=gcc-3.4-re. de ez sem a cflags... so"t, vagyis asszem ext is lehet export CC=...-vel megoldani, csak akkor minden egyes (ujra)forditasnal ki kell adni es nem szabad elfelejteni (emiatt jobb talan a makefile-ba beleirni).

A.

A /usr/src/linux symlinket kell módosítani, h az éppen aktuális kernelforrásra mutasson (pl. /usr/src/linux-2.6.x.x). Nekem legalábbis mást symlinkelni nem kellett még egyszer sem.

A "make -O valahova target" módon meg lehet adni, ha azt akarom, hogy máshova buildelje a kernelt, mint ahol a forrás van. Aztán ugye külön symlinket csinálni /lib/modules/$(uname -r)/build és /lib/modules/$(uname -r)/source néven. Ha jól emlékszem, valamikor taszpaltaltam olyat, hogy némelyik programnak nem tetszett, hogy nem egy helyen van a forrás és a build. Taszpaltalt-e valaki ilyesmit? Van-e egyáltalán értelme máshova tenni buildet, mint ahol a forrás van?

Nem akartam emiatt új topikot létrehozni, így itt kérdezem meg.
Miért van, hogy egyszer létrejö, egyszer pedig nem az include/linux/config.h?

A válaszokat előre is köszi.

Ha 2.6.19 es sorozatból bemásolod a config.h-t oda ahol hiányolja, akkor működni fog.
______________________________________________________________________________________________
powered by Slackware 11.0 linux-2.6.20-smp - KDE 3.5.6
Fu-Si Amilo Pi1505 (Centrino Duo T2050-1G-120G-i945GM)

Hello

Van egy jómagam által forgatott kernel. Alapból megvoltak hozzá a fejlécek, de azt hiszem sikerült eltűntetnem őket. Hogy tudom visszavarázsolni?

Elképzelhető, hogy újra kell fordítanod a configoddal, ugyanis a

/lib/modules/`uname -r`

-be a

make install && make modules_install

nem csak a forrást (fejállományok stb.), hanem a build-et is belinkeli, ami meg ugyanúgy a /usr/src/linux-ban van (vagy oda van linkelve).
Viszont én eddig csak ati fglrx illetve nvidia driver fordításánál tapasztaltam, hogy szükség van a build-re is.
____________________________________________________________
Slackware 12.1 - linux-2.6.25.1 - KDE 3.5.9

Az /usr/src-be (pontosabban a /lib/modules/$(uname -r)/{source,build}-be, ami egy link szokott lenni az /usr/src/linux(-x.y.z)-re) csak akkor kell a kernel forras, ha kernel modult akarsz forditani.
Az /usr/include/-ban a headereket nem kell kernelforditasnal cserelni, azok vegig azok a headerek legyenek, amelyekkel a glibc fordult.