草庐IT

APB总线

全部标签

c - 内存加载何时会导致 x86-64 linux 上的总线错误?

我曾经认为x86-64支持未对齐的内存访问,无效的内存访问总是会导致段错误(可能除了SIMD指令,如movdqa或movaps)。不过最近我观察到普通mov指令的总线错误。这是一个复制器:voidtest(void*a){asm("mov%0,%%rbp\n\t""mov0(%%rbp),%%rdx\n\t"::"r"(a):"rbp","rdx");}intmain(){test((void*)0x706a2e3630332d69);return0;}(必须在省略帧指针的情况下进行编译,例如gcc-Otest.c&&./a.out)。mov0(%rbp),%rdx指令和地址0x706

c++ - mmap 通过 PCI 将 VME 总线覆盖到用户空间内存中?

我正在尝试通过PCI总线将VME地址空间映射到用户空间,这样我就可以在内存上执行常规读/写操作。我已经用这样的另一个PCI设备完成了此操作:-unsignedlong*mapArea(unsignedintbarAddr,unsignedintmapSize,int*fd){unsignedlong*mem;*fd=open("/dev/mem",O_RDWR);if(*fd然后“bar”就可以正常用于读/写了。对于VME,以及TundraUniverseIIPCI-VMEBridge芯片:-我应该打开“/dev/vme_m0”吗我从哪里映射我的BAR?lspci-vv:“区域1:80

linux - Linux 中的 PCI 总线负载测量

我有一个linux(3.12)系统(x86-64),其中有多个设备连接到PCI总线(PCI-e)。我想在当前情况下测量PCI总线负载,并在将另一个设备连接到总线时再次测量以查看差异,但我不知道如何做。有办法做到这一点吗? 最佳答案 我已经能够使用IntelPerformanceCounterMonitorV2.7执行此操作。我很幸运,从v2.5开始,为x86处理器添加了PCI-e总线监视器。 关于linux-Linux中的PCI总线负载测量,我们在StackOverflow上找到一个类似

c - mmap/munmap 问题 - 在第 783 次迭代后出现总线错误?

好的,这是设置:我在HPC工作,我们正在为扩展到数万个节点的需求做准备。为了解决这个问题,我实现了一个本地进程,在每个节点上缓存信息以减少网络流量。然后它通过共享内存公开此信息。基本逻辑是有一个众所周知的共享内存块,其中包含当前缓存表的名称。当更新发生时,缓存工具创建一个新的共享内存表,填充它,然后用新表的名称更新众所周知的block。代码似乎可以正常工作(例如,valgrind说没有内存泄漏)但是当我故意对其进行压力测试时,前783次更新工作得非常好-但在第784次,当我尝试更新时出现SIGBUS错误写入映射内存。如果问题是打开的文件太多(因为我正在泄漏文件描述符),我预计shm_o

c++ - 使用设备文件符号链接(symbolic link)查找总线号和设备号

我有一个由udev规则生成的设备文件(SYMLINK)/dev/CDMAModem。我想找到实际设备的总线号和设备号。实际上,我想在我的C++程序中对设备/dev/bus/usb/BUS_NO/DEVICE_NO执行USBDEVFS_RESETioctl。----udev规则----SUBSYSTEMS=="usb",ACTION=="add",DRIVERS=="zte_ev",ATTRS{bNumEndpoints}=="03",SYMLINK+="CDMAModem"SUBSYSTEMS=="usb",ACTION=="remove",DRIVERS=="zte_ev",ATTR

c - 尝试访问 C 中字符串上的字符时出现总线错误

我已经多次使用这行代码(更新:当字符串是函数的参数时!),但是当我现在尝试这样做时,我得到了一个总线错误(gcc和clang都出现了)。我正在重现尽可能简单的代码;char*string="thisisastring";char*p=string;p++;*p='x';//thislinewillcausetheBuserrorprintf("stringis%s\n",string);为什么我无法使用p指针更改字符串的第二个字符? 最佳答案 您正在尝试修改只读内存(存储字符串文字的地方)。如果您需要修改该内存,则可以改用char数

c - 使用 i2c 总线访问驱动程序时出现未知核心转储

目前我正在为Arm9嵌入式应用程序开发两个驱动程序。它们都是i2c驱动程序,每个都使用一个IO扩展器pcf8575。我已经独立测试了驱动程序,但是当我将它们都编译到内核中并运行我的主应用程序时,我得到了下面的核心转储。它通常不会在第一次驱动程序访问期间发生。这似乎是随机发生的。当我的驱动程序调用i2c驱动程序在I2c总线上传输(i2c_master_send(client,&buff[0],count))时,它肯定会发生。我将附上我的两个驱动程序的主要文件。它们很相似,而且都非常简单。我已经独立地对它们进行了大量测试。通过在两个截然不同的硬件上获得相同的结果,我已经将此排除为硬件问题。

c - 什么是用于嵌入式 Linux 的良好开源消息总线?

我正在寻找适合嵌入式Linux设备(Linux和uClinux)的良好开源消息总线。需要满足以下条件:必须是自由软件和LGPL或更自由的许可证,因为uClinux仅支持静态链接必须有CAPI必须具有相对较小的占用空间并且不依赖于第三方库必须与Linux/uClinux2.4.22+兼容应该经过良好的测试,最好有一个现有的测试框架设置应该有一个记录良好的协议(protocol)应该可以移植到其他平台消息总线主要由我们系统上的应用程序使用,以便传达配置参数等,因此它不需要满足实时要求。 最佳答案 有D-Bus.它在用户空间中运行。虽然它

linux - 总线错误打开和映射文件

我想创建一个文件并将其映射到内存中。我认为我的代码可以工作,但是当我运行它时出现“总线错误”。我搜索了谷歌,但我不确定如何解决这个问题。这是我的代码:#include#include#include#include#include#include#include#includeintmain(void){intfile_fd,page_size;charbuffer[10]="perfect";char*map;file_fd=open("/tmp/test.txt",O_RDWR|O_CREAT|O_TRUNC,(mode_t)0600);if(file_fd==-1){perror

linux - 从 SMBIOS 了解段组、总线、设备和功能编号

目标我正在尝试以编程方式找出特定PCIe设备连接到哪个物理插槽。前提是我有一张卡的PCI-ID,肯定是占用了一个插槽,解决办法就是找出是哪一个。请注意,我只对PCIExpress总线感兴趣,尽管我认为设备识别/枚举过程与旧PCI相同。尝试SMBIOS包含有关可用主板插槽的信息。可以从linux命令行检查此信息:$sudodmidecode-tslot#dmidecode2.11SMBIOS2.7present.Handle0x003A,DMItype9,17bytesSystemSlotInformationDesignation:PCIEX16_1Type:x16PCIExpress