Tartalomjegyzék
Az openSUSE 64 bites platformokon is használható. Ez azonban nem jelenti feltétlenül azt, hogy az összes mellékelt alkalmazás is át lett írva 64 bites platformra. Az openSUSE támogatja 32 bites alkalmazások használatát 64 bites rendszerkörnyezetben. Ez a fejezet röviden áttekinti, hogy ez a támogatás hogyan is lett megvalósítva a 64 bites openSUSE platformokon. Bemutatjuk, hogyan történik a 32 bites alkalmazások végrehajtása (futási támogatás), illetve hogyan kell lefordítani a 32 bites alkalmazásokat, hogy egyaránt lehessen őket futtatni mind 32, mind 64 bites rendszerkörnyezetekben. Található továbbá itt információ a kernel API-ról is, valamint magyarázat arról, hogy hogyan futnak a 32 bites alkalmazások 64 bites kernel alatt.
A 64 bites amd64 és Intel 64 platformokhoz készült openSUSE úgy lett kialakítva, hogy a meglévő 32 bites alkalmazások a 64 bites környezetben a telepítés után („out-of-the-box”), azonnal futtathatók legyenek. Ez a támogatás azt jelenti, hogy a preferált 32 bites alkalmazások továbbra is használhatók, nem kell várni a megfelelő 64 bites átírás megjelenésére.
![]() | Alkalmazásverziók közötti ütközések |
|---|---|
Ha egy alkalmazás 32 és 64 bites környezethez egyaránt rendelkezésre áll, mindkét verzió egyidejű telepítése valószínűleg problémát okoz. Ilyen esetben válasszon a verziók közül, majd azt telepítse és használja. Kivételt jelentenek e szabály alól az ún. PAM-ok (pluggable authentication module, cserélhető hitelesítési modulok). Az openSUSE a PAM (cserélhető hitelesítési modulok) rendszert használja a hitelesítési folyamatban a felhasználó és az alkalmazás közötti rétegként. 32 bites alkalmazásokat is futtató 64 bites operációs rendszeren feltétlenül szükséges a PAM-modulok mindkét verzióját telepíteni. | |
A megfelelő végrehajtás érdekében minden alkalmazás függvénytárakat igényel. Sajnos, a könyvtárak 32 és 64 bites változatainak neve megegyezik. Ezeket valamilyen más módon kell megkülönböztetni.
A 32 bites verzióval való kompatibilitás fenntartása érdekében a függvénytárak ugyanott tárolódnak, mint a 32 bites környezetben. A libc.so.6 32 bites verziója 32 és 64 bites környezetben egyaránt a /lib/libc.so.6 könyvtárban található.
A 64 bites függvénytárak és objektumfájlok a lib64 nevű könyvtárban találhatók. A 64 bites objektumfájlok, amelyeket általában a /lib és /usr/lib könyvtárban keresnénk, a /lib64 és /usr/lib64 könyvtárban találhatók. Ez azt jelenti, hogy a /lib és /usr/lib alatt van hely a 32 bites könyvtárak számára, így mindkét verzió fájlneve változatlan marad.
A szómérettől független adatokat tartalmazó 32 bites /lib könyvtárak alkönyvtárai nem kerülnek áthelyezésre. Ez a séma megfelel az LSB (Linux Standards Base) és FHS (File System Hierarchy Standard) előírásoknak.
32 és 64 bites objektumok egyaránt előállíthatók a biarch fejlesztőkészlet-lánccal. Az alapértelmezés a 64 bites objektumok fordítása. 32 bites objektumok speciális jelzők használatával állíthatók elő. GCC esetén ez a speciális jelző az -m32.
Az összes header fájlt architektúrafüggetlen formátumban kell megírni. A telepített 32 és 64 bites függvénytáraknak rendelkezniük kell a telepített header fájloknak megfelelő API-val (alkalmazásprogramozási felület). A normál openSUSE környezet ennek az alapelvnek megfelelően került kialakításra. Kézzel frissített függvénytárak esetén ezeket a problémákat önállóan kell megoldani.
Ha egy biarch architektúrán más architektúrára akar bináris fájlokat készíteni, akkor telepíteni kell a második architektúra megfelelő függvénytárait. Az ilyen csomagok neve rpmname-32bit. Az rpmname-devel csomagok megfelelő header fájljaira és függvénytáraira, illetve az rpmname-devel-32bit fejlesztési függvénytáraira is szükség van a második architektúrához.
A legtöbb nyílt forrású program egy autoconf alapú programkonfigurációt használ. Ha az autoconf parancs segítségével kíván beállítani egy programot a második architektúrához, a configure parancsfájl megfelelő környezeti változókkal futtatásával írja felül az autoconf normál fordító- és linkerbeállításait.
Az alábbi példa egy x86_64 rendszert mutat be, amelyen x86 a második architektúra.
32 bites fordító használata:
CC="gcc -m32"
A linker utasítása 32 bites objektumok feldolgozására (mindig a gcc használata a linker előtétjeként):
LD="gcc -m32"
Az assembler beállítása 32 bites objektumok előállítására:
AS="gcc -c -m32"
Adja meg a linker beállításait, mint a 32 bites programkönyvtár elérési útját, például:
LDFLAGS="-L/usr/lib"
Adja meg a 32 bites objektumok programkönyvtárának elérési útvonalát:
--libdir=/usr/lib
Adja meg a 32 bites X programkönyvtárak elérési útvonalát:
--x-libraries=/usr/lib
Nincs szükség az összes változóra minden programhoz. Használja őket az adott programnak megfelelően.
CC="gcc -m32" LDFLAGS="-L/usr/lib;" ./configure --prefix=/usr --libdir=/usr/lib --x-libraries=/usr/lib make make install
Az x86_64 64 bites kerneljei 64 és 32 bites kernel ABI-t (alkalmazás bináris csatoló) is tartalmaznak. Az utóbbi a megfelelő 32 bites kernel ABI-jával azonos. Ez azt jelenti, hogy a 32 bites alkalmazás ugyanúgy tud kommunikálni a 64 bites kernellel, mint a 32 bites kernellel.
Egy 64 bites kernel rendszerhívásainak 32 bites emulációja nem támogatja a rendszerprogramok által használt API-k nagy részét. Ez a platformtól függ. Ez azt jelenti, hogy csak néhány alkalmazást, például az lspci-t kell lefordítani.
Egy 64 bites kernel csak speciálisan ehhez a kernelhez lefordított 64 bites kernelmodulokat tud betölteni. A 32 bites kernelmodulok nem használhatók.
![]() | Kernel által betölthető modulok |
|---|---|
Néhány alkalmazás külön kernel által betölthető modulokat igényel. Ha ilyen 32 bites alkalmazást kíván használni egy 64 bites rendszerkörnyezetben, akkor keresse meg az alkalmazás gyártóját és a Novellt annak ellenőrzéséhez, hogy a kernel által betölthető modul 64 bites verziója és a kernel API 32 bites lefordított verziója rendelkezésre áll-e ehhez a modulhoz. | |