1. 程式人生 > >裝置驅動的分層思想

裝置驅動的分層思想

linux核心雖然完全由c語言編寫,但卻頻繁用到面向物件的分層設計思想。在裝置驅動方面,往往為同類的裝置設計一個框架,框架的核心層實現了通用操作,如果具體裝置需要具體操作,可以進行過載。
1.過載的一般實現:
int core_func(struct xxx_dev *dev,...){
	if(dev->func)
		return dev->func(...);
	/*核心層的實現*/
}
首先檢查是否在底層裝置驅動中過載了該函式,如果過載了就呼叫具體裝置的具體實現,否則按核心層程式碼功能實現。
2.簡化驅動程式
return_type core_func(xxx_dev *dev,...){
	//通用程式碼A
	底層操作1:dev->func_ops1
	//通用程式碼B
	底層操作2:dev->func_ops2
	//通用程式碼C
	底層草組3:dev->func_ops3
}
這樣就免去了通用的程式碼,只需要實現具體裝置的操作
linux驅動中,一般把通用的驅動部分放在core層中,底層不能通用的部分則劃分為裝置驅動,所以裝置的驅動也是要聯合core層才是一個完整的驅動,只是linux核心裡面已經有了core層通用的裝置,編寫驅動時只需要編寫不通用的部分。
分層化設計在linux的input、RTC、MTD、I2C、SPI、TTY、USB等諸多裝置驅動型別中廣泛應用。