linux驅動自動載入
1. linux系統中哪個命令可以用來載入驅動程序
在2.4內核中,載入驅動命令為:insmod ,刪除模塊為:rmmod;
在2.6以上內核中,除了insmod與rmmod外,載入命令還有modprobe;
insmod與modprobe不同之處:
insmod 絕對路徑/××.o,而modprobe ××即可,不用加.ko或.o後綴,也不用加路徑;最重要的一點是:modprobe同時會載入當前模塊所依賴的其它模塊;
lsmod查看當前載入到內核中的所有驅動模塊,同時提供其它一些信息,比如其它模塊是否在使用另一個模塊。
2. Linux驅動程序有幾種載入方式以及它們之間的區別
linux關於匯流排、設備、驅動的注冊順序
設備掛接到匯流排上時,與匯流排上的所有驅動進行匹配(用bus_type.match進行匹配),
如果匹配成功,則調用bus_type.probe或者driver.probe初始化該設備,掛接到匯流排上
如果匹配失敗,則只是將該設備掛接到匯流排上。
驅動掛接到匯流排上時,與匯流排上的所有設備進行匹配(用bus_type.match進行匹配),
如果匹配成功,則調用bus_type.probe或者driver.probe初始化該設備;掛接到匯流排上
如果匹配失敗,則只是將該驅動掛接到匯流排上。
需要重點關注的是匯流排的匹配函數match(),驅動的初始化函數probe()
1.
platform_bus_type--匯流排先被kenrel注冊。
2.
系統初始化過程中調用platform_add_devices或者platform_device_register,將平台設備(platform
devices)注冊到平台匯流排中(platform_bus_type)
3.
平台驅動(platform
driver)與平台設備(platform
device)的關聯是在platform_driver_register或者driver_register中實現,一般這個函數在驅動的初始化過程調用。
通過這三步,就將平台匯流排,設備,驅動關聯起來。
1.
platform
bus先被kenrel注冊。
------------------------------------------------------
do_basic_setup()
-->-driver_init()
-->-platform_bus_init()-->bus_register()
2.
系統初始化過程中調用platform_add_devices或者platform_device_register,將平台設備(platform
devices)注冊到平台匯流排中(platform_bus_type)
------------------------------------------------------
系統啟動階段,匯流排的驅動鏈表還是空的,所以啟動階段的platform_add_devices()只負責將設備添加到匯流排的設備鏈表上。