⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cstart64.s

📁 kvm 源代码
💻 S
字号:
#include "apic.h"boot_idt = 0ipi_vector = 0x20max_cpus = 4.bss	. = . + 4096 * max_cpus	.align 16stacktop:	. = . + 4096	.align 16ring0stacktop:.data		.align 4096ptl2:i = 0	.rept 512	.quad 0x1e7 | (i << 21)	i = i + 1	.endr.align 4096ptl3:	.quad ptl2 + 7.align 4096ptl4:	.quad ptl3 + 7	.align 4096gdt64_desc:	.word gdt64_end - gdt64 - 1	.quad gdt64gdt64:	.quad 0	.quad 0x00af9b000000ffff // 64-bit code segment	.quad 0x00cf93000000ffff // 64-bit data segment	.quad 0x00affb000000ffff // 64-bit code segment (user)	.quad 0x00cff3000000ffff // 64-bit data segment (user)tss_descr:	.rept max_cpus	.quad 0x000089000000ffff // 64-bit avail tss	.quad 0                  // tss high addr	.endrgdt64_end:i = 0tss:	.rept max_cpus	.long 0	.quad ring0stacktop - i * 4096	.quad 0, 0, 0	.quad 0, 0, 0, 0, 0, 0, 0, 0	.long 0, 0, 0i = i + 1	.endrtss_end:.section .init.code32	call prepare_64	jmpl $8, $start64prepare_64:	lgdt gdt64_desc	mov %cr4, %eax	bts $5, %eax  // pae	mov %eax, %cr4	mov $ptl4, %eax	mov %eax, %cr3efer = 0xc0000080	mov $efer, %ecx	rdmsr	bts $8, %eax	wrmsr	mov %cr0, %eax	bts $0, %eax	bts $31, %eax	mov %eax, %cr0	retsmp_init_ipi:	call prepare_64	jmpl $8, $ap_start64.code64ap_start64:	call load_tss	sti	nop1:	hlt	jmp 1bstart64:	call load_tss	call smp_init	call main1:	hlt	jmp 1bload_tss:	mov $0, %eax	mov %ax, %ss	mov $(APIC_BASE + APIC_REG_ID), %dx	in %dx, %eax	mov %eax, %ebx	shl $4, %ebx	mov $((tss_end - tss) / max_cpus), %edx	imul %edx	add $tss, %rax	mov %ax, tss_descr+2(%rbx)	shr $16, %rax	mov %al, tss_descr+4(%rbx)	shr $8, %rax	mov %al, tss_descr+7(%rbx)	shr $8, %rax	mov %eax, tss_descr+8(%rbx)	lea tss_descr-gdt64(%rbx), %rax	ltr %ax	retsmp_init:	lea boot_idt + ipi_vector * 8, %rdi	mov $smp_init_ipi, %eax	mov %ax, (%rdi)	mov %cs, %ax	mov %ax, 2(%rdi)	movw $0x8e00, 4(%rdi)	shr $16, %eax	mov %ax, 6(%rdi)	mov $(APIC_BASE + APIC_REG_IPI_VECTOR), %dx	mov $ipi_vector, %eax	out %eax, %dx	mov $(APIC_BASE + APIC_REG_NCPU), %dx	in %dx, %eax	mov %eax, %ecx	mov $1, %esismp_loop:	cmp %esi, %ecx	je smp_init_done	mov $(APIC_BASE + APIC_REG_SEND_IPI), %dx	mov %esi, %eax	out %eax, %dx	inc %esi	jmp smp_loopsmp_init_done:	ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -