写在前面
本随笔是非常菜的菜鸡写的。如有问题请及时提出。
可以联系:[email protected]
GitHhub:https://github.com/WindDevil (目前啥也没有
rCore官方文档
实验环境配置 - rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档 (rcore-os.cn)
配置C开发环境
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
detail
sudo apt-get update
:这个命令的作用是更新你的包管理系统索引。当你执行这个命令时,系统会访问它的软件源列表,检查每个源是否有更新的软件包版本。这个过程不会改变你系统上已安装的软件版本,只是确保你的系统知道有哪些软件包有新版本可供升级。sudo apt-get upgrade
:这个命令则是用来将系统中所有已安装的软件包升级到它们的最新版本。前提是这些新版本已经在之前apt-get update
命令中获取的软件包列表里。这个过程会改变你系统上软件的实际版本,通常会修复安全漏洞、添加新功能或者改进现有功能。- 用
&&
连接,意味着第一个命令成功执行后才会执行第二个命令。 sudo apt-get install
: 这是用来安装软件包的基本命令,sudo
确保命令以管理员权限运行,以便修改系统文件和安装软件。git
: 是一个分布式版本控制系统,用于跟踪文件及文件夹的更改,方便代码管理和协同开发。build-essential
: 是一个元软件包,它会安装构建Ubuntu软件所需的编译工具,包括gcc、g++等。gdb-multiarch
: 是GDB(GNU Debugger)的一个版本,支持多种体系结构,允许你在不同架构的程序上进行调试。qemu-system-misc
: QEMU是一个通用的开源机器模拟器和虚拟机,能模拟各种硬件。qemu-system-misc
包可能包含了用于模拟多种系统架构的QEMU组件,尽管通常会有更具体的目标架构包,这里可能是为了支持多架构或特定于某些未明确指出的模拟需求。gcc-riscv64-linux-gnu
: 是GCC(GNU Compiler Collection)的RISC-V 64位版本,用于编译针对RISC-V架构的Linux程序。binutils-riscv64-linux-gnu
: Binutils是一套编程工具,包括链接器、汇编器等,binutils-riscv64-linux-gnu
为RISC-V 64位架构提供了这些工具,支持编译和处理RISC-V目标代码。
配置Rust开发环境
官方安装脚本安装
curl https://sh.rustup.rs -sSf | sh
detail
curl
: 是一个命令行工具,用于从网络传输数据。你可以用它来下载文件或者获取网页内容。https://sh.rustup.rs
: 是Rust官方提供的安装脚本的URL。sh.rustup.rs
是一个shell脚本,专为安装Rust编程环境设计,包括Rust编译器(rustc
)、包管理器(cargo
)和其他相关工具。-sSf
: 这些是传递给curl
的选项,各自代表:-s
,--silent
: 让curl
静默执行,不输出进度信息。-S
,--show-error
: 即使在静默模式下,当发生错误时也会显示错误信息。-f
,--fail
: 当HTTP请求返回错误时,让curl
退出并返回非零状态码。
|
: 管道符号,用于将前一个命令的输出作为后一个命令的输入。sh
: 是Shell的命令,这里用于执行通过管道传递过来的下载的shell脚本。这意味着从curl
命令下载的Rust安装脚本会被立即在当前Shell会话中执行,开始Rust的安装过程。
更新环境变量
source $HOME/.cargo/env
detail
source
: 或者用点.
表示(即. $HOME/.cargo/env
),是一个Shell内置命令,作用是读取并执行一个文件中的命令,而不是启动一个新的子Shell来执行。这意味着通过source
执行脚本后,脚本中设置的环境变量、别名等修改会直接影响到当前的Shell会话。$HOME
: 是一个环境变量,指向当前用户的家目录。在大多数Unix-like系统中,这通常是/home/用户名
。/.cargo/env
: 文件路径表示在Cargo(Rust的包管理器)的配置目录下有一个名为env
的文件。当你安装Rust通过Rustup时,这个env
文件通常会被创建或更新,里面可能包含了一些环境变量的设置,用于指向Rust工具链(如rustc
编译器、cargo
命令等)的路径,确保这些工具能够被系统正确找到并使用。
检查Rust版本
rustc --version
确保其为nightly版本
目前用于操作系统实验开发的 rustc 编译器的版本不局限在 1.46.0 这样的数字上,你可以选择更新版本的 rustc 编译器。但注意只能用 rustc 的 nightly 类型的版本。
rustup install nightly
rustup default nightly
给Rustup换源
设置中科大源
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
设置tuna源
export RUSTUP_DIST_SERVER=https://mirrors.tuna.edu.cn/rustup
export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.edu.cn/rustup/rustup
给Gargo也换源
打开~/.cargo/config
文件,如果没有就新建一个.用sudo touch config
可以在 当前 目录下新建.
中科大源
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
tuna源
[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
detail
- 当你在路径中看到
~
,如~/.cargo/config
,这指的是位于当前用户家目录下的.cargo
目录中的config
文件。换句话说,这个路径等同于将当前用户的用户名填充进去,假如当前用户的用户名是user1
,那么~/.cargo/config
就相当于/home/user1/.cargo/config
. - 可以
cd ~/.cargo
然后touch config
,这时候打开vim
就可以开始编辑了. - 这里可以用一些小的trick,比如使用
thunar ./
打开图形化界面,直接点击这个文件就完事了.不知道有没有人觉得cd
一个确定的文件夹是非常方便的,但是有的操作在进入文件夹以后使用图形化界面使用起来会更加的方便,
安装Rust软件包
rustup target add riscv64gc-unknown-none-elf
cargo install cargo-binutils
rustup component add llvm-tools-preview
rustup component add rust-src
安装QEMU
安装依赖包
sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
gawk build-essential bison flex texinfo gperf libtool patchutils bc \
zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev libslirp-dev \
git tmux python3 python3-pip ninja-build
detail
autoconf
,automake
,autotools-dev
: 自动配置和构建工具,用于简化软件的编译和安装过程。curl
: 命令行工具,用于从网络传输数据,常用于下载文件或与HTTP(S)服务器交互。libmpc-dev
,libmpfr-dev
,libgmp-dev
: 多精度计算库的开发文件,用于处理高精度算术运算。gawk
,bison
,flex
: 文本处理和解析工具,常用于编译器和解释器的开发。texinfo
: GNU文档系统,用于生成软件的说明书和手册页。gperf
: 一个完美哈希函数生成器,用于优化代码中的查找表。libtool
,patchutils
,bc
: 分别是共享库工具、补丁工具集合和一个计算器,用于各种开发辅助任务。zlib1g-dev
: zlib压缩库的开发文件,支持数据压缩功能。libexpat-dev
: XML解析库的开发文件。pkg-config
: 一个帮助程序,用于获取编译和链接库所需的编译器标志和库路径。libglib2.0-dev
: GLib库的开发文件,GLib是GTK+和GNOME项目的基础库,提供了多种基础的数据结构和实用函数。libpixman-1-dev
: Pixman库的开发文件,用于加速像素操作,特别是在图形渲染中。libsdl2-dev
: Simple DirectMedia Layer (SDL) 版本2的开发库,用于多媒体和游戏开发。libslirp-dev
: 一个轻量级用户空间网络堆栈库,用于虚拟化环境中的网络连接。git
: 版本控制系统,用于跟踪文件和协调开发。tmux
: 终端复用器,允许在一个终端窗口中管理多个会话。python3
,python3-pip
: Python 3解释器和Python包管理器,用于运行Python脚本和管理Python库。ninja-build
: 一个小型构建系统,旨在快速编译大型软件项目。
下载QEMU源码包
wget https://download.qemu.org/qemu-7.0.0.tar.xz
detail
wget
是一个在网络上下载文件的命令行工具,支持HTTP, HTTPS, FTP等协议。具体分析如下:
- wget: 命令行程序的名字,用于下载文件。
https://download.qemu.org/qemu-7.0.0.tar.xz
: 要下载的文件的URL。这里,它指向QEMU项目官方网站的下载页面上7.0.0版本的源代码压缩包。
解压
tar xvJf qemu-7.0.0.tar.xz
编译安装
cd qemu-7.0.0
./configure --target-list=riscv64-softmmu,riscv64-linux-user
make -j$(nproc)
detail
./configure
是一个脚本,riscv64-softmmu
和riscv64-linux-user
是它的两个目标文件,这个脚本是用来准备源代码树以便于编译的.
make -j$(nproc)
用来执行编译:
make
: 是一个非常常用的构建工具,它根据Makefile
中的规则来编译源代码、链接库文件以及执行其他构建相关的任务。Makefile
定义了项目如何从源代码构建到可执行文件或库的过程。-j
: 是make
命令的一个选项,用于指定并发执行的任务数量,即可以同时运行的编译任务数。这在多核处理器系统中特别有用,因为它可以显著减少整体编译时间。$(nproc)
: 是一个在许多类Unix系统(包括Linux)中可用的命令或Shell变量,它会返回系统中的逻辑处理器数量。这意味着nproc
会被Shell先执行,其结果(处理器核心数)会被用作-j
选项的参数值。这样做能自动根据你的硬件配置来优化并行编译的程度,而无需手动指定处理器核心数量。
安装到默认位置
sudo make install
配置./bashrc文件
用vim进行编辑
用sudo apt-get vim
安装vim
.
直接打开这个文件
vim ~/.bashrc
可以打开这个文件进行编辑
detail
- vim 主要的几种模式及其特点:
- 正常模式(Normal mode):
- 进入Vim后默认处于此模式。
- 可以使用各种快捷键进行文本导航、删除、复制、粘贴等操作,但不能直接输入文本。
- 按
Esc
或Ctrl + [
可以从其他模式回到正常模式。
- 插入模式(Insert mode):
- 用于输入文本。
- 从正常模式按
i
、a
、o
等键进入,分别在光标前、光标后、当前行下方插入文本。 - 按
Esc
返回正常模式。
- 可视模式(Visual mode):
- 用于选择文本区域。
- 在正常模式下,按
v
进入字符可视模式,按V
进入行可视模式,按Ctrl + v
进入块可视模式。 - 选中区域后,可以进行复制、剪切、替换等操作。
- 命令行模式(Command mode):
- 在正常模式下,按
:
进入,底部会出现冒号提示符。 - 可以在此模式下输入保存文件(
:w
)、退出Vim(:q
)、强制退出(:q!
)、保存并退出(:wq
)等命令。 - 输入完成后按回车执行命令。
- 在正常模式下,按
- 末行模式(Last line mode):
- 类似于命令行模式,但在某些情况下有细微差别,比如在执行搜索替换操作时使用
:/?
进入。 - 用于执行复杂命令,如搜索、替换文本等。
- 类似于命令行模式,但在某些情况下有细微差别,比如在执行搜索替换操作时使用
- 正常模式(Normal mode):
- 启用粘贴模式(Paste mode)
- 进入正常模式:首先,确保你处于正常模式(按
Esc
或Ctrl + [
)。 - 开启粘贴模式:输入
:set paste
命令,然后按回车。这会关闭自动缩进和自动格式化功能,使得粘贴的文本保持原样。 - 粘贴文本:现在可以使用系统的粘贴快捷键了,通常是
Ctrl + V
(在MacOS上可能是Cmd + V
)。 - 禁用粘贴模式:粘贴完毕后,再次进入正常模式,输入
:set nopaste
,按回车,以重新启用Vim的自动格式化特性。 - 保存并继续:根据需要,你可以使用
:w
保存文件,或者:wq
保存并退出。
- 进入正常模式:首先,确保你处于正常模式(按
- 在正常模式下(如果你正在插入模式下输入,先按
Esc
或Ctrl + [
切换到正常模式),敲击u
键。这会撤销最近的一次修改。 ctrl+shift+v
是linux下的复制.
下载GDB调试工具
- 支持 riscv64 指令集的 gdb 调试器
riscv64-unknown-elf-gdb
- 下载链接:Ubuntu版本的调试工具
- 解压命令
ar -xvzf riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14.tar.gz riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14/
detail
- 我把它放在了
~/App
里边.这个文件夹是自建的,可以mkdir ./App
也可以选择图形界面操作 - 我发现没办法直接把这个压缩包拖动到虚拟机,可以使用`wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14.tar.gz来下载
- tar命令:
x
是解压操作v
可选项,用于显示解压过程中的详细信息f
指定归档文件名z
是使用gzip
解压.tgz
或者.tar.gz
的文件j
是使用bzip2解压.tar.bz2
的文件J
表示使用xz解压.xz
配置~/.bashrc
文件
在文件的最后一行加入,这里注意我的username
是winddevil
,注意把正确的路径填写好就行,不行可以尝试ls path
,尝试访问这个地址看看.
export PATH="$PATH:/home/winddevil/App/riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14/bin"
更新.bashrc
文件
使用这条指令,或者重新打开bash
.
source ~/.bashrc
验证环境
获取rCor-Tutorial-v3的安装包
git clone https://github.com/rcore-os/rCore-Tutorial-v3.git
尝试运行
cd rCore-Tutorial-v3/os
make run
退出QEMU
这里官方说,使用如下指令可以退出
Ctrl+A
X
实际上我发现需要这个指令来退出
Ctrl+C
安装中文输入法
安装个中文输入法吧?也许完全是没有必要的
标签:riscv64,03,文件,cargo,配置,dev,开发,模式,https From: https://www.cnblogs.com/chenhan-winddevil/p/18292632