欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

drivers/dma 

2、如何看s3c的dma驅(qū)動(dòng),先看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、確認(rèn)驅(qū)動(dòng)文件為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ū)動(dòng)為基本的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兩個(gè)engine,且部分接口共享。

只要完成dma接口的適配,dma就可以正常使用了。當(dāng)然,前提是,兩個(gè)engine要進(jìn)行注冊使用。

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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(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版本的翻譯,加入自己的理解,補(bǔ)充完善。
    2009-11-11
  • Deepin下安裝神器Pyenv的步驟記錄

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

    這篇文章主要給大家介紹了關(guān)于Deepin下安裝神器Pyenv的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Deepin具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    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)境變量詳解及實(shí)例

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

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

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

    在 Linux 中,緩沖區(qū)通常指的是用于臨時(shí)存儲(chǔ)數(shù)據(jù)的內(nèi)存區(qū)域,它可以用來提高系統(tǒng)性能,Linux 中有多種類型的緩沖區(qū),包括文件系統(tǒng)緩沖區(qū)、網(wǎng)絡(luò)緩沖區(qū)等,本文給大家詳細(xì)介紹了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某軟件是否已安裝的方法,文中給出了詳細(xì)的示例代碼,對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • ubuntu下編譯安裝opencv的方法

    ubuntu下編譯安裝opencv的方法

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

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

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

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

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

最新評(píng)論