news 2026/4/27 3:10:02

如何从零构建操作系统命令行界面:os-tutorial shell开发终极指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何从零构建操作系统命令行界面:os-tutorial shell开发终极指南

如何从零构建操作系统命令行界面:os-tutorial shell开发终极指南

【免费下载链接】os-tutorialHow to create an OS from scratch项目地址: https://gitcode.com/gh_mirrors/os/os-tutorial

os-tutorial 是一个从零开始构建操作系统的开源项目,其中 shell 开发是实现用户交互的关键环节。本文将带你了解如何在该项目中从零构建一个简单但功能完整的操作系统命令行界面,掌握 shell 开发的核心技术和实现步骤。

一、shell 开发前的准备工作

在开始 shell 开发之前,需要对项目代码进行一些整理和优化,为后续开发打下良好基础。

1.1 代码结构调整

随着项目的不断发展,代码结构需要进行相应的调整。将原有的utils.c拆分为mem.cstring.c,并分别配上相应的头文件,形成 libc 库的雏形,方便后续字符串处理等功能的实现。同时,创建irq_install()函数,使内核只需一次调用即可初始化所有的 IRQs,类似于isr_install()函数,该函数位于irq.c文件中。

1.2 文件夹结构优化

为了使代码组织更加清晰,将drivers/ports.*移动到cpu/目录下,因为这部分代码明显与 CPU 相关。虽然boot/目录下的代码也与 CPU 相关,但在实现不同机器的引导序列之前,暂时不做改动。

1.3 Makefile 配置完善

Makefile中添加更多的CFLAGS开关,以避免编译器在我们声明错误时包含任何外部代码。同时,添加一些将警告转换为错误的标志,因为指针转换中的一个小错误可能会在后续造成严重问题。这些修改也促使我们调整代码中一些杂项指针的声明。

二、键盘输入处理

要实现 shell,首先需要能够获取用户的键盘输入。

2.1 键盘字符获取

当按键被按下时,回调函数通过keyboard.c开头定义的新数组获取 ASCII 码,然后将该字符附加到缓冲区key_buffer中,并同时显示在屏幕上。当操作系统想要读取用户输入时,它会调用libc/io.c:readline()函数。

2.2 退格键处理

keyboard.c还会解析退格键,通过删除键缓冲区的最后一个元素,并调用screen.c:kprint_backspace()函数从屏幕上删除该字符。为此,需要对print_char()函数进行修改,使其在打印退格键时不推进偏移量。

三、shell 核心功能实现

shell 的核心功能是接收用户输入并做出相应的响应。

3.1 用户输入响应

键盘回调函数会检查换行符,然后通知内核用户已输入内容。项目中的 libc 函数strcmp()用于比较两个字符串,如果相等则返回 0。当用户输入 "END" 时,系统会执行asm volatile("hlt")指令来停止 CPU。相关代码可以在 kernel.c 中查看,其中user_input函数处理用户输入并做出响应。

3.2 简单 shell 的实现

这是一个最基本的 shell,但它是从零开始实现的,具有重要的意义。你可以根据需要扩展kernel.c来解析更多命令,在未来实现文件系统后,还可以允许用户运行一些基本命令。

四、总结

通过 os-tutorial 项目,我们一步步实现了从代码整理到键盘输入处理,再到 shell 核心功能的开发。虽然这个 shell 非常简单,但它展示了操作系统命令行界面的基本工作原理。通过这个项目,你可以深入了解操作系统的底层开发,为进一步学习和探索打下坚实的基础。如果你想深入学习,可以参考项目中的各个模块,如 cpu/、drivers/ 和 libc/ 等,继续扩展和完善 shell 的功能。

要开始这个项目,你可以通过以下命令克隆仓库:git clone https://gitcode.com/gh_mirrors/os/os-tutorial,然后按照项目中的文档逐步进行学习和实践。

【免费下载链接】os-tutorialHow to create an OS from scratch项目地址: https://gitcode.com/gh_mirrors/os/os-tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 3:08:20

AI编程提示词工程:从原理到实践,打造高效开发工作流

1. 项目概述:一个面向开发者的提示词仓库如果你是一名开发者,尤其是最近在尝试使用像 Cursor、Windsurf、DeepSeek Coder 这类 AI 编程助手,那你肯定对“提示词”这个词不陌生。简单来说,提示词就是你与 AI 对话的“指令”&#x…

作者头像 李华
网站建设 2026/4/27 3:07:57

深度学习模型评估:从基础指标到工业实践

1. 深度模型评估的本质与挑战 评估深度学习模型的能力从来都不是简单的准确率数字游戏。三年前我在处理医疗影像分类项目时,曾遇到验证集准确率98%的模型在实际临床测试中完全失效的案例——这让我深刻认识到,模型评估是需要系统化思维的工程技术。 评估…

作者头像 李华
网站建设 2026/4/27 3:07:19

SWE-ReX:为AI智能体构建安全可控的代码执行沙盒环境

1. 项目概述:为AI智能体构建一个安全的“沙盒游乐场”如果你正在开发一个能写代码、修Bug的AI智能体,比如让它去自动解决GitHub上的issue,那你肯定绕不开一个核心问题:怎么让这个AI安全、可控地去执行它生成的代码?总不…

作者头像 李华
网站建设 2026/4/27 3:01:50

litehtml进阶应用:构建轻量级浏览器和HTML工具提示系统

litehtml进阶应用:构建轻量级浏览器和HTML工具提示系统 【免费下载链接】litehtml Fast and lightweight HTML/CSS rendering engine 项目地址: https://gitcode.com/gh_mirrors/li/litehtml litehtml是一款轻量级HTML/CSS渲染引擎,它特别适合用于…

作者头像 李华
网站建设 2026/4/27 3:01:33

突破实时数据处理极限:Pathway性能基准测试完整指南

突破实时数据处理极限:Pathway性能基准测试完整指南 【免费下载链接】pathway Python ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG. 项目地址: https://gitcode.com/GitHub_Trending/pa/pathway Pathway是一款强大的…

作者头像 李华
网站建设 2026/4/27 3:00:42

Piranha CMS 分类与标签系统:内容组织与导航的完整指南

Piranha CMS 分类与标签系统:内容组织与导航的完整指南 【免费下载链接】piranha.core Piranha CMS is the friendly editor-focused CMS for .NET that can be used both as an integrated CMS or as a headless API. 项目地址: https://gitcode.com/gh_mirrors/…

作者头像 李华