国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

詳解linux dma驅動編寫

2024-08-28 00:03:20
字體:
來源:轉載
供稿:網友

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; 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安溪县| 闽清县| 兰西县| 平泉县| 阳西县| 砀山县| 沙坪坝区| 淮北市| 铁岭市| 西安市| 铁岭市| 抚州市| 晴隆县| 广宗县| 蒲江县| 丰顺县| 大渡口区| 株洲市| 吉安县| 旌德县| 呼和浩特市| 兴仁县| 龙岩市| 隆化县| 独山县| 常山县| 沙雅县| 铜鼓县| 阳新县| 宜兰市| 临湘市| 柞水县| 沙坪坝区| 台南县| 武功县| 汉源县| 武功县| 德兴市| 绿春县| 镇江市| 南京市|