Re: [问题] 透过device driver(name)找device?

楼主: RouterHsieh (醉卧美人膝,醒掌天下权)   2013-01-18 11:59:12
: → 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这边下手吧,可是我对这块其实很不熟,
要是有前辈可以提供一些方向的话那就太好了,感谢~~
作者: cobrasgo (人鱼线变成鲔鱼线,超帅)   2013-01-18 20:06:00
我觉得除了暴力法应该很难解,因为device的资讯maintain在不同的linked list里,方向正好相反了我不确定device的struct里有没有类似reference count这种东西,若是有的话应该就有解实务上我个人觉得应该是没有XD

Links booklink

Contact Us: admin [ a t ] ucptt.com