熱插拔時間從核心空間到使用者空間的傳遞過程

2021-06-28 09:49:35 字數 1865 閱讀 5386

將可移動裝置連入系統時,系統的後台中會依次發生如下事件:

l         核心檢測到新硬體插入,然後分別通知hotplug和udev。前者用來裝入相應的核心模組(如usb-storage),而後者用來在/dev中建立相應的裝置節點(如/dev/sda1)。

l         udev建立了相應的裝置節點之後,會將這一訊息通知hal的守護程式(hald)。當然udev還得保證新建立的裝置節點可以被普通使用者訪問。

l         hotplug裝入了相應的核心模組之後,會把這一訊息通知給hald。

l         hald在受到hotplug和udev發出的訊息之後,認為新硬體已經正式被系統認可了。此時它會通過一系列精心編寫的規則檔案(就是傳說中的***-policy.fdi),把發現新硬體的訊息通過dbus傳送出去,同時還會呼叫update-fstab或fstab-sync來更新/etc/fstab,為相應的裝置節點建立適合的掛載點。

l         卷管理器會監聽dbus中發現新硬體的訊息。根據所插入的硬體(區分u盤和數位相機等)不同,卷管理器會先將相應的裝置節點掛載到hald建立的掛載點上,然後再開啟不同的應用程式。

當然,如果是在cdrom中插入光碟,過程可能比較簡單。因為cdrom本身就是乙個固定的硬體,無需hotplug和udev的協助:

l         hald會自己監視cdrom,並且將光碟托架開合的訊息通過dbus發出去。

l         卷管理器負責檢查cdrom中的碟片內容,進行掛載,並呼叫合適的應用程式。

要注意,hald的工作是從上游得到硬體就緒的訊息,然後將這個訊息**到dbus中。儘管它會呼叫程式來更新fstab,但實際上它自己並不執行掛載的工作

下面是上面的過程中涉及的模組和工具:

l         hotplug

hotplug 包和核心裡的hotplug模組不是一回事,2.6核心裡的pci_hotplug.ko是乙個核心模組,而hotplug包是用來處理核心產生的hotplug事件。這個軟體包還在引導時檢測現存的硬體並在執行的核心中載入相關模組。

不但有熱插拔,還有冷插拔(cold pluging)。熱插拔在核心啟動之後發生,而「cold pluging」發生在核心啟動的過程中。

/etc/hotplug/*.rc 這些指令碼用於冷插拔(檢測和啟用在系統啟動時已經存在的硬體)。它們被 hotplug 初始化指令碼呼叫。*.rc 指令碼會嘗試恢復系統引導時丟失的熱插拔事件,舉例來說,核心沒有掛載根檔案系統。

/etc/hotplug/*.agent這些指令碼將被 hotplug 呼叫以響應核心產生的各種不同的熱插拔事件,導致插入相應的核心模組和呼叫使用者預定義的指令碼。

/sbin/hotplug核心預設情況下將在核心態的某些事情發生變化時(如硬體的插入和拔出)呼叫此指令碼。

傳送熱插拔事件的子系統(subsystem)包括匯流排驅動(usb、pci等)和一些裝置的抽象層(網路介面、磁碟分割槽等)。它們通過/sbin/hotplug的第乙個引數來識別。

對於裝置驅動來說,需要在**裡設定module_device_table,指向驅動程式感興趣的裝置的裝置id列表

核心空間與使用者空間

1.核心態與使用者態的區別 1 核心態 的 不受任何限制,可以訪問 所有處理器指令集 記憶體位址以及i o空間 2 使用者態的 只能訪問其位址空間的頁表項中規定的虛擬位址。2.使用者態到核心態的切換方式 1 系統呼叫 軟中斷的一種 由使用者程序主動發起 2 異常 當cpu在執行執行在使用者態下的程式...

使用者空間和核心空間

應用程式是從頭到尾執行單個任務。模組只是預先註冊自己以便服務於將來的某個請求,模組初始化函式的任務就是為以後呼叫模組函式預先做準備,就像模組說 我在這,並且我能做這些工作。模組的退出函式將在模組被解除安裝前呼叫,他告訴核心 我要離開了,不要再讓我做任何事了。應用程式在退出時,可以不管資源的釋放或其他...

核心空間與使用者空間

首先,這個概念的由來,我認為跟cpu的發展有很大關係,在目前cpu的保護模式下,系統需要對其賴以執行的資料進行保護,為了保證作業系統核心資料,我們把記憶體空間進行劃分,一部分為作業系統核心執行的空間,另一部分是應用程式執行的空間,所謂空間就是記憶體的位址。因此核心空間和使用者空間的概念就出現了。在3...