亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解linux dma驅(qū)動編寫

 更新時間:2018年04月11日 10:09:41   作者:feixiaoxing  
這篇文章主要介紹了詳解linux dma驅(qū)動編寫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

linux下面的驅(qū)動雖然什么樣的情形都有,但是dma驅(qū)動卻并不少見。dma可以有很多的好處,其中最重要的功能就是能夠幫助我們將數(shù)據(jù)搬來搬去,這個時候cpu就由時間去做別的事情了,提高了設(shè)備效率。

1、dma驅(qū)動在什么地方

drivers/dma 

2、如何看s3c的dma驅(qū)動,先看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、發(fā)現(xiàn)s3c只依賴于S3C24XX_DMAC,這樣可以接著看Makefile

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

4、確認驅(qū)動文件為s3c24xx-dma.c,了解基本結(jié)構(gòu)

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、驅(qū)動為基本的platform driver,接著就可以了解probe函數(shù)了

/* 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; 
} 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • APACHE 配置文件中文版 httpd.conf FOR Apache 2.2.13

    APACHE 配置文件中文版 httpd.conf FOR Apache 2.2.13

    APACHE配置文件中文版 httpd.conf FOR Apache 2.2.13 ,綜合網(wǎng)上2.0版本的翻譯,加入自己的理解,補充完善。
    2009-11-11
  • Deepin下安裝神器Pyenv的步驟記錄

    Deepin下安裝神器Pyenv的步驟記錄

    這篇文章主要給大家介紹了關(guān)于Deepin下安裝神器Pyenv的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Deepin具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • CentOS7服務(wù)器中apache、php7以及mysql5.7的安裝配置代碼

    CentOS7服務(wù)器中apache、php7以及mysql5.7的安裝配置代碼

    這篇文章主要介紹了CentOS7服務(wù)器中apache、php7以及mysql5.7的安裝配置代碼,需要的朋友可以參考下
    2017-10-10
  • Linux 環(huán)境變量詳解及實例

    Linux 環(huán)境變量詳解及實例

    這篇文章主要介紹了Linux 環(huán)境變量詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Linux文件系統(tǒng)之緩沖區(qū)詳解

    Linux文件系統(tǒng)之緩沖區(qū)詳解

    在 Linux 中,緩沖區(qū)通常指的是用于臨時存儲數(shù)據(jù)的內(nèi)存區(qū)域,它可以用來提高系統(tǒng)性能,Linux 中有多種類型的緩沖區(qū),包括文件系統(tǒng)緩沖區(qū)、網(wǎng)絡(luò)緩沖區(qū)等,本文給大家詳細介紹了Linux文件系統(tǒng)之緩沖區(qū),感興趣的朋友可以參考下
    2024-02-02
  • SecureCRT中文顯示亂碼問題的解決方法

    SecureCRT中文顯示亂碼問題的解決方法

    這篇文章主要介紹了SecureCRT中文顯示亂碼問題的解決方法,需要的朋友可以參考下
    2016-07-07
  • linux下查看yum/rpm/dpkg某軟件是否已安裝的方法

    linux下查看yum/rpm/dpkg某軟件是否已安裝的方法

    這篇文章主要介紹了在linux下查看yum/rpm/dpkg某軟件是否已安裝的方法,文中給出了詳細的示例代碼,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • ubuntu下編譯安裝opencv的方法

    ubuntu下編譯安裝opencv的方法

    今天小編就為大家分享一篇關(guān)于ubuntu下編譯安裝opencv的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 使用Apache搭建http服務(wù)器實現(xiàn)CGI功能

    使用Apache搭建http服務(wù)器實現(xiàn)CGI功能

    專門處理 HTTP 請求的服務(wù)器,也被稱為 Web 服務(wù)器, 常用的 Web 服務(wù)器有 Apache和 Nginx ,當然幾大巨頭五聯(lián)網(wǎng)公司也都有其獨自研發(fā)的 Web 服務(wù)器,比如阿里巴巴的Tengine, 這篇文章主要介紹了使用Apache搭建http服務(wù)器,實現(xiàn)CGI,需要的朋友可以參考下
    2024-07-07
  • Linux Windows下設(shè)置定時執(zhí)行任務(wù)的方法

    Linux Windows下設(shè)置定時執(zhí)行任務(wù)的方法

    這篇文章主要介紹了Linux、windows下 設(shè)置定時執(zhí)行任務(wù)的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09

最新評論