Windows10下安装arm64架构的centos

背景

用C++写了一个串口通讯库,方便第三方调用。但是只有Windows,Linux(x86) 32bit, 64bit环境的,客户突然需要 aarch64 / ARM64 Linux 环境下的库,没办法,网上找了一圈,然后实践,这里记录下。

环境

Windows10
qemu-w64-setup-20251224.exe
CentOS-7-aarch64-Minimal-2009.iso
xshell(可选)

安装QEMU

下载

https://qemu.weilnetz.de/w64/

在这里插入图片描述

安装

双击一路下一步,修改安装位置(这里不要选中文路径),然后安装即可。

下载虚拟机启动固件

下载 QEMU_EFI.fd

下载ARM64架构的centos7.9

下载 CentOS-7-aarch64-Minimal-2009.iso

在这里插入图片描述

安装centos系统

新建一个文件,将centos镜像,QEMU_EFI.fd文件放到这个目录,方便后续配置使用。

创建虚拟机磁盘空间

"D:\qemu\qemu-img.exe" create -f qcow2 "F:\qemuVM\Anolis.qcow2" 20G

D:\qemu\qemu-img.exe:QEMU 安装路径,需要替换为自己的路径F:\qemuVM\Anolis.qcow2:虚拟机磁盘文件路径,可自定义文件名,必须为 .qcow2 后缀20G:虚拟机磁盘空间大小,不建议太小
在这里插入图片描述

执行安装命令

QEMU安装目录输入cmd进入命令行,执行安装命令

在这里插入图片描述
D:\qemu\qemu-system-aarch64.exe -m 2048 -cpu cortex-a72 -smp 2,sockets=1,cores=2 -M virt -bios F:\qemuVM\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=F:\qemuVM\Anolis.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=F:\qemuVM\CentOS-7-aarch64-Minimal-2009.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -net nic -net user,hostfwd=tcp:127.0.0.1:2222-:22 

这里注意:各个文件路径要对应。下面是参数说明,我改了下参数。

在这里插入图片描述


安装过程:

  • 运行命令后打开虚拟机窗口
  • 选择第一个选项等待安装,安装过程可能较长
    (第三个选择是先检测安装光盘/ISO 是否有损坏,然后进入正常安装 )
  • 安装完成后,选择英文,点击继续

下面是别人安装的截图,我的安装时没有截图,都差不多。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


这里实际界面可能不一样,你需要设置安装目的地,下一步才是设置root密码。
如果都没警告了,就开始安装。

在这里插入图片描述


在这里插入图片描述


安装结束之后重启系统即可。

用ssh连接centos,做一些配置

我这里用的xshell工具。
使用 IP: 127.0.0.1 port: 2222 直接连接即可。账号密码为: root/你刚才设置的root密码

在这里插入图片描述

配置网络

首先,我在安装之后,虚拟机直接是有网络的。所以没有配置网络。直接配置DNS了。如果你安装后,没有网络,可以按照如下步骤操作。

1. 分配静态 IP (可选)

输入命令查看自己实际网卡名称,我这里的是 enp0s1
ip link

在这里插入图片描述


继续执行如下命令:

ip addr add 10.0.2.15/24 dev enp0s1 ip link set enp0s1 up ip route add default via 10.0.2.2 

你也可以根据自己需求修改参数。

2.配置DNS

sudo vim /etc/resolv.conf

nameserver 8.8.8.8 nameserver 8.8.4.4 

按照上面配置完毕之后,ping www.baidu.com 有响应就是ok了

配置yum源

备份原文件

mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

配置阿里云的源

cat>/etc/yum.repos.d/CentOS-Aliyun.repo<<'EOF' [base] name=CentOS-7.9.2009-Base-Aliyun baseurl=https://mirrors.aliyun.com/centos-vault/altarch/7.9.2009/os/aarch64/ enabled=1 gpgcheck=0 [updates] name=CentOS-7.9.2009-Updates-Aliyun baseurl=https://mirrors.aliyun.com/centos-vault/altarch/7.9.2009/updates/aarch64/ enabled=1 gpgcheck=0 [extras] name=CentOS-7.9.2009-Extras-Aliyun baseurl=https://mirrors.aliyun.com/centos-vault/altarch/7.9.2009/extras/aarch64/ enabled=1 gpgcheck=0 EOF 

上面这个是一条命令。

生成新缓存

yum clean all && yum makecache

安装开发环境(可选)

yum groupinstall -y "Development Tools"

# 单独验证GCC、G++是否安装成功 gcc --version g++ --version 

映射Windows串口到虚拟机

QEMU 没有类似 VMware 的 GUI 管理器,关闭窗口即虚拟机关机。
可用启动脚本快速启动虚拟机。

无串口映射启动

@echo off D:\qemu\qemu-system-aarch64.exe ^ -m 2048 ^ -cpu cortex-a72 ^ -smp 2,sockets=1,cores=2 ^ -M virt ^ -bios F:\qemuVM\QEMU_EFI.fd ^ -device VGA ^ -device nec-usb-xhci ^ -device usb-mouse ^ -device usb-kbd ^ -drive if=none,file=F:\qemuVM\Anolis.qcow2,id=hd0 ^ -device virtio-blk-device,drive=hd0 ^ -net nic ^ -net user,hostfwd=tcp:127.0.0.1:2222-:22 pause 

有串口映射启动脚本

@echo off D:\qemu\qemu-system-aarch64.exe ^ -m 2048 ^ -cpu cortex-a72 ^ -smp 2,sockets=1,cores=2 ^ -M virt ^ -bios F:\qemuVM\QEMU_EFI.fd ^ -device VGA ^ -device nec-usb-xhci ^ -device usb-mouse ^ -device usb-kbd ^ -drive if=none,file=F:\qemuVM\Anolis.qcow2,id=hd0 ^ -device virtio-blk-device,drive=hd0 ^ -net nic ^ -net user,hostfwd=tcp:127.0.0.1:2222-:22 ^ -chardev serial,id=hostcom5,path=COM5 -serial chardev:hostcom5 pause 

说明:这里记得修改串口,而且,在启动前,要确保串口可用,否则系统报错。

在这里插入图片描述

启动系统后,编译动态库,运行测试程序,可以和插入windows的物理设备串口通讯

最后,必须感谢下下面这个作者,网上找了一堆,写的都什么玩意儿,最后找到这篇文章,写的简练,让我有了个开头。后面就是GPT了。

感谢文章

Read more

C++穷举算法详解:原理、实现与应用

穷举算法(Brute Force Algorithm)是一种通过遍历所有可能解来求解问题的基本方法,广泛应用于组合优化、搜索问题等领域。在C++中,由于语言的高效性和灵活性,穷举算法成为解决小型或原型问题的有力工具。本文将基于清晰的结构,逐步介绍穷举算法的定义、原理、C++实现、实际应用、优缺点及优化策略,确保内容逻辑清晰、论据充分、数据准确。文章结合代码示例和数学分析,帮助读者深入理解该算法。 一、引言 穷举算法的核心思想是系统地遍历所有可能的候选解,直到找到满足条件的解或穷尽整个解空间。例如,在密码破解中,尝试所有字符组合;或在游戏AI中,枚举所有可能的走法。在C++中,这种算法的重要性体现在其简单性和可靠性上,尤其适用于组合优化问题(如旅行商问题简化版)或搜索任务(如路径查找)。C++的高效内存管理和底层控制能力,使其成为实现穷举算法的理想语言。 本文的目标是: * 详细讲解C++实现穷举算法的关键技巧,包括递归和迭代方法。 * 分析算法的适用场景和局限性,提供优化策略。 * 通过代码示例和数学基础,帮助读者掌握实际应用。

By Ne0inhk

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

C/C++ static 关键字最全详解(2026版) 小白到高手、笔试到面试一次讲透! 一、一句话核心总结 static 是“让变量/函数的生命周期或可见范围改变”的关键字,它有三种完全不同的含义,取决于用在什么位置**: 1. 改变存储期(让局部变量变成“全局寿命”) 2. 改变链接性(让全局变量/函数“只在本文件可见”) 3. 属于类而非对象(类静态成员) 记不住全部也没关系,记住这三句话就够日常和面试用了: * 局部 static = “函数内永生变量” * 全局 static = “本文件私有变量/函数” * 类 static = “全类共享成员” 二、static 的三种核心用法对比表(背这个表就够了) 用法位置C语言支持C++支持含义生命周期可见范围默认初始化值局部静态变量YesYes存储期变为静态(函数结束后不销毁)整个程序本函数0全局静态变量YesYes链接性变为内部链接整个程序本文件0全局静态函数YesYes链接性变为内部链接(不可被其他文件调用)整个程序本文件-类静态成员变量NoYes属于类,

By Ne0inhk
GESP2025年9月认证C++四级真题与解析(判断题1-10)

GESP2025年9月认证C++四级真题与解析(判断题1-10)

🌟 第 1 题 (1)以下代码能正确初始化指针。 int a = 5; int *p = a; ❌ 判断结果:错 (2)🧸 故事讲解:钥匙和房子 🏠🔑 * a = 5 👉 房子里有 5 个糖果 * p 是一把 钥匙 * 但是你写的是: int *p = a; 意思是: 👉 用“糖果数量”当地址?! 这是不对的 ❌ (3)✅ 正确写法应该是 int *p = &a; (4)🧠 小朋友口诀 👉 指针要地址,要加 & 🌟 第 2 题 (1)执行下面代码将输出 11。

By Ne0inhk
《C++初阶之STL》【模板参数 + 模板特化 + 分离编译】

《C++初阶之STL》【模板参数 + 模板特化 + 分离编译】

【模板参数 + 模板特化 + 分离编译】 * 前言: * ------------模板参数------------ * C++的模板参数有哪些? * 一、类型参数 * 二、非类型参数 * 三、模板模板参数 * ------------模板特化------------ * 1. 什么是模板特化? * 2. 为什么要使用模板特化? * 3. 模板特化有哪些? * 一、函数模板特化 * 函数模板特化的步骤 * 函数模板全特化 * 函数模板偏特化 * 二、类模板特化 * 类模板全特化 * 类模板偏特化 * ------------分离编译------------ * 什么是分离编译? * 模板的分离编译要注意什么事情? * 怎么解决模板分离编译时带来的问题? 往期《C++初阶》回顾: /------------ 入门基础 ------------/ 【C++的前世今生】 【命名空间 + 输入&输出 + 缺省参数 + 函数重载】 【普通引用 + 常量引用

By Ne0inhk