湖南大学-操作系统lab1

HUNAN  UNIVERSITY

操作系统实验报告

          

一、实验题目

实验一 环境配置

  • 实验环境

ubuntu20

  • 实验步骤

一、安装工具链

1、安装交叉编译工具链 (aarch64)

  1. 下载工具链,以下载工具链版本为11.2,宿主机为x86 64 Linux机器为例
  2. wget https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz
  3. 解压工具链
  4. tar -xf gcc-arm-(Tab键补全)
  5. 重命名工具链目录
  6. mv gcc-arm-(Tab键补全aarch64-none-elf

将目录 /path/to/your/aarch64-none-elf/bin加入到环境变量 PATH 中。

测试工具链是否安装成功

2、安装QEMU模拟器

Linux

  1. sudo apt-get update
  2. sudo apt-get install qemu
  3. sudo apt-get install qemu-system

3、安装CMake

Linux

  1. sudo apt-get install cmake

二、创建裸机(Bare Metal)程序

由于我们的目标是编写一个操作系统,所以我们需要创建一个独立于操作系统的可执行程序,又称 独立式可执行程序(freestanding executable) 或 裸机程序(bare-metal executable) 。这意味着所有依赖于操作系统的库我们都不能使用。比如 std 中的大部分内容(io, thread, file system, etc.)都需要操作系统的支持,所以这部分内容我们不能使用。 但是,不依赖与操作系统的语言特性还是可以继续使用的。

创建项目

我们将参照UniProton设计项目的目录层次,但为了理解方便,将会进行相应简化。其初始目录结构如下图所示。

可以看到:在实验一 lab1 目录下有一个 src 目录,所有源代码均放在此处。其下包括 bsp 目录和 include 目录。其中 bsp 目录存放与硬件紧密相关的代码,include 目录中存放项目的大部分头文件。src 下目前仅 main.c 文件include 目录下有 prt_typedef.h 头文件,它是 UniProton 所使用的基本数据类型和结构的定义,如 U8、U16、U32、U64等。bsp 目录下目前包括 CMakeLists.txt 和两个汇编文件 start.S 和 prt_reset_vector.S。

在src/下创建main.c

  1. #include "prt_typedef.h"
  2. #define UART_REG_WRITE(value, addr)  (*(volatile U32 *)((uintptr_t)addr) = (U32)value)
  3. S32 main(void)
  4. {
  5.     char out_str[] = "AArch64 Bare Metal";
  6.     int length = sizeof(out_str) / sizeof(out_str[0]);
  7.     // 逐个输出字符
  8.     for (int i = 0; i < length - 1; i++) {
  9.         UART_REG_WRITE(out_str[i], 0x9000000);
  10.     }
  11. }

S32 是在 prt_typedef.h 中定义的基本类型,这是为了屏蔽各硬件系统的区别,方便操作系统移植到多种不同规格的硬件上。

main 函数的主要功能(L12-L13)是把 out_str 中的字符通过宏 UART_REG_WRITE 逐个写入地址为 0x9000000 的地方。其作用将在 实验二 Hello, miniEuler 部分详细解释。

在src/include/下创建prt_typedef.h。

  1. /*
  2.  * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved.
  3.  *
  4.  * UniProton is licensed under Mulan PSL v2.
  5.  * You can use this software according to the terms and conditions of the Mulan PSL v2.
  6.  * You may obtain a copy of Mulan PSL v2 at:
  7.  *          http://license.coscl.org.cn/MulanPSL2
  8.  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
  9.  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
  10.  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  11.  * See the Mulan PSL v2 for more details.
  12.  * Create: 2009-12-22
  13.  * Description: 定义基本数据类型和数据结构。
  14.  */
  15. #ifndef PRT_TYPEDEF_H
  16. #define PRT_TYPEDEF_H
  17. #include <stddef.h>
  18. #include <stdint.h>
  19. #include <stdbool.h>
  20. #ifdef __cplusplus
  21. #if __cplusplus
  22. extern "C" {
  23. #endif /* __cpluscplus */
  24. #endif /* __cpluscplus */
  25. typedef unsigned 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值