Thread 中讨论的其他器件:TMS320C6678、
工具/软件:Linux
您好!
在我们的定制板中、Keystone2 (66AK2H12)连接到2个 Keystone 1 (tms320c6678)处理器(即 PCIe 开关)。 我们尝试通过 PCIe 引导 K1处理器。 我们交叉编译了 TI 提供的 Linux 主机 PCIe 示例(pciedemo.c)、并移植到其中一个 K2中。 它工作正常(成功引导一个 K1)。 因此、我们修改了 Linux 主机 PCIe 代码(pciedemo.c)以支持 sysfs、以便用户可以直接加载其应用程序(*。out)、而无需转换为十六进制格式。
首先、我们使用 sysfs 创建了 pciedemo.ko 模块、该模块成功插入内核(已知 thro PCIe 条形寄存器由 setpci 命令读取、并创建字符设备)
当我们尝试从用户空间访问应用寄存器 thro PCIe bar0时、会出现此问题。 在读取条形寄存器时、我遇到未处理的分割故障、但不是以书面形式。 为了供您参考、我提供了代码片段。
pcie_drv_inst[dev_id].bar_info[0].virtAddr =
(void *) mmap (NULL、pcie_drv_inst[dev_id].bar_info[0]。length、
(PROT_READ | PROT_WRITE)、
map_shared、pci_drv_inst[dev_id].dev_desc、(off_t) pci_drv_inst[dev_id].bar_info[0].pcieAddr);
/* PCIe 应用寄存器虚拟地址(映射到 PCI 窗口)*/
#define PCI_REGV (MINOR、reg)(无符号*)(PCIe_drv_inst[MINOR).bar_info[0]。virtAddr + reg)
bar_num =*(PCI_REGV (DSP_id、IB_bar (IB_TRANS_Num)))/* 出现未处理的分割故障*/
*(PCI_REGV (DSP_id、IB_bar (IB_TRANS_num)))= bar_num;//无错误,但不知道写入的位置!!!! *
我对虚拟内存支持的疑问是、PCIe 基础驱动程序中还需要注意哪些事项?
注意:我们使用的是 ti git repo 提供的 Linux 3.10。 配置为32位模式的 PCIe 指示条。
请就此提供帮助?
此致、
S.Sivanantam