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

📄 bootstrap.s

📁 kvm 源代码
💻 S
字号:
/* * minimal bootstrap to set up flat 32-bit protected mode */#include "apic.h"	bstart = 0xf0000	.code16stack_top = 0x1000cpu_up = 0x1000cpu_up_pmode = 0x1004pmode_stack_start = 0x10000pmode_stack_shift = 16pmode_stack_size = (1 << pmode_stack_shift)ipi_vec = 0xf0	start:	mov $stack_top, %sp	call smp_init	cs lidtl idt_desc	cs lgdtl gdt_desc	mov %cr0, %eax	or $1, %eax	mov %eax, %cr0	ljmpl $8, $pmode + bstartsmp_init:	mov $ipi_vec, %eax	mov $(APIC_BASE + APIC_REG_IPI_VECTOR), %dx	out %eax, %dx	movw $ap_switch_to_pmode, ipi_vec*4	movw %cs, %ax	mov %ax, ipi_vec*4+2	mov $sipi, %eax	mov $(APIC_BASE + APIC_REG_SIPI_ADDR), %dx	outl %eax, %dx	mov $(APIC_BASE + APIC_REG_NCPU), %dx	inl %dx, %eax	mov %eax, %ecx	mov $1, %esismp_loop:	cmp %esi, %ecx	jbe smp_done	mov %esi, %eax	mov $(APIC_BASE + APIC_REG_SEND_SIPI), %dx	outl %eax, %dxwait_for_cpu:	cmp cpu_up, %esi	jne wait_for_cpu	mov %esi, %eax	mov $(APIC_BASE + APIC_REG_SEND_IPI), %dx	out %eax, %dxwait_for_cpu_pmode:	cmp cpu_up_pmode, %esi	jne wait_for_cpu_pmode		inc %esi	jmp smp_loopsmp_done:	retsipi:	mov $(APIC_BASE + APIC_REG_ID), %dx	inl %dx, %eax	mov %eax, cpu_up	shl $12, %eax	addl $stack_top, %eax	movl %eax, %esp	sti	nop1:	hlt	jmp 1bap_switch_to_pmode:	cs lidtl idt_desc	cs lgdtl gdt_desc	mov %cr0, %eax	or $1, %eax	mov %eax, %cr0	ljmpl $8, $ap_pmode + bstart.code32	ap_pmode:	mov $0x10, %ax	mov %ax, %ds	mov %ax, %es	mov %ax, %fs	mov %ax, %gs	mov %ax, %ss	mov $(APIC_BASE + APIC_REG_ID), %dx	in %dx, %eax	mov %eax, cpu_up_pmode	shl $pmode_stack_shift, %eax	lea pmode_stack_start + pmode_stack_size(%eax), %esp	sti	nopap_pmode_wait:	hlt	jmp ap_pmode_waitpmode:	mov $0x10, %ax	mov %ax, %ds	mov %ax, %es	mov %ax, %fs	mov %ax, %gs	mov %ax, %ss	mov $pmode_stack_start + pmode_stack_size, %esp	ljmp $8, $0x100000.align 16	idt_desc:	.word 8*256-1	.long 0gdt_desc:	.word gdt_end - gdt - 1	.long gdt + bstart.align 16gdt:	.quad 0	.quad 0x00cf9b000000ffff // flat 32-bit code segment	.quad 0x00cf93000000ffff // flat 32-bit data segmentgdt_end:	. = 0xfff0	.code16	ljmp $0xf000, $start.align 65536

⌨️ 快捷键说明

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