Re: [問題] 透過device driver(name)找device?

看板LinuxDev作者 (醉臥美人膝,醒掌天下權)時間12年前 (2013/01/18 11:59), 編輯推噓0(005)
留言5則, 1人參與, 最新討論串2/2 (看更多)
: → alongalone:意思是你的driver會被多個device 使用? 01/18 09:25 用回文可能比較清楚,如果有佔版面的嫌疑請大家多多包含囧 嚴格來說應該是"同一個device會被不同的kernel module用到"。 (我不確定這樣的說法是否精確XD) 簡單的說,我正在寫一個kernel module,會去跟我的emmc device溝通。 (簡單的說就是會去做存取/寫入的動作) 可是emmc device基本上都是透過mmc_request把mmc_command/mmc_data包起來, 所以當我們想要對mmc device做讀取或寫入的動作的時候, 並不是直接呼叫所謂的"write"or"read"之類的function, 而是在這個mmc_request的資料結構內告訴它說我們現在是要讀block還是寫block, 最後底層的host driver(platform device driver)收到這個資料結構後, 會根據我們的設定來跟mmc device做溝通。 可是到這裡我就有個問題了, 如果我必須透過mmc_request這樣的資料結構來跟host driver溝通的話, 根據我所知道的API,都必須把mmc_host和mmc_request當作參數傳進去。 (基本上會有一個kernel thread一直在monitor,看是否有新的request) 但問題是我不知道該怎麼去取得mmc_host這個資料結構.....0rz 目前想到得很蠢的一個作法就是先透過device driver name, 搭配driver_find()這個function來找到該device driver。 找到driver後再用driver_find_device()來取得該device, 最後在從device裡面的device_private裡的driver_data來取得我要的東西。 其實我覺得這個作法蠻爛得,是因為剛好vendor所提供的host driver裡面, 會把我需要的資訊塞到這個private data裡面,所以我才可以這樣惡搞= = 可是要是哪天換個chip的話這招還能不能work就是個超級大問題了, 所以我才想請教一下有沒有人知道比較正規一點的作法QQ 我想可能得從sysfs/device model這邊下手吧,可是我對這塊其實很不熟, 要是有前輩可以提供一些方向的話那就太好了,感謝~~ -- There is no secret behind the source code. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.86.26

01/18 20:06, , 1F
我覺得除了暴力法應該很難解,因為device的資訊maintain
01/18 20:06, 1F

01/18 20:06, , 2F
在不同的linked list裡,方向正好相反了
01/18 20:06, 2F

01/18 20:07, , 3F
我不確定device的struct裡有沒有類似reference count這種
01/18 20:07, 3F

01/18 20:08, , 4F
東西,若是有的話應該就有解
01/18 20:08, 4F

01/18 20:08, , 5F
實務上我個人覺得應該是沒有XD
01/18 20:08, 5F
文章代碼(AID): #1G-CYKNm (LinuxDev)
文章代碼(AID): #1G-CYKNm (LinuxDev)