Rust开发操作系统系列:全新Hello World系统

简介: 正如标题,这篇文章是关于如何用Rust开发一个船新的操作系统,而这个操作系统只会打印一句话: Hello World 在这之前,我们需要了解有关计算机底层的基础知识,包括IO、接口、网络底层等等,当然如果你是老手或者是对Rust一窍不通的人,通过这篇文章也能清楚的了解如何制作一个微型的、有Terminal的操作系统 首先让我们了解一下Rust,[Rust是一门系统编程语言 ,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。

如果想看更好的排版,建议这个链接:http://www.iouyi.top/index.php/archives/235.html
注意:文章篇幅较长,如果想提前拿到代码,可以直接下载附件,大小仅为57k
正如标题,这篇文章是关于如何用Rust开发一个船新的操作系统,而这个操作系统只会打印一句话: Hello World

在这之前,我们需要了解有关计算机底层的基础知识,包括IO、接口、网络底层等等,当然如果你是老手或者是对Rust一窍不通的人,通过这篇文章也能清楚的了解如何制作一个微型的、有Terminal的操作系统


首先让我们了解一下Rust


Rust是一门系统编程语言 ,专注于安全 ,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似 ,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。 Rust已经连续三年(2016,2017,2018)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。
上面的内容采摘自百度百科(本人语言组织不行,请多多见谅)
Rust的官网是 https://www.rust-lang.org/

关于自制操作系统


Rust官网本来就有这个项目的,其文章是英文的,作者也打算计划制作X86_64位系统,因此我准备针对这个计划开发
Rust官网开发单片机系统文章链接: https://rust-embedded.github.io/book

安装开发环境
由于作者目前只在Mac下工作,因此关于 Windows 和 Linux 的就只有等待以后更新!
-------------Mac下安装-------------
下面的命令一键安装Rust

$ curl https://sh.rustup.rs -sSf | sh

开发环境:推荐用微软的 Visual Studio code 或者 Idea,在插件一栏搜索关键词 rust即可
其他软件环境:
cargo-binutils

$ cargo install cargo-binutils

$ rustup target add thumbv6m-none-eabi thumbv7m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf

$ rustup component add llvm-tools-preview

$ brew cask install gcc-arm-embedded

$ brew install openocd

$ brew install qemu

$ #如果该brew cask命令不起作用(例如error: unknown command: cask),则首先运行brew tap Caskroom/tap并再次尝试。

书写代码


到了开始锻炼手的灵活度了,评论区回复打字速度有机会获得奖品哦(其实没有奖品,而是撒子都没得!!!)

使用cargo来创造一个新项目(不瞒你说,其实也可以用IDE直接创建的)
命令:

$ cargo new app

接下来就是进入app文件夹

$ cd app

然后在 Cargo.toml 设置一下添加这些

[dependencies]
cortex-m = "0.5.8"
cortex-m-rt = "0.6.5"
cortex-m-semihosting = "0.3.2"
panic-halt = "0.2.0"

[[bin]]
name = "testos" # 注意!这个name的参数必须与[package]里的name一致
test = false
bench = false

[profile.release]
codegen-units = 1
debug = true
lto = true

就像下面这样

[package]
name = "testos"
version = "0.1.0"
authors = ["moyan"]
edition = "2018"

[dependencies]
cortex-m = "0.5.8"
cortex-m-rt = "0.6.5"
cortex-m-semihosting = "0.3.2"
panic-halt = "0.2.0"

[[bin]]
name = "testos"
test = false
bench = false

[profile.release]
codegen-units = 1 # 更好的优化
debug = true
lto = true # 更好的优化

接下来就是设置Rust的 .config文件夹下的 config 文件
注意:Mac下用访达是无法直接看到这种带 . 的文件夹,可以用IDE看到,也可以用下面的命令看

$ defaults write com.apple.finder AppleShowAllFiles -bool true;

$ KillAll Finder

在 config 文件里添加这些代码

[build]
#代表给 Cortex-M3 的CPU编译系统
target = "thumbv7m-none-eabi"    # Cortex-M3

[target.thumbv7m-none-eabi]
#添加这些命令可以直接使用 cargo run 来运行,如果无法理解这些命令,可以在自己通过本片文章成功运行系统后看Rust官方的文章
runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -semihosting-config enable=on,target=native -kernel"

rustflags = [
#链接
  "-C", "link-arg=-Tlink.x",
]

完成后就可以设置好内存和储存走向了
因为 Rust 官网为我们解决了很多的问题,因此我们只需要些一个文章,那就是 memory.x 文件。注意这个文件创建在src的外面。
在文件里面添加

MEMORY
{
    FLASH : ORIGIN = 0x00000000, LENGTH = 256K
    RAM : ORIGIN = 0x20000000, LENGTH = 64K
}

终于。。。。到了最后一步:修改 main.rs 文件!!!
就像下面这样:

//这个代码是不使用Rust的标准库
#![no_std]
//这个代码表示不使用默认main方法
#![no_main]

//使用panic_halt库
extern crate panic_halt;

use cortex_m_rt::entry;
use cortex_m_semihosting::{hprintln};

#[entry]
fn main() -> ! {
    loop {
        //无限打印 Hello World
        hprintln!("hello world").unwrap();
    }
}

保存之后等待最后一步操作


运行

使用命令:

$ cargo build

$ cargo run

附上运行:

_

结尾


成功运行,感觉良好,希望您们关注收藏点一个赞
相关文章
|
12天前
|
移动开发 Android开发 开发者
移动应用与系统:探索移动开发与操作系统的协同进化###
本文深入探讨了移动应用开发与移动操作系统之间错综复杂的关系,揭示了技术进步如何推动用户体验的飞跃。通过案例分析和技术解析,本文阐述了开发者在适应不断变化的操作系统环境中面临的挑战与机遇,以及这种互动如何塑造了我们的数字生活。 ###
|
21天前
|
人工智能 Linux Android开发
移动应用与系统:探索移动应用开发和操作系统的奥秘
【10月更文挑战第5天】 这篇文章将深入探讨移动应用与系统的关键技术,包括移动应用开发的基本流程、工具和技术,以及移动操作系统的核心原理和架构。我们将从浅入深,逐步揭开移动应用与系统的神秘面纱,帮助读者更好地理解和掌握这一领域的知识。
30 2
|
3天前
|
前端开发 测试技术 调度
移动应用与系统:探索开发与操作系统的奥秘####
【10月更文挑战第22天】 本文深入剖析了移动应用的开发流程与移动操作系统的核心原理,揭示了两者如何相互依存、共同推动移动互联网的发展。从应用架构设计到操作系统性能优化,全方位解读移动生态的技术细节,为开发者和用户提供有价值的参考。 ####
12 5
|
2天前
|
人工智能 前端开发 Android开发
移动应用与系统:探索移动应用开发与操作系统的协同进化
本文深入探讨了移动应用开发与移动操作系统之间的紧密关系,以及它们如何相互影响、共同推动移动技术的发展。文章从移动应用开发的基础知识出发,逐步深入到移动操作系统的核心特性,分析了两者在技术层面的交互作用,并展望了未来的发展趋势。通过具体案例和数据分析,本文揭示了移动应用开发与移动操作系统协同进化的重要性,为开发者提供了宝贵的参考和启示。
|
1天前
|
搜索推荐 前端开发 测试技术
移动应用与系统:探索开发之道与操作系统的演进#### 一、
【10月更文挑战第24天】 本文将带你深入探索移动应用开发的全过程,从构思到上架的每一个细节。同时,我们还将回顾移动操作系统的发展历程,分析当前主流系统的技术特点和未来趋势。无论你是开发者还是普通用户,都能在这里找到感兴趣的内容。 #### 二、
8 1
|
5天前
|
安全 Android开发 数据安全/隐私保护
移动应用与系统:探索开发趋势与操作系统革新#### 一、
【10月更文挑战第20天】 本文旨在剖析当前移动应用开发的热门趋势,并探讨移动操作系统的最新进展与未来展望。通过梳理从原生应用到跨平台开发的转变,以及主流操作系统如iOS和Android的技术创新,本文为开发者提供了一份详尽的行业指南,助力他们在快速迭代的移动科技领域保持领先。 #### 二、
18 2
|
7天前
|
Rust 安全 开发工具
探索 Rust:系统编程语言的新纪元
【10月更文挑战第17天】介绍了 Rust 语言的核心特性,如内存安全、强大的并发编程模型和接近 C/C++ 的性能。文章还涵盖了 Rust 的开发工具,如 Cargo 和 Rustup,以及其在业界的应用,包括微软 Azure 和 Firefox 浏览器。Rust 正在成为系统编程领域的新星,为开发者带来高性能和安全性。
|
18天前
|
安全 Android开发 UED
移动应用与系统:探索移动应用开发和操作系统的融合
【10月更文挑战第8天】 本文深入探讨了移动应用开发和操作系统之间的紧密联系,分析了它们如何共同塑造用户体验。我们将从技术角度出发,揭示移动应用开发的最佳实践,并讨论移动操作系统的关键特性。通过案例研究,我们展示了如何利用这些技术来创建高效、用户友好的移动应用。
31 2
|
22天前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
48 7
|
25天前
|
Rust 安全 Java
探索Rust在系统编程中的崛起
Rust 是一种由 Mozilla 研究院开发的现代系统编程语言,以其在安全性、并发性和内存管理方面的优势,逐渐成为开发者的新宠。Rust 提供内存安全保证且性能媲美 C/C++,支持跨平台开发,并具备强大的并发编程工具。本文将介绍 Rust 的核心优势、工作原理及实施方法,探讨其在系统编程中的崛起及其面临的挑战。尽管 Rust 学习曲线较陡,但其广泛的应用场景和不断壮大的社区使其成为构建高性能、安全应用的理想选择。