Xv6 编写用户程序
Xv6 编写用户程序
如何在 Xv6(xv6-riscv)中添加自己编写的用户程序,比如实现一个 helloworld
?
1. 编写代码
在 xv6-riscv/user/
里新建一个 helloworld.c
,写一个 hello world:
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"int main() {printf("Hello World!\n");exit(0);
}
这个和平时我们在真实系统中写的代码有少许区别:
- 导库:
kernel/types.h
,kernel/stat.h
,user/user.h
。你可以看到xv6-riscv/user/*.c
头三行基本都是这么写的,咱们有样学样就可。(这三行大概就是 include<stdio.h>
,<stdlib.h>
,<unistd.h>
) - 不要
return 0;
,要exit(0);
(否则你会得到一个运行时的unexpected scause 0x000000000000000f
)。这一点同样可以参考其他系统随附的程序得出。
2. 修改 Makefile
Xv6
系统中没有编译器的实现,所以我们需要把程序在编译系统时一并编译。修改 xv6-riscv/Makefile
:
$ vim Makefile
找到 UPROGS
(大概118行),保持格式,在后面添加注册新程序:
UPROGS=\$U/_cat\$U/_echo\...$U/_helloworld\
编写的代码 user/xxx.c
,对应这里写 $U/_xxx\
。
3. 编译运行 Xv6
编译运行 Xv6:
$ make qemu
在 Xv6 中 ls
,可以看到我们的 helloworld 程序:
$ ls
...
helloworld 2 20 22352
运行程序:
$ helloworld
Hello World!
That’s it!
# By CDFMLR 2021-02-17
echo "See you."
顶部图片来自于小歪API,系随机选取的图片,仅用于检测屏幕显示的机械、光电性能,与文章的任何内容及观点无关,也并不代表本人局部或全部同意、支持或者反对其中的任何内容及观点。如有侵权,联系删除。
Xv6 编写用户程序相关推荐
- XV6实验-Lab0 Utilities
文章目录 EXERCISE 0 源代码阅读 EXERCISE 1 运行xv6 EXERCISE 2 sleep XV6 book Chapter1 Operating system interface ...
- 【OS xv6】1 万字详解shell源码解析命令(内含wsl+vscode调试xv6教程 文档第一章助读)
现在前面的 嘻嘻几百年没写文了确实没时间,等搞完毕设可以一起重温重温.最近学os,读源码发现还挺多东西得整理的,尤其途中有必要找资料整理的时候,内容有点多有点乱,写在源码已经显得不现实了.用的vsco ...
- ble串口程序设计流程图_流程图程序设计的步骤
程序设计的内容包括:编写程序.编译程序.模拟运行及调试程序等. 程序设计的方法是指用什么方法和编程语言来编写用户程序. 程序设计有多种方法:如果控制系统是改造原有成熟的继电接触控制系统,则可由电 气控 ...
- Linux驱动编程 step-by-step (一)驱动程序的作用
驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件,而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接 ...
- 《MATLAB R2012a超级学习手册》一2.5 本章小结
本节书摘来自异步社区<MATLAB R2012a超级学习手册>一书中的第2章,第2.5节,作者 史洁玉 , 孔玲军,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- DIY—USB学习板设计以及驱动开发
暑假在Intel OTC做访问学者时,看到公司有两个小巧的USB设备-温度计和LED音乐播放器,用于交大学生的Linux Kernel教学中.但看似简单的这些设备,还是从国外购买而得.因此,从inte ...
- LC-3 中断实验 (深大计系1实验5)
目录 前言 实验内容 用户程序 中断服务程序 注意事项 配置中断 代码实现 用户程序 中断服务程序 结果 前言 这个实验不是很难,比上一个四子棋实验简单多了... 实验内容 这个实验需要实现LC-3的 ...
- 【计算机系统】LC-3中断试验
代码: Github仓库地址 中断实验 计算机领域中,中断就是由软硬件向处理器发送信号,处理器收到并立即处理该信号表示事件的过程.中断会暂停当前处理器正在执行的流程,然后将处理器切换到高优先级.处理器 ...
- 【STM32】基础知识 第十课 CubeMx
[STM32]基础知识 第十课 CubeMx STM32 CubeMX 简介 安装 JAVA CubeMX 安装 新建 STM32 CubeMX 工程步骤 新建工程 时钟模块配置 GPIO 配置 生成 ...
- Linux驱动编程 step-by-step
第三次看了LDD3了(虽然现在已经是kernel3.0但从这本书商还是能学到很多) 每次都有一些收获 现在终于能够写一写代码了 驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码, ...
最新文章
- ssqlit3.0数据库使用方法
- ajax 示例代码,Ajax的简单实用实例代码
- dataframe保存为txt_如何批量查找并修改替换 Word、PPT、Excel、PDF、TXT等文件的内容...
- C#深入.NET平台的软件系统分层开发
- 信息学奥赛一本通(2024:【例4.10】末两位数)
- u8api openapi_使用OpenAPI规范进行更好的API测试
- 計算機二級-java05
- 手机老是应用无响应是怎么回事?
- c#复制包含子目录文件夹代码
- luaL_dofile和luaL_loadfile的区别
- 更新小红伞antivirus失败:生成更新结构失败。更新库生成错误 556
- freeswitch 基于webrtc网页视频、语音通话官方例子video_demo安装
- [100124]红楼梦:林黛玉与北静王【硬盘版】[带全CG存档+攻略]
- 渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
- docker-compose 部署 mindoc文档服务器(支持在线markdown文件编辑)
- java contains忽略大小写_关于java:字符串包含-忽略大小写
- AltiumDesigner19(AD19)使用设置技巧
- Android两个app间跳转-deepLink的使用
- XMLHttpRequest API
- Flutter设置Container的最大最小宽高