匯流排裝置驅動框架程式

2021-05-23 20:58:06 字數 3706 閱讀 7545

這裡總結下簡單的匯流排裝置驅動的框架程式。

0、建立資料夾busdevdrv

1、匯流排

在資料夾內建立匯流排檔案bus.c,**如下。

#include

#include

#include

#include

#include

module_author("sjwangjinbao");

module_license("dual bsd/gpl");

static char *version = "$revision: 1.0 $";

static int my_match(struct device *dev, struct device_driver *driver)

static void my_bus_release(struct device *dev)

struct device my_bus = ;

struct bus_type my_bus_type = ;

export_symbol(my_bus);

export_symbol(my_bus_type);

/** export a ****** attribute.

*/static ssize_t show_bus_version(struct bus_type *bus, char *buf)

static bus_attr(version, s_irugo, show_bus_version, null);

static int __init my_bus_init(void)

/*建立屬性檔案*/

if (bus_create_file(&my_bus_type, &bus_attr_version))

/*初始化匯流排裝置*/

dev_set_name(&my_bus, "my_bus0");

/*註冊匯流排裝置*/

ret = device_register(&my_bus);

if (ret)

return ret;

}static void my_bus_exit(void)

module_init(my_bus_init);

module_exit(my_bus_exit);

2、裝置

在資料夾下建立裝置檔案dev.c,**如下。

#include

#include

#include

#include

#include

module_author("sjwangjinbao");

module_license("dual bsd/gpl");

extern struct device my_bus;

extern struct bus_type my_bus_type;

static void my_dev_release(struct device *dev)

struct device my_dev = ;

/** export a ****** attribute.

*/static ssize_t mydev_show(struct device *dev,struct device_attribute *attr, char *buf)

static device_attr(dev, s_irugo, mydev_show, null);

static int __init my_device_init(void)

static void my_device_exit(void)

module_init(my_device_init);

module_exit(my_device_exit);

3、驅動

在資料夾下建立驅動檔案drv.c,**如下。

#include

#include

#include

#include

#include

module_author("sjwangjinbao");

module_license("dual bsd/gpl");

extern struct bus_type my_bus_type;

static int my_probe(struct device *dev)

static int my_remove(struct device *dev)

struct device_driver my_driver = ;

/** export a ****** attribute.

*/static ssize_t mydriver_show(struct device_driver *driver, char *buf)

static driver_attr(drv, s_irugo, mydriver_show, null);

static int __init my_driver_init(void)

static void my_driver_exit(void)

module_init(my_driver_init);

module_exit(my_driver_exit);

4、makefile

在資料夾下建立makefile,如下。

ifneq ($(kernelrelease),)

obj-m := bus.o dev.o drv.o

else

kdir := /usr/src/linux-2.6.33.2

all:

make -c $(kdir) m=$(pwd) modules

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

5、make

在資料夾下執行make命令,將得到bus.ko, dev.ko, drv.ko三個檔案。

6、新增模組

使用root使用者依次呼叫如下命令新增3個模組:

insmod bus.ko

insmod dev.ko

insmod.drv.ko

這時候,會在/sys/bus下面發現my_bus已經存在了。到/sys/bus/my_bus/devices/看看,發現我們的my_dev裝置已經存在了;到/sys/bus/my_bus/drivers/看看,發現我們的my_dev驅動也存在了。在到/sys/bus/my_bus/devices/my_dev/driver去瞧瞧,發現my_dev驅動已經存在了,這說明我們的 my_dev裝置和my_dev驅動已經聯絡在一起了。同樣,在/sys/bus/my_bus/drivers/my_dev下也會發現有個my_dev的裝置,這也說明我們的 my_dev裝置和my_dev驅動已經聯絡在一起了。

另外,我們也可以檢視他們的屬性。

1)  在/sys/bus/my_bus下,我們發現有個version檔案,用cat檢視它,得到輸出為:

$revision: 1.9 $

這正是我們在程式中指定的。

2) 在/sys/bus/my_bus/devices/my_dev下,我們會發現有個 dev檔案,用cat檢視它,結果為:

this is my device!

這也正是我們程式中指定的。

3) 在/sys/bus/my_bus/drivers/my_dev下,我們也會發現drv檔案,用cat檢視結果為:

this is my driver!

當然,這也是我們在程式中指定的。

驅動 匯流排裝置框架

匯流排裝置驅動框架是一種類似於輸入子系統的框架。匯流排裝置驅動,顧名思義,共有三個模組 負責硬體資源的裝置 device 負責處理硬體事務並且連線其他功能模組的驅動 driver 連線這兩者的匯流排 bus 其過程分為以下步驟 1.當加入乙個裝置時,如果該裝置支援中斷喚醒執行緒,那麼在中斷處理程式內...

Linux匯流排裝置驅動框架的理解

linux的裝置驅動框架,即某類裝置對應的驅動的框架。這裡是 linux匯流排裝置驅動框架 應該這樣理解,linux的匯流排裝置 驅動框架,即匯流排式裝置對應的驅動的框架 個人理解 1 驅動代表著操作裝置的方式和流程。對於應用來說,應用程式open開啟裝置後,接著就read訪問這個裝置,驅動就是如何...

匯流排 裝置和驅動

一 匯流排 linux中,使用struct bus type表示一條匯流排,該結構定義在linux device.h中,先只看其中的兩個字段,name表示匯流排的名字,比如usb i2c spi等,match方法用於匹配新增到該匯流排上的裝置和驅動,如果匹配成功,則呼叫驅動中的probe函式。註冊一...