bus-driver-device結構
1)裝置是連線到匯流排上
2)驅動也是連線到匯流排上
3)裝置總是通過匯流排跟驅動對應起來
核心2.4與2.6區別?
引入裝置模型,主要體現在以下幾個方面:
1)電源管理
2)跟使用者的互動介面
/sys /proc
3)熱插撥
4)分類處理
參考:例項:bus.c
#include #include #include #include #include #include #include #include "bus.h"
int usb_match(struct device *dev,struct device_driver *drv)
else }
struct bus_type usb_bus =;
int __init usb_bus_init()
return 0;
}void __exit usb_bus_exit()
int usb_device_register(struct usb_device *udev)
void usb_device_unregister(struct usb_device *udev)
int usb_driver_register(struct usb_driver *udrv)
void usb_driver_unregister(struct usb_driver *udrv)
module_init(usb_bus_init);
module_exit(usb_bus_exit);
module_license("gpl");
module_author("gec210");
export_symbol(usb_bus);
export_symbol(usb_device_register);
export_symbol(usb_device_unregister);
export_symbol(usb_driver_register);
export_symbol(usb_driver_unregister);
bus.h
#ifndef __bus_h
#define __bus_h
struct usb_device ;
extern int usb_device_register(struct usb_device *udev);
extern void usb_device_unregister(struct usb_device *udev);
struct usb_driver ;
extern int usb_driver_register(struct usb_driver *udrv);
extern void usb_driver_unregister(struct usb_driver *udrv);
#endif
device.c
#include #include #include #include #include #include #include #include "bus.h"
void usb_mouse_release()
struct usb_device usb_dev_mouse =,
.machid = 0x123,
};int __init usb_dev_init()
return 0;
}void __exit usb_dev_exit()
module_init(usb_dev_init);
module_exit(usb_dev_exit);
module_license("gpl");
module_author("gec210");
driver.c
#include #include #include #include #include #include // copy_to_user/copy_form_user
#include #include "bus.h"
int usb_probe(struct device *dev)
struct usb_driver usb_drv_mouse =,
.machid = 0x123,
};int __init usb_drv_init()
return 0;
}void __exit usb_drv_exit()
module_init(usb_drv_init);
module_exit(usb_drv_exit);
module_license("gpl");
module_author("gec210");
makefile
obj-m += bus.o device.o driver.o
kernel_dir := /usr/mkdrv/src/android-kernel-samsung-dev
all:
make modules -c $(kernel_dir) m=`pwd`
cp bus.ko device.ko driver.ko /nfs
make clean
clean:
make modules clean -c $(kernel_dir) m=`pwd`
先載入insmod bus.ko然後載入device.ko、driver.ko讓它們配對成功。
然後就可以mknod建立裝置節點。
實際的開發中,匯流排是不需要我們寫的,核心基本寫好,有乙個platform平台裝置匯流排。
Linux裝置模型之platform匯流排
出處 一 前言 platform匯流排是kernel中最近加入的一種虛擬匯流排.在近版的2.6kernel中,很多驅動都用platform改寫了.只有在分析完platform匯流排之後,才能繼續深入下去分析.在分析完sysfs和裝置驅動模型之後,這部份應該很簡單了.閒言少敘.步入正題.go.go 以...
Linux的匯流排裝置驅動模型
在linux中,一開始bus下的device有乙個device鍊錶,driver也有乙個鍊錶,當註冊platform device的時候,會把新的platform device結構體放入device鍊錶,然後從driver的鍊錶中把已有的driver乙個乙個地取出來跟platform device結...
Linux 匯流排裝置驅動模型 (一)
匯流排裝置驅動模型 一.匯流排模型概述 隨著技術的不斷進步,系統的拓撲結構也越來越複雜,對熱插拔,跨平台移植性的要求也越來越高,2.4核心已經難以滿足這些需求。為適應這種形勢的需要,從linux2.6核心開始提供了全新的裝置模型。二.匯流排 1.描述裝置 1.在linux 核心中,匯流排由bus t...