网站运营
位置:首页>> 网站运营>> 详解linux dma驱动编写

详解linux dma驱动编写

作者:feixiaoxing  发布时间:2023-07-27 15:14:09 

标签:linux,dma,驱动

linux下面的驱动虽然什么样的情形都有,但是dma驱动却并不少见。dma可以有很多的好处,其中最重要的功能就是能够帮助我们将数据搬来搬去,这个时候cpu就由时间去做别的事情了,提高了设备效率。

1、dma驱动在什么地方


drivers/dma

2、如何看s3c的dma驱动,先看Kconfig


config S3C24XX_DMAC
 bool "Samsung S3C24XX DMA support"
 depends on ARCH_S3C24XX || COMPILE_TEST
 select DMA_ENGINE
 select DMA_VIRTUAL_CHANNELS
 help
  Support for the Samsung S3C24XX DMA controller driver. The
  DMA controller is having multiple DMA channels which can be
  configured for different peripherals like audio, UART, SPI.
  The DMA controller can transfer data from memory to peripheral,
  periphal to memory, periphal to periphal and memory to memory.

3、发现s3c只依赖于S3C24XX_DMAC,这样可以接着看Makefile


obj-$(CONFIG_S3C24XX_DMAC) += s3c24xx-dma.o

4、确认驱动文件为s3c24xx-dma.c,了解基本结构


static struct platform_driver s3c24xx_dma_driver = {
 .driver   = {
   .name  = "s3c24xx-dma",
 },
 .id_table  = s3c24xx_dma_driver_ids,
 .probe   = s3c24xx_dma_probe,
 .remove   = s3c24xx_dma_remove,
};

module_platform_driver(s3c24xx_dma_driver);

5、驱动为基本的platform driver,接着就可以了解probe函数了


/* Initialize memcpy engine */
dma_cap_set(DMA_MEMCPY, s3cdma->memcpy.cap_mask);
dma_cap_set(DMA_PRIVATE, s3cdma->memcpy.cap_mask);
s3cdma->memcpy.dev = &pdev->dev;
s3cdma->memcpy.device_free_chan_resources =
       s3c24xx_dma_free_chan_resources;
s3cdma->memcpy.device_prep_dma_memcpy = s3c24xx_dma_prep_memcpy;
s3cdma->memcpy.device_tx_status = s3c24xx_dma_tx_status;
s3cdma->memcpy.device_issue_pending = s3c24xx_dma_issue_pending;
s3cdma->memcpy.device_config = s3c24xx_dma_set_runtime_config;
s3cdma->memcpy.device_terminate_all = s3c24xx_dma_terminate_all;
s3cdma->memcpy.device_synchronize = s3c24xx_dma_synchronize;

/* Initialize slave engine for SoC internal dedicated peripherals */
dma_cap_set(DMA_SLAVE, s3cdma->slave.cap_mask);
dma_cap_set(DMA_CYCLIC, s3cdma->slave.cap_mask);
dma_cap_set(DMA_PRIVATE, s3cdma->slave.cap_mask);
s3cdma->slave.dev = &pdev->dev;
s3cdma->slave.device_free_chan_resources =
       s3c24xx_dma_free_chan_resources;
s3cdma->slave.device_tx_status = s3c24xx_dma_tx_status;
s3cdma->slave.device_issue_pending = s3c24xx_dma_issue_pending;
s3cdma->slave.device_prep_slave_sg = s3c24xx_dma_prep_slave_sg;
s3cdma->slave.device_prep_dma_cyclic = s3c24xx_dma_prep_dma_cyclic;
s3cdma->slave.device_config = s3c24xx_dma_set_runtime_config;
s3cdma->slave.device_terminate_all = s3c24xx_dma_terminate_all;
s3cdma->slave.device_synchronize = s3c24xx_dma_synchronize;
s3cdma->slave.filter.map = pdata->slave_map;
s3cdma->slave.filter.mapcnt = pdata->slavecnt;
s3cdma->slave.filter.fn = s3c24xx_dma_filter;

6、通过code获悉,s3cdma有master和slave两个engine,且部分接口共享。

只要完成dma接口的适配,dma就可以正常使用了。当然,前提是,两个engine要进行注册使用。


ret = dma_async_device_register(&s3cdma->memcpy);
if (ret) {
 dev_warn(&pdev->dev,
   "%s failed to register memcpy as an async device - %d\n",
   __func__, ret);
 goto err_memcpy_reg;
}

ret = dma_async_device_register(&s3cdma->slave);
if (ret) {
 dev_warn(&pdev->dev,
   "%s failed to register slave as an async device - %d\n",
   __func__, ret);
 goto err_slave_reg;
}

来源:https://blog.csdn.net/feixiaoxing/article/details/79873782

0
投稿

猜你喜欢

  • WordPress系统本身,默认安装的情况下使用默认模板,实际上对搜索引擎并不友好,并没有针对搜索引擎进行很好的设计,下面我介绍一些方法可以
  • 进入2007年后半年以来,有很多有钱的人都喜欢买个网站来运营。从站长网等一些大站也看得出来网站的交易量比以前大大增加。本人这段时间也曾交易过
  • 一。域名管理面板1。在Godaddy账户中点击Domain manage进入域名管理2。域名管理界面如下面两个图片所示,左侧是管理选项,右侧
  • 网摘(网络书签)网站具有很大的共享性,大家在阅读网摘的同时可以给链接来源网站带来流量,从而形成一种有效的推广方式。另外,网摘可以增加给链接来
  • 为了更好的实现对社区热点信息的聚焦,Discuz! 7.1新增了“热点话题”功能,成为强化社区信息聚焦重要应用手段。重视细节改进是产品发展的
  • 不管网络营销效果是以哪种形式来衡量,我们都无法否认,只要网站浏览量能转化成更多的效果,那么收入自然就增长了。想要达成这一目标,首先得尽可能的
  • 怎样提高网站流量?这是一个永恒的话题,也是最难解决的问题,其实大家完全可以静下心来,坚持做一些踏踏实实的工作的。网站的设计需要一些技术,而更
  • 对于高手和老手,我这里就不多说了,这篇文章是针对一些菜鸟来写的,如何购买虚拟主机,购买虚拟主机的注意事项对于一个初来乍到的新人来说还是很有必
  • Deluxe Plan主机怎样升级Zend呢?因为杰奇系统需要更高版本的ZEND,所以求教大家具体的安装步骤。 设置php4+Ze
  • 搜索引擎会对恶意进行SEO的网站进行惩罚,如清除所有链接。百度对作弊的判断条件:(1)在网页源代码的任意位置,故意加入与网页内容不相关的关键
  • 尽管Linux在桌面计算的世界中还没有取得引人注目的进展,但作为网络服务器它已经小有名气了。由于其出色的可靠性,我们可以放心地在Linux上
  • 有很多发布商写信来问怎样才算鼓励点击,还有一些发布商在接到我们的违反政策警告的时候甚至并不认为自己在鼓励点击,现在我们就来说说“鼓励点击”。
  • Windows2003服务器安装及设置教程好久没有更新了,正好最近上了一台服务器,正好把剩下的几篇补全,今天先说的是MySQL安全篇——将M
  • Discuz!7.0是康盛创想(Comsenz)公司于2008年12月份发布的一款论坛BBS建站产品。论坛任务系统是在 Discuz! 7.
  • 一、前言对于不习惯英文的人可能想将系统由英文转成中文;而对于考虑客户端如果没正确配置,中文目录可能显示为乱码的人则可能宁愿将系统由中文转成英
  • 电脑报记者展开了长达一个月时间的深度调查,发现了一个惊人的事实:凭借自己的中文搜索上的绝对优势,百度已经成为一台庞大的敛财机器,更为可怕的是
  • Godaddy主机用户如果想要转移域名,还是有条件的,域名转移条件如下:1.只有域名的注册人或管理联系人有权提出转入申请;2.域名在原注册商
  • 本文整理了在服务器管理中容易犯的十大错误,以提醒网络管理员在工作中做好预防。1.UPS(不间断电源)的使用问题某商店正在压榨它的网络系统的最
  • 终于决定把邮件系统重新弄一弄了。因为服务器经常出问题,DNS报错,SMTP也经常出问题。最重要的是,因为以前只有两台服务器,这台服务器上充当
  • 自从2004年芙蓉姐姐横空出世,神话到处流传至今无人超越,又谣传芙蓉姐姐去韩国整容之后美貌值暴涨。小编好奇之下用美图秀秀图片处理软件,借用芙
手机版 网站运营 asp之家 www.aspxhome.com