南京工程学院 嵌入式linux 复习
1,Linux系統的常用命令(包括參數)
{1}用戶切換(su)
(1)作用
變更為其它使用者的身份,主要用于將普通用戶身份轉變為超級用戶,而且需輸入相應用戶密碼。
(2)格式
su [選項] [使用者]
其中的使用者為要變更的對應使用者。
(3)常見參數
-,-l,--login:為該使用者重新登錄,大部分環境變量(如HOME、SHELL和USER等)和工作目錄都是以該使用者(USER)為主。若沒有指定USER,缺省情況是root
-m,-p:執行su時不改變環境變量
-c,--command:變更賬號為USER的使用者,并執行指令(command)后再變回原來使用者
{2}用戶管理命令
useradd:添加用戶賬號
useradd [選項] 用戶名
usermod:設置用戶賬號屬性
usermod [選項] 屬性值
userdel:刪除對應用戶賬號
userdel [選項] 用戶名
groupadd:添加組賬號
groupadd [選項] 組賬號
groupmod:設置組賬號屬性
groupmod [選項] 屬性值
groupdel:刪除對應組賬號
groupdel [選項] 組賬號
passwd:設置賬號密碼
passwd [對應賬號]
id:顯示用戶ID、組ID和用戶所屬的組列表
id [用戶名]
groups:顯示用戶所屬的組
groups [組賬號]
who:顯示登錄到系統的所有用戶
who
{3}系統管理命令
ps:顯示當前系統中由該用戶運行的進程列表
ps [選項]
top:動態顯示系統中運行的程序(一般為每隔5s) top
kill:輸出特定的信號給指定PID(進程號)的進程
kill [選項] 進程號(PID)
uname顯示系統的信息(可加選項-a)
uname [選項]
setup:系統圖形化界面配置
setup
crontab:循環執行例行性命令
crontab [選項]
shutdown:關閉或重啟Linux系統
shutdown [選項] [時間]
uptime:顯示系統已經運行了多長時間
uptime
clear:清除屏幕上的信息
clear
{4}磁盤相關命令
free:查看當前系統內存的使用情況
free [選項]
df :查看文件系統的磁盤空間占用情況
df [選項]
du :統計目錄(或文件)所占磁盤空間的大小
du [選項]
fdisk :查看硬盤分區情況及對硬盤進行分區管理
fdisk [-l]
{5}文件系統掛載命令(mount)
(1)作用
掛載文件系統,它的使用權限是超級用戶或/etc/fstab中允許的使用者。掛載是指把分區和目錄對應的過程,而掛載點是指掛載在文件樹中的位置。mount命令就可以把文件系統掛載到相應的目錄下,并且由于Linux中把設備都當作文件一樣使用,因此,mount命令也可以掛載不同的設備。通常,在Linux下“/mnt”目錄是專門用于掛載不同的文件系統的,它可以在該目錄下新建不同的子目錄來掛載不同的設備文件系統。
(2)格式
mount [選項] [類型] 設備文件名 掛載點目錄
其中的類型是指設備文件的類型。
(3)常見參數
-a:依照/etc/fstab的內容裝載所有相關的硬盤
-l:列出當前已掛載的設備、文件系統名稱和掛載點
-t: 類型將后面的設備以指定類型的文件格式裝載到掛載點上。常見的類型有前面介紹過的幾種:vfat、ext3、ext2、iso9660、nfs等
-f:通常用于除錯。它會使mount不執行實際掛上的動作,而是模擬整個掛上的過程,通常會和-v一起使用
{6}文件相關命令
cd:改變當前工作目錄
cd [路徑]
ls:列出目錄和文件的信息
ls [選項] [文件]
mkdir :創建一個目錄
mkdir [選項] 路徑
grep :在指定文件中搜索特定的內容,并將含有這些內容的行標準輸出
grep [選項] 格式 [文件及路徑]
{8}文件比較合并相關命令
diff:比較兩個不同的文件或不同目錄下的兩個同名文件功能,并生成補丁文件。
diff[選項] 文件1 文件2
diff比較文件1和文件2的不同之處,并按照選項所指定的格式加以輸出。diff的格式分為命令格式和上下文格式,其中上下文格式又包括了舊版上下文格式和新版上下文格式,命令格式分為標準命令格式、簡單命令格式及混合命令格式,它們之間的區別會在使用實例中進行詳細地講解。當選項缺省時,diff默認使用混合命令格式。
patch:命令跟diff配合使用,把生成的補丁文件應用到現有代碼上。
patch [選項] [待patch的文件[patch文件]]。
常用的格式為:patch -pnum [patch文件],其中的-pnum是選項參數。
{9}網絡相關命令
netstat:顯示網絡連接、路由表和網絡接口信息
netstat [-an]
nslookup查詢一臺機器的IP地址和其對應的域名
nslookup [IP地址/域名]
finger:查詢用戶的信息
finger [選項] [使用者] [用戶@主機]
ping:用于查看網絡上的主機是否在工作
ping [選項] 主機名/IP地址
ifconfig:查看和配置網絡接口的參數
ifconfig [選項] [網絡接口]
ftp:利用ftp協議上傳和下載文件
telnet:利用telnet協議瀏覽信息
telent [選項] [IP地址/域名]
ssh:利用ssh登錄對方主機
ssh [選項] [IP地址]
?
2,Vi的常用命令
插 入 (insert)
-- i 從 光 標 所 在 位 置 前 面 開 始 插 入 資 料, 光 標 後 的 資 料 隨 新 增 資 料 向 後 移 動。
-- I 從 光 標列 的 第 一 個 非 空 白 字 符 前 面 開 始 插 入 資 料。
vi用法 --- 修改和刪除
x 刪除光標所在字符。
dd 刪除光標所在的列。
r 修改光標所在字符,r後接著要修正的字符
R進入取代狀態,新增資料會覆改原先資料, 直到按[ESC]回到指令模式下為止。
s 刪除光標所在字符,并進入輸入模式。
S 刪除光標所在的列,并進入輸入模式。
vi用法 --- 退出
<:q>不保存退出
<:q!>不保存強制性退出
<:w>保存編輯
<:w filename>存入文件filename 中
<:w! filename>強制性存入文件filename 中
<:wq>(<:x>)保存并退出(shift+zz)
vi用法 --- 光標移動
<b>移動到當前單詞的開始
<e>移動到當前單詞的結尾
<w>向前移動一個單詞
<h>向前移動一個字符
<j>向上移動一行
<k>向下移動一行
<l>向后移動一個字符
vi用法 --- 替換操作
<r>替換光標所在的字符
<R>替換字符序列
<cw>替換一個單詞
<ce>同<cw>
<cb>替換光標所在的前一字符
<c$>替換自光標位置至行尾的所有字符
<C>同<c$>
<cc>替換當前行
vi用法 --- 復制與粘貼
</yw>將光標所在單詞拷入剪貼板
<y$>將光標至行尾的字符拷入剪貼板
<Y>同<y$>
<yy>將當前行拷入剪貼板
<p>將剪貼板中的內容粘貼在光標后
<P>將剪貼板中的內容粘貼在光標前
?
3,Gcc的使用(掌握常用參數)
gcc --- 常用選項
?
gcc ---庫選項
?
函數庫分為靜態庫和動態庫兩種,靜態庫是一系列的目標文件(.o文件)的歸檔文件(文件名格式為libname.a),如果在編譯某個程序時鏈接靜態庫,則鏈接器將會搜索靜態庫,從中提取出它所需要的目標文件并直接拷貝到該程序的可執行二進制文件(ELF格式文件)之中;動態庫(文件名格式為libname.so[.主版本號.次版本號.發行號])在程序編譯時并不會被鏈接到目標代碼中,而是在程序運行時才被載入。
gcc --- 警告選項
?
gcc --- 優化選項
gcc可以對代碼進行優化,它通過編譯選項“-On”來控制優化代碼的生成,其中n是一個代表優化級別的整數。
不同的優化級別對應不同的優化處理工作。如使用優化選項“-O”主要進行線程跳轉(Thread Jump)和延遲退棧(Deferred Stack Pops)兩種優化。使用優化選項“-O2”除了完成所有“-O1”級別的優化之外,同時還要進行一些額外的調整工作,如處理器指令調度等。選項“-O3”則還包括循環展開和其他一些與處理器特性相關的優化工作。
可能適合使用優化選項的場合:程序發行
不太適合使用優化選項的場合:程序開發
gcc --- 體系結構相關選項
?
4,Gdb的常用命令
gdb工作環境相關命令
?
gdb設置斷點與恢復命令
?
gdb中源碼查看相關相關命令
?
gdb中查看運行數據的相關命令
?
?
5,簡單makefile的編寫(具體自己找程序看)
makefile是make讀入的惟一配置文件,因此本節的內容實際就是講述makefile的編寫規則。在一個makefile中通常包含如下內容:
· ?需要由make工具創建的目標體(target),通常是目標文件或可執行文件;
· ?要創建的目標體所依賴的文件(dependency_file);
創建每個目標體時需要運行的命令(command),這一行必須以制表符(tab鍵)開頭。
?
6,嵌入式操作系統的分類(軟件架構角度)
答:軟件架構角度:單體結構,分層結構,微內核結構;
單體結構優點:性能好,通信開銷小;缺點:體積龐大、高度集成、相互關聯
分層結構:這種結構要求在每個層次上都要提供一組API接口函數,這就會帶來額外的開銷
微內核結構:易于擴展、調試方便、易于移植,但是速度可能會慢
7,嵌入式中間件的概念、思路、特點
中間件(Middleware):在OS內核、設備驅動程序和應用軟件之外的所有系統軟件;
中間件的基本思路:把原本屬于應用軟件層的一些通用的功能模塊抽取出來,形成獨立的一層軟件,從而為運行在其上的各個應用軟件提供一個靈活、安全、移植性好、相互通信、協同工作的平臺;
優點:實現軟件的可重用,降低應用軟件的復雜性,降低開發成本。
?
8,Ifconfig命令配置IP地址、子網掩碼
Ifconfig ?eth0 ?210.25.132.142 ?netmask ?255.255.255.0
?
9,Linux的文件類型及其字母表示
d 目錄文件;l 符號鏈接;s 套接字文件;b 塊設備文件/二進制文件;c 字符設備文件;p 命名管道文件;-普通文件
?
10,系統調用,編程接口
系統調用是指操作系統提供給用戶程序調用的一組“特殊”接口,用戶程序可以通過這組“特殊”接口來獲得操作系統內核提供的服務。例如用戶可以通過進程控制相關的系統調用來創建進程、實現進程調度、進程管理等。
在實際使用中程序員調用的通常是用戶編程接口——API
?
11,進程間通信的方式及其特點
(1)管道(Pipe)及有名管道(named pipe)
(2)信號(Signal):直接進行用戶空間進程和內核進程之間的交互,
(3)消息隊列(Messge Queue):可以實現消息的隨機查詢,比FIFO具有更大的優勢,消息又是存在于內核中的,由“隊列ID”來標識。
(4)共享內存(Shared memory):直接讀寫內存,不需要任何數據的拷貝
(5)信號量(Semaphore):用來解決進程之間的同步與互斥問題的一種進程之間通信機制
(6)套接字(Socket):
12,查看文件信息,查詢進程信息
cat :連接并顯示指定的一個和多個文件的有關信息。
cat[選項]文件1文件2…
其中的文件1、文件2為要顯示的多個文件
13,修改文件主,文件組,文件操作權限
chmod :改變文件的訪問權限。具體看書
14,文件的復制、刪除、移動、改名
cp:將給出的文件或目錄復制到另一文件或目錄中。
cp:cp [選項] 源文件或目錄 目標文件或目錄
mv:為文件或目錄改名或將文件由一個目錄移入另一個目錄中。
mv [選項] 源文件或目錄 目標文件或目錄 ?
rm:刪除一個目錄中的一個或多個文件或目錄。
rm [選項] 文件或目錄
chown:修改文件所有者和組別。
chown [選項]...文件所有者[所有者組名] 文件
其中的文件所有者為修改后的文件所有者。
chgrp:改變文件的組所有權。
chgrp:chgrp [選項]... 文件所有組 文件
其中的文件所有組為改變后的文件組擁有者。
chmod :改變文件的訪問權限。
chmod [選項]…符號權限[符號權限]…文件
chmod [選項] …八進制權限 文件…
?
15,打包命令,壓縮命令
壓縮打包相關命令
bzip2:.bz2文件的壓縮(或解壓)程序
bzip2[選項] 壓縮(解壓縮)的文件名
bunzip2:.bz2文件的解壓縮程序
bunzip2[選項] .bz2壓縮文件
bzip2recover:用來修復損壞的.bz2文件
bzip2recover .bz2壓縮文件
gzip:.gz文件的壓縮程序
gzip [選項] 壓縮(解壓縮)的文件名
gunzip:解壓被gzip壓縮過的文件
gunzip [選項] .gz文件名
unzip:解壓winzip壓縮的.zip文件
unzip [選項] .zip壓縮文件
compress:早期的壓縮或解壓程序(壓縮后文件名為.Z)
compress [選項] 文件
tar:對文件目錄進行打包或解包
tar [選項] [打包后文件名]文件目錄列表
?
16,文件鎖及其編程操作
文件鎖包括建議性鎖和強制性鎖。建議性鎖要求每個上鎖文件的進程都要檢查是否有鎖存在,并且尊重已有的鎖。在一般情況下,內核和系統都不使用建議性鎖。強制性鎖是由內核執行的鎖,當一個文件被上鎖進行寫入操作的時候,內核將阻止其他任何文件對其進行讀寫操作。采用強制性鎖對性能的影響很大,每次讀寫操作都必須檢查是否有鎖存在。
?
17,I/O處理的模型
阻塞I/O模型:在這種模型下,若所調用的I/O函數沒有完成相關的功能,則會使進程掛起,直到相關數據到達才會返回。如常見對管道設備、終端設備和網絡設備進行讀寫時經常會出現這種情況。
· ?非阻塞模型:在這種模型下,當請求的I/O操作不能完成時,則不讓進程睡眠,而且立即返回。非阻塞I/O使用戶可以調用不會阻塞的I/O操作,如open()、write()和read()。如果該操作不能完成,則會立即返回出錯(例如:打不開文件)或者返回0(例如:在緩沖區中沒有數據可以讀取或者沒空間可以寫入數據)。
· ?I/O多路轉接模型:在這種模型下,如果請求的I/O操作阻塞,且它不是真正阻塞I/O,而是讓其中的一個函數等待,在這期間,I/O還能進行其他操作。如本節要介紹的select()和poll函數(),就是屬于這種模型。
· ?信號驅動I/O模型:在這種模型下,通過安裝一個信號處理程序,系統可以自動捕獲特定信號的到來,從而啟動I/O。這是由內核通知用戶何時可以啟動一個I/O操作決定的。
· ?異步I/O模型:在這種模型下,當一個描述符已準備好,可以啟動I/O時,進程會通知內核。現在,并不是所有的系統都支持這種模型。
?
18,串口的三種模式
規范模式,非規范模式,原始模式
19,串口配置的流程
1.保存原先串口配置2.激活選項3.設置波特率4.設置字符大小5.設置奇偶校驗位6.設置停止位7.設置最少字符和等待時間8.清除串口緩沖9.激活配置
20,進程的概念、狀態、分段
進程是一個程序的一次執行的過程,同時也是資源分配的最小單元。
一個進程應該包括:
??程序的代碼;
??程序的數據;
??PC中的值,用來指示下一條將運行的指令;
??一組通用的寄存器的當前值,堆、棧;
??一組系統資源(如打開的文件)
總之,進程包含了正在運行的一個程序的所有狀態信息。
執行態:該進程正在運行,即進程正在占用CPU。
就緒態:進程已經具備執行的一切條件,正在等待分配CPU的處理時間片。
等待態:進程不能使用CPU,若等待事件發生(等待的資源分配到)則可將其喚醒。
Linux中的進程包含3個段,分別為“數據段”、“代碼段”和“堆棧段”。
?
21,exit()和_exit()的聯系和區別
exit()和_exit()函數都是用來終止進程的。
_exit()函數的作用是:直接使進程停止運行,清除其使用的內存空間,并清除其在內核中的各種數據結構;exit()函數則在這些基礎上做了一些包裝,在執行退出之前加了若干道工序。exit()函數與_exit()函數最大的區別就在于exit()函數在調用exit系統之前要檢查文件的打開情況,把文件緩沖區中的內容寫回文件,就是圖中的“清理I/O緩沖”一項。
由于在Linux的標準函數庫中,有一種被稱作“緩沖I/O(buffered I/O)”操作,其特征就是對應每一個打開的文件,在內存中都有一片緩沖區。每次讀文件時,會連續讀出若干條記錄,這樣在下次讀文件時就可以直接從內存的緩沖區中讀取;同樣,每次寫文件的時候,也僅僅是寫入內存中的緩沖區,等滿足了一定的條件(如達到一定數量或遇到特定字符等),再將緩沖區中的內容一次性寫入文件。若想保證數據的完整性,就一定要使用exit()函數
?
22,守護進程的編寫步驟
23,守護進程的出錯處理
一種通用的辦法是使用syslog服務,將程序中的出錯信息輸入到系統日志文件中,從而可以直觀地看到程序的問題所在。
?
24,管道的概念和特點
所謂管道即連接兩個任務之間的一個打開的共享文件,專用于任務之間的數據通信;
管道是基于文件描述符的通信方式,當一個管道建立時,它會創建兩個文件描述符fds[0]和fds[1],其中fds[0]固定用于讀管道,而fd[1]固定用于寫管道,這樣就構成了一個半雙工的通道。
?
25,信號的生命期
一個完整的信號生命周期可以分為3個重要階段,這3個階段由4個重要事件來刻畫的:信號產生、信號在進程中注冊、信號在進程中注銷、執行信號處理函數
26,用戶進程對信號的處理方式
信號處理的主要方法有兩種,一種是使用簡單的signal()函數,另一種是使用信號集函數組。
27,信號的編程、
249-250頁
28,信號量的概念和使用步驟
信號量是用來解決進程之間的同步與互斥問題的一種進程之間通信機制,包括一個稱為信號量的變量和在該信號量下等待資源的進程等待隊列,以及對信號量進行的兩個原子操作(PV操作)。
信號量的使用:
?
第一步:創建信號量或獲得在系統已存在的信號量,此時需要調用semget()函數。不同進程通過使用同一個信號量鍵值來獲得同一個信號量。
?
第二步:初始化信號量,此時使用semctl()函數的SETVAL操作。當使用二維信號量時,通常將信號量初始化為1。
?
第三步:進行信號量的PV操作,此時調用semop()函數。這一步是實現進程之間的同步和互斥的核心工作部分。
?
第四步:如果不需要信號量,則從系統中刪除它,此時使用semclt()函數的IPC_RMID操作。此時需要注意,在程序中不應該出現對已經被刪除的信號量的操作。
?
29,共享內存的概念和使用步驟
共享內存是一種最為高效的進程間通信方式。因為進程可以直接讀寫內存,不需要任何數據的拷貝。為了在多個進程間交換信息,內核專門留出了一塊內存區。這段內存區可以由需要訪問的進程將其映射到自己的私有地址空間。因此,進程就可以直接讀寫這一內存區而不需要進行數據的拷貝,從而大大提高了效率。
共享內存的實現分為兩個步驟,
?
第一步是創建共享內存,這里用到的函數是shmget(),也就是從內存中獲得一段共享內存區域。
?
第二步映射共享內存,也就是把這段創建的共享內存映射到具體的進程空間中,這里使用的函數是shmat()。
?
30,消息隊列的概念和使用步驟
消息隊列就是一些消息的列表。用戶可以從消息隊列中添加消息和讀取消息等,可以實現消息的隨機查詢,消息又是存在于內核中的,由“隊列ID”來標識。
消息隊列的實現包括
?
創建或打開消息隊列、
添加消息、
讀取消息
控制消息隊列
?
這四種操作。
?
31,消息隊列的編程
268頁
32,C語言的位操作
33,寫出Linux系統的信號處理函數singal的原型,并對該函數進行解釋
該函數原型整體指向了一個無返回值并且帶一個整型參數的函數指針
34,什么是交叉編譯?什么是交叉調試?
所謂交叉編譯就是在一個平臺上生成可以在另一個平臺上執行的代碼。嵌入式的交叉編譯也包括交叉編譯、交叉鏈接等過程
交叉調試是宿主機和目標機之間進行的交叉調試,調試器依然運行在宿主機的通用操作系統上,但被調試的進程運行在特定的硬件平臺的嵌入式中,調試器和被調試進程通過串口或者網絡進行通信。
?
35,什么是優先級反轉?如何應對優先級反轉?
優先級翻轉是當一個高優先級任務通過信號量機制訪問共享資源時,該信號量已被一低優先級任務占有,因此造成高優先級任務被許多具有較低優先級任務阻塞,實時性難以得到保證。
解決優先級翻轉問題有優先級天花板(priority?ceiling)和優先級繼承(priority?inheritance)兩種辦法。(來自百度)
1)單調速率調度(Rate Monotonic Scheduling,RMS) 算法;RMS是一種靜態優先級調度算法,也是最常用的一種確定任務優先級的算法;
思路:單位時間內任務被執行的次數越多,優先級越高。即任務的周期越短,優先級越高。
2)最早期限優先(Earliest Deadline First, EDF) 調度算法:EDF是一種動態優先級調度算法,也是性能最好的一種調度算法;
基本思路:對時間期限最近的任務,分配最高的優先級。
?
總結
以上是生活随笔為你收集整理的南京工程学院 嵌入式linux 复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南京工程学院 Dsp复习
- 下一篇: 南京工程学院 数据库复习(数据库系统概论