第一章 驅動開發 驅動開發基本知識

2021-06-20 01:20:40 字數 4738 閱讀 2192

1. 

# 和 ## 操作符是和#define巨集使用的. 使用# 使在#後的首個引數返回為乙個帶引號的字串.例如, 命令

#define to_string( s ) # s
將會使編譯器把以下命令
cout << to_string( hello world! ) << endl;
理解為
cout << "hello world!" << endl;
使用##鏈結##前後的內容. 例如, 命令
#define concatenate( x, y ) x ## y
...
int xy = 10;
...
將會使編譯器把
cout << concatenate( x, y ) << endl;
解釋為
cout << xy << endl;
理所當然,將會在標準輸出處顯示'10'.
這個判斷因為乙個是char*乙個是int*,會在編譯時產生乙個warning: comparison of distinct pointer types lacks a cast。
說明白點就是用編譯器的警告來提示使用者型別不一致。而前面的void只是為了讓編譯器不提示warning:statement with no effect。

3. 函式定義前加巨集asmlinkage ,表示這些函式通過堆疊而不是通過暫存器傳遞引數。

gcc編譯器在彙編過程中呼叫c語言函式時傳遞引數有兩種方法:一種是通過堆疊,另一種是通過暫存器。預設時採用暫存器,假如你要在你的彙編過程中呼叫c語言函式,並且想通過堆疊傳遞引數,你定義的c函式時要在函式前加上巨集asmlinkage

4.# define noret_type 

????

5.tail命令

tail -n 38 results.txt :顯示檔案results.txt的後38行

6.在makefile檔案中

build:kernel_modules 

kernel_modules: 

make -c /lib/modules/$(kvers)/build m=$(curdir) modules 

解釋:build是目標檔案,依賴於kernel_modules,沒有命令列。kernel_modules也是另乙個目標檔案,但是沒有依賴關係,需要通過命令得到。

7.二進位制檔案和文字檔案

計算機的儲存在物理上是二進位制的,所以文字檔案與二進位制檔案的區別並不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編碼等等。二進位制檔案是基於值編碼的檔案,你可以根據具體應用,指定某個值是什麼意思(這樣乙個過程,可以看作是自定義編碼。

從上面可以看出文字檔案基本上是定長編碼的(也有非定長的編碼如utf-8)。而二進位制檔案可看成是變長編碼的,因為是值編碼嘛,多少個位元代表乙個值,完全由你決定。大家可能對bmp檔案比較熟悉,就拿它舉例子吧,其頭部是較為固定長度的檔案頭資訊,前2位元組用來記錄檔案為bmp格式,接下來的8個位元組用來記錄檔案長度,再接下來的4位元組用來記錄bmp檔案頭的長度。

8. /bin、/sbin、/usr/bin、/usr/sbin目錄的區別

bin目錄: 

bin為binary的簡寫主要放置一些系統的必備執行檔例如:cat、cp、chmoddf、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

/usr/bin目錄:

主要放置一些應用軟體工具的必備執行檔例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、newaliases、nslookup passwd、quota、smb*、wget等。

/sbin目錄: 

主要放置一些系統管理的必備程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、runlevel、shutdown等。

/usr/sbin目錄: 

放置一些網路管理的必備程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等

綜述:如果這是使用者和管理員必備的二進位制檔案,就會放在/bin。如果這是系統管理員必備,但是一般使用者根本不會用到的二進位制檔案,就會放在/sbin。相對而言。如果不是使用者必備的二進位制檔案,多半會放在/usr/bin;如果不是系統管理員必備的工具,多半會放在/usr/sbin。

9.掛載必須要掛載到mnt目錄下嗎?

這個不是必須的,自己建乙個資料夾也是可以的,只不過習慣上都掛載到mnt目錄下。

10.tty是什麼?

終端是一種字元型裝置,它有多種型別,通常使用tty來簡稱各種型別的終端裝置。tty是teletype的縮寫。teletype是最早出現的一種終端裝置,很象電傳打字機,是由teletype公司生產的。裝置名放在特殊檔案目錄/dev/下,終端特殊裝置檔案一般有以下幾種:j終端是一種字元型裝置,它有多種型別,通常使用tty來簡稱各種型別的終端裝置。tty是teletype的縮寫。teletype是最早出現的一種終端裝置,很象電傳打字機(或者說就是

1)串列埠終端(/dev/ttysn)

串列埠終端(serial portterminal)是使用計算機串列埠連線的終端裝置。計算機把每個串列埠都看作是乙個字元裝置。有段時間這些串列埠裝置通常被稱為終端裝置,因為那時它的最大用途就是用來連線終端。這些串列埠所對應的裝置名稱是/dev/tts/0(或/dev/ttys0)、/dev/tts/1(或/dev/ttys1)等,裝置號分別是(4,0)、(4,1)等,分別對應於dos系統下的com1、com2等。若要向乙個埠傳送資料,可以在命令列上把標準輸出重定向到這些特殊檔名上即可。例如,在命令列提示符下鍵入:echotest >/dev/ttys1會把單詞」test」傳送到連線在ttys1(com2)埠的裝置上。

2)偽終端(/dev/pty/)

偽終端(pseudoterminal)是成對的邏輯終端裝置,例如/dev/ptyp3和/dev/ttyp3(或著在裝置檔案系統中分別是/dev/pty/m3和/dev/pty/s3)。它們與實際物理裝置並不直接相關。如果乙個程式把ttyp3看作是乙個串列埠裝置,則它對該埠的讀/寫操作會反映在該邏輯終端裝置對的另乙個上面(ttyp3)。而ttyp3則是另乙個程式用於讀寫操作的邏輯裝置。這樣,兩個程式就可以通過這種邏輯裝置進行互相交流,而其中乙個使用ttyp3的程式則認

自己正在與乙個串列埠進行通訊。這很象是邏輯裝置對之間的管道操作。

對於ttyp3(s3),任何設計成使用乙個串列埠裝置的程式都可以使用該邏輯裝置。但對於使用ptyp3的程式,則需要專門設計來使用ptyp3(m3)邏輯裝置。

例如,如果某人在網上使用telnet程式連線到你的計算機上,則telnet程式就可能會開始連線到裝置ptyp2(m2)上(乙個偽終端埠上)。此時乙個getty程式就應該執行在對應的ttyp2(s2)埠上。當telnet從遠端獲取了乙個字元時,該字元就會通過m2、s2傳遞給getty程式,而getty程式就會通過s2、m2和telnet程式往網路上返回」login:」字串資訊。這樣,登入程式與telnet程式就通過「偽終端」進行通訊。通過使用適當的軟體,就可以把兩個甚至多個偽終端裝置連線到同乙個物理串列埠上。

在使用裝置檔案系統(devicefilesystem)之前,為了得到大量的偽終端裝置特殊檔案,hp-ux aix等使用了比較複雜的檔名命名方式。

3)控制終端(/dev/tty)

如果當前程序有控制終端(controllingterminal)的話,那麼/dev/tty就是當前程序的控制終端的裝置特殊檔案。可以使用命令」ps–ax」來檢視程序與哪個控制終端相連。對於你登入的shell,/dev/tty就是你使用的終端,裝置號是(5,0)。使用命令」tty」可以檢視它具體對應哪個實際終端裝置。/dev/tty有些類似於到實際所使用終端裝置的乙個聯接。

4)控制台終端(/dev/ttyn, /dev/console)

在unix系統中,計算機顯示器通常被稱為控制台終端(console)。它**了型別為linux的一種終端(term=linux),並且有一些裝置特殊檔案與之相關聯:tty0、tty1、tty2等。當你在控制台上登入時,使用的是tty1。使用alt+[f1—f6]組合鍵時,我們就可以切換到tty2、tty3等上面去。tty1–tty6等稱為虛擬終端,而tty0則是當前所使用虛擬終端的乙個別名,系統所產生的資訊會傳送到該終端上。因此不管當前正在使用哪個虛擬終端,系統資訊都會傳送到控制台終端上。

你可以登入到不同的虛擬終端上去,因而可以讓系統同時有幾個不同的會話期存在。只有系統或超級使用者root可以向/dev/tty0進行寫操作。

5)其它型別

還針對很多不同的字元裝置存在有很多其它種類的終端裝置特殊檔案。例如針對isdn裝置的/dev/ttyin終端裝置等。這裡不再贅述。

注:如果使用字元介面或者圖形介面就是虛擬終端。

如果是使用圖形介面下的命令列,就屬於偽終端

用串列埠rs232直接通訊就是終端(實實在在的硬體終端)

tty0前台虛擬終端,tty1-6,字元虛擬終端(類行為linux),tty7圖形介面虛擬終端(可以在終端中輸入who命令檢視)。串列埠rs232是ttysn。

tty有些類似於到實際所使用終端裝置的乙個聯接。

數字邏輯第一章 基本知識

物理量可以按變化規律分為兩種型別 一類是連續量 時間和數值上均作連續變化的物理量 另一類是數字量。連續量又稱為模擬量,模擬量的訊號稱為模擬訊號。表示數字的訊號 離散的 稱為數碼訊號。連續量 用電壓的變化模擬溫度的變化。數字量 學生成績記錄,工廠產品統計,電路開關的狀態。數字邏輯電路的型別 一 組合邏...

作業系統 第一章(基本知識)

定義 作業系統是指控制和管理整個計算機系統的硬體和軟體資源 並合理的組織排程計算機的工作和資源的分配,以提供給使用者和其他軟體方便的介面和環境的最基本的系統軟體 層次結構 提供的功能 作為系統資源的管理者,主要提供以下4個功能 處理機管理 儲存器管理 檔案管理 裝置管理 作為使用者與計算機硬體的介面...

驅動第一章字串

使用字串結構 傳統c語言總定義和使用字串 ansi和unicode ansi unicode char str ansi字串定義 wchar t wstr unicode字串定義 求長度 size t len strlen str ansi size t wlen wcslen wstr unico...