草庐IT

dma_init_struct

全部标签

c - 在 C 中覆盖 _init 函数,它有多安全?

我正在构建一个共享库形式的调试内存工具,我在运行时链接到一个可执行文件(包括malloc系列的重写方法)。为了处理我的数据结构的初始化,我简单地使用了一个条件变量。每次调用我的malloc时,我都会检查变量是否未设置,然后调用负责初始化结构的函数。现在这对于运行单个执行线程的程序来说效果很好,但如果程序包含超过1个线程,就会出现问题。确保在用户生成任何线程之前进行初始化的唯一方法(我能想到)是覆盖_init,如图所示inthislink.现在这个小例子运行正确了,但是当我尝试在我自己的共享库上覆盖_init时,我在尝试链接它时遇到了这个错误:memory2.o:Infunction`_

c - 在 C 中覆盖 _init 函数,它有多安全?

我正在构建一个共享库形式的调试内存工具,我在运行时链接到一个可执行文件(包括malloc系列的重写方法)。为了处理我的数据结构的初始化,我简单地使用了一个条件变量。每次调用我的malloc时,我都会检查变量是否未设置,然后调用负责初始化结构的函数。现在这对于运行单个执行线程的程序来说效果很好,但如果程序包含超过1个线程,就会出现问题。确保在用户生成任何线程之前进行初始化的唯一方法(我能想到)是覆盖_init,如图所示inthislink.现在这个小例子运行正确了,但是当我尝试在我自己的共享库上覆盖_init时,我在尝试链接它时遇到了这个错误:memory2.o:Infunction`_

linux - 在用户空间使用 DMA 内存传输

是否有可供用户空间使用的linuxDMA内存到内存复制机制?我有一个Linux应用程序,它通常(每秒50-100次)必须memcpy几兆(10+)的数据。通常这不是问题,但我们已经开始看到它可能消耗过多CPU带宽的证据。目前的测量表明我们正在移动大约1Gbytes/s。我知道内核中的dma功能,我看到一些文档讨论为大内存副本构建自定义驱动程序,正是出于这个原因......但似乎有人会为此构建一个通用API目前为止。我错了吗?DMA是内核独有的功能吗?我应该澄清一下,这是针对IntelX86架构的,而不是嵌入式的。 最佳答案 Linu

linux - 在用户空间使用 DMA 内存传输

是否有可供用户空间使用的linuxDMA内存到内存复制机制?我有一个Linux应用程序,它通常(每秒50-100次)必须memcpy几兆(10+)的数据。通常这不是问题,但我们已经开始看到它可能消耗过多CPU带宽的证据。目前的测量表明我们正在移动大约1Gbytes/s。我知道内核中的dma功能,我看到一些文档讨论为大内存副本构建自定义驱动程序,正是出于这个原因......但似乎有人会为此构建一个通用API目前为止。我错了吗?DMA是内核独有的功能吗?我应该澄清一下,这是针对IntelX86架构的,而不是嵌入式的。 最佳答案 Linu

linux - Linux 中的 DMA memcpy 操作

我想使用dmaengine.c文件(linux/drivers/dma)中的dma_async_memcpy_buf_to_buf函数进行dma。为此,我在dmatest.c文件(linux/drivers/dma)中添加了一个函数,如下所示:voidfoo(){intindex=0;dma_cookie_tcookie;size_tlen=0x20000;ktime_tstart,end,end1,end2,end3;s64actual_time;u16*dest;u16*src;dest=kmalloc(len,GFP_KERNEL);src=kmalloc(len,GFP_KER

linux - Linux 中的 DMA memcpy 操作

我想使用dmaengine.c文件(linux/drivers/dma)中的dma_async_memcpy_buf_to_buf函数进行dma。为此,我在dmatest.c文件(linux/drivers/dma)中添加了一个函数,如下所示:voidfoo(){intindex=0;dma_cookie_tcookie;size_tlen=0x20000;ktime_tstart,end,end1,end2,end3;s64actual_time;u16*dest;u16*src;dest=kmalloc(len,GFP_KERNEL);src=kmalloc(len,GFP_KER

linux - 我可以在不使用 openstack 或 EC2 的情况下运行 cloud-init 环境吗?

我已经创建了一个环境,其中包含多个基于KVM的Linux主机。我正在使用virt-manager创建不同的VM,我正在使用Linux网桥在不同主机中的VM之间创建连接。现在,我想要一个自动配置服务器,这样我的虚拟机就可以根据每个虚拟机拥有的唯一ID自动配置它们的名称、IP地址、运行一些脚本等。是否可以在非openstack环境中复制一种cloud-init设置?我尝试通过以下方式使用cloud-init数据源NoCloud。首先,我在虚拟机中安装了cloud-init并配置了cloud.cfg:datasource:NoClouddatasource_list:[NoCloud]dis

linux - 我可以在不使用 openstack 或 EC2 的情况下运行 cloud-init 环境吗?

我已经创建了一个环境,其中包含多个基于KVM的Linux主机。我正在使用virt-manager创建不同的VM,我正在使用Linux网桥在不同主机中的VM之间创建连接。现在,我想要一个自动配置服务器,这样我的虚拟机就可以根据每个虚拟机拥有的唯一ID自动配置它们的名称、IP地址、运行一些脚本等。是否可以在非openstack环境中复制一种cloud-init设置?我尝试通过以下方式使用cloud-init数据源NoCloud。首先,我在虚拟机中安装了cloud-init并配置了cloud.cfg:datasource:NoClouddatasource_list:[NoCloud]dis

linux - PCIE linux 内核驱动程序中的流式 DMA

我正在为Linux内核开发FPGA驱动程序。代码似乎在x86上运行良好,但在x86_64上我遇到了一些问题。我实现了流式DMA。就这样get_user_pages(...);for(...){sg_set_page();}pci_map_sg();但是pci_map_sg返回了类似0xbd285800的地址,这些地址没有按PAGE_SIZE对齐,所以我无法发送完整的第一页,因为PCIE规范说"RequestsmustnotspecifyanAddress/LengthcombinationwhichcausesaMemorySpaceaccesstocrossa4-KBboundary

linux - PCIE linux 内核驱动程序中的流式 DMA

我正在为Linux内核开发FPGA驱动程序。代码似乎在x86上运行良好,但在x86_64上我遇到了一些问题。我实现了流式DMA。就这样get_user_pages(...);for(...){sg_set_page();}pci_map_sg();但是pci_map_sg返回了类似0xbd285800的地址,这些地址没有按PAGE_SIZE对齐,所以我无法发送完整的第一页,因为PCIE规范说"RequestsmustnotspecifyanAddress/LengthcombinationwhichcausesaMemorySpaceaccesstocrossa4-KBboundary