linux裝置模型bus匯流排

2021-07-06 07:57:19 字數 2884 閱讀 3754

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...