色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:IT培訓 > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > Linux 內核驅動 - ADC 驅動
Linux 內核驅動 - ADC 驅動
時間:2018-03-14作者:華清遠見

1. ADC內核驅動實現框架

ADC 內核驅動的實現是基于 ARM ADC BSP 驅動 與 Linux 內核驅動的框架進行銜接,主要分為以下幾個部分構成:

在底層采用的 Linux 內核設備模型,基于 platform 平臺總線

在 VFS 層使用的是 Linux 內核字符設備驅動框架,用于實現 VFS 層 相應的驅動訪問接口

2. ADC 內核驅動 platfrom 總線實現

2.1 platfrom 總線的注冊

基于 platfrom 總線部分,主要用于銜接 BSP 驅動 與上層的 字符設備驅動的訪問接口.

platfrom 總線實現包含驅動描述與設備描述,其中設備描述在 Linux 內核設備樹中描述. 需要在 exynos4412-fs4412.dts 中添加如下描述
adc@126c0000{
compatible        = "Samsung,exynos4412-adc"; reg  = <0x126c0000 0x20>;
adc-io-channer    = <3>;
clocks            = <&clock 326>;
clock-names       = "adc"; interrupt-parent = <&combiner>;
interrupts           = <10 3>;
= "okay";            status      
};

platfrom 驅動描述結構定義如下:

基于Linux adc 驅動實現

在上述結構中, of_match_table 成員的描述如下:
#if defined(CONFIG_OF)
static const struct of_device_id exynos_adc_dt_ids[] = {
{ .compatible = "Samsung,exynos4412-adc" },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, exynos_adc_dt_ids);
#endif
在 platfrom 平臺總線注冊與卸載 ADC 驅動,具體代碼如下:
int adc_device_init(void)
{
//注冊  platfrom driver
return platform_driver_register(&exynosadc_driver);
}
void adc_device_exit(void)
{
//卸載  platfrom driver
return platform_driver_unregister(&exynosadc_driver);
}

2.1 probe 函數的實現

在 probe 實現以下功能:

分配 adc 設備描述結構體的空間獲取 platfrom 驅動私有數據

申請中斷資源

獲取IO內存資源

申請IO資源的使用

寄存器地址的映射獲取 ADC 的通道注冊 ADC 字符設備初始化等待隊列

在 remove 函數中主要實現相關資源的釋放

2.2.1 adc 設備描述與內存分配

在 Linux 內核中描述 ADC 使用下面的結構,這是我們自己定義的:

struct adc_device

{

void *reg;//寄存器映射地址int major_num;//主設備號int irq_num;//中斷號

int adc_data;//adc 設備數據

int io_channer;//io 通 道

struct clk *adc_clk;//adc 時鐘資源

struct resource *res;//adc io 資 源

struct class *cls;//adc 設備類

struct device *dev;//adc 設備對象

struct cdev cdev;//adc 字符設備對象

wait_queue_head_t read_event_wait;//等待隊列頭

};

在分配 adc 結構體時,使用的是 kzalloc 函數,具體實現如下:

2.2.2 設置 platform 平臺私有數據

獲取 platform 私有數據,需要調用 platform_set_drvdata 數據

static inline void platform_set_drvdata(struct platform_device

*pdev,void *data)

@param pdev : platform 平臺總線設備描述結構

@param data : 需要存儲的

這里主要是將對應的 struct adc_device 對象的地址存儲在 struct device 結構體中的

driver_data 成員中,方便其他函數訪問,主要是針對有過平臺設備時,不同的平臺設備有不同

的結構來描述,在匹配成功之后要進行區分

2.2.3 獲取中斷資源

這里獲取中斷資源主要是獲取中斷號,通過 platform_get_irq 函數來實現

padc->irq_num = platform_get_irq(pdev, 0);

if(padc->irq_num < 0){

printk("Fail to platform_get_irq\n");

ret = padc->irq_num;

goto err_platform_get_irq;

}

2.2.4 獲取 IO 內存資源

這里獲取的資源為 ADC 寄存器的資源,具體代碼如下:

在設備樹已經有相應的描述

2.2.5 IO資源的占用

在 Linux 內核中,相應的寄存器資源需要申請才能使用,一旦申請成功之后,則不允許別人來訪問這段空間.

一般在映射寄存器地址空間之前,就需要申請,這里需要調用 ****

#define request_mem_region(start,n,name)

@param start : 申請資源開始的地址

@param n : 申請資源的長度

@param name : 申請的資源的設備的名字

具體實現如下:

if(!request_mem_region(padc->res->start,io_resource_size,pdev->name))

{

printk("Fail to request_mem_region\n"); ret = -EBUSY;

goto err_request_mem_region;

當需要解除相應的 IO 資源時,則需要調用 release_resource 函數

int release_resource(struct resource *old)

參數:

@param resource : 指定 adc 資源結構對象的指針

2.2.6 獲取 adc 的數據通道

adc 的數據通道是在設備樹中進行描述,在這里只是獲取,具體需要調用:

of_property_read_u32(pdev->dev.of_node, "adc-io-channer", &padc->io_cha

nner);

由于文章字數有限,更多基于Linux adc 驅動實現文章請添加QQ:(1912904432)索要完整版文章


發表評論

全國咨詢電話:400-611-6270,雙休日及節假日請致電值班手機:15010390966

在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)

企業培訓洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華清遠見教育科技集團 版權所有 ,京ICP備16055225號,京公海網安備11010802025203號

有位老師想和您聊一聊

主站蜘蛛池模板: 亚洲妇女自偷自偷图片 | 成人无码视频在线观看网站 | 一级性生活毛片 | 女人色熟女乱 | 日本黄网站三级三级三级 | 国产伦子沙发午休系列资源曝光 | 天天日天天谢天天视2019天干 | 亚洲国产va精品久久久不卡综合 | 一级黄色香蕉视频 | 久久综合九色欧美综合狠狠 | 无码中文字幕人妻在线一区二区三区 | 亚洲欧洲美洲无码精品VA | 成年女人色毛片 | 香港经典A毛片免费观看特级 | 一二三四免费观看在线视频 | 奶头好大揉着好爽视频午夜院 | 永久黄软件免费观看 | 亚洲AV综合色区无码二区偷拍 | 日本一区二区视频在线观看 | 久久久女人与动物群交毛片 | 亚洲国产精品高清在线 | 777国产偷窥盗摄精品品在线 | 亚洲乱码一卡二卡四卡乱码新区 | 国产精品嫩草影院一二三区入口 | 亚洲精品久久久久无码精品 | 真实国产老熟女粗口对白 | 中文字幕一区在线 | 欧美顶级毛片在线播放 | 人妻夜夜爽天天爽一区 | 40岁大乳的熟妇在线观看 | 日本卡一卡2卡三卡4乱卡乱码 | 亚洲国产福利成人一区二区 | 在线看片无码永久免费AV | 无码日韩精品一区二区免费暖暖 | 97热视频在线 | 女人天堂一区二区三区 | 黑色蕾丝丝袜麻麻好紧好爽 | 久久人爽人人爽人人片AV | 九热爱视频精品视频 | 欧美黑人又粗又大XXXX | 成人国内精品视频在线观看 |