diff --git a/.vscode/settings.json b/.vscode/settings.json index de89f68f..97f00e33 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -108,7 +108,8 @@ "ahci.h": "c", "slab.h": "c", "boot_info.h": "c", - "pci.h": "c" + "pci.h": "c", + "time.h": "c" }, "C_Cpp.errorSquiggles": "Enabled", "esbonio.sphinx.confDir": "" diff --git a/kernel/common/time.h b/kernel/common/time.h index d6fdaeb8..a7b0ae89 100644 --- a/kernel/common/time.h +++ b/kernel/common/time.h @@ -37,6 +37,14 @@ struct timespec */ extern int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); +/** + * @brief 睡眠指定时间 + * + * @param usec 微秒 + * @return int + */ +extern int usleep(useconds_t usec); + /** * @brief 获取当前的CPU时间 * diff --git a/kernel/main.c b/kernel/main.c index 67a1f131..fcfc9b2f 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -154,9 +154,10 @@ void system_initialize() // fat32_init(); HPET_enable(); - usb_init(); + // 系统初始化到此结束,剩下的初始化功能应当放在初始内核线程中执行 apic_timer_init(); + } //操作系统内核从这里开始执行 diff --git a/kernel/process/process.c b/kernel/process/process.c index df28cba0..89d9b767 100644 --- a/kernel/process/process.c +++ b/kernel/process/process.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -410,7 +411,10 @@ ul initial_kernel_thread(ul arg) // kinfo("initial proc running...\targ:%#018lx", arg); fat32_init(); + usb_init(); + + // 准备切换到用户态 struct pt_regs *regs; current_pcb->thread->rip = (ul)ret_from_system_call; diff --git a/kernel/time/sleep.c b/kernel/time/sleep.c index 90df0353..6646c205 100644 --- a/kernel/time/sleep.c +++ b/kernel/time/sleep.c @@ -59,4 +59,20 @@ int nanosleep(const struct timespec *rqtp, struct timespec *rmtp) } return 0; -} \ No newline at end of file +} + +/** + * @brief 睡眠指定时间 + * + * @param usec 微秒 + * @return int + */ +int usleep(useconds_t usec) +{ + struct timespec ts = { + tv_sec : (long int)(usec / 1000000), + tv_nsec : (long int)(usec % 1000000) * 1000UL + }; + + return nanosleep(&ts, NULL); +} diff --git a/kernel/time/sleep.h b/kernel/time/sleep.h index a256222c..986e9628 100644 --- a/kernel/time/sleep.h +++ b/kernel/time/sleep.h @@ -14,3 +14,10 @@ */ int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); +/** + * @brief 睡眠指定时间 + * + * @param usec 微秒 + * @return int + */ +int usleep(useconds_t usec); \ No newline at end of file