- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在测试 virtio 驱动程序,以便在 Qemu 中从 guest 计算机与主机通信。现在我只想发送一个缓冲区。
我的问题是,当调用与虚拟队列关联的回调时,设备接收到一个空缓冲区。
奇怪的是,当驱动程序发送的缓冲区长度发生变化时,设备接收到的缓冲区长度也会发生变化。
在我的驱动程序中:
static int virt_test_probe(struct virtio_device *vdev)
{
struct virt_test_info *vi;
int retvalue = 0;
struct scatterlist sg[1];
char *str = vmalloc(1000*sizeof(char));
int err;
memset(str, 121, 1000*sizeof(char));
vi = kzalloc(sizeof(struct virt_test_info), GFP_KERNEL);
if (!vi)
return -ENOMEM;
printk(KERN_ERR "TEST VIRTIO LINUX: %s. Value of str: %s\n", __FUNCTION__, str);
vi->vq = virtio_find_single_vq(vdev, protector_recv_done, "input");
if (IS_ERR(vi->vq)) {
retvalue = PTR_ERR(vi->vq);
goto err_free;
}
vdev->priv = vi;
virtio_device_ready(vdev);
sg_init_one(sg, str, 1000*sizeof(char));
err = virtqueue_add_outbuf(vi->vq, sg, 1, str, GFP_ATOMIC);
virtqueue_kick(vi->vq);
return 0;
err_free:
kfree(vi);
return retvalue;
}
在我的 QEMU 设备中:
static void handle_output(VirtIODevice *vdev, VirtQueue *vq)
{
//VirtIOTEST *vtest = VIRTIO_TEST(vdev);
char *buf = malloc(1000*sizeof(char));
VirtQueueElement *elem;
int len;
printf("TEST VIRTIO: %s\n", __FUNCTION__);
for(;;) {
elem = virtqueue_pop(vq, sizeof(VirtQueueElement));
if (elem)
break;
}
memset(buf,122, 1000*sizeof(char)); // I nitialised the buffer with y char
len = iov_to_buf(elem->out_sg, elem->out_num, 0, buf, 1000*sizeof(char));
printf("TEST VIRTIO: %s: content %s, len:%i\n", __FUNCTION__, buf, len); //the value length here changes with the the length of the driver's buffer
for(len=0; len<10; len++) {
printf("%02x",buf[len]); // here we're printing 0s
}
}
我使用的是 arm64 Linux。缓冲区的值似乎通过 qemu 的调用是一致的。所以我猜问题出在 linux 内核或其他方面。我检查了分散列表是否正常,据我所知,我没有收到来自 add_output_buf 的错误。
最佳答案
我刚刚发现它不起作用的原因:使用 kmalloc
而不是 vmalloc
来分配要传递给 sg_init_one
的缓冲区。原因如下:
scatterlist 将缓冲区存储为一个页面。因此它必须使用 page_to_virt
将缓冲区转换为页面,这基本上是将偏移量应用于虚拟地址以获得页面物理地址。
现在,vmalloc
不像kmalloc
那样将内存映射到连续的物理地址空间。因此它更改页表以将不连续的物理地址映射到连续的虚拟地址。所以函数 page_to_virt
似乎不适用于 vmalloc
,因为它需要的不仅仅是应用偏移量来进入物理地址空间。
关于c - 使用带有 virtio 设备/驱动程序的 virtqueue 从主机到 guest 时清空缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43985619/
我想从另一个来ping一个vmware guest虚拟机。两者都是Windows XP并使用NAT。我将VMnet8的IP手动设置为192.168.18.1。 (不使用自动获取IP地址)。另外,我无法
我有一台 Windows 服务器,其 AD 通过 AD 连接同步到 Azure AD,用户正在使用 O365。然后,该租户中的某些帐户会作为 guest 帐户被邀请到另一个租户。 当我从 AD 中删除
我已经在 VPS Debian Linux 机器上安装了最新版本的 RabbitMQ。尝试通过访客/访客登录,但返回消息登录失败。我做了一些研究,发现出于安全原因,禁止通过访客/访客远程登录。 我还尝
情况是我尝试在IE8(Win 7 guest 操作系统)中测试网页,由于某种原因我在js ajax中使用的开发环境中使用了很多“http://localhost:8000” url,所以我无法通过知识
我在 VirtualBox 中使用 Ubuntu 18.04,在安装 guest 添加后,我可以在 virtualbox-guest-dkms 和 virtualbox-guest-dkms-hwe
除了一个问题,我刚刚让运行 CentOS 的 guest 盒完美运行。我正在尝试挂载共享文件夹。我已按照使用此代码获取共享文件夹“可安装”的说明进行操作: VBoxManage sharedfolde
我正在尝试将内容从主机复制到 guest 计算机,但为了复制,我需要安装 guest 附加磁盘。 或者还有其他方法可以访问 guest 计算机上的主机内容,反之亦然? 最佳答案 从 VirtualBo
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我正在尝试将内容从主机复制到来宾计算机,但要进行复制,我需要安装来宾添加磁盘。。或者,是否有其他方法可以访问来宾计算机上的主机内容,反之亦然?
关于如何解决该错误的任何想法: 在不支持的计算机上尝试了特定于 guest 的操作准备好与客人沟通。这不应该发生并且是一个错误应该报告。 vagrant up 之后? 最佳答案 如果您尝试在 Wind
我正在尝试使用 Virtual Box、Virtual Box Guest Additions 和 Vagrant 运行 Linux VM,并在我的 Windows 7 机器上安装一个文件夹。我已经尝
首先,使用 QEMU Virtual Machine (Debian Sparc64 Etch 4.0) ,我能够成功地从 Guest 到 Host ( ssh ) 获取 scp 和 MacOS Hi
我正在尝试将 KVM guest (Ubuntu 18.04)添加到本地网络,就像网络中的其他真实服务器一样。我在主机系统(Ubuntu 18.04)中配置了 KVM 桥接接口(interface),
当我使用这个命令时: vagrant up 我得到这个错误: [machine1] GuestAdditions versions on your host (4.3.36) and guest (5
我在我的主机上本地运行 MySQL,并且由于原因™我无法在我的 Vagrant 机器内运行它。我知道有一种方法可以通过 iptables 将所有流量转发到 3306 到主机的 IP 地址和端口来解决这
我已经在两台机器A和B之间建立了rabbitMQ联合,双向, 但是有错误 {auth_failure,"ACCESS_REFUSED - 使用身份验证机制 PLAIN 拒绝登录。有关详细信息,请参阅代
我有一个 Web 项目 GUI.. 我最初只与管理员一起工作。 因此,当管理员使用他的用户名和密码登录时,我使用表单例份验证将他重定向到默认页面“Default.aspx”。 但现在我还必须与 gue
我正在开展一个项目,我必须验证适用于英特尔凌动处理器和 Windows 7 操作系统的平台。 我用过: ManagementClass mgmt = new ManagementClass("Win3
我必须处理这个非常可怕的旧 python 项目,它只能在 Windows xp VM 中运行。有没有办法在主机中使用 pycharm 并连接到 guest 中的解释器(顺便说一句,这是 python
我有一个 PHP 项目,本质上是一家公司的订单处理网站。公司中的每个用户都可以访问该网站,并获得应用程序的特定凭据,以控制对页面和功能的访问。 现在我有一个允许访客访问单个页面的请求。这个请求的复杂点
我是一名优秀的程序员,十分优秀!