mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-24 17:23:23 +00:00
使得DragonOS kernel 能为riscv64编译通过(尚未能启动) (#457)
* 使得DragonOS kernel 能为riscv64编译通过(尚未能启动) * 修正了系统调用号声明不正确的问题,同时添加了编译配置文档
This commit is contained in:
@ -3,25 +3,6 @@
|
||||
#include <arch/arch.h>
|
||||
#if ARCH(I386) || ARCH(X86_64)
|
||||
#include <arch/x86_64/include/x86_64_ipi.h>
|
||||
#else
|
||||
#error "error type of arch!"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 发送ipi消息
|
||||
*
|
||||
* @param dest_mode 目标模式
|
||||
* @param deliver_status 投递模式
|
||||
* @param level 信号驱动电平
|
||||
* @param trigger 触发模式
|
||||
* @param vector 中断向量
|
||||
* @param deliver_mode 投递模式
|
||||
* @param dest_shorthand 投递目标速记值
|
||||
* @param apic_type apic的类型 (0:xapic 1: x2apic)
|
||||
* @param destination 投递目标
|
||||
*/
|
||||
extern void ipi_send_IPI(uint32_t dest_mode, uint32_t deliver_status, uint32_t level, uint32_t trigger,
|
||||
uint32_t vector, uint32_t deliver_mode, uint32_t dest_shorthand, uint32_t destination);
|
||||
|
||||
/**
|
||||
* @brief ipi中断处理注册函数
|
||||
@ -36,4 +17,14 @@ extern void ipi_send_IPI(uint32_t dest_mode, uint32_t deliver_status, uint32_t l
|
||||
*/
|
||||
extern int ipi_regiserIPI(uint64_t irq_num, void *arg,
|
||||
void (*handler)(uint64_t irq_num, uint64_t param, struct pt_regs *regs),
|
||||
uint64_t param, hardware_intr_controller *controller, char *irq_name);
|
||||
uint64_t param, hardware_intr_controller *controller, char *irq_name);
|
||||
|
||||
#else
|
||||
int ipi_regiserIPI(uint64_t irq_num, void *arg,
|
||||
void (*handler)(uint64_t irq_num, uint64_t param, struct pt_regs *regs),
|
||||
uint64_t param, hardware_intr_controller *controller, char *irq_name)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
@ -11,7 +11,9 @@
|
||||
#include <sched/sched.h>
|
||||
#include <driver/acpi/acpi.h>
|
||||
#include "exception/trap.h"
|
||||
#include "exception/irq.h"
|
||||
#include "ipi.h"
|
||||
#include <arch/arch.h>
|
||||
|
||||
/* x86-64 specific MSRs */
|
||||
#define MSR_EFER 0xc0000080 /* extended feature register */
|
||||
@ -56,6 +58,7 @@ static struct X86CpuInfo __cpu_info[MAX_SUPPORTED_PROCESSOR_NUM] = {0};
|
||||
void smp_init()
|
||||
{
|
||||
spin_init(&multi_core_starting_lock); // 初始化多核启动锁
|
||||
#if ARCH(I386) || ARCH(X86_64)
|
||||
// 设置多核启动时,要加载的页表
|
||||
__APU_START_CR3 = (uint64_t)get_CR3();
|
||||
|
||||
@ -135,6 +138,7 @@ void smp_init()
|
||||
// 由于ap处理器初始化过程需要用到0x00处的地址,因此初始化完毕后才取消内存地址的重映射
|
||||
rs_unmap_at_low_addr();
|
||||
kinfo("Successfully cleaned page table remapping!\n");
|
||||
#endif
|
||||
io_mfence();
|
||||
}
|
||||
|
||||
@ -149,7 +153,7 @@ void smp_ap_start_stage2()
|
||||
io_mfence();
|
||||
++num_cpu_started;
|
||||
io_mfence();
|
||||
|
||||
#if ARCH(I386) || ARCH(X86_64)
|
||||
rs_apic_init_ap();
|
||||
|
||||
// ============ 为ap处理器初始化IDLE进程 =============
|
||||
@ -160,8 +164,9 @@ void smp_ap_start_stage2()
|
||||
spin_unlock_no_preempt(&multi_core_starting_lock);
|
||||
|
||||
rs_init_syscall_64();
|
||||
|
||||
|
||||
apic_timer_ap_core_init();
|
||||
#endif
|
||||
|
||||
sti();
|
||||
sched();
|
||||
|
Reference in New Issue
Block a user