小编xia*_*ogw的帖子

是否可以在 x86_64 主机上运行 ARM64 vagrant 实例

我正在尝试在 x86_64 主机上运行 ARM64 Ubuntu VM 以用于开发目的。我在他们的网站上搜索了 vagrant box 只找到了这个:

https://app.vagrantup.com/boxes/search?provider=libvirt&q=arm64&sort=downloads&utf8=%E2%9C%93

但是,我未能启动该 VM(使用vagrant up --provider libvirt),因为它似乎使用qemu-system-x86_64用作模拟器而不是qemu-system-aarch64. 我用的vagrantfile?

Vagrant.configure("2") do |config|
  config.vm.box = "MalibuKoKo/ubuntu-18.04.3-server-arm64-raspberry-4"
  config.vm.define "ubuntu18.04-aarch64"
  config.vm.provider :libvirt do |libvirt|
    libvirt.machine_arch = "aarch64"
    libvirt.uri = 'qemu:///system'
    libvirt.emulator_path = "/usr/bin/qemu-system-aarch64"
  end
end
Run Code Online (Sandbox Code Playgroud)

任何建议如何提出它?谢谢

linux qemu libvirt vagrant vagrantfile

6
推荐指数
0
解决办法
631
查看次数

_mm_clflush 真的会刷新缓存吗?

我试图通过编写和运行测试程序来了解硬件缓存的工作原理:

#include <stdio.h>
#include <stdint.h>
#include <x86intrin.h>

#define LINE_SIZE   64

#define L1_WAYS     8
#define L1_SETS     64
#define L1_LINES    512

// 32K memory for filling in L1 cache
uint8_t data[L1_LINES*LINE_SIZE];

int main()
{
    volatile uint8_t *addr;
    register uint64_t i;
    int junk = 0;
    register uint64_t t1, t2;

    printf("data: %p\n", data);

    //_mm_clflush(data);
    printf("accessing 16 bytes in a cache line:\n");
    for (i = 0; i < 16; i++) {
        t1 = __rdtscp(&junk);
        addr = &data[i];
        junk = *addr;
        t2 = __rdtscp(&junk) - t1; …
Run Code Online (Sandbox Code Playgroud)

linux x86-64 cpu-architecture cpu-cache cache-locality

5
推荐指数
1
解决办法
2452
查看次数

Ubuntu 20.04 上 gcc-multilib 和 gcc-9-aarch64-linux-gnu 的安装冲突

我在 x86 labtop 上使用 Ubuntu 20.04,并尝试安装“gcc for aarch64”(交叉编译)并gcc-multilib使用以下命令:

sudo apt install gcc-9-aarch64-linux-gnu gcc-multilib
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

The following packages have unmet dependencies:
 gcc-9-aarch64-linux-gnu : Conflicts: gcc-multilib but 4:9.3.0-1ubuntu2 is to be installed
 gcc-multilib : Conflicts: gcc-9-aarch64-linux-gnu
                Conflicts: gcc-9-aarch64-linux-gnu:i386
Run Code Online (Sandbox Code Playgroud)

有没有办法同时安装交叉编译器和gcc-multilib?

linux gcc cross-compiling

5
推荐指数
0
解决办法
1066
查看次数

为什么 ELF 程序头有两个 LOAD 条目,而程序布局三个部分

我编写了一个启用了 PIE/PIC 的“hello world”程序。我观察到程序头有 2 个 LOAD 条目:

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
... ...
  LOAD           0x000000 0x00000000 0x00000000 0x00870 0x00870 R E 0x1000
  LOAD           0x000eb0 0x00001eb0 0x00001eb0 0x0015c 0x00164 RW  0x1000
Run Code Online (Sandbox Code Playgroud)

所以在我的理解中,ELF 二进制文件将被加载到 2 个页面中。第 1 页包含从偏移量 0 到文件大小 0x870 的二进制文件,它是 Read & Execute。由于它们是 0x1000 对齐的,因此第二个条目将被加载到包含二进制文件的第二页中(从偏移量0xeb00xeb0+0x15c)。此页面具有读写权限。

当我“pmap”正在运行的进程(或 cat /proc/pid/maps)时,它显示正在运行的程序有 3 个页面:

b7554000      4K rw---   [ anon ]
b7555000   1700K r-x-- libc-2.19.so
b76fe000      4K ----- libc-2.19.so
b76ff000      8K r---- libc-2.19.so
b7701000 …
Run Code Online (Sandbox Code Playgroud)

linux loading elf loader

3
推荐指数
1
解决办法
1181
查看次数

如何在linux C内联汇编中使用宏

我想调用由其他配置结果确定的地址.并且该调用是在内联汇编中.

目前,它是这样的,并手动修改:

asm volatile ("call 0xc0200c20\n\t");
Run Code Online (Sandbox Code Playgroud)

我的问题是我能这样写吗?

#define CALL_ADDR 0xC0200c20

asm volatile ("call CALL_ADDR\n\t");
Run Code Online (Sandbox Code Playgroud)

谢谢!

c linux macros inline-assembly

2
推荐指数
1
解决办法
2735
查看次数