天天看點

主裝置号和file_operations結構關系

>>>>>>>在這裡注冊了兩個裝置/dev/tty 和

/dev/console,它們的主裝置号相同,隻是次裝置号不同,為什麼需要定義兩個file_operations(tty_fops和

console_fops),不是說一個主裝置号表示一個驅動嗎?當打開其中一個裝置的時候,是調用哪個file_operations結構?

哈哈,這個是個特例。

open一個字元裝置的過程是從

VFS層open系統調用 ===> def_chr_fops-->open ===> cdev->fops->open ===> device specific operation

如果是同一類裝置,比如系統中有多個framebuffer,那麼就把共有的操作放在cdev->fops->open ,這時向系統注冊的僅僅是這一個驅動程式;

将這類主裝置号相同的一類裝置(如/dev/fb0 /dev/fb1等)放在一個數組中,然後在cdev->fops->open 根據次裝置号作為Index來調用展現不同裝置差異的那些操作,即 device specific operation , 這就是為什麼framebuffer/block 等硬體驅動中實作的都不是file_operations這種操作,而是跟具體裝置相關的那些操作。

這就是所謂的一類裝置都應一種驅動。

可以認為大多數簡單的裝置,僅僅需要實作到cdev->fops->open 這個位置,等他們變得複雜,能夠提煉出共性的時候就 需要實作到[紅色device specific operation 這個位置。

呵呵,不知道我說得清楚不?

繼續閱讀