Rust开发操作系统系列:全新Hello World系统
如果想看更好的排版,建议这个链接: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
附上运行:
结尾
成功运行,感觉良好,希望您们关注收藏点一个赞

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【福利】BAT架构师分享最全Java架构师学习技能图谱:包含Java编程+网络+设计模式+数据库+分布式等
【福利】总结了一份架构图谱,希望对想成为架构师的朋友有一定的参考和帮助。 我简短谈下目前大家关心的话题:互联网裁员浪潮里,大家会发现一般裁员会先从可替代性的业务性程序员开始,原因很简单,由于日常负责项目大部分都是业务性的,真正有技术实力提升机会非常有限,平时工作繁忙,忽略了提升自己的技术栈。 对此,我想给大家一些过来人的建议,大家除了加班之外,要尽可能多地挤出一些时间来提升自己的技术实力,提升自己在公司的价值度。平衡好工作与生活,关注个人收获与成长,只有自己会得越多,价值越高,才能让你在未来拥有更多的选择与机会,希望我的读者们紧记这一点。以下,enjoy~ Java编程技术点 计算机网络 Java高级技术 经典的设计模式 数据库:MySQL以及 MogoDB等NoSQL 分布式架构涉及的有:分布式redis、分布式session、微服务:dubbo、spring cloud、docker等。 除了上面罗列,我还制作了算法和数据结构、Java并发编程等全套高清架构知识图谱,想要领取完整版,关注【mikechen优知】,私信【架构师知识图谱】。觉得内容不错请点赞支持,更多BAT技术架构+面...
- 下一篇
年度回顾:2018年的AI/ML惊喜及预测19年的走势(一)
考虑到技术变革的速度,我认为让专业IT人士分享他们对2018年最大惊喜及2019年预测的看法会很有趣。以下是他们对人工智能(AI),机器学习( ML)和其他数据科学迭代的看法: CLARA分析公司首席执行官兼创始人:Chiara Lakshmikanthan 2018年的惊喜:我对AI已经应用于InsureTech行业的快速步伐感到惊讶。但更重要的是,商业保险公司在其工作流程的某些部分(如承保,理赔业务和客户服务)开始使用AI以保持竞争优势。 2019年的预测:在B2B 的AI领域,人们越来越关注硬实力的储蓄和价值。AI的理论价值主张被广泛接受,但是,大多数公司在未来几年对AI技术提供商的期望也将更高。 Sinequa产品营销总监Scott Parker: 虽然围绕ML和AI进行了大量宣传,但具有变革性的AI还有很多仍在实验室中进行测试。 对于2019年,ML和AI最终会以某种方式从实验室和现有应用程序中找到出路。在大多数情况下,人们甚至不知道它在那里,因为它将以无缝的方式嵌入。 数据科学家Minkyung Kang: 惊喜:端到端机器学习服务使ML工作流程变得更加简单。数据科学家和开...
相关文章
文章评论
共有0条评论来说两句吧...