《Linux那些事兒之我是USB》我是隨身碟(15)冬天來了,春天還會遠嗎?(一)

在整個usb-storage模組的代碼中,其最靈魂的部分在一個叫做usb_stor_control_thread()的函數中,而那也自然是我們整個故事的高潮。這個函數的調用有一些特殊,是從usb_stor_acquire_resources()函數進入的,而後者我們即將遇到,它在整部戲中只出現過一次,即storage_probe中,行號為1005的地方。然而在此之前,有四個函數擋在我們面前,它們就是get_device_info,get_transport,get_protocol,get_pi

Linux之#pragma的用法

先行編譯指令#pragma的用法最近在看開源項目中的代碼時,發現許多地方都用到了#pragma的程式。因此,就問了下Google老師,總結了下#pragma先行編譯指令的常用用法,現在和大家分享下。一.#pragma最常用的方法1. #progma pack(n)1>功能:使用#progma

Linux驅動子系統之I2C(6)

6 總結根據之前的分析豐富的架構圖Tips:I2C適配器驅動不一定是基於platform實現,這裡是以s3c-i2c為例。 I2c_driver、i2c_client與i2c_adapterI2c_driver與i2c_client是一對多的關係,一個i2c_driver上可以支援多個同等類型的i2c_client。調用i2c_add_driver函數將I2c_driver註冊到I2C匯流排上,調用i2c_register_board_info函數將i2c_client註冊到全域鏈表__i2c_

linux驅動子系統之輸入子系統(4)

linux驅動子系統之輸入子系統(4)4.事件處理層4.1 概述事件處理層負責和應用程式層介面,建立裝置節點和相關的檔案系統檔案,把事件資訊上報給應用程式層。每種事件處理層驅動程式都是實現了一個file_operations,當應用調用open,write,read等系統調用訪問輸入裝置檔案時,就會調用到file_operations中的方法。4.2 資料結構和函數l  Input_handler,用來描述一個輸入裝置處理器,struct input_handler {         

linux驅動子系統之輸入子系統(2)

linux驅動子系統之輸入子系統(2)2. 輸入核心層2.1 概述核心層對下提供了裝置驅動層的編程介面,對上有提供了事件處理層的編程介面。input.c是核心層實現的檔案。 2.2 驅動程式碼分析l  初始化模組static int __init input_init(void){         err= class_register(&input_class);          err= input_proc_init();          err=

Linux驅動之裝置模型(3)

4.小結4.1  kobject, kset和ktypekobject, kset和ktype就三個結構體,但是卻很容易讓人混淆,是由於它們內部相互交織。l  kobject,是裝置模型中的基本對象,包含了引用計數,父子關係,目錄項等,通常會嵌入到其它的資料結構中,使其也具有kobject的特性;l  ktype,定義了一些kobjct相關的預設特性:解構函式,sysfs操作以及預設屬性;l  kset,實現兩個功能:n  其中嵌入的kobject作為kobject組的基類n 

linux驅動子系統之輸入子系統(5)

linux驅動子系統之輸入子系統(5)5. 總結5.1 事件資訊的上報過程分析l  上報的大致過程:裝置驅動層->核心層->事件處理層->應用程式層l  具體調用的函數(以evdev為例):input_event()->input_handle_event() ->input_pass_event() ->handle->handler->event(handle,type, code, value) ->evdev_event()

《Linux那些事兒之我是USB》我是隨身碟(17)冬天來了,春天還會遠嗎?(三)

從兩張表得到了我們需要的東西,然後下面的代碼就是圍繞著這兩個指標來展開了。(unusual_dev和id)繼續看get_device_info()。497行,把unusual_dev給記錄在us裡面,反正us裡面也有這麼一個成員。這樣記錄下來以後使用起來就方便了,因為us是貫穿整個故事的,所以訪問它的成員很方便,隨時都可以,但是us_unusual_dev_list以及storage_usb_ids這兩張表這次之後就不會再用了。因為我們已經得到了我們想要的,所以就不用再去騷擾這兩個數組了。498

linux驅動子系統之輸入子系統(3)

linux驅動子系統之輸入子系統(3)3.裝置驅動層3.1 概述負責與底層輸入裝置通訊,實現具體硬體裝置驅動,擷取硬體產生的事件資訊報給上層。本層是要我們實現的,核心也提供了很多裝置驅動。 3.2 資料結構和函數l  input_dev,子系統中用此結構體來描述一個輸入裝置struct input_dev{         /* 匯出到使用者空間的相關資訊,在sys檔案可以看到*/         const char *name;         const char *phys;      

Linux驅動之觸控螢幕(4)-多點觸控

Linux驅動之觸控螢幕(4)-多點觸控4.1 概述         此驅動支援it7260觸控螢幕控制器,最多支援三點觸摸,已在CPU: s5pc110、linux-2.6.32.9、android-2.2上測試通過。原本以為三天就能搞定,最後還是用了一個禮拜才弄完。水平有限,可能存在一些bug,請及時反饋給我(cjok.liao@gmail.com)。         觸控螢幕驅動主要分為兩個部分:         I2C驅動部分:主要負責將裝置掛接到I2C匯流排上,實現資料轉送;     

Linux驅動之裝置模型(2)

3.ktype& Kset3.1  ktypel  用來描述一組kobject所具有的共同特性,用structkobj_type結構體來表示struct kobj_type{         void (*release)(struct kobject *kobj);         const struct sysfs_ops *sysfs_ops;         struct attribute **default_attrs;         const struct kobj_

Linux驅動之裝置模型(4)-匯流排

1 匯流排   匯流排,是處理器與一個或者多個裝置之間的通道。在Linux裝置模型中,所有的裝置都通過匯流排相連,甚至是那些內部的虛擬"platform"匯流排。用bus_type結構來描述。 struct bus_type {const char*name; /* 匯流排名 */const char*dev_name; struct device*dev_root;struct bus_attribute*bus_attrs; /* 匯流排屬性 */struct

Linux驅動之裝置模型(7)

8.類8.1  classl  Class是對裝置按照功能進行的分類,這樣做是為了給使用者空間提供一個比較友好的介面。Class也是一個kset,對應於/sys/class下的一個目錄int __initclasses_init(void){         /* 對應/sys/class目錄 */         class_kset =kset_create_and_add("class", NULL, NULL);         if (!class_kset)             

Linux驅動之裝置模型(5)-裝置

1. 裝置,LDM中用device結構體來描述裝置struct device { /* 父裝置,通常是某種匯流排或者是宿主裝置 */ struct device *parent; /* 私人資料指標:子裝置鏈表,父裝置鏈表節點,驅動程式鏈表節點,匯流排鏈表節點 */ struct device_private *p; struct kobject kobj; /*

linux驅動子系統之輸入子系統(1)

linux驅動子系統之輸入子系統(1)1.輸入子系統架構1.1 概述核心提供的輸入子系統是對分散的、多種不同類別的輸入裝置(鍵盤、滑鼠、觸控螢幕、加速計、跟蹤球、操縱杆等)進行統一處理的驅動程式。 輸入子系統帶來的好處:l  抽象底層形態各異的硬體輸入裝置,為上層提供了統一的操作介面 l  提高了代碼重用率和效率,減少了bug  1.2 系統架構輸入子系統的三層結構:l  事件驅動層          負責和應用程式的介面 l  核心層         

Linux驅動之觸控螢幕(1)

1.     硬體原理1.1overview   我們常用的觸控螢幕類型有兩種:阻性觸控螢幕和容性觸控螢幕。它們在硬體上相差比較大,在驅動實現上相對來說差別比較小。容性觸控螢幕支援多點觸控螢幕,使用者體驗上比較好。下面將簡單介紹一下觸控螢幕用到的硬體原理。 1.2ADC轉換         AD轉換的作用是將時間連續、幅值也連續的類比量轉換為時間離散、幅值也離散的數字訊號。 1.3 阻性觸控螢幕l  簡單來說,阻性觸控螢幕是一種感應器,它將矩形地區中觸摸點(X,

Linux驅動之裝置模型(6)-驅動

1.  裝置驅動,在Linux裝置模型中,裝置驅動用device_driver結構來表示struct device_driver { const char *name; /*名字*/ struct bus_type *bus; /* 附屬的匯流排 */ struct module *owner; const struct

Linux驅動之觸控螢幕(2)

2.     觸控螢幕驅動分析2.1overview         觸控螢幕驅動並沒有阻性和容性之分,只有單點觸摸和多點觸摸之分。典型的觸控螢幕驅動都會基於輸入子系統來做。這裡先來分析一下s3c2410_ts.c(舊核心裡是s3c_ts.c,相對來說變動很大,有興趣可以去看看)這個驅動檔案。此檔案名稱字雖然是s3c2410,但是同樣也支援s3c2440和s3c6410。                                                           2.2

《Linux那些事兒之我是USB》我是隨身碟(18)冬天來了,春天還會遠嗎?(四)

結束了get_device_info,我們繼續沿著storage_probe一步一步地走下去。繼續,這就是我們前面提到過的三個函數,get_transport、get_protocol和get_pipes。一旦結束了這三個函數,我們就將進入本故事的高潮部分。而在這之前,我們只能一個一個地來看。好在這幾個函數雖然不短,但是真正有用的資訊只有一點,所以可以很快看完。993   /* Get the transport, protocol,and pipe settings */994  

Linux驅動之觸控螢幕(3)

3.     多點觸摸3.1overview         多點觸摸沒啥好特別的,就是把多個單點捆綁起來,組合成一組座標值。然後上層應用對其手勢進行解析,就有了我們平常看到的兩個手指對圖片進行縮放等功能。從Linux-2.6.30才對多點觸摸支援。 3.2 單點觸摸和多點觸摸l  單點觸摸和多點觸摸都是基於輸入子系統來做,所以對於在軟體上的實現區別不是很大。 l  參數設定單點觸摸:Input_dev->evbit[0]= BIT_MASK(EV_KEY) |

總頁數: 3662 1 .... 758 759 760 761 762 .... 3662 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.