初试Rust,以后 linux 驱动代码可能要用 Rust 来写了
哈喽,大家好,我是LittleG。
前言
之前文章《Android java、native、kernel获取堆栈信息常用方法总结》有提到编程语言是工具。我最近刚刚入手了一个新的工具,就是 Rust ,记录分享下。
【资料图】
简单介绍下 Rust :
Rust 是最近几年很火的一门编程语言,由 Mozilla 公司开发。据说安全性
要比 C 或 C++ 语言好,而且效率
可以媲美 C 或 C++ 语言。目前谷歌在力推,正在逐步替换进Android
。貌似 Linux 内核
也在接受改变,网上有传,占据linux内核代码将近一半的驱动代码
,有率先被 Rust 替换开发的可能;也就是说,以后我们写 linux 驱动代码,很有可能就要用 Rust 来写了
。
了解几个 Rust 相关概念:
rustup
是 rust 官方推出的基于 终端/控制台/shell 的工具链管理工具,可用于管理 rust 版本和相关工具,如安装哪个版本的rust和常用组件等。
cargo
是用 rust 写的一个包管理工具(可以直接在上搜到并当作依赖来用) + 工程管理工具,类似c++ 等同于conan+cmake+make;可以用来构建工程,最后编译还是用 rustc。
rustc
是 rust 的编译器。类似 c++ 等同于gcc g++。
我决定尝鲜体验 rust 的环境是 ubuntu ,考虑到是刚新装ok的ubuntu ,所以在下载安装rust之前,我先需要更新下ubuntu 包管理工具的镜像源,更新为国内的镜像源,避免被墙的问题,下载速度也会快很多。网上找了 ubuntu 的 tsinghua 镜像源,配置如下:
1、修改保存到 /etc/apt/
:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb /ubuntu/ jammy main restricted universe multiverse# deb-src /ubuntu/ jammy main restricted universe multiversedeb /ubuntu/ jammy-updates main restricted universe multiverse# deb-src /ubuntu/ jammy-updates main restricted universe multiversedeb /ubuntu/ jammy-backports main restricted universe multiverse# deb-src /ubuntu/ jammy-backports main restricted universe multiversedeb /ubuntu/ jammy-security main restricted universe multiverse# deb-src /ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源,不建议启用# deb /ubuntu/ jammy-proposed main restricted universe multiverse# deb-src /ubuntu/ jammy-proposed main restricted universe multiverse
2、保存/etc/apt/
并退出后,更新deb源即可;
sudo apt update
等待更新完成即可;
镜像源更新ok,然后就可以开始安装 rust 了。
Linux下安装命令为curl --proto "=https" -- -sSf | sh
:
james@linux:~$ curl --proto "=https" -- -sSf | shinfo: downloading installerWelcome to Rust!This will download and install the official compiler for the Rustprogramming language, and its package manager, metadata and toolchains will be installed into the Rustuphome directory, located at: /home/james/.rustupThis can be modified with the RUSTUP_HOME environment Cargo home directory is located at: /home/james/.cargoThis can be modified with the CARGO_HOME environment cargo, rustc, rustup and other commands will be added toCargo"s bin directory, located at: /home/james/.cargo/binThis path will then be added to your PATH environment variable bymodifying the profile files located at: /home/james/.profile /home/james/.bashrc ......You can uninstall at any time with rustup self uninstall andthese changes will be installation options: default host triple: x86_64-unknown-linux-gnu default toolchain: stable (default) profile: default modify PATH variable: yes1) Proceed with installation (default)2) Customize installation3) Cancel installation>info: profile set to "default"info: default host triple is x86_64-unknown-linux-gnuinfo: syncing channel updates for "stable-x86_64-unknown-linux-gnu"info: latest update on 2022-07-19, rust version (e092d0b6b 2022-07-16)info: downloading component "cargo"info: downloading component "clippy"info: downloading component "rust-docs"info: downloading component "rust-std"info: downloading component "rustc"info: downloading component "rustfmt"......info: installing component "cargo"info: installing component "clippy"info: installing component "rust-docs"info: installing component "rust-std"info: installing component "rustc"info: installing component "rustfmt"info: default toolchain set to "stable-x86_64-unknown-linux-gnu" stable-x86_64-unknown-linux-gnu installed - rustc (e092d0b6b 2022-07-16)Rust is installed now. Great!To get started you may need to restart your current would reload your PATH environment variable to includeCargo"s bin directory ($HOME/.cargo/bin).To configure your current shell, run:source "$HOME/.cargo/env"
看到如上输出,说明 rust 基本组件安装完成了。注意按照最后输出的提示重新当前shell终端,然后执行:
james@linux:~$ source "$HOME/.cargo/env"
在 Rust 开发环境中,所有工具都安装在 ~/.cargo/bin
目录中,可以在这里找到包括 rustc
、cargo
和 rustup
在内的 Rust 工具链。如:
james@linux:~/.cargo/bin$ ls -l-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 cargo-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 cargo-clippy-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 cargo-fmt-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 cargo-miri-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 clippy-driver-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rls-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rust-gdb-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rust-gdbgui-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rust-lldb-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rustc-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rustdoc-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rustfmt-rwxr-xr-x 13 james james 15825920 Aug 1 17:20 rustup
如果环境OK,通过执行rustc --version
就可以看到具体的版本号了。
接下来,就可以使用 rust 写一个简单的 helloworld 程序,验证一下 rust 编译环境是否正常了。
如我写了一个简单的 :
fn main() { println!("Hello world!"); println!("Nice to meeting you!");}
编译 rustc
:
james@linux:~$ rustc
提一下:
编译时可能会碰到,提示
linker cc not found
链接错误:error: linker `cc` not found|= note: No such file or directory (os error 2)error: aborting due to previous error原因可能是因为本地的 gcc 没有安装 或者 没有对应的 cc 软连接 ,需要自己手动安装一下或者手动建立一下软链接:
sudo apt install gccsudo ln -s gcc cc注意,如果安装后还提示 gcc 版本或者依赖之类的错误,则可以使用ubuntu特有的可以解决依赖关系的包管理工具
aptitude
进行安装,解决依赖,如果没有aptitude
,可以先安装之,apt install aptitudeaptitude install gcc通过
aptitude
安装,会给出解决依赖的方案,注意查看输出提示,选择操作即可。
如果没有编译错误,执行 rustc
后,就会看到当前目录下会多出来一个同名的可执行文件:
james@linux:~/$ lsHello @linux:~/$ file HelloHello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/, BuildID[sha1]=xxxxxxxxxxxxxxxxxxxxx, for GNU/Linux , with debug_info, not stripped
既然是可执行文件,说明我们和 C语言编译出来的 Linux C 程序一样执行应该就可以,试一下:
james@linux:~/$ ./HelloHello world!Nice to meeting you!
成功输出,说明 rust 环境和工具链的安装就绪了。
以后如果想卸载 Rust,可以执行:rustup self uninstall
以后如果想更新 Rust,可以执行:rustup update
最后再简单说明下测试程序:
// rust testfn main() { println!("Hello world!"); println!("Nice to meeting you!");}
1、Rust 使用 fn
关键字定义一个函数;
2、Rust 的打印日志语句,println 后面都跟一个 感叹号 ( !
),指明println!()
是 Rust 中的一个 预定义的宏
,打印输出是一个 宏调用。在 rust 中区分函数和宏的唯一办法,就是看函数名/宏名最后有没有 感叹号 !
. 如果有感叹号则是宏,没有则是函数。
3、Rust 代码注释,和 C语言、C++是一样的语法;
4、Rust 输出文字的方式主要有两种:println!()
和 print!()
。这两个"函数"都是向命令行输出字符串的方法,区别仅在于前者
会在输出的最后附加
输出一个换行符
。当用这两个"函数"输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的"占位符",这一点与 C 语言中的 printf 函数很相似。但是,Rust 中格式字符串中的占位符不是 "% + 字母"
的形式,而是一对 {}
。
标签:
精彩推送
新闻快讯
X 关闭
X 关闭
新闻快讯
- 初试Rust,以后 linux 驱动代码可能要用 Rust 来写了
- 紫罗兰和田籽料原石
- 关于月亮的歌曲有哪些歌词 关于月亮的歌曲有哪些
- 华为nova 10 Pro官方翻新机视频开箱:成色接近新机 只要2499元起
- 闵行这两家人才公寓启用“人才驿站”,快来先睹为快
- 宫颈息肉的治疗方法(宫颈息肉的危害)
- 成都大运会艺术体操项目开赛 中国队7朵“金花”亮相
- ppt自动播放设置(具体操作步骤如下)
- 我们的家园·西藏篇|林芝:大力发展生态旅游与特色产业 全面推进乡村振兴
- 核酸小屋“变身”外卖配餐点!看这个社区如何打造老年居民“幸福圈”
- 西红柿炖豆腐是哪里的菜
- 错过再等一年 联想拯救者R9000X 2023版游戏笔记本10999元
- cfga助手官网(cftgp官方助手)
- 新鲜感褪去后,微软直面AI的骨感现实?
- 唇蜜和唇釉的区别(唇蜜和唇膏的区别)
- 日本政府:受新冠疫情影响,日人均寿命连续两年缩短
- Vidda C1 Pro荣获2023年第八届ChinaJoy黑金奖
- 机械硬盘戏剧性场面:没人买销量暴跌 厂商坚持要涨价
- hp2600打印机换了墨盒后还是显示墨粉不足(HP2600n更换一支新墨粉后颜色不正是什么原因)
- 两部门紧急预拨2.9亿元支持多地做好防汛防台风等应急救灾工作
- 金风科技07月28日获深股通增持220.95万股
- 甜油是什么调味料(甜油怎么做的)
- 延误、取消!受台风“杜苏芮”影响,郑州机场多个航班受影响
- 今夜成都,焰火璀璨
- 辽阳县召开生活垃圾分类工作推进会议
- 陈巧珠:成长是甜的是酸的是辣的也是苦的,接受不足埋头努力
- 国际能源署:今年全球煤炭使用量保持在创纪录水平
- 应对“杜苏芮”,郑州启动防汛四级应急响应
- 宝骏云朵8月10日全国上市
- 天恒新材拟与远东宏信普惠融资租赁(天津)有限公司开展融资租赁业务合作合同租赁本金预计390万
- 一加参展Chinajoy 2023 天空散热释放全部性能
- 华为云发布盘古大模型互联网联创计划,斗鱼、360和爱奇艺等参与
- 赵健博踢不了,大连人6分战还靠曼佐基,谢晖恢复压着打 1分没意义
- 中建七局西南公司长投生态中心项目举行T1号主楼封顶仪式
- 财政部:上半年国有企业利润总额23779.8亿元 同比增长5.0%
- 积极响应《“助力健康中国行动——加强自我健康管理”联合倡议》
- 上半年,国内旅游总人次同比增长超六成
- 成都大运会如约而至,解锁各国运动员心中的大运会“关键词”
- 美媒评大众投资小鹏近50亿:西方大厂向中国“取经”
- 索尼PS5 Slim被曝散热缩水!液金散热没了
- 原神角色怎么使用
- 低度酒销售市场规模整体保持高速增长 低度酒行业市场深度分析2023
- 沪深股通|金智科技7月27日获外资卖出0.05%股份
- 美国计划2027年测试核动力火箭:发动机配“控制棒”
- 剧本杀《超级的我》复盘评测(内含剧透解析+真相答案)
- 佛山中考第三批录取分数线
- 双良节能:目前硅片价格开始回暖,暂时没有跌价损失压力
- 13岁女孩体内抽出2000毫升乳白色血 平时喜欢暴饮暴食
- 盐湖提锂 绿色赋能
- 套路不断的家庭“装修坑”调查:消费者如何才能对家装不提心吊胆?