首页 > 其他分享 >03 配置开发环境

03 配置开发环境

时间:2024-07-09 19:54:23浏览次数:9  
标签:riscv64 03 文件 cargo 配置 dev 开发 模式 https

写在前面

本随笔是非常菜的菜鸡写的。如有问题请及时提出。

可以联系:[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

  1. sudo apt-get update:这个命令的作用是更新你的包管理系统索引。当你执行这个命令时,系统会访问它的软件源列表,检查每个源是否有更新的软件包版本。这个过程不会改变你系统上已安装的软件版本,只是确保你的系统知道有哪些软件包有新版本可供升级。
  2. sudo apt-get upgrade:这个命令则是用来将系统中所有已安装的软件包升级到它们的最新版本。前提是这些新版本已经在之前apt-get update命令中获取的软件包列表里。这个过程会改变你系统上软件的实际版本,通常会修复安全漏洞、添加新功能或者改进现有功能。
  3. &&连接,意味着第一个命令成功执行后才会执行第二个命令。
  4. sudo apt-get install: 这是用来安装软件包的基本命令,sudo确保命令以管理员权限运行,以便修改系统文件和安装软件。
  5. git: 是一个分布式版本控制系统,用于跟踪文件及文件夹的更改,方便代码管理和协同开发。
  6. build-essential: 是一个元软件包,它会安装构建Ubuntu软件所需的编译工具,包括gcc、g++等。
  7. gdb-multiarch: 是GDB(GNU Debugger)的一个版本,支持多种体系结构,允许你在不同架构的程序上进行调试。
  8. qemu-system-misc: QEMU是一个通用的开源机器模拟器和虚拟机,能模拟各种硬件。qemu-system-misc包可能包含了用于模拟多种系统架构的QEMU组件,尽管通常会有更具体的目标架构包,这里可能是为了支持多架构或特定于某些未明确指出的模拟需求。
  9. gcc-riscv64-linux-gnu: 是GCC(GNU Compiler Collection)的RISC-V 64位版本,用于编译针对RISC-V架构的Linux程序。
  10. binutils-riscv64-linux-gnu: Binutils是一套编程工具,包括链接器、汇编器等,binutils-riscv64-linux-gnu为RISC-V 64位架构提供了这些工具,支持编译和处理RISC-V目标代码。

配置Rust开发环境

官方安装脚本安装

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

detail

  1. curl: 是一个命令行工具,用于从网络传输数据。你可以用它来下载文件或者获取网页内容。
  2. https://sh.rustup.rs: 是Rust官方提供的安装脚本的URL。sh.rustup.rs是一个shell脚本,专为安装Rust编程环境设计,包括Rust编译器(rustc)、包管理器(cargo)和其他相关工具。
  3. -sSf: 这些是传递给curl的选项,各自代表:
    • -s--silent: 让curl静默执行,不输出进度信息。
    • -S--show-error: 即使在静默模式下,当发生错误时也会显示错误信息。
    • -f--fail: 当HTTP请求返回错误时,让curl退出并返回非零状态码。
  4. |: 管道符号,用于将前一个命令的输出作为后一个命令的输入。
  5. sh: 是Shell的命令,这里用于执行通过管道传递过来的下载的shell脚本。这意味着从curl命令下载的Rust安装脚本会被立即在当前Shell会话中执行,开始Rust的安装过程。

更新环境变量

source $HOME/.cargo/env

detail

  1. source: 或者用点.表示(即. $HOME/.cargo/env),是一个Shell内置命令,作用是读取并执行一个文件中的命令,而不是启动一个新的子Shell来执行。这意味着通过source执行脚本后,脚本中设置的环境变量、别名等修改会直接影响到当前的Shell会话。
  2. $HOME: 是一个环境变量,指向当前用户的家目录。在大多数Unix-like系统中,这通常是/home/用户名
  3. /.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

  1. 当你在路径中看到~,如~/.cargo/config,这指的是位于当前用户家目录下的.cargo目录中的config文件。换句话说,这个路径等同于将当前用户的用户名填充进去,假如当前用户的用户名是user1,那么~/.cargo/config就相当于/home/user1/.cargo/config.
  2. 可以cd ~/.cargo然后touch config,这时候打开vim就可以开始编辑了.
  3. 这里可以用一些小的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-softmmuriscv64-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

  1. vim 主要的几种模式及其特点:
    1. 正常模式(Normal mode):
      • 进入Vim后默认处于此模式。
      • 可以使用各种快捷键进行文本导航、删除、复制、粘贴等操作,但不能直接输入文本。
      • EscCtrl + [可以从其他模式回到正常模式。
    2. 插入模式(Insert mode):
      • 用于输入文本。
      • 从正常模式按iao等键进入,分别在光标前、光标后、当前行下方插入文本。
      • Esc返回正常模式。
    3. 可视模式(Visual mode):
      • 用于选择文本区域。
      • 在正常模式下,按v进入字符可视模式,按V进入行可视模式,按Ctrl + v进入块可视模式。
      • 选中区域后,可以进行复制、剪切、替换等操作。
    4. 命令行模式(Command mode):
      • 在正常模式下,按:进入,底部会出现冒号提示符。
      • 可以在此模式下输入保存文件(:w)、退出Vim(:q)、强制退出(:q!)、保存并退出(:wq)等命令。
      • 输入完成后按回车执行命令。
    5. 末行模式(Last line mode):
      • 类似于命令行模式,但在某些情况下有细微差别,比如在执行搜索替换操作时使用:/?进入。
      • 用于执行复杂命令,如搜索、替换文本等。
  2. 启用粘贴模式(Paste mode)
    1. 进入正常模式:首先,确保你处于正常模式(按EscCtrl + [)。
    2. 开启粘贴模式:输入:set paste命令,然后按回车。这会关闭自动缩进和自动格式化功能,使得粘贴的文本保持原样。
    3. 粘贴文本:现在可以使用系统的粘贴快捷键了,通常是Ctrl + V(在MacOS上可能是Cmd + V)。
    4. 禁用粘贴模式:粘贴完毕后,再次进入正常模式,输入:set nopaste,按回车,以重新启用Vim的自动格式化特性。
    5. 保存并继续:根据需要,你可以使用:w保存文件,或者:wq保存并退出。
  3. 正常模式下(如果你正在插入模式下输入,先按EscCtrl + [切换到正常模式),敲击u键。这会撤销最近的一次修改。
  4. ctrl+shift+v是linux下的复制.

下载GDB调试工具

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

  1. 我把它放在了~/App里边.这个文件夹是自建的,可以mkdir ./App也可以选择图形界面操作
  2. 我发现没办法直接把这个压缩包拖动到虚拟机,可以使用`wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14.tar.gz来下载
  3. tar命令:
    • x 是解压操作
    • v 可选项,用于显示解压过程中的详细信息
    • f 指定归档文件名
    • z是使用gzip解压.tgz或者.tar.gz的文件
    • j是使用bzip2解压.tar.bz2的文件
    • J 表示使用xz解压.xz

配置~/.bashrc文件

在文件的最后一行加入,这里注意我的usernamewinddevil,注意把正确的路径填写好就行,不行可以尝试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

相关文章

  • jmeter自定义函数开发—Web3钱包生成工具
    之前使用Jmeter进行接口测试时,有生成钱包地址的需求,于是有时间就简单写了个自定义函数环境说明JDK1.8.0,Jmeter5.4.3,maven构建工具实现代码新建一个简单的maven项目即可,以下是pom.xml配置<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org......
  • OpenDevin 简介:一个有抱负的 AI 驱动的软件开发平台
    来源链接:https://medium.com/ai-advances/introduction-to-opendevin-the-aspiring-ai-powered-software-development-platform-11ffc69e60cc发布时间:2024-05-05T00:40:39.078ZOpenDevin是一个创新的开源项目,旨在通过引入一个自主的AI软件工程师来彻底改变软件开发。这个AI......
  • OceanBase 配置项&系统变量实现及应用详解(2):系统变量的定义及使用场景
    在上一篇博客,配置项的定义及使用方法,详细阐述了配置项的概念及其基本应用方式,这些配置项能够调控集群或租户的行为方式。然而,在实际使用OceanBase的过程中,我们有时仅希望针对当前会话调整某些行为特性,且在关闭会话连接后,这些调整不会影响后续的使用。此时,我们就需要借助“系统......
  • Failed to configure a DataSource: 'url' attribute is not specified and no embe..
    原文链接: https://www.cnblogs.com/javawxid/p/10949511.html问题原因:Mybatis没有找到合适的加载类,其实是大部分spring-datasource-url没有加载成功,分析原因如下所示.DataSourceAutoConfiguration会自动加载.没有配置spring-datasource-url 属性.spring......
  • 使用雨云服务器安装1Panel面板并配置环境
    序言之前发过了用雨云安装宝塔的教程(学生党如何自建个人博客(附免费二级域名、虚拟主机、cdn、SSL白嫖教程)(干货预警))。前段时间雨云的【预安装软件】中出现了一个【1Panel面板】,我就买来体验了以下,整体感觉比宝塔好。1Panel的优势与劣势发展较晚,UI设计理念更先进,更加简洁,广告少......
  • 企业协同办公+应用开发平台:推动数字化转型的新引擎
    在数字化浪潮的推动下,企业协同办公和应用开发平台已成为企业提高效率、加速创新的关键工具。这两个领域的结合,不仅为企业提供了更加灵活、高效的工作方式,还为企业打造了全新的数字化生态,推动企业向数字化转型的深水区迈进。企业协同办公:提升工作效率的利器企业协同办公系统......
  • 【游戏开发】记录第一次线下gamejam
    记录第一次线下gamejamciga48h极限开发gamejam本人之前参加过很多线上游戏开发比赛,线下比赛还是第一次。一般大众的普遍认为线下gamejam都是来放松的,感受氛围的那种,来这随便组队,随意一点的那种。(不过我旁边那组就真的是公司来旅游一样挺放松的)但实际不是。。线下群里200号......
  • 面壁智能发布端侧 AI 应用开发平台;快手推出肖像动画技术 LivePortrait丨 RTE 开发者日
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • 创建vue2项目执行npm install -g @vue/cli报错 no such file or directory, mkdir '\
    第一步:查看默认全局安装路径。指令:npmconfiggetprefix我这里路径npmconfiggetprefixE:\NVM\nvm\node_global第二步:不存在这个路劲进行更换npmconfigsetprefix"D:\Develop\nodejs"nodejs里面有node_cachenode_globalnode_modules这些文件npmconfiggetpre......
  • Jenkins 配置文件管理插件 Config File Provider
    我对Jenkins的使用,很早就脱离了创建普通job然后进行各种参数配置这样的使用方式,一直以来都在使用Pipeline多分支流水线基于Groovy脚本的方式来进行构建。程序化即是可通用化,将多个需要构建的工程统一标准进行抽象,形成统一的构建模型,然后编写groovy脚本形成Jenkinsfile来构......