應用程式與庫函式、核心、驅動之間的關係
應用程式、庫、核心、驅動程式的關係:應用程式呼叫應用程式函式庫完成功能、應用程式以檔案形式訪問各種資源、應用程式函式庫、部分函式直接完成功能、部分函式通過系統呼叫。
由核心完成核心處理系統呼叫。
呼叫裝置驅動程式,裝置驅動直接與硬體通訊。
它們之間的關係如下圖所示
裝置型別:
常見的裝置有三類:字元裝置、塊裝置、網路裝置。
字元裝置:對字元裝置發出讀
/寫請求時,實際的硬體
i/o操作一般緊接著發生。
塊裝置:塊裝置與之相反,它利用系統記憶體作為緩衝區。
網路裝置:網路裝置是一類特殊的裝置,它不像字元裝置或塊裝置那樣通過對應的裝置檔案節點訪問,也不能直接通過
read
或write
進行資料訪問請求。
裝置號硬體裝置以主裝置號和從裝置號區分。在裝置管理中,除了裝置型別外,核心還需要對被稱為主從裝置號的引數,才能唯一標識乙個裝置。主裝置號相同的裝置使用相同的驅動程式,從裝置號用於區分具體裝置的例項。在
/dev
目錄下使用
ll命令(
ls -l
)可以檢視各個裝置的裝置型別、主從裝置號等。
cat /proc/devices
可以檢視系統中所有裝置對應的主裝置號。
裝置檔案
裝置型別、主從裝置號是核心與裝置驅動程式通訊時使用的,應用程式使用裝置檔案節點訪問對應裝置。
linux 2.4
引入了裝置檔案系統(
devfs
)所有的裝置檔案作為乙個可以掛載的檔案系統,每個主從裝置號確定的裝置都對應乙個檔案節點。每個裝置檔案都有其檔案屬性(
c代表字元裝置或者
b代表塊裝置),都有
2個裝置號:
1、主裝置號,用於標識驅動程式;
2、從裝置號:用於標識同一驅動程式的不同硬體。裝置檔案的主裝置號必須與裝置驅動程式在登記時申請的主裝置號一致。需要注意的是,系統呼叫是核心與應用程式之間的介面,裝置驅動程式是核心與硬體之間的介面。
驅動程式與應用程式的區別 1
、應用程式以
main
開始,驅動程式沒有
main
,它以乙個模組初始化函式作為入口。 2
、應用程式從頭到尾執行乙個任務,驅動程式完成初始化之後不再執行,等待系統呼叫。 3
、應用程式可以使用
glibc
等標準c
函式庫,驅動程式不能使用標準c庫。
使用者態與核心態
系統執行時一般情況下,分使用者態和核心態,這兩種執行態下的資料互不可見的。驅動程式是核心的一部分,工作在核心態,應用程式工作在使用者態。這樣就存在資料空間訪問的問題
:無法通過指標直接將二者的資料位址進行傳遞。問題的解決辦法是:系統提供一系列函式幫助完成資料空間轉換:例如,
get_user
、put_user
、copy_from_user
、copy_to_user
等函式。
linux
驅動程式功能
驅動程式的一般功能是:對裝置初始化和釋放、把資料從核心傳送到硬體和從硬體讀取資料、讀取應用程式傳送給裝置檔案的資料和回送應用程式請求的資料、檢測和處理裝置出現的錯誤等。
應用程式,核心,驅動的關係
1.應用程式 應用程式呼叫應用程式函式庫完成功能,應用程式以檔案形式訪問各種資源,應用程式函式庫,部分函式直接完成功能,部分函式通過系統呼叫 2.核心 核心完成核心處理系統呼叫 3.驅動 呼叫系統驅動程式,裝置驅動程式直接與硬體通訊。裝置檔案 裝置型別 字元裝置 塊裝置 網路裝置 裝置號 硬體裝置有...
驅動程式設計學習 核心模組與應用程式區別
核心模組相比於應用程式 每個核心模組只註冊自己以便來服務將來的請求,並且它的初始化函式立刻終止.換句話說,模組初始化函式的任務是為以後呼叫模組的函式做準備 好像是模組說,我在這裡,這是我能做的.模組的退出函式 例子裡是hello exit 就在模組被解除安裝時呼叫.它好像告訴核心,我不再在那裡了,不...
應用程式和核心 core dump
應用程式core dump core dump,memory dump,storage dump 三者表達同一意思記憶體轉存。什麼情況發生轉存?那些記憶體?轉存到 記憶體轉存作用是什麼?如何使用呢?1 什麼情況發生轉存?當程式異常崩潰時,另外系統開啟對core檔案大小資源控制。系統預設core檔案大...