小编bru*_*uin的帖子

在C中访问两个不连续的内存块作为单个连续块?

在Linux的用户空间:假设我分配的3MiB连续存储ABC,其中A,BC各1MiB.有没有办法以某种方式AC作为单个连续2MiB内存访问(一种用户空间MMU)?

背景:我的方案是用C模拟ASIC芯片.芯片有一个3MiB内存,芯片中的两个组件可以访问相同的内存硬件,但具有不同的地址映射.要在C中对其进行建模,一种方法可能是为两个组件复制3MiB内存,并在两个内存副本之间添加一些同步机制.另一种方式可能是只有一个3MiB内存副本,一个组件按原样访问内存,而另一个组件则添加一种包装器来进行地址转换.我只是想知道是否有更简洁的方法,避免内存重复和地址转换包装...

PS:根据Maxim的回答,我写了一个简单的测试程序,它只是起作用.看来我不应该MAP_ANONYMOUSE为我的目的使用旗帜.另外,根据mmap()手册,为了MAP_FIXED正常工作,对齐C应该是PAGE_SIZE目标平台上的多个(我的x86_64 Ubuntu).我粘贴下面的代码以防万一...

#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>

#define SZ_A     (64 * 1024)   // A
#define SZ_B    (204 * 1024)   // B
#define SZ_C      (4 * 1024)   // C
#define SZ_ABC  (272 * 1024)   // ABC
#define SZ_AB   (268 * 1024)   // AB
#define SZ_AC    (68 * 1024) …
Run Code Online (Sandbox Code Playgroud)

c linux mmu

6
推荐指数
1
解决办法
141
查看次数

C / C ++:提取一个枚举的子集以形成一个新的枚举

假设我有一个列出所有人员的主枚举:

typedef enum all_personnel {
     // male
     TONY,
     MIKE,
     JIM,
     // female
     JESSICA,
     MARY,
} all_personnel_t;
Run Code Online (Sandbox Code Playgroud)

现在,我想为雄性和雌性定义另外两个枚举(例如,因为某些函数只使用male或female枚举参数),但是我想使用与主枚举相同的名称标识符。在C / C ++中可以吗?还是有其他方法?

似乎以下内容不起作用(编译器抱怨redeclaration of enumerator ‘TONY’等):

typedef enum male_personnel {
    TONY,
    MIKE,
    JIM,
} male_personnel_t;
Run Code Online (Sandbox Code Playgroud)

c c++ enums

4
推荐指数
2
解决办法
210
查看次数

如何理解图中的ARMv8 AArch64 MMU表描述符格式?

下图摘自ARMv8-A程序员指南:

Armv8-A 程序员指南

我对突出显示的条目类型有点困惑。先说一下我目前的理解(假设EL3中的阶段1翻译,粒度为4KB的场景)。

首先,“条目”和“描述符”这个名称在这种情况下似乎是可以互换的。

然后,根据ARM ARM文档(例如图D5-6),似乎有3种类型的有效描述符:

  • D_Table描述符,是指向下一级翻译表的表项。达到这种类型的描述符意味着翻译过程尚未完成。
  • D_Block 描述符,它是指向大于颗粒大小(“页面”)的内存“区域”的条目。这是翻译行走完成的两种情况之一。
  • D_Page描述符,指向粒度大小的内存“页”。这是翻译行走完成的第二种情况。

还有几个约束(有效描述符),即:

  • L0表只能包含D_Table描述符,不能包含其他两种类型(D_Block、D_Page)。
  • L3 只能包含 D_Page 描述符。
  • D_Block只能出现在L1/L2转换表中。

那么回到上图,我不明白为什么还有另一个表条目用于L1和L2?因为图中的第一行已经描述了 L0/L1/L2 的表描述符。那么,即使这是另一种表描述符类型,为什么中间内容被标记为“输出块地址”(而不是“下一级表地址”)呢?

mmu armv8

4
推荐指数
1
解决办法
2038
查看次数

如何在 R bookdown 中折叠逐字文本(而不是代码)?

在我的文档中,我想使用 ``` 块显示一些信息,例如:

```
bruin@c7 ~ $ cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
bruin@c7 ~ $
```
Run Code Online (Sandbox Code Playgroud)

对于大的输出块,我想折叠它们。怎么做?在网上搜索似乎所有相关主题都是关于代码折叠的,但我想要折叠的不是任何类型的代码,只是简单的文本......

谢谢!

folding verbatim r-markdown bookdown

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

有关于将 edk2 移植到新的 ARM64 平台的指南吗?

我是 EDK2 的新手。

为了将 ekd2 固件移植到新的 ARM64 平台,最好先获得一个至少可以运行 UEFI Shell 的最小 edk2 端口,在此基础上逐步添加改进。

看起来第一步相当陡峭,例如,如何确定平台的最小“项目”集.dsc和文件?.fdf就我而言,我想.fd为我的平台构建 并将其视为 TF-A 的 BL33,实际上我想构建一个 edk2 固件来替换 u-boot。

网上好像很难找到这样的指南。我发现了一个旧版本的 edk2,其中包含一些指令,但显然它们已过时(最新master分支中不存在,而可以在 UDK 分支中找到,例如UDK2014),并且我不确定为什么这些文档从master分支中删除。

目前我可以构建.fdFVP ( edk2-platforms/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc),并且构建输出似乎FVP_AARCH64_EFI.fd应该被视为 BL33。理论上,这可能是我的新 ARM64 平台的原型,但对我来说,它太复杂了,无法开始:固件大小约为 2.5MiB(与 500K 的 u-boot 相比),所以我猜它远非“最小” “ 版本。但很难弄清楚要删除哪些功能(以及如何删除)。

我想知道是否有关于此类主题的详细指南...

arm64 edk2

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

Ansible:在循环中生成变量

在我的变量文件中,我需要定义一个列表变量,其项目具有相似的模式,并且还共享一些(冗余)信息.我想在循环中生成列表变量,而不是手动输入所有这些信息.

例如,我有100个主机,主IP地址为192.168.100.[1:100],每个主机有一个额外的IP地址10.0.1.[1:100].所有主IP使用相同的网关,例如192.168.100.254,所有额外的IP使用另一个网关,例如10.0.1.254.

在一项任务中,我想循环遍历所有主机,对于每个主机,它都是主要的ip,额外的ip和网关都需要.我想在我的任务中使用"with_items",所以我希望有一个列表变量"IP_ADDRS",其中每个项目都是如下所示:

{ primary_ip: 192.168.100.x, primary_gw: 192.168.100.254, extra_ip: 10.0.1.x, extra_gw: 10.0.1.254}
Run Code Online (Sandbox Code Playgroud)

而不是手动定义IP_ADDRS:

IP_ADDRS:
  - { primary_ip: 192.168.100.1, primary_gw: 192.168.100.254, extra_ip: 10.0.1.1, extra_gw: 10.0.1.254}
  - { primary_ip: 192.168.100.2, primary_gw: 192.168.100.254, extra_ip: 10.0.1.2, extra_gw: 10.0.1.254}
  - ...
Run Code Online (Sandbox Code Playgroud)

我想以某种方式生成列表变量"IP_ADDRS"...

我尝试了jinja2语句,如下所示:

IP_ADDRS: >
  "{% for idx in range(1, 101) %}
  - { primary_ip: 192.168.100.{{ idx }}, primary_gw: 192.168.100.254, extra_ip: 10.0.1.{{ idx }}, extra_gw: 10.0.1.254 }
  "{% endfor %}"
Run Code Online (Sandbox Code Playgroud)

当我使用调试模块打印IP_ADDRS时,它确实打印列表中的所有项目,似乎Ansible不将此变量视为LIST,因此

with_items:{{IP_ADDRS}}

不像我预期的那样工作.

jinja2语句有什么问题,还是有办法实现相同的结果?

非常感谢,

/熊先生

variables jinja2 ansible

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

如何使用 ImageMagick 实用程序来显示/转换内部没有任何元数据的原始图像文件?

我得到了一个 RAW 图像文件(来自相机传感器模块),其中不包含任何元数据,但我知道来自其他来源的元数据,即它的宽度*高度和深度(8 位灰色)。如何告诉 imagemagick 实用程序(例如转换)将其转换为其他格式?

顺便说一句,我可以使用 Photoshop 打开它(通过在弹出对话框中告诉它元数据),但 Photoshop 不适合我手头的任务。

谢谢,

/布鲁因

imagemagick

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

“hit-under-miss” 中的 “under” 是什么意思?

ARM 网站包含对称为“HUM”(hit-under-missing)的功能的说明。

看来“under”可以解释为“after”或“follow”,意思是前面的访问是未命中,而后续的访问是命中。这种理解正确吗?如果,我想知道使用“下面”这个词是否有特殊的上下文(即使用空间关系而不是时间关系)。

caching arm

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

redsocks + iptables 行为

以下是我使用redsocksiptables从 LAN 访问 youtube的测试台的网络拓扑,前提是我在Linux和之间建立了 ssh 动态转发VPS

                         |
                 outside | inside firewall
                         |
                         |        LAN 192.168.1.0/24
                         |        ----+--------------------+-----------
                         |            |.2                  | .3
            +-----+      |     +------+----+          +----+----+
            |     |      |     |           |          |         |
Youtube <-->| VPS <============>   Linux   |          | Windows |
            |     |      |     |           |          |         |
            +-----+      |     +-----------+          +---------+
                         |
                         |
Run Code Online (Sandbox Code Playgroud)

Linux box 和 Windows box 在防火墙内的同一个 LAN 上,这阻止了对 Youtube 的任何访问。VPS 在防火墙之外,可以访问 Youtube。在 Linux 机器中,我可以ssh -D到 VPS,使 …

linux iptables

-4
推荐指数
1
解决办法
1729
查看次数

标签 统计

c ×2

linux ×2

mmu ×2

ansible ×1

arm ×1

arm64 ×1

armv8 ×1

bookdown ×1

c++ ×1

caching ×1

edk2 ×1

enums ×1

folding ×1

imagemagick ×1

iptables ×1

jinja2 ×1

r-markdown ×1

variables ×1

verbatim ×1