PCIe to CAN Linux 驱动详细说明
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46621272/article/details/118248223?
采用 FPGA + SJA1000 实现 PCIe to CAN
Linux 驱动
定制支持 CAN 的内核。进 linux kernel 源代码文件夹。cd /opensource/kernel/linux-3.18.20/
make menuconfig。见下图
编译内核。make uImage
编写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 函数可以不要,空返回就可以。
在调试时,运行 can-utils-master 工具测试出现戳我“Create socket failed: Address family not supported by protocol” 错误,折腾很久,是当前内核不支持 CAN 。linux 内核需要重新定制,需要支持 CAN 。按上面的图去重新编译内核就行。
编译驱动
用新编译好的内核启动设备,加载 insmod oem_pcie.ko
用 can-utils-master 测试 CAN 通讯。
有技术问题可以联系 708907433@qq.com
连接:采用 FPGA 实现 <PCIe to CAN> 网卡的设计 https://blog.csdn.net/qq_46621272/article/details/118242161?
PCIe to CAN Linux 驱动详细说明相关推荐
- pci-e串口卡linux 驱动下载,万能PCI串口卡驱动下载
下面点击下载安装,最新更新的这个版本对于很多用户来说,体验感觉还是可以的.虽然有一些小问题没有解决,但是大体上还是符合用户使用需求.尤其是针对之前版本的修改,就比较OK的感觉. 万能PCI串口卡驱动官 ...
- pci-e串口卡linux 驱动下载,pci串口卡万能驱动
万能PCI串口卡驱动程序,支持绝大多数的串口卡.支持WINDOWS/LINUX系统.支持98/me/2000/xp/vista/server系统. 运行PCISETUP.EXE安装程序,选择卡的类型, ...
- 迈德威视工业相机 Linux驱动详细步骤
[关于ubuntu18.04及使用mindvision相机遇到的问题] 一.下载迈德威视工业相机 linux SDK http://www.mindvision.com.cn/rjxz/list_12 ...
- NXP LS1046A及飞腾新四核 FT2004 PCIE EP端LINUX设备驱动开发
文章目录 前言 一.PCIE 硬件简介 二.PCIE EP地址映射原理介绍 1. PCI总线的各种域(存储器域.PCI总线域) 2. 开发EP设备驱动要做的事 三.NXP LS1046A PCIE E ...
- 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内核版本, ...
- 最全Linux驱动开发全流程详细解析(持续更新)
Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...
- Linux驱动框架及详述(详细教程)
Linux驱动框架及详述(详细教程) 1.前言 2.驱动程序的分类 3.设备驱动程序功能 4.驱动的基本框架 5.Hello驱动的编写 6.字符设备(LED)驱动程序编写实例 6.1 定义file_o ...
- linux驱动PCIE开发
Linux内核用主设备号来定位对应的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备: 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 ...
- linux显卡驱动安全模式,大神设置win7在安全模式安装显卡驱动详细的教程?
大神设置win7在安全模式安装显卡驱动详细的教程? 许多用户询问说win7怎么在安全模式安装显卡驱动?什么是显卡驱动?它是一种硬件所对应的软件,支持计算机与设备之间的通信,无驱动程序,计算机的硬件就无 ...
最新文章
- plt.figure()各参数使用
- python代码案例详解-Python之入门基础字典案例详解,新手必学
- erp系统方案书_门禁系统方案书
- sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞
- Qt笔记-waitForBytesWritten需要注意的地方
- 九章算法 | Facebook 面试题 : Backpack VI 背包算法
- es 创建索引_从一道面试题来看ES的分布式架构原理
- 【169天】黑马程序员27天视频学习笔记【Day08-上】
- java mysql备份_java调用mysql服务做备份与恢复
- 浅谈高等数学和工程数学在信号与系统中的应用
- 艾肯声卡调试方法【必看】
- openwrt 19 overlay 空间不足_新桥胡同拆除19处违建!背街小巷“瘦身”后宽敞多了...
- linux安全工具(RKHunter)
- IText构造PDF文件
- 时间记录APP———Time Meter
- 基于mysql的应用程序设计[j] 兰旭辉_熊家军_邓刚_高校C语言自动考试系统参考文献...
- 阿里云“网红“运维工程师白金:做一个平凡的圆梦人
- RMQ倍增,附赠有趣小故事一发
- BLEMotion-Kit 支持蓝牙运动传感评估套件
- 笔记本未启用无线服务器,WiFi无线网络提示未启用DHCP无法上网的解决方法