娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

IMX257 總線設(shè)備驅(qū)動(dòng)模型編程之設(shè)備篇

發(fā)布者:幸福時(shí)刻最新更新時(shí)間:2024-08-15 來(lái)源: cnblogs關(guān)鍵字:總線設(shè)備 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一、程序分析

1. 包含總線

既然我們的設(shè)備在總線上,自然我們既要包含總線了

如圖所示,使用外部聲明將我們的總線的結(jié)構(gòu)體包含進(jìn)來(lái)

2. 定義設(shè)備結(jié)構(gòu)體

父目錄為 my_bus

 

3. 定義屬性文件結(jié)構(gòu)體

屬性文件結(jié)構(gòu)體可以有一下得到:

//產(chǎn)生后面的 bus_attr_version 結(jié)構(gòu)體

static DEVICE_ATTR(dev,S_IRUGO,mydev_show,NULL);

如圖所示:

 

4. 在初始化函數(shù)中

如圖所示:

在初始化函數(shù)中,

先初始化設(shè)備的名字,這個(gè)名字用于于驅(qū)動(dòng)名字進(jìn)行匹配

然后注冊(cè)設(shè)備,讓系統(tǒng)認(rèn)識(shí)這個(gè)設(shè)備,在/sys/device/my_bus0 下面就會(huì)有my_dev這個(gè)設(shè)備

最后創(chuàng)建屬性文件,這個(gè)就是在my_dev下面的 dev文件,可以使用cat dev 進(jìn)行讀取,用于傳遞字符串。

5. 在exit函數(shù)中

如圖所示就是 移除屬性文件,注銷(xiāo)設(shè)備

 

 

二、編譯測(cè)試

 

可以發(fā)現(xiàn),在我們的/sys/bus/目錄下生成了 my_bus 目錄

然后,在 my_bus/devices/ 目錄下又生成了 my_dev 目錄

 

查看my_dev的屬性文件 cat dev

我們使用cat drivers_autoprobe 命令,為1,意思就是我們驅(qū)動(dòng)會(huì)自動(dòng)探測(cè)設(shè)備

移除驅(qū)動(dòng)時(shí)最好注意順序

 

至此,總線-設(shè)備-驅(qū)動(dòng) 模型中,我們已經(jīng)完成其二了,最后的一個(gè)驅(qū)動(dòng)篇,加油!

我們的目標(biāo)是在總線中加入驅(qū)動(dòng)程序,并且驅(qū)動(dòng)程序和設(shè)備程序會(huì)自動(dòng)互相探測(cè)尋找,然后在match中檢測(cè)關(guān)聯(lián)。


附上 mybus .c 總線驅(qū)動(dòng)程序


 1 #include

 2 #include

 3 #include

 4 #include

 5 #include

 6 

 7 

 8 static char *Version = '$LoverXueEr : 1.0 $';

 9 

10 //檢測(cè)驅(qū)動(dòng)是否匹配設(shè)備,dev->bus_id 和 driver->name相等的

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

12     return !strncmp(dev_name(dev),driver->name,strlen(driver->name));

13 }

14 

15 static void my_bus_release(struct device *dev){

16     printk('

17 }

18   

19 //設(shè)置設(shè)備的名字  dev_set_name(&dev,'name');

20 struct device my_bus = {

21     .init_name = 'my_bus0',

22     .release = my_bus_release,

23 };

24 

25 struct bus_type my_bus_type = {

26     .name = 'my_bus',

27     .match = my_match,

28 };

29 EXPORT_SYMBOL(my_bus);  //導(dǎo)出符號(hào)

30 EXPORT_SYMBOL(my_bus_type);

31 

32 //顯示總線版本號(hào)

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

34     return snprintf(buf,PAGE_SIZE,'%sn',Version);

35 }

36 

37 //產(chǎn)生后面的 bus_attr_version 結(jié)構(gòu)體

38 static BUS_ATTR(version,S_IRUGO, show_bus_version, NULL);

39 

40 static int __init my_bus_init(void){

41     int ret;

42     /* 注冊(cè)總線 */

43     ret = bus_register(&my_bus_type);

44     if(ret)

45         return ret;

46     /*  創(chuàng)建屬性文件 */

47     if(bus_create_file(&my_bus_type, &bus_attr_version))

48         printk('

49 

50     /* 注冊(cè)總線設(shè)備 */

51     ret = device_register(&my_bus);

52     if(ret)

53         printk('

54     return ret;

55 }

56 

57 static void my_bus_exit(void){

58     bus_unregister(&my_bus_type);

59     device_unregister(&my_bus);

60 }

61 

62 module_init(my_bus_init);

63 module_exit(my_bus_exit);

64 

65 

66 MODULE_AUTHOR('Lover雪兒');

67 MODULE_LICENSE('GPL');


附上 mydev .c 設(shè)備驅(qū)動(dòng)程序


 1 #include

 2 #include

 3 #include

 4 #include

 5 #include

 6 

 7 //包含總線

 8 extern struct device my_bus;

 9 extern struct bus_type my_bus_type;

10 

11 static void my_dev_release(struct device *dev){

12     printk('

13 }

14   

15 //設(shè)置設(shè)備的名字  dev_set_name(&dev,'name');

16 struct device my_dev = {

17     .bus = &my_bus_type,

18     .parent = &my_bus,        //父目錄為my_bus

19     .release = my_dev_release,

20 };

21 

22 ssize_t mydev_show(struct device *dev,struct device_attribute *attr,char *buf){

23     return sprintf(buf, '%sn', 'This is my device');

24 }

25 

26 //產(chǎn)生后面的 dev_attr_dev 結(jié)構(gòu)體

27 static DEVICE_ATTR(dev,S_IRUGO,mydev_show,NULL);

28 

29 static int __init my_dev_init(void){

30     int ret = 0;

31 

32     /* 初始化設(shè)備 以后看驅(qū)動(dòng)與設(shè)備是否匹配就看這個(gè)名字 */

33       dev_set_name(&my_dev,'my_dev');

34 

35     /* 注冊(cè)設(shè)備 */

36     ret = device_register(&my_dev);

37     if(ret)

38         printk('

39     /* 創(chuàng)建屬性文件 */

40     if(device_create_file(&my_dev, &dev_attr_dev))

41         printk('

42 

43     return ret;

44 }

45 

46 static void my_dev_exit(void){

47     device_remove_file(&my_dev, &dev_attr_dev);

48     device_unregister(&my_dev);

49 }

50 

51 module_init(my_dev_init);

52 module_exit(my_dev_exit);

53 

54 

55 MODULE_AUTHOR('Lover雪兒');

56 MODULE_LICENSE('GPL');


附上 MAKEFILE程序


 1 ifeq ($(KERNELRELEASE),)

 2     KERNELDIR ?= /home/study/system/linux-2.6.31

 3     PWD := $(shell pwd)

 4 modules:

 5     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

 6 modules_install:

 7     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

 8 clean:

 9     rm -rf *.o *~ core .depend  *.cmd *.ko *.mod.c .tmp_versions *.markers *.order *.symvers

10 

11 else

12     obj-m := mybus.o mydev.o

13 endif


關(guān)鍵字:總線設(shè)備 引用地址:IMX257 總線設(shè)備驅(qū)動(dòng)模型編程之設(shè)備篇

上一篇:IMX257 總線設(shè)備驅(qū)動(dòng)模型編程之驅(qū)動(dòng)篇
下一篇:IMX257 總線設(shè)備驅(qū)動(dòng)模型編程之總線篇(二)

推薦閱讀最新更新時(shí)間:2025-06-07 23:40

基于CPCI總線的便攜式電磁閥測(cè)試設(shè)備設(shè)計(jì)
  1.?前言   由于某型號(hào)電磁閥熱真空試驗(yàn)需要出廠完成,在試驗(yàn)過(guò)程中需測(cè)試閥門(mén)響應(yīng)特性,傳統(tǒng)的測(cè)試設(shè)備體積無(wú)法滿足運(yùn)輸需求,因此需要配備便于攜帶的電磁閥測(cè)試設(shè)備。   CompactPCI簡(jiǎn)稱(chēng)CPCI,中文又稱(chēng)緊湊型PCI,是國(guó)際PICMG協(xié)會(huì)于1994提出來(lái)的一種總線接口標(biāo)準(zhǔn)。它將VME密集堅(jiān)固的封裝和大型設(shè)備的極佳冷卻效果以及PC廉價(jià)、易采用最新處理能力的芯片結(jié)合在一起,既保證了99.999%的高可靠度,又極大降低了硬件和軟件開(kāi)發(fā)成本。其整體機(jī)構(gòu)緊湊,安裝牢固,適應(yīng)各種運(yùn)輸條件,可靠性高。各功能板采用CPCI總線的模塊化結(jié)構(gòu),插拔十分安全方便,特別適合本系統(tǒng)的多種型號(hào)測(cè)試對(duì)象和多種測(cè)試工況的要求。   2.
[嵌入式]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广昌县| 恩施市| 孝昌县| 德庆县| 邯郸市| 正定县| 三明市| 泰安市| 玉林市| 武山县| 松滋市| 通城县| 衢州市| 开原市| 铁岭市| 黔南| 财经| 镇原县| 罗甸县| 玉溪市| 灵山县| 吉林省| 哈巴河县| 海原县| 璧山县| 苍梧县| 白玉县| 专栏| 霞浦县| 民县| 辽宁省| 绵竹市| 舒兰市| 宕昌县| 临邑县| 枣庄市| 内丘县| 察哈| 咸丰县| 阜南县| 龙门县|