日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux设备驱动-platform虚拟总线dya02

發布時間:2023/12/20 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux设备驱动-platform虚拟总线dya02 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考書:<linux設備驅動開發詳解>宋寶華

上一篇介紹了platform的基本構成與源碼,本篇用實例來說明platform的實現.

參考書中介紹了一個名為globalfifo的驅動,以他為例,來說明作為platfrom設備如何實現驅動和設備的匹配.
將globalfifo驅動掛接到platform總線上,要完成兩部分工作:
(1)將globalfifo移植為platform驅動
(2)在板文件中添加globalfifo這個platform設備

1.移植
為完成globalfifo移植到platform驅動的工作,需要在原始的字符設備globalfifo驅動中套一層platfrom_driver外殼. 這一步驟并沒有改變globalfifo字符設備的本質,只是將其掛接到了platform總線上.

static int globalfifo_probe(struct platform_device *pdev) {int ret;dev_t devno = MKDEV(globalfifo_major,0); //定義設備號,數據類型dev_t,32位數if (globalfifo_major) //靜態申請ret = register_chrdev_region(devno,1,"globalfifo");//申請字符設備驅動,1表示申請的連續設備編號的個數,globalfifo是設備名稱else{ //靜態申請失敗ret = alloc_chrdev_region(&devno,0,1,"globalfifo"); //0表示請求的第一個次設備號,1表示個數globalfifo_major = MAJOR(devno);}if (ret < 0)return ret;globalfifo_devp = devm_kzalloc(&pdev->dev,sizeof(*globalfifo_devp),GFP_KERNEL);if (!globalfifo_devp) {ret = -ENOMEM;goto fail_malloc; }globalfifo_setup_cdev(globalfifo_devp,0); //cdev初始化和添加mutex_init( &globalfifo_devp->mutex);init_waitqueue_head(&globalfifo_devp->r_wait); //初始化隊列頭init_waitqueue_head(&globalfifo_devp->w_wait);return 0; fail_malloc:unregister_chrdev_region(devno,1);return ret; }static int globalfifo_remove(struct platform_device *pdev) {cdev_del(&globalfifo_devp->cdev);//刪除cdev結構體unregister_chrdev_region(MKDEV(globalfifo_major,0),1);//注銷設備區域return 0; }static struct platform_driver globalfifo_driver = {.driver = {.name = "globalfifo",.owner = THIS_MODULE,},.probe = globalfifo_probe,.remove = globalfifo_remove, };module_platform_driver(globalfifo_driver);

注冊完globalfifo對應的platform_driver后,會發現/sys/bus/platform/drivers目錄下多出一個名叫globalfifo的子目錄.
板文件arch/arm/mach-<soc名>/mach-<板名>.c中添加如下代碼:

static struct platform_device globalfifo_device = {.name = "globalfifo",.id = -1, };

如果一切順利,會在/sys/devices/platform目錄下看到一個名為globalfifo的子目錄
/sys/devices/platfrom/globalfifo中會有一個driver文件,指向/sys/bus/platform/drivers/globalfifo的符號鏈接, 證明驅動和設備匹配上了.

總結

以上是生活随笔為你收集整理的Linux设备驱动-platform虚拟总线dya02的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。