You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Linux</strong> <strong>i386</strong> <strong>Önyükleme</strong> <strong>Kodu</strong> <strong>NASIL</strong><br />
BSP için çekirdek parametreleri ESI tarafından gösterilen bellekten empty_zero_page’e kopyalanır. E˘ger<br />
uygulanabilir ise çekirdek komut satırı empty_zero_page+2K’ya kopyalanacaktır.<br />
6.3. ˙I¸slemci Türünü Kontrol Et<br />
˙I¸slemci türünün ve i¸slemci içeri˘ginin nasıl belirlendi˘gi konusunda bakınız: IA–32 Manual Vol.1. (Ch.13. Processor<br />
Identification and Feature Determination).<br />
struct cpuinfo_x86; // bakınız: include/asm–<strong>i386</strong>/processor.h<br />
struct cpuinfo_x86 boot_cpu_data; // bakınız: arch/<strong>i386</strong>/kernel/setup.c<br />
#define CPU_PARAMS SYMBOL_NAME(boot_cpu_data)<br />
#define X86 CPU_PARAMS+0<br />
#define X86_VENDOR CPU_PARAMS+1<br />
#define X86_MODEL CPU_PARAMS+2<br />
#define X86_MASK CPU_PARAMS+3<br />
#define X86_HARD_MATH CPU_PARAMS+6<br />
#define X86_CPUID CPU_PARAMS+8<br />
#define X86_CAPABILITY CPU_PARAMS+12<br />
#define X86_VENDOR_ID CPU_PARAMS+28<br />
checkCPUtype:<br />
{<br />
X86_CPUID = –1; // CPUID yok<br />
X86 = 3; // en azından 386<br />
save original EFLAGS to ECX;<br />
flip AC bit (0x40000) in EFLAGS;<br />
if (AC bit not changed) goto is386;<br />
X86 = 4; // en azından 486<br />
flip ID bit (0X200000) in EFLAGS;<br />
restore original EFLAGS; // AC ve ID seçenekleri için<br />
if (ID bit de˘gi¸semez) goto is486;<br />
// i¸slemci bilgilerini al<br />
CPUID(EAX=0);<br />
X86_CPUID = EAX;<br />
X86_VENDOR_ID = {EBX, EDX, ECX};<br />
if (!EAX) goto is486;<br />
CPUID(EAX=1);<br />
CL = AL;<br />
X86 = AH & 0x0f; // aile<br />
X86_MODEL = (AL & 0xf0) >> 4; // model<br />
X86_MASK = CL & 0x0f; // adımlama kimli˘gi (stepping id)<br />
X86_CAPABILITY = EDX; // özellik<br />
x87 aritmetik i¸slemcisinin ayarlanı¸sı için bakınız: IA–32 Manual Vol.3. (Ch.9.2. x87 FPU Initialization, and<br />
Ch.18.14. x87 FPU).<br />
is486:<br />
// PG, PE, ET’yi kaydet AM, WP, NE, MP’yi ise ayarla<br />
EAX = (CR0 & 0x80000011) | 0x50022;<br />
goto 2f; // "is386:" i¸slemeyi atla<br />
is386:<br />
orjinal EFLAGS’ları ECX’den yeniden al;<br />
http://belgeler.org <strong>Linux</strong> Kitaplı˘gı 42 / 77