当前位置: 首页 > news >正文

专门做当归的网站竞价网站推广

专门做当归的网站,竞价网站推广,seo排名系统源码,做图片网站侵权吗PCIe驱动开发(2)— 第一个简单驱动编写和测试 一、前言 教程参考:02_实战部分_PCIE设备测试 教程参考:03_PCIe设备驱动源码解析 二、驱动编写 新建hello_pcie.c文件 touch hello_pcie.c然后编写内容如下所示: #i…

PCIe驱动开发(2)— 第一个简单驱动编写和测试

一、前言

教程参考:02_实战部分_PCIE设备测试
教程参考:03_PCIe设备驱动源码解析

二、驱动编写

新建hello_pcie.c文件

touch hello_pcie.c

然后编写内容如下所示:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/init.h>#define HELLO_PCI_DEVICE_ID	    0x11e8
#define HELLO_PCI_VENDOR_ID	    0x1234
#define HELLO_PCI_REVISION_ID	0x10static struct pci_device_id ids[] = {{ PCI_DEVICE(HELLO_PCI_VENDOR_ID, HELLO_PCI_DEVICE_ID), },{ 0 , }
};static struct hello_pci_info_t {struct pci_dev *dev;void __iomem *address_bar0;
} hello_pci_info;MODULE_DEVICE_TABLE(pci, ids);static irqreturn_t hello_pci_irq_handler(int irq, void *dev_info)
{struct hello_pci_info_t *_pci_info = dev_info;uint32_t irq_status;// get irq_stutasirq_status = *((uint32_t *)(_pci_info->address_bar0 + 0x24));printk("hello_pcie: get irq status: 0x%0x\n", irq_status);// clean irq*((uint32_t *)(_pci_info->address_bar0 + 0x64)) = irq_status;// get irq_stutasirq_status = *((uint32_t *)(_pci_info->address_bar0 + 0x24));if(irq_status == 0x00){printk("hello_pcie: receive irq and clean success. \n");return IRQ_HANDLED;}else{printk("hello_pcie: receive irq but clean failed !!! \n");return IRQ_NONE;}
}static int hello_pcie_probe(struct pci_dev *dev, const struct pci_device_id *id)
{int bar = 0;int ret;resource_size_t len;ret = pci_enable_device(dev);if(ret) {return ret;}len = pci_resource_len(dev, bar);hello_pci_info.address_bar0 = pci_iomap(dev, bar, len);hello_pci_info.dev = dev;// register interruptret = request_irq(dev->irq, hello_pci_irq_handler, IRQF_SHARED, "hello_pci", &hello_pci_info);if(ret) {printk("request IRQ failed.\n");return ret;}// enable irq for finishing factorial computation*((uint32_t *)(hello_pci_info.address_bar0 + 0x20)) = 0x80;return 0;
}static void hello_pcie_remove(struct pci_dev *dev)
{// disable irq for finishing factorial computation*((uint32_t *)(hello_pci_info.address_bar0 + 0x20)) = 0x01;free_irq(dev->irq, &hello_pci_info);pci_iounmap(dev, hello_pci_info.address_bar0);pci_disable_device(dev);
}static struct pci_driver hello_pci_driver = {.name		= "hello_pcie",.id_table	= ids,.probe		= hello_pcie_probe,.remove		= hello_pcie_remove,
};static int __init hello_pci_init(void)
{return pci_register_driver(&hello_pci_driver);
}static void __exit hello_pci_exit(void)
{pci_unregister_driver(&hello_pci_driver);
}MODULE_LICENSE("GPL");
module_init(hello_pci_init);
module_exit(hello_pci_exit);

三、驱动编译

新建Makefile文件编写内容如下:


ifeq ($(KERNELRELEASE),)KERNELDIR ?= /lib/modules/$(shell uname -r)/build  
PWD := $(shell pwd)all:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean:rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module* modules*.PHONY: all cleanelseobj-m := hello_pcie.o
endif

然后执行 make命令进行编译
在这里插入图片描述
编译完成后可以得到驱动对应的 .ko文件
在这里插入图片描述

四、驱动加载及测试

驱动编译完成后使用如下命令加载即可:

sudo insmod hello_pcie.ko

然后使用lspci查看该pcie设备,可以看到驱动加载成功:
在这里插入图片描述
同时我们也可以看到其BAR0基地址为0xfea00000,我们使用devmem向其0x08编译地址写入数据进行阶乘运算:
在这里插入图片描述

使用详细说明可以查看查看qemu源码的docs/specs/edu.txt文件
在这里插入图片描述
然后我们使用dmesg命令可以查看驱动的相关打印:
在这里插入图片描述

http://www.zhongyajixie.com/news/13885.html

相关文章:

  • 网站开发流程详细介绍友情链接有哪些
  • 国内坚持做正品的网站惠州网站建设
  • 苏州专业高端网站建设seo外链发布平台有哪些
  • 青海做网站最好的公司企业seo职位
  • 设计有特色的网站网络营销的特点有哪些
  • 深圳定制建设网站百度风云榜电视剧排行榜
  • win7如何安装iis来浏览asp网站无锡seo公司哪家好
  • 微信怎么做网页跨境电商seo什么意思
  • 茶文化网站建设内容关于seo如何优化
  • 网站备案流程图片seo软件资源
  • 做网站和app需要多久北京突发重大消息
  • wordpress如何添加一级目录谷歌seo优化推广
  • 网站开发用户登陆的安全徐州关键词优化排名
  • 白石龙做网站百度浏览器下载安装2023版本
  • 哈尔滨虚拟web网站设计公司大数据查询平台
  • 网页设计与制作怎么把图片加进去seo搜索引擎优化原理
  • 网站图片搜索技术哪里可以做zoho crm
  • 电商平台网站开发文档百度官网平台
  • 小目标网站建设怎样设计一个网页
  • 网站地图制作怎么做百度推广登录首页
  • 域名做非法网站淘宝推广平台
  • 龙岗网站制作设计全网营销推广平台
  • 中山市建设局投诉网站网站联盟广告
  • 做网站做百度竞价赚钱360免费建站网页链接
  • 自己建的网站如何百度搜索如何修改百度上面的门店号码
  • 凡科做的网站可以优化百度平台app
  • 怎样能创建一个网站厦门百度推广开户
  • 什么是电子商务网站推广百度seo优化服务
  • 苹果CMS如何做视频网站泉州搜索推广
  • wordpress设置文章固定标题朝阳区seo技术