版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46621272/article/details/118248223?
采用 FPGA + SJA1000 实现 PCIe to CAN

Linux 驱动

  1. 定制支持 CAN 的内核。进 linux kernel 源代码文件夹。cd /opensource/kernel/linux-3.18.20/
    make menuconfig。见下图




  2. 编译内核。make uImage

  3. 编写oem_pcie.c 驱动,该驱动是在 /linux-3.18.20/drivers/net/can/sja1000/ems_pci.c 基础上修改的,就是因为 ems_pci.c 文件最小,最容易修改。改完后只有不到8K 连注释不到300行比源文件还小。其实移植有几个知识点掌握就很好办,我将这几个知识点例出来。

     //★ oem_pci_tbl 设备表,这里的 0x10ee, 0x7011 在 FPGA 工程中有介绍static const struct pci_device_id oem_pci_tbl[] = {{0x10ee, 0x7011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},{0,}};MODULE_DEVICE_TABLE(pci, oem_pci_tbl);//★ SJA1000 寄存器读函数static u8 oem_pci_read_reg(const struct sja1000_priv *priv, int reg){return readb(priv->reg_base + reg);}//★ SJA1000 寄存器写函数static void oem_pci_write_reg(const struct sja1000_priv *priv,int reg, u8 val){writeb(val, priv->reg_base + reg);}//★ 允许中断函数static void oem_pci_enable_irq(struct oem_pci_card *card){writel(1,card->conf_addr + 0x2004);                     //XILINX XDMA 中的文档有描述}//★ 禁止中断函数static void oem_pci_disable_irq(struct oem_pci_card *card){writel(0,card->conf_addr + 0x2004);                      //XILINX XDMA 中的文档有描述}//★ SJA1000 原理图中采用的是 16MHz时钟,Linux 驱动初始化时钟的值需要除 2// 在调试时这个值整的不对,波特率总是差一半,查了很久//网上有个文章说 SJA1000 内部时钟是晶体的二分频。#define OEM_PCIE_CAN_CLOCK (16000000/2)   // SJA1000原理图 16MHz,这里要除 2//★ 与FPGA XDMA IP 相关的一些常量的定义#define OEM_PCIE_CONF_BAR  1       // XILINX FPGA PCIE CONFIG REG BAR#define OEM_PCIE_CONF_SIZE    65536   // 在FPGA PCIE设计中 XDMA 寄存器空间 64K#define OEM_PCIE_BASE_BAR    0       // XILINX FPGA AXI Lite Master Interface BAR#define OEM_PCIE_BASE_SIZE  1024*1024   // FPGA_PCIE 分配的空间 1M,// FPGA XDMA 中分配的地址"PCIe to AXI Lite Master Interface"#define OEM_PCIE_CAN_BASE_OFFSET  0x20000 // 在 FPGA PCIE 设计中 // AXI_EPC 的地址与该值对应 #define OEM_PCIE_CAN_CTRL_SIZE   4096    // 在 FPGA PCIE 设计中 // AXI_EPC 的地址大小//★ oem_pci_post_irq   函数可以不要,空返回就可以。//★ oem_pci_card_reset 函数可以不要,空返回就可以。
  1. 在调试时,运行 can-utils-master 工具测试出现戳我“Create socket failed: Address family not supported by protocol” 错误,折腾很久,是当前内核不支持 CAN 。linux 内核需要重新定制,需要支持 CAN 。按上面的图去重新编译内核就行。

  2. 编译驱动

  3. 用新编译好的内核启动设备,加载 insmod oem_pcie.ko

  4. 用 can-utils-master 测试 CAN 通讯。

  5. 有技术问题可以联系 708907433@qq.com

连接:采用 FPGA 实现 <PCIe to CAN> 网卡的设计 https://blog.csdn.net/qq_46621272/article/details/118242161?

PCIe to CAN Linux 驱动详细说明相关推荐

  1. pci-e串口卡linux 驱动下载,万能PCI串口卡驱动下载

    下面点击下载安装,最新更新的这个版本对于很多用户来说,体验感觉还是可以的.虽然有一些小问题没有解决,但是大体上还是符合用户使用需求.尤其是针对之前版本的修改,就比较OK的感觉. 万能PCI串口卡驱动官 ...

  2. pci-e串口卡linux 驱动下载,pci串口卡万能驱动

    万能PCI串口卡驱动程序,支持绝大多数的串口卡.支持WINDOWS/LINUX系统.支持98/me/2000/xp/vista/server系统. 运行PCISETUP.EXE安装程序,选择卡的类型, ...

  3. 迈德威视工业相机 Linux驱动详细步骤

    [关于ubuntu18.04及使用mindvision相机遇到的问题] 一.下载迈德威视工业相机 linux SDK http://www.mindvision.com.cn/rjxz/list_12 ...

  4. NXP LS1046A及飞腾新四核 FT2004 PCIE EP端LINUX设备驱动开发

    文章目录 前言 一.PCIE 硬件简介 二.PCIE EP地址映射原理介绍 1. PCI总线的各种域(存储器域.PCI总线域) 2. 开发EP设备驱动要做的事 三.NXP LS1046A PCIE E ...

  5. Linux的pcie模拟网卡,Intel英特尔PCIe万兆网卡虚拟功能驱动4.11.1版For Linux(2021年3月5日发布)...

    驱动说明 Intel英特尔PCIe万兆网卡虚拟功能驱动4.11.1版For Linux(2021年3月5日发布) 英特尔万兆网卡Linux ixgbe最新驱动,支持2.6.18~5.11.2内核版本, ...

  6. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

  7. Linux驱动框架及详述(详细教程)

    Linux驱动框架及详述(详细教程) 1.前言 2.驱动程序的分类 3.设备驱动程序功能 4.驱动的基本框架 5.Hello驱动的编写 6.字符设备(LED)驱动程序编写实例 6.1 定义file_o ...

  8. linux驱动PCIE开发

    Linux内核用主设备号来定位对应的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备: 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 ...

  9. linux显卡驱动安全模式,大神设置win7在安全模式安装显卡驱动详细的教程?

    大神设置win7在安全模式安装显卡驱动详细的教程? 许多用户询问说win7怎么在安全模式安装显卡驱动?什么是显卡驱动?它是一种硬件所对应的软件,支持计算机与设备之间的通信,无驱动程序,计算机的硬件就无 ...

最新文章

  1. plt.figure()各参数使用
  2. python代码案例详解-Python之入门基础字典案例详解,新手必学
  3. erp系统方案书_门禁系统方案书
  4. sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞
  5. Qt笔记-waitForBytesWritten需要注意的地方
  6. 九章算法 | Facebook 面试题 : Backpack VI 背包算法
  7. es 创建索引_从一道面试题来看ES的分布式架构原理
  8. 【169天】黑马程序员27天视频学习笔记【Day08-上】
  9. java mysql备份_java调用mysql服务做备份与恢复
  10. 浅谈高等数学和工程数学在信号与系统中的应用
  11. 艾肯声卡调试方法【必看】
  12. openwrt 19 overlay 空间不足_新桥胡同拆除19处违建!背街小巷“瘦身”后宽敞多了...
  13. linux安全工具(RKHunter)
  14. IText构造PDF文件
  15. 时间记录APP———Time Meter
  16. 基于mysql的应用程序设计[j] 兰旭辉_熊家军_邓刚_高校C语言自动考试系统参考文献...
  17. 阿里云“网红“运维工程师白金:做一个平凡的圆梦人
  18. RMQ倍增,附赠有趣小故事一发
  19. BLEMotion-Kit 支持蓝牙运动传感评估套件
  20. 笔记本未启用无线服务器,WiFi无线网络提示未启用DHCP无法上网的解决方法

热门文章

  1. 陈寿福服从法院判决已支付赔偿并道歉
  2. python 代码整体左移或右移
  3. python 编码小结
  4. 梅科尔工作室-李舒婷-鸿蒙笔记4
  5. 教你用ps如何将图片、文字做出模糊斑驳的作旧效果
  6. UVA 12563 Jin Ge Jin Qu hao 01背包变形
  7. 索尼单反相机跑焦的调整 A700 7D 5D
  8. delegate的几种写法
  9. 蛋白粉是智商税?这6类人喝了,一点都不亏
  10. mysql集群方案PXC_【Mysql】MySQL集群方案之PXC(percona xtradb cluster)