: → 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這邊下手吧,可是我對這塊其實很不熟,
要是有前輩可以提供一些方向的話那就太好了,感謝~~