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);
}

这个和平时我们在真实系统中写的代码有少许区别:

  1. 导库:kernel/types.h, kernel/stat.h, user/user.h。你可以看到 xv6-riscv/user/*.c 头三行基本都是这么写的,咱们有样学样就可。(这三行大概就是 include <stdio.h><stdlib.h><unistd.h>
  2. 不要 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 编写用户程序相关推荐

  1. XV6实验-Lab0 Utilities

    文章目录 EXERCISE 0 源代码阅读 EXERCISE 1 运行xv6 EXERCISE 2 sleep XV6 book Chapter1 Operating system interface ...

  2. 【OS xv6】1 万字详解shell源码解析命令(内含wsl+vscode调试xv6教程 文档第一章助读)

    现在前面的 嘻嘻几百年没写文了确实没时间,等搞完毕设可以一起重温重温.最近学os,读源码发现还挺多东西得整理的,尤其途中有必要找资料整理的时候,内容有点多有点乱,写在源码已经显得不现实了.用的vsco ...

  3. ble串口程序设计流程图_流程图程序设计的步骤

    程序设计的内容包括:编写程序.编译程序.模拟运行及调试程序等. 程序设计的方法是指用什么方法和编程语言来编写用户程序. 程序设计有多种方法:如果控制系统是改造原有成熟的继电接触控制系统,则可由电 气控 ...

  4. Linux驱动编程 step-by-step (一)驱动程序的作用

    驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件,而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接 ...

  5. 《MATLAB R2012a超级学习手册》一2.5 本章小结

    本节书摘来自异步社区<MATLAB R2012a超级学习手册>一书中的第2章,第2.5节,作者 史洁玉 , 孔玲军,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. DIY—USB学习板设计以及驱动开发

    暑假在Intel OTC做访问学者时,看到公司有两个小巧的USB设备-温度计和LED音乐播放器,用于交大学生的Linux Kernel教学中.但看似简单的这些设备,还是从国外购买而得.因此,从inte ...

  7. LC-3 中断实验 (深大计系1实验5)

    目录 前言 实验内容 用户程序 中断服务程序 注意事项 配置中断 代码实现 用户程序 中断服务程序 结果 前言 这个实验不是很难,比上一个四子棋实验简单多了... 实验内容 这个实验需要实现LC-3的 ...

  8. 【计算机系统】LC-3中断试验

    代码: Github仓库地址 中断实验 计算机领域中,中断就是由软硬件向处理器发送信号,处理器收到并立即处理该信号表示事件的过程.中断会暂停当前处理器正在执行的流程,然后将处理器切换到高优先级.处理器 ...

  9. 【STM32】基础知识 第十课 CubeMx

    [STM32]基础知识 第十课 CubeMx STM32 CubeMX 简介 安装 JAVA CubeMX 安装 新建 STM32 CubeMX 工程步骤 新建工程 时钟模块配置 GPIO 配置 生成 ...

  10. Linux驱动编程 step-by-step

    第三次看了LDD3了(虽然现在已经是kernel3.0但从这本书商还是能学到很多) 每次都有一些收获 现在终于能够写一写代码了 驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码, ...

最新文章

  1. ssqlit3.0数据库使用方法
  2. ajax 示例代码,Ajax的简单实用实例代码
  3. dataframe保存为txt_如何批量查找并修改替换 Word、PPT、Excel、PDF、TXT等文件的内容...
  4. C#深入.NET平台的软件系统分层开发
  5. 信息学奥赛一本通(2024:【例4.10】末两位数)
  6. u8api openapi_使用OpenAPI规范进行更好的API测试
  7. 計算機二級-java05
  8. 手机老是应用无响应是怎么回事?
  9. c#复制包含子目录文件夹代码
  10. luaL_dofile和luaL_loadfile的区别
  11. 更新小红伞antivirus失败:生成更新结构失败。更新库生成错误 556
  12. freeswitch 基于webrtc网页视频、语音通话官方例子video_demo安装
  13. [100124]红楼梦:林黛玉与北静王【硬盘版】[带全CG存档+攻略]
  14. 渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
  15. docker-compose 部署 mindoc文档服务器(支持在线markdown文件编辑)
  16. java contains忽略大小写_关于java:字符串包含-忽略大小写
  17. AltiumDesigner19(AD19)使用设置技巧
  18. Android两个app间跳转-deepLink的使用
  19. XMLHttpRequest API
  20. Flutter设置Container的最大最小宽高

热门文章

  1. 新时代程序员——怎么样应对吃青春饭问题
  2. 如何编译TrueCrypt源码
  3. 软件验收工作流程及准则
  4. js轮播图 最简单代码
  5. 安卓手机免root修改hosts文件
  6. 解决啦啦外卖小程序无法生成桌台小程序二维码
  7. iOS开发全套资源,从入门到全栈IOS工程师
  8. 视易收银系统怎样连接服务器,视易收银系统操作方法
  9. 北京理工大学计算机考研真题,北京理工大学计算机专业基础历年考研真题汇编附答案...
  10. 嵌入式Linux开发与单片机开发的区别