SCO UNIX 下裝置驅動程式開發(轉)
SCO UNIX 下裝置驅動程式開發(轉)[@more@]一.相關概念
---- 1裝置號和裝置驅動程式
---- 裝置號是一個數字,他是裝置的標誌。這些裝置在系統上有對應的特殊檔案存在。裝置號由兩部分組成,即主裝置號和次裝置號,高位元組為主裝置號和底位元組為次裝置號.主裝置號標誌裝置的型別,它告訴核心有哪個驅動程式來處理該裝置的請求,次裝置號由相應的裝置驅動程式解釋,它標誌著某個具體的物理裝置。
---- ex. 八串卡,它的主裝置號是相同的,次裝置號是不同的。
---- 2裝置節點
---- unix 把裝置作為特殊的檔案處理,稱裝置檔案,也即裝置節點。裝置節點提供了物理裝置和它對應的驅動程式的介面。0新增裝置節點的命令格式為
---- mknod 裝置名字 [b/c] 主裝置號 次裝置號
---- 它將為裝置檔案產生一個目錄項和對應的i節點。
---- 3裝置驅動程式
---- 裝置驅動程式是物理裝置和作業系統之間的軟體介面,它由一組子程式組成,他負責與物理裝置通訊,併為作業系統的核心提供統一的介面。使用者級的程式透過裝置檔案來訪問裝置,但實際裝置的讀寫則由裝置驅動程式完成.
---- 裝置驅動程式分兩類:字元裝置驅動程式和塊裝置驅動程式。
二.UNIX 系統裝置驅動程式的設計和開發
---- 1驅動程式提供核心的例程:
---- 常見的有:xxxinit(),xxxxopen(),xxxxclose(),xxxxread(),xxxxwrite(),xxxxioctl(),xxxxhalt(); 等等,依此類推。這裡的xxxx是裝置驅動程式的字首,與裝置名相同,在本例中為mytt,這組例程為裝置驅動程式入口例程,下面分別對各個例程作一說明:
---- xxxxinit: 初始化裝置, 由系統在啟動時由核心自動呼叫
---- xxxxhalt: 系統關閉時核心呼叫以關閉裝置
---- xxxxopen: 獲得對一個裝置的存取,當一使用者程式呼叫檔案系統呼叫open 時,核心呼叫以此例程
---- xxxxclose:取消對一個裝置的存取,當一使用者程式呼叫檔案系統例程close時,核心呼叫此例程
---- xxxxread: 從裝置中讀取資料,當使用者程式呼叫檔案系統例程read時,核心呼叫此例程,實現數 據從系統地址空間到使用者地址空間的傳遞。
---- xxxxwrite: 向裝置寫資料,當使用者程式呼叫檔案系統例程write 時,核心呼叫此例程,實現資料從使用者地址空間向系統地址空間的傳遞,併傳送到物理裝置。
---- xxxxintr: 處理裝置中斷,當裝置向系統發出中斷請求時,核心呼叫此例程來處理中斷
---- xxxxstart: 啟動一個驅動程式的存取,該例程也系統啟動期間由核心自動呼叫。 與xxinit例程的區別是:xxinit例程在系統初啟時即被核心用,而xxstart例程的呼叫則在系統中斷系統已初始化完之後才呼叫。
---- xxxxioct1: 控制字元裝置,使用者程式呼叫檔案系統用ioct1時,核心呼叫此例程
---- 這些例程都是可選的。
---- 2驅動程式的引數傳遞:
---- 系統核心為每個程式分配和維護一個核心資料結構USER,該結構包含程式執行時所需的全部資訊。變數u是當前活動程式的USER資料結構,它包含的資訊僅為核心私有,驅動程式會頻繁使用其中的很多元素,較常用的有:
---- u.u_base: 使用者資料區的地址,含有要傳送的讀/寫資料。當使用者呼叫檔案讀/寫系統功能時,地址引數就存在該單元中。
---- u.u_offset:傳遞的資料檔案的起始地址
---- u.u_count: 包含傳遞的位元組數
---- u.u_error: 檔案系統呼叫返回時的全域性變數errno的值
---- 使用者資料區的資料透過核心例程,passc(),cpass(),copyin(),copyout()來傳遞,passc(),cpass()能夠自動維護u結構,copyin(),copyout()必須手動維護u結構。
---- 3驅動程式的除錯:
---- 1)透過printf語句,將要觀察的變數等列印出來
---- 2)自己編寫測試程式除錯,一個簡單的讀寫終端裝置的程式
---- 3)核心出錯時,可以用crash
#卸出記憶體映象
#ldsysdump filename
# crash -d filename
---- 4裝置驅動程式的安裝:
---- 裝置驅動程式的安裝,通常遵循如下步驟:
---- 1) 獲取可用主裝置號,命令為:
/etc/conf/cf.d/configure - j NEXTMAJOR
返回 - 主裝置號,如120 。
---- 2) 建立裝置檔案節點,命令為:
mknod /dev/mytt c 120 0
"/dev/mytt" 指我所做的裝置檔案,"c"
指字元裝置,"120" 指主裝置號,"0" 指次裝置號。
---- 3) 配置系統 ,命令為:
cd/etc/conf/cf.d
./configure -m 120 -c -14 -T2 -v
4 -a myttinit myttopen myttclose
myttread myttwrite myttioct1
option:
l4 中斷優先順序
T2 裝置使用的中斷模式(0-3)
V4 需要中斷相量
---- 4) 檢查裝置mytt是否已加入系統,命令為:
./configure -j mytt
---- 如返回120 則表示mytt 已加入系統,且主裝置為120 。 如返回資訊為"no sueh device " 則系統中沒有名為mytt 的裝置,上述命令也可以在配置系統之前檢查一下系統中是否同名裝置存在。如有的話,可以先將該裝置刪除,然後再加入新裝置。 要刪除一指定裝置,則必須知道其主裝置號。 取主裝置號命令如上面所示,步驟如下:
./configure -j mytt
./configure -m 120 -c -d
則從核心中刪除裝置 mytt
---- 5) 編譯驅動程式原始碼,將生成的.o 檔案拷入/etc/conf/pack.d 目錄
---- 編譯驅動程式原始碼命令列:
cc -c -D_INKERNEL mytt.c
mkdir /etc/conf/pack.d/mytt
cp mytt.o /etc/conf/pack.d/mytt/Driver.o
---- 6) 重鍵核心
cd/etc/conf/cf.d
./link_unix
---- 回答兩個Y,則在根目錄下生成一個新的核心unix,舊的核心檔案被儲存為unix.o1d 驅動程式已安裝完畢,需重新啟動unix系統,裝置驅動程式才能有效這時系統自動執行myttinit(),在主控臺顯示資訊,表示裝置驅動程式已安裝。
---- 1裝置號和裝置驅動程式
---- 裝置號是一個數字,他是裝置的標誌。這些裝置在系統上有對應的特殊檔案存在。裝置號由兩部分組成,即主裝置號和次裝置號,高位元組為主裝置號和底位元組為次裝置號.主裝置號標誌裝置的型別,它告訴核心有哪個驅動程式來處理該裝置的請求,次裝置號由相應的裝置驅動程式解釋,它標誌著某個具體的物理裝置。
---- ex. 八串卡,它的主裝置號是相同的,次裝置號是不同的。
---- 2裝置節點
---- unix 把裝置作為特殊的檔案處理,稱裝置檔案,也即裝置節點。裝置節點提供了物理裝置和它對應的驅動程式的介面。0新增裝置節點的命令格式為
---- mknod 裝置名字 [b/c] 主裝置號 次裝置號
---- 它將為裝置檔案產生一個目錄項和對應的i節點。
---- 3裝置驅動程式
---- 裝置驅動程式是物理裝置和作業系統之間的軟體介面,它由一組子程式組成,他負責與物理裝置通訊,併為作業系統的核心提供統一的介面。使用者級的程式透過裝置檔案來訪問裝置,但實際裝置的讀寫則由裝置驅動程式完成.
---- 裝置驅動程式分兩類:字元裝置驅動程式和塊裝置驅動程式。
二.UNIX 系統裝置驅動程式的設計和開發
---- 1驅動程式提供核心的例程:
---- 常見的有:xxxinit(),xxxxopen(),xxxxclose(),xxxxread(),xxxxwrite(),xxxxioctl(),xxxxhalt(); 等等,依此類推。這裡的xxxx是裝置驅動程式的字首,與裝置名相同,在本例中為mytt,這組例程為裝置驅動程式入口例程,下面分別對各個例程作一說明:
---- xxxxinit: 初始化裝置, 由系統在啟動時由核心自動呼叫
---- xxxxhalt: 系統關閉時核心呼叫以關閉裝置
---- xxxxopen: 獲得對一個裝置的存取,當一使用者程式呼叫檔案系統呼叫open 時,核心呼叫以此例程
---- xxxxclose:取消對一個裝置的存取,當一使用者程式呼叫檔案系統例程close時,核心呼叫此例程
---- xxxxread: 從裝置中讀取資料,當使用者程式呼叫檔案系統例程read時,核心呼叫此例程,實現數 據從系統地址空間到使用者地址空間的傳遞。
---- xxxxwrite: 向裝置寫資料,當使用者程式呼叫檔案系統例程write 時,核心呼叫此例程,實現資料從使用者地址空間向系統地址空間的傳遞,併傳送到物理裝置。
---- xxxxintr: 處理裝置中斷,當裝置向系統發出中斷請求時,核心呼叫此例程來處理中斷
---- xxxxstart: 啟動一個驅動程式的存取,該例程也系統啟動期間由核心自動呼叫。 與xxinit例程的區別是:xxinit例程在系統初啟時即被核心用,而xxstart例程的呼叫則在系統中斷系統已初始化完之後才呼叫。
---- xxxxioct1: 控制字元裝置,使用者程式呼叫檔案系統用ioct1時,核心呼叫此例程
---- 這些例程都是可選的。
---- 2驅動程式的引數傳遞:
---- 系統核心為每個程式分配和維護一個核心資料結構USER,該結構包含程式執行時所需的全部資訊。變數u是當前活動程式的USER資料結構,它包含的資訊僅為核心私有,驅動程式會頻繁使用其中的很多元素,較常用的有:
---- u.u_base: 使用者資料區的地址,含有要傳送的讀/寫資料。當使用者呼叫檔案讀/寫系統功能時,地址引數就存在該單元中。
---- u.u_offset:傳遞的資料檔案的起始地址
---- u.u_count: 包含傳遞的位元組數
---- u.u_error: 檔案系統呼叫返回時的全域性變數errno的值
---- 使用者資料區的資料透過核心例程,passc(),cpass(),copyin(),copyout()來傳遞,passc(),cpass()能夠自動維護u結構,copyin(),copyout()必須手動維護u結構。
---- 3驅動程式的除錯:
---- 1)透過printf語句,將要觀察的變數等列印出來
---- 2)自己編寫測試程式除錯,一個簡單的讀寫終端裝置的程式
---- 3)核心出錯時,可以用crash
#卸出記憶體映象
#ldsysdump filename
# crash -d filename
---- 4裝置驅動程式的安裝:
---- 裝置驅動程式的安裝,通常遵循如下步驟:
---- 1) 獲取可用主裝置號,命令為:
/etc/conf/cf.d/configure - j NEXTMAJOR
返回 - 主裝置號,如120 。
---- 2) 建立裝置檔案節點,命令為:
mknod /dev/mytt c 120 0
"/dev/mytt" 指我所做的裝置檔案,"c"
指字元裝置,"120" 指主裝置號,"0" 指次裝置號。
---- 3) 配置系統 ,命令為:
cd/etc/conf/cf.d
./configure -m 120 -c -14 -T2 -v
4 -a myttinit myttopen myttclose
myttread myttwrite myttioct1
option:
l4 中斷優先順序
T2 裝置使用的中斷模式(0-3)
V4 需要中斷相量
---- 4) 檢查裝置mytt是否已加入系統,命令為:
./configure -j mytt
---- 如返回120 則表示mytt 已加入系統,且主裝置為120 。 如返回資訊為"no sueh device " 則系統中沒有名為mytt 的裝置,上述命令也可以在配置系統之前檢查一下系統中是否同名裝置存在。如有的話,可以先將該裝置刪除,然後再加入新裝置。 要刪除一指定裝置,則必須知道其主裝置號。 取主裝置號命令如上面所示,步驟如下:
./configure -j mytt
./configure -m 120 -c -d
則從核心中刪除裝置 mytt
---- 5) 編譯驅動程式原始碼,將生成的.o 檔案拷入/etc/conf/pack.d 目錄
---- 編譯驅動程式原始碼命令列:
cc -c -D_INKERNEL mytt.c
mkdir /etc/conf/pack.d/mytt
cp mytt.o /etc/conf/pack.d/mytt/Driver.o
---- 6) 重鍵核心
cd/etc/conf/cf.d
./link_unix
---- 回答兩個Y,則在根目錄下生成一個新的核心unix,舊的核心檔案被儲存為unix.o1d 驅動程式已安裝完畢,需重新啟動unix系統,裝置驅動程式才能有效這時系統自動執行myttinit(),在主控臺顯示資訊,表示裝置驅動程式已安裝。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-947403/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SCO UNIX 下裝置驅動程式開發 (轉)
- UNIX下裝置驅動程式的基本結構(轉)
- Linux下的硬體驅動——USB裝置(下)(驅動開發部分)(轉)Linux
- LINUX下的裝置驅動程式 (轉)Linux
- SCO UNIX--安裝(轉)
- Windows NT 裝置驅動程式開發基礎(1) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(3) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(2) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(4) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(5) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(7) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(6) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(8) (轉)Windows
- SCO-UNIX在vmware下的安裝(轉)
- SCO UNIX安裝參考(轉)
- Linux裝置驅動程式 (轉)Linux
- 開發Linux系統裝置驅動程式並不難(轉)Linux
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- SCO UNIX下的反刪除(undelete)(轉)delete
- ORACLE 7.3.4 for SCO Unix 安裝說明(轉)Oracle
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- 《Linux裝置驅動開發詳解(第2版)》——第1章Linux裝置驅動概述及開發環境構建1.1裝置驅動的作用Linux開發環境
- Linux下的硬體驅動——USB裝置(上)(驅動配置部分)(轉)Linux
- Linux裝置驅動之字元裝置驅動Linux字元
- SCO UNIX學習寶典(系統安裝)(轉)
- 使用Windows 95虛擬裝置驅動程式(VxD) (轉)Windows
- [精華] SCO UNIX安裝參考
- 轉:Linux、AIX UNIX、SCO UNIX下檢視硬體配置小結LinuxAI
- SCO UNIX網路安全管理 (轉)
- SCO Unix系統下網路印表機的使用(轉)
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- Sybase 11.0.3 For SCO UNIX 5.0.5安裝配置步驟(轉)
- Windows95的裝置驅動程式的編寫 (轉)Windows
- UNIX 下 SCO TCP/IP ftp 命令表TCPFTP
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- SCO UNIX--基本配置及操作(轉)