龙芯hvisor的ivc

news/2026/1/21 20:43:38/文章来源:https://www.cnblogs.com/acjmr-zf/p/19513980

解决方案--已验证通过

对于hvisor来说,我的rootzone由cpuid为0的cpu控制,linux1所在的zone1由cpuid为1的cpu控制

想要实现在zone0去通知zone1注入中断,在zone1通知zone0注入中断,需要使用ipi中断实现

  • IPI(Inter-Processor Interrupt,处理器间中断)是一种在多处理器(SMP,对称多处理)或多核系统中,一个处理器向另一个处理器发送中断信号的机制。它主要用于处理器之间的通信和协调。
pub const IPI_EVENT_WAKEUP: usize = 0;
pub const IPI_EVENT_SHUTDOWN: usize = 1;
pub const IPI_EVENT_VIRTIO_INJECT_IRQ: usize = 2;
pub const IPI_EVENT_WAKEUP_VIRTIO_DEVICE: usize = 3;
pub const IPI_EVENT_CLEAR_INJECT_IRQ: usize = 4;
pub const IPI_EVENT_UPDATE_HART_LINE: usize = 5;
pub const IPI_EVENT_SEND_IPI: usize = 6;

新增两个事件 pub const IPI_EVENT_IVC_INJECT_ROOT_IRQ: usize = 7; ,pub const IPI_EVENT_IVC_INJECT_NONROOT_IRQ: usize = 8;

//   /hvisor/src/event.rs
pub const IPI_EVENT_IVC_INJECT_ROOT_IRQ: usize = 7; 
pub const IPI_EVENT_IVC_INJECT_NONROOT_IRQ: usize = 8;

然后修改check_events,新增针对两个IVC注入事件的处理函数,中断注入用inject_irq函数,这里写死linux1中的中断号8,zone0的中断号7

//   /hvisor/src/event.rsSome(IPI_EVENT_IVC_INJECT_ROOT_IRQ) => {info!("IPI_EVENT_IVC_INJECT_ROOT_IRQ running");info!("inject 7 in zone0");inject_irq(7, false);true}Some(IPI_EVENT_IVC_INJECT_NONROOT_IRQ) => {info!("IPI_EVENT_IVC_INJECT_NONROOT_IRQ running");info!("inject 8 in zone1");inject_irq(8, false);true}

然后修改一下ivc.rs中的mmio_ivc_handler

        CT_IPI_INVOKE if is_write => {//CT_IPI_INVOKE只能接受写操作............info!("mmio_ivc_handler irq_num is {}\n",irq_num);if irq_num == 7 {info!("send_event cpu_id is 0\n");//想要在zone0注入中断,cpu_id是0send_event(0 as usize,7 as usize,IPI_EVENT_IVC_INJECT_ROOT_IRQ);}else if irq_num == 8 {info!("send_event cpu_id is 0\n");//想要在zone1注入中断,cpu_id是1send_event(1 as usize,7 as usize,IPI_EVENT_IVC_INJECT_NONROOT_IRQ);}else{info!("irq_num {} is not registerd\n",irq_num);}//pub fn send_event(cpu_id: usize, ipi_int_id: usize, event_id: usize)//这里0是zone0的cpuid,1是Linux1的cpuid,7是pub const SGI_IPI_ID: u64 = 7;

构建过程

整个构建过程,可以参考 https://www.cnblogs.com/acjmr-zf/p/19179871 ,然后后续针对 ivc 的更改,我目前只需要修改 hvisor-tool 目录中的内容即可,主要修改 ivc_driver.c 和 ivc_demo.c ,其中修改过后,可以通过我自定义的脚本来将修改后得到的 ivc_root.ko(在rootlinux中insmod) 和 ivc_nonroot.ko(在nonrootlinux中insmod) ,ivc_demo_root(在rootlinux中执行 ivc_demo_root send) 和 ivc_demo_nonroot(在nonrootlinux中执行 ivc_demo_nonroot receive)

对于我的ivc项目,目前需要手动进行 ivc 相关配置的输入,如下

static int hvisor_ivc_info(void) {int err = 0;if (ivc_info == NULL)ivc_info = kmalloc(sizeof(ivc_info_t), GFP_KERNEL);err = hvisor_call(HVISOR_HC_IVC_INFO, __pa(ivc_info), sizeof(ivc_info_t));//pr_info("use handfule input\n");ivc_info->len = 1;  ivc_info->ivc_ids[0] = 0;                    ivc_info->ivc_irqs[0] = 7;    //选择7是root中的中断号//ivc_info->ivc_irqs[0] = 8;  //选择8作为nonroot的中断号ivc_info->ivc_ct_ipas[0] = 0x140000000;   ivc_info->ivc_shmem_ipas[0] = 0x140001000; 

这里我需要将root和nonroot的中断号分别保存,然后依次去编译,这里编译采取我写的脚本即可,比如先保存 ivc_info->ivc_irqs[0] = 7; 然后执行build.sh root,然后保存ivc_info->ivc_irqs[0] = 8; ,然后执行build.sh nonroot

#!/usr/bin/env bash
set -ex          # -e 遇错即停,-x 打印将要执行的命令# 固定路径
DEPLOY_DIR="/home/fanbao/workspace-hvisor/hvboot/deploy/DEPLOY_OVERLAY/tool"
MNT_DIR="/mnt/linux1"# 根据第一个参数决定编译与后续动作
case "$1" inroot)echo "=== build root ==="sudo make all ARCH=loongarch LOG=LOG_WARN KDIR=/home/fanbao/workspace-hvisor/hvisor-la64-linux/linux-6.11.6cp driver/hvisor.ko "$DEPLOY_DIR"cp tools/hvisor "$DEPLOY_DIR"cp driver/ivc.ko  "$DEPLOY_DIR"mv -f "$DEPLOY_DIR/ivc.ko" "$DEPLOY_DIR/ivc_root.ko"cp tools/ivc_demo "$DEPLOY_DIR"mv -f "$DEPLOY_DIR/ivc_demo" "$DEPLOY_DIR/ivc_demo_root";;nonroot)echo "=== build nonroot ==="sudo make all ARCH=loongarch LOG=LOG_WARN KDIR=/home/fanbao/workspace-hvisor/hvisor-la64-linux/linux-6.13.7cp driver/ivc.ko  "$DEPLOY_DIR"mv -f "$DEPLOY_DIR/ivc.ko" "$DEPLOY_DIR/ivc_nonroot.ko"cp tools/ivc_demo "$DEPLOY_DIR"mv -f "$DEPLOY_DIR/ivc_demo" "$DEPLOY_DIR/ivc_demo_nonroot"# 挂载、拷贝、卸载sudo mount "${DEPLOY_DIR}/linux1-disk.ext4" "$MNT_DIR"sudo cp "$DEPLOY_DIR/ivc_nonroot.ko"      "$MNT_DIR"sudo cp "$DEPLOY_DIR/ivc_demo_nonroot"    "$MNT_DIR"sudo umount "$MNT_DIR";;*)echo "Usage: $0 {root|nonroot}"exit 1;;
esacecho "=== done ==="

综上,在已经有完整构建的基础上,我需要执行以下指令:

cd /home/fanbao/workspace-hvisor/hvboot
./make_loongarch64
./ssd_deploy_helper.sh
cd ../hvisor-tool
./build.sh root   其中这里需要我们保存 `ivc_info->ivc_irqs[0] = 7; `
./build.sh nonroot   其中这里需要我们保存 `ivc_info->ivc_irqs[0] = 8; `

然后插入 U 盘,进入我的 wsl 中,执行 ./deploy.sh ,会把hvboot目录下的deploy部署包拷到u盘里面

#!/bin/bashset -e  # 遇到任何错误立即退出MOUNT_POINT="/mnt/e"
REMOTE_SRC="root@192.168.1.172:/home/fanbao/workspace-hvisor/hvboot/deploy"
PASSWORD="Seaway2019"# 1. 检查是否在 WSL 环境中
if ! grep -q -i microsoft /proc/version; thenecho "❌ 错误:此脚本仅适用于 WSL (Windows Subsystem for Linux)"exit 1
fi# 2. 创建挂载点(如果不存在)
if [ ! -d "$MOUNT_POINT" ]; thenecho "📁 创建挂载点: $MOUNT_POINT"sudo mkdir -p "$MOUNT_POINT"
fi# 3. 如果尚未挂载,则挂载 E: 并设置当前用户权限
if ! mountpoint -q "$MOUNT_POINT"; thenecho "🔗 挂载 E: 到 $MOUNT_POINT(设置用户权限)..."sudo mount -t drvfs E: "$MOUNT_POINT" -o uid=$(id -u),gid=$(id -g),umask=022,metadata
elseecho "✅ E: 已挂载"
fi# 4. 同步文件(关键:禁用权限和时间戳同步,避免 Windows 盘报错)
echo "🔄 开始同步远程目录到 $MOUNT_POINT ..."
export SSHPASS="$PASSWORD"
sshpass -e rsync -avz \--no-perms \--no-times \--omit-dir-times \--progress \"$REMOTE_SRC" "$MOUNT_POINT/" || true# 5. 卸载 E:
echo "⏏️  卸载 $MOUNT_POINT ..."
sudo umount "$MOUNT_POINT"# 6. 验证是否卸载成功
if ! mountpoint -q "$MOUNT_POINT"; thenecho "✅ 成功卸载 $MOUNT_POINT"
elseecho "⚠️  警告:卸载失败(可能仍在使用)"exit 1
fiecho "🎉 部署完成!文件已同步到 E: 盘。"

然后u盘插入到龙芯机器上,进入维护系统,然后就是把部署deploy包到机器中,主要操作是先挂载各个盘,然后按照 ver20251021_hvisor硬盘部署系统用户与维护手册 _LoongArch.pdf 里面进行部署

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[20260120]关于sql_id没有那些字符.txt

[20260120]关于sql_id没有那些字符.txt--//别人问的问题,sql_id是使用32进制,32进制仅仅需要10个数字+22个字母,这样有4个字符不会出现在sql_id中.--//sql_id的计算是使用MD5算法进行哈希,生成一个128位的Hash Valu…

2026必备!本科生论文神器TOP10深度测评

2026必备!本科生论文神器TOP10深度测评 2026年本科生论文写作工具测评:为什么需要这份榜单? 随着学术研究的不断深入,本科生在撰写论文过程中面临的挑战也日益增多。从选题构思到文献检索,从内容创作到格式规范&…

毕业论文救星:7款免费AI写论文工具实测,一键极速生成覆盖毕业/期刊/职称论文,查重率低原创高!

写论文遇选题难、降重愁、图表卡壳?72小时实测7款免费AI论文工具,从生成效率、原创性等4维评分。首推AI论文及时雨,全流程覆盖,10分钟出万字初稿还能降重控AI率;智谱清言擅框架梳理,通义千问可填充润色;ArXiv、…

2025.12.27 作业 - # P1311 [NOIP 2011 提高组] 选择客栈

2025.12.27 作业 - # P1311 [NOIP 2011 提高组] 选择客栈题目描述 丽江河边有 \(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号。每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 \s…

模拟费用流

Problem 1 数轴上 \(n\) 个老鼠,\(m\) 个洞。每个老鼠要找一个洞回去,代价为距离(\(|x_1-x_2|\))。求最小代价和。 把老鼠和洞排序之后建出网络,大概是这样。考虑费用流增广的过程。按照坐标从小到大加入点。加进…

数据工程中的列式存储优化技巧

数据工程中的列式存储优化技巧:从原理到实战的10个关键策略 一、引言:为什么你的数据分析还在“慢如蜗牛”? 1. 一个扎心的痛点:“我只查3个字段,却要等5分钟” 上周,我遇到一位做电商数据分析的朋友&am…

大数据领域分布式存储的分布式区块链应用

大数据领域分布式存储的分布式区块链应用:可信数据时代的基石 关键词:分布式存储、区块链、大数据、可信计算、共识算法、数据溯源、去中心化 摘要:在数据爆炸的今天,如何安全、高效、可信地存储和管理海量数据?本文将…

npu_文生图片_Flux_dev

# Flux 镜像运行简明指南本说明如何运行Flux镜像的必要步骤。## 1.Dockerfile 构建并运行- 构建镜像:bashdocker build -t flux-dev:latest -f Dockerfile .## 2.运行容器(本仓库中含有 docker-compose.yml目录)bashdocker compose up -d### …

端侧大模型部署实战:在手机上跑通70亿参数模型

摘要:本文深度揭秘如何将Qwen2-7B模型压缩至手机可运行的4GB内存占用。通过LLM.int8()量化、KV-Cache优化、投机解码(Speculative Decoding)等技术组合,我们在骁龙8 Gen3上实现了18 tokens/s的推理速度。涵盖从模型压缩、推理引擎…

强烈安利!10款AI论文工具测评,研究生毕业论文必备

强烈安利!10款AI论文工具测评,研究生毕业论文必备 2026年AI论文工具测评:为何值得一看? 随着人工智能技术的不断进步,AI论文工具在学术研究中的作用愈发重要。对于研究生群体而言,撰写高质量的毕业论文不…

AI Agent智能办公助手:从ChatGPT到真正“干活“的系统

摘要:本文揭秘如何构建一个生产级的AI Agent办公自动化系统。基于ReAct框架与函数调用(Function Calling)技术,我们打造了一个能自主操作ERP、写邮件、生成报表的"数字员工"。文章将深入解析Agent的任务规划、工具调用、…

零基础入门ESP32 AI开发:手把手教你实现大语言模型硬件应用

xiaozhi-esp32是基于ESP32的开源AI聊天机器人项目,集成Qwen/DeepSeek等大模型,采用MCP协议实现多端控制。支持离线语音唤醒、实时语音交互、声纹识别等功能,兼容70硬件平台。项目提供完整开发环境、文档和模块化代码架构,支持OTA升…

博士学位论文《大田对靶施药除草机器人系统研究》系统性分析

博士学位论文《大田对靶施药除草机器人系统研究》_李海龙 系统性分析 这篇博士学位论文《大田对靶施药除草机器人系统研究》系统性地研究了如何利用现代传感技术、控制方法和机器人技术,实现精准、高效、环境友好的杂…

Bright Data Web MCP深度测评:与Claude Code集成,企业级百万级数据采集实战

Bright Data Web MCP深度测评:与Claude Code集成,企业级百万级数据采集实战📢 关注亮数据官方动态,解锁开发者福利 平时需要数据采集/AI算力工具的小伙伴,推荐关注这几个官方渠道,能第一时间获取技术干货&…

无GPU算力也能做的大模型项目,助你轻松入行大厂_拿下大厂AI大模型offer的3个项目

文章介绍3个无需GPU算力的大模型落地项目:智能客服机器人、多Agent论文精读助手和个性化文案生成系统,通过Prompt工程和开源工具实现,适合缺乏算力资源的开发者。同时提供AI大模型应用开发6大模块学习路线,从基础认知到面试求职&a…

2025.12.27 作业 - # P7243 最大公约数

2025.12.27 作业 - # P7243 最大公约数题目背景“寻求最大公约数是人民民主的真谛。……”初秋,从枝丫滴下的阳光,柔和,在教室的窗棱溅起,润湿晨读的少女的脸颊。“阿绫,阿绫”,天依低俯身子,八字辫耷拉在竖起的…

港仔机器人指挥控制系统数字孪生界面设计

项目背景 2025年6月16日,香港首家具身智能人形机器人公司港仔机器人(00370)在香港科学园隆重举行“香港智能机器人发展前景论坛暨港仔机器人具身智能品牌战略启幕式”活动。港仔机器人首次向全球展示香港本土具身智能人形机器人的创新成果&am…

2026年固定式机械臂厂家最新推荐:圆锥破碎固定式机械臂/圆锥破碎固定式破碎锤/振动筛专用固定式机械臂/振动筛专用固定式破碎/选择指南

2026正规固定式机械臂优质厂商推荐行业背景与筛选依据据《2026-2030年中国工业机械臂行业发展白皮书》数据显示,2026年国内工业机械臂市场规模突破800亿元,其中固定式机械臂占比超45%,广泛应用于矿山开采、钢铁生产…

chatwiki的邀请码

chatwiki的邀请码chatwiki 一个RAG机器人和AI知识库Agent平台,下面是邀请码 NN7YQM ZI8RXP ZTMBR2 18P7TK TNJWWH

Servlet 生命周期详解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …