树莓派OpenEuler的安装与实验

文章目录

    • 一、安装准备
      • (一)镜像完整性校验
    • 二、刷写镜像
    • 三、登录
    • 四、配置系统
      • (一)管理用户
      • (二)扩展根目录分区
    • 五、实验三
      • (一)汇编语言练习——查找最大数
      • (二)汇编语言练习——通过C语言调用汇编函数
      • (三)汇编语言练习——通过汇编语言调用C函数
      • (四)汇编语言练习——GCC内联汇编
    • 六、总结

一、安装准备

(一)镜像完整性校验

1.在校验镜像文件的完整性之前,需要准备如下文件:

镜像文件:openEuler-21.03-raspi-aarch64.img

校验文件:openEuler-21.03-raspi-aarch64.img.sha256sum
在这里插入图片描述2.文件完整性校验操作步骤如下:
①获取校验文件中的校验值。执行命令如下:

[Windows]> type openEuler-21.03-raspi-aarch64.img.sha256sum

命令执行结果:
在这里插入图片描述
②计算文件的 sha256 校验值。执行命令如下:

[Windows]> certutil -hashfile openEuler-21.03-raspi-aarch64.img SHA256

命令执行结果:
树莓派OpenEuler的安装与实验_第1张图片经过两次校验值的对比,两次结果完全一致,文件完整性没有受到破坏。

二、刷写镜像

1.可以使用 balenaEtcher等软件工具将解压的镜像烧写入 TF 卡:

  • 选择要烧写的 .img 镜像文件
  • 选择要烧写的 TF 卡(磁盘)
  • 点击 Flash! 开始烧写

树莓派OpenEuler的安装与实验_第2张图片树莓派OpenEuler的安装与实验_第3张图片

三、登录

1.登录树莓派有以下两种方式:
①本地登录
树莓派连接显示器(树莓派视频输出接口为 Micro HDMI)、键盘、鼠标后,启动树莓派,可以看到树莓派启动日志输出到显示器上。待树莓派启动成功,输入用户名(root)和口令(默认:openeuler)登录:
树莓派OpenEuler的安装与实验_第4张图片
树莓派OpenEuler的安装与实验_第5张图片

②ssh 远程登录
树莓派默认采用 DHCP 的方式自动获取 IP。如果树莓派连接已知路由器,可登录路由器查看,新增的 IP 即为树莓派 IP。例如,树莓派对应 IP 为:192.168.31.109,使用命令 ssh [email protected] 后输入口令 openeuler,即可远程登录树莓派:
树莓派OpenEuler的安装与实验_第6张图片

四、配置系统

(一)管理用户

  • useradd name :增加用户—在 root 权限下,通过 useradd 命令可以为系统添加新用户信息。
  • passwd name :修改用户密码—使用 passwd 命令修改用户的密码,没有设置密码的新账号不能登录系统。
  • userdel name :删除用户—在 root 权限下,使用 userdel 命令可删除现有用户。如果想同时删除该用户的主目录以及其中所有内容,要使用-r 参数递归删除。
  • id name:使用 id 命令查看新建的用户信息。

树莓派OpenEuler的安装与实验_第7张图片

  • usermod -s new shell_path username :修改用户 shell 设置—用户也可以使用 usermod 命令修改 shell 信息,在 root 权限下执行如下命令,其中 _new_shell_path 为目标 shell 路径,username 为要修改用户的用户名
  • usermod -d new home_directory username :修改主目录—修改主目录,可以在 root 权限下执行如下命令,其中 _new_home_directory 为已创建的目标主目录的路径,username 为要修改用户的用户名。
  • usermod -u UID username :修改用户 ID—修改用户 ID,在 root 权限下执行如下命令,其中 UID 代表目标用户 ID,username 代表用户名。
  • usermod -e MM/DD/YY username :修改账户有效期—如果使用了影子口令,则可以在 root 权限下,执行如下命令来修改一个账号的有效期,其中 MM 代表月份,DD 代表某天,YY 代表年份,username 代表用户名。

树莓派OpenEuler的安装与实验_第8张图片

(二)扩展根目录分区

默认根目录分区空间比较小,在使用之前,需要对分区进行扩容。
1.在 root 权限下执行 fdisk -l 命令查看磁盘分区信息:
树莓派OpenEuler的安装与实验_第9张图片
SD 卡对应盘符为 /dev/mmcblk0,包括 3 个分区,分别为:

/dev/mmcblk0p1:引导分区
/dev/mmcblk0p2:交换分区
/dev/mmcblk0p3:根目录分区

这里我们需要将根目录分区 /dev/mmcblk0p3 进行扩容。
2.在 root 权限下执行 fdisk /dev/mmcblk0 命令进入到交互式命令行界面,按照以下步骤扩展分区:

输入 p,查看分区信息。

记录分区 /dev/mmcblk0p3 的起始扇区号,即 /dev/mmcblk0p3 分区信息中 Start 列的值,示例中为 1593344。

输入 d,删除分区。

输入 3 或直接按 Enter,删除序号为 3 的分区,即 /dev/mmcblk0p3 分区。

输入 n,创建新的分区。

输入 p 或直接按 Enter,创建 Primary 类型的分区。

输入 3 或直接按 Enter,创建序号为 3 的分区,即 /dev/mmcblk0p3 分区。

输入新分区的起始扇区号,即第 1 步中记录的起始扇区号,示例中为 1593344。

树莓派OpenEuler的安装与实验_第10张图片3.执行 df -lh 命令查看磁盘空间信息,以确保根目录分区已扩展。
树莓派OpenEuler的安装与实验_第11张图片

五、实验三

(一)汇编语言练习——查找最大数

1.实验目的
通过本实验了解和熟悉ARM64汇编语言。

2.实验要求
使用ARM64汇编语言来实现如下功能:在给定的一组数中查找最大数。程序可使用GCC(Aarch64版本)工具来编译,并且可在树莓派Linux系统或者QEMU + ARM64实验平台上运行。

3. 实验代码讲解
下面是本实验的参考代码:
树莓派OpenEuler的安装与实验_第12张图片第1~16行,定义数据段,比如my_data定义了一个数组,这里使用.quad来定义一个8字节大小的数。my_data_count表示这个数组的个数,一个是6个数。print_data定义了一个字符串,后面会使用printf函数来打印。这里使用. string来定义个字符串。
第18行,表示接下来的是代码段。
第19行,声明一个main函数。
第21行,把x29和x30寄存器保持到栈里。X29寄存器是FP栈帧寄存器,x30是链接寄存器。
第23行,读取my_data标签的地址。
第24行,读取my_data_count标签地址里面的内容,会读取8个字节的内容到x1寄存器里,即读取数组的数量,这里为6.
第26行,数组中最后一个数的地址。
第28行,x3是一个临时寄存器,初始值为0.
第30行,后变基加载模式,以X0的值为地址,加载该内存地址的值到X2,然后再更新X0寄存器为X0 +8。
第31行,比较x2和x3的值
第32行,csel指令是一个条件选择指令。当条件满足(这里是比较x2是否大于x3)的时候,x3寄存器会选择x2的值。
第34行,判断当前是否为最后一个候选的数了,不是的话,跳转到1标签处。
第37行,加载print_data标签的地址到x0寄存器。
第38行,通过上面的比较,x3寄存器存放最大值。接下来要调用printf函数来打印了,我们通过x0寄存器和x1寄存器来传递参数给printf函数。
第42行,从main函数的栈中恢复x29和x30寄存器。
第43行,函数返回。

编译及运行:
树莓派OpenEuler的安装与实验_第13张图片4.调试
我们可以使用gdb来单步调试汇编程序:
树莓派OpenEuler的安装与实验_第14张图片
在main函数里设置一个断点,输入“r”命令运行test程序,可以使用“info reg”命令来查看寄存器的值:
树莓派OpenEuler的安装与实验_第15张图片
5. 使用qemu-aarch64-static来运行程序
除了在ARM64系统里运行test程序之外,我们也可以在主机中使用qemu-aarch64-static来运行ARM64的test程序。
在Ubunut 主机上运行:
在这里插入图片描述

(二)汇编语言练习——通过C语言调用汇编函数

1.实验目的
通过本实验了解和熟悉C语言中如何调用汇编函数。

2.实验要求
使用汇编语言实现一个汇编函数,用于比较两个数的大小并返回最大值,然后用C语言代码调用这个汇编函数。程序可使用GCC(Aarch64版本)工具来编译,并且可在树莓派Linux系统或者QEMU + ARM64实验平台上运行。

3. 代码讲解
本实验的参考代码有两个文件:compare.S和main.c :
树莓派OpenEuler的安装与实验_第16张图片
树莓派OpenEuler的安装与实验_第17张图片
编译运行:
树莓派OpenEuler的安装与实验_第18张图片

(三)汇编语言练习——通过汇编语言调用C函数

1.实验目的
通过本实验了解和熟悉汇编语言中如何调用C函数。

2.实验要求
使用C语言实现一个函数,用于比较两个数的大小并返回最大值,然后用汇编代码调用这个C函数。程序可使用GCC(Aarch64版本)来编译,并且可在树莓派Linux系统或者QEMU + ARM64实验平台上运行。

3.实验代码讲解
本实验的参考代码有两个文件:main.S和compare.c文件:
树莓派OpenEuler的安装与实验_第19张图片
树莓派OpenEuler的安装与实验_第20张图片
编译运行:
树莓派OpenEuler的安装与实验_第21张图片

(四)汇编语言练习——GCC内联汇编

1.实验目的
通过本实验了解和熟悉GCC内联汇编的使用。

2.实验要求
使用GCC内联汇编实现一个函数,用于比较两个数的大小并返回最大值,然后用C语言代码调用这个函数。程序可使用GCC(Aarch64版本)工具来编译,并且可在树莓派Linux系统或者QEMU + ARM64实验平台上运行。

3.实验代码讲解
本实验的参考代码如下:
树莓派OpenEuler的安装与实验_第22张图片
编译运行:
树莓派OpenEuler的安装与实验_第23张图片

六、总结

        Linux的库文件分成两大类:一类是动态链接库(通常以.so结尾),另一类是静态链接库(通常以.a结尾)。在默认情况下,GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才使用静态链接库。下面使用“–static”来让test程序静态链接C语言标准库,原因是交叉工具链使用的libc的动态库和QEMU中使用的库可能不一样。如果使用动态链接,可能导致运行报错。

你可能感兴趣的:(r语言,开发语言)