嵌入式系統設計與開發-基于ARM Cortex-A9和Linux 課件 第08章 嵌入式Linux操作系統_第1頁
嵌入式系統設計與開發-基于ARM Cortex-A9和Linux 課件 第08章 嵌入式Linux操作系統_第2頁
嵌入式系統設計與開發-基于ARM Cortex-A9和Linux 課件 第08章 嵌入式Linux操作系統_第3頁
嵌入式系統設計與開發-基于ARM Cortex-A9和Linux 課件 第08章 嵌入式Linux操作系統_第4頁
嵌入式系統設計與開發-基于ARM Cortex-A9和Linux 課件 第08章 嵌入式Linux操作系統_第5頁
已閱讀5頁,還剩151頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第八章嵌入式Linux操作系統北京航空航天大學電工電子中心2025年4月提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗GNU的歷史理查德?斯托曼自由軟件

GNU的含義

GPLGNU/Linux什么是GNU(GNUisNotUnix)Unix:肯?湯普森、丹尼斯?里奇

AIX、BSD、HP-UX、solarisMinix:安德魯?坦尼鮑姆《操作系統設計與實現》Linux1991年,芬蘭赫爾辛基大學linusTorvaldsLinux的歷史高端服務器領域獲得IBM、戴爾、惠普、甲骨文等廠商支持桌面應用領域嵌入式應用領域源碼公開、可裁減Linux的應用領域Linux是一個功能強大的完備的操作系統符合POSIX標準包含完整的操作系統組件文本編輯器、高級語言編譯器、應用程序、X-Window圖形用戶接口、網絡服務器組件Linux的組成SlackwareRedhat支持的硬件平臺多、優秀的安裝接口、獨特的rpm安裝方式、豐富的軟件、方便的系統管理接口、完備的文檔fedoracore&fedoraSuSE常見Linux發行版Debian紅旗LinuxXteamubuntuubuntuKylin(優麒麟)常見Linux發行版(續)發布openEuler商業發行版的廠商發布openEuler商業發行版的廠商安裝方式直接在硬盤上安裝用虛擬機vmware安裝Linux的安裝Linux的shellsh(Bourneshell,1979,Unix版本7)csh(Cshell)ksh(Kornshell,商業軟件,sh的增強版)tcsh(csh是指向tcsh的一個鏈接)bashsh兼容,包含csh和ksh最有用的功能,具有命令歷史記憶功能,有作業控制功能,有shell程序設計能力常用的shellshell的使用使用通配符HOME:用戶主目錄PATH:系統路徑TERM:終端類型UID:用戶IDPWD:當前目錄PS1:主提示符PS2:輔助提示符Shell環境變量tab鍵補全命令↑↓調用歷史命令historyhistoryn

!n命令別名

aliaslll=‘ls–l-i’Shell使用技巧Linux文件系統windows文件系統:fat32、ntfs分區、盤符Linux文件系統:ext2、ext3、reiserFS等目錄樹bin:普通用戶常用例程,如datedev:存放系統中所有設備名home:普通用戶的主目錄lib:內核和應用程序所用的庫文件和模塊root:根用戶的主目錄usr:用戶安裝的應用程序boot:Linux內核、開機配置文件etc:與系統硬件和軟件有關的配置文件media:光盤、軟盤掛載點mnt:其他臨時分區的掛接點proc:內存文件系統sbin:根用戶用于系統管理的可執行文件Linux根目錄的子目錄Linux的啟動和關閉Linux的在線幫助系統ls:獲取目錄中的文件列表(文件權限)mkdir、rmdir:新建目錄、刪除目錄cd:切換目錄(cd..cd/cd~cd-)pwd:查看當前目錄touch:新建文件/刷新文件時間mv:文件改名/移動cp:復制文件rm:刪除文件tmp:臨時文件var:各種服務器的數據文件、日志、假脫機打印系統的打印隊列數據等基本的shell命令who:確定系統當前用戶的信息ps:列出系統當前進程ps–aux//列出系統所有進程pstree:列出系統進程樹top:動態顯示系統當前進程date:顯示和設置系統當前日期和時間grep:查找文本中的字符串clear:清屏echo:回顯命令find:文件搜素命令wc:文字統計工具bc:計算器工具head、tail:顯示文件的前幾行和后幾行基本的shell命令(續)壓縮/解壓命令常用網絡命令Ping—檢查主機的連通性ifconfig命令遠程登錄文件傳輸vi簡介vi的兩種操作模式進入和退出vivi的操作模式切換刪除文本光標移動光標按行移動光標按單詞移動光標按字符移動翻頁和查找文本替換全局替換移動和復制移動和復制文本塊撤銷和重復命令嵌入式LinuxμCLinuxμCLinux是專門針對沒有MMU的處理器而設計的,即μCLinux無法使用處理器的虛擬內存管理技術。采用實存儲器管理策略,通過地址總線對物理內存進行直接訪問。所有程序中訪問的地址都是實際的物理地址,所有的進程都在一個運行空間中運行(包括內核進程),在操作系統不提供保護的情況下,必須小心設計程序和數據空間,以免引起應用程序進程甚至是內核的崩潰。RTLinuxRT-Linux是通過底層對Linux實施改造的產物。通過在Linux內核與硬件中斷之間增加一個精巧的可搶先的實時內核,把標準的Linux內核作為實時內核的一個進程與用戶進程一起調度,標準的Linux內核的優先級最低,可以被實時內核進程搶占。正常的Linux進程仍可以在Linux內核上運行,這樣既可以使用標準分時操作系統即Linux的各種服務,又能提供最低延時的實時環境。

紅旗嵌入式Linux紅旗嵌入式Linux是由北京中科紅旗軟件技術有限公推出,是國內做得較好的一款嵌入式Linux操作系統。這款嵌入式Linux有以下特點:內核精簡,適用于多種常見的嵌入式CPU;提供完善的嵌入式GUI和嵌入式X-Windows;提供嵌入式瀏覽器、郵件程序和多媒體播放程序;提供完善的開發工具和平臺。提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗運行比內存還要大的程序;先加載部分程序運行,縮短了程序啟動的時間;可以使多個程序同時駐留在內存中提高CPU的利用率;可以運行重定位程序。即程序可以放于內存中的任何一處,旦可以在執行過程中移動;寫機器無關的代碼。程序不必事先約定機器的配置情況;減輕程序員分配和管理內存資源的負擔;可以進行內存共享;提供內存保護,進程不能以非授權方式訪問或修改頁面,內核保護單個進程的數據和代碼以防止其他進程修改它們。否則,用戶程序可能會偶然(或惡意)地破壞內核或其他用戶程序。Linux操作系統的內存管理功能標準Linux和uCLinux內存映射μCLinux仍然采用存儲器的分頁管理。系統啟動時對存儲器分頁,加載應用程序對程序分頁加載。uCLinx采用實存儲器管理。μCLinux系統對內存的訪問是直接的(它對地址的訪問不經MMU,而是直接送到地址線上輸出),所有程序訪問的地址是物理地址。那些比物理內存還大的程序將無法執行。μCLinux將整個物理內存劃分成為4KB的頁面。μCLinux操作系統對內存空間沒有保護,各個進程沒有獨立的地址轉換表,實際上共享一個運行空間。從易用性這一點來說,uCLinx的內存管理是一種倒退,退回到了UNIX早期或是DOS系統時代。開發人員不得不參與系統的內存管理。從編譯內核開始,開發人員必須告訴系統這塊開發板到底擁有多少內存,從而系統將在啟動的初始化階段對內存進行分頁,并且標記已使用的和未使用的內存。系統將在運行應用時使用這些分頁內存。雖然μCLinux的內存管理與標準Linux系統相比功能相差很多,但應該說這是嵌入式設備的選擇。在嵌入式設備中,由于成本等敏感因素的影響,這決定了系統沒有足夠的硬件支持實現虛擬存儲管理技術。從嵌入式設備實現的功能來看,嵌入式設備通常在某一特定的環境下運行,只實現特定的功能,其功能相對簡單,內存管理的要求完全可以由開發人員考慮。uCLinux內存管理提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗進程是一個正在執行的程序的實例,由以下元素組成程序的當前上下文,程序當前的執行狀態程序的當前執行目錄程序訪問的文件和目錄程序的訪問權限內存以及其他分配給進程的系統資源Linux進程模型和進程標識進程最重要的屬性是進程號(PID),以及父進程號(PPID)。一個進程有唯一的進程號,如果一個進程創建了一個子進程,那么它的進程號就是子進程的父進程號。1號進程(init):負責引導系統、啟動守護進程以及運行其他必要的程序。進程標識取得進程號fork系統調用fork系統調用fork系統調用fork系統調用fork系統調用分析Linux進程調度Linux操作系統有三種進程調度策略:分時調度策略(SCHED_OTHER)。SCHED_OTHE是面向普通進程的時間片輪轉策略。采用該策略時,系統為處于TASK_RUNNING狀態的每個進程分配一個時間片。當時間片用完時,進程調度程序再選擇下一個優先級相對較高的進程,并授予CPU使用權。先到先服務的實時調度策略。SCHED_FIFO策略適用于對響應時間要求比較高,運行所需時間比較短的實時進程。采用該策略時,各實時進程按其進入可運行隊列的順序依次獲得CPU。除了因等待某個事件主動放棄CPU,或者出現優先級更高的進程而剝奪其CPU之外,該進程將一直占用CPU運行。時間片輪轉的實時調度策略(SCHED_RR),SCHED_RR策略適用于對響應時間要求比較高,運行所需時間比較長的實時進程。采用該策略時,各實時進程按時間片輪流使用CPU。當一個運行進程的時間片用完后,進程調度程序停止其運行并將其置于可運行隊列的末尾。RT-Linux的進程管理RT-Linux有兩種中斷:硬中斷和軟中斷。軟中斷是常規Linux內核中斷。它的優點在于可無限制地使用Linux內核調用。硬中斷是實現實時Linux的前提。依賴于不同的系統,實時Linux下硬中斷的延時少于15μS,RT-Linux通過一個高效的、可搶占的實時調度核心來全面接管中斷,把Linux作為此實時核心的一個優先級最低的進程運行。當有實時任務需要處理時,RT-Linux運行實時任務;無實時任務時,RT-Linux運行Linux的非實時進程。uCLinux的進程管理μCLinux的進程調度沿用了Linux的傳統,系統每隔一定時間掛起進程,同時系統產生快速和周期性的時鐘計時中斷,并通過調度函數(定時器處理函數)決定進程什么時候擁有它的時間片。然后進行相關進程切換,這是通過父進程調用fork函數生成子進程來實現的。在μCLinux下,由于μCLinux沒有MMU管理存儲器,在實現多個進程時需要實現數據保護。由于沒有MMU,系統雖然支持fork系統調用,但其實質上就是vfork。μCLinux系統fork調用完成后,要么子進程代替父進程執行(此時父進程已經sleep直到子進程調用exit退出;要么調用exee執行一個新的進程,這個時候產生可執行文件的加載,即使這個進程只是父進程的復制,這個過程也不可避免。當子進程執行exit或exec后,子進程使用wakeup把父進程喚醒,使父進程繼續往下執行。μCLinux由于沒有內存映射機制,因此其對內存的訪問是直接的,所有程序中訪問的地址都是實際的物理地址。操作系統對內存空間沒有保護,各個進程實際上共享一個運行空間。這就需要實現多進程時進行數據保護,也導致了用戶程序使用的空間可能占用到系統內核空間,這些問題在編程時都需要多加注意,否則容易導致系統崩潰。提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗線程概述線程的狀態線程的狀態遷移圖線程VS進程線程的優點線程的缺點線程同步

下面的例子驗證了2個線程是同步執行的線程的屬性線程舉例實現線程的函數創建線程退出線程合并線程線程通信

首先,線程和進程之間需要通信。其次,線程間需要通信。線間通信需要使用信號量、共享內存和消息隊列等。1.信號量信號量是一種程序設計構造。它是一種通信機制,也是一種同步機制。在計算機內,信號量是一個整型數。一個進程在信號變為0或者1的情況下推進,并且將信號量變為1或者0阻止別的進程推進。2.共享內存共享內存是為了解決線程間共享大量數據而開辟的一塊內存區域。這片內存中的任何內容,二者均可訪問。3.消息隊列消息隊列是一列具有頭和尾的消息排列。新來的消息稱為生產者,放在隊列的尾部,取走的消息稱為消費者,放在隊列的頭部。線程同步

線程同步是指線程使用共享資源時的約束管理機制。線程同步的目的要保證多線程執行下結果的確定性。鎖

睡覺與叫醒

信號量提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗Linux文件屬性文件模式訪問位控制文件操作fopen文件打開方式fclose讀寫文件freadfwrite讀取文件狀態文件定位刪除文件文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例文件舉例提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗實驗1—多線程實驗設計一個多線程的程序,使用互斥鎖和條件變量,實現線程間通信。主程序、生產者線程、消費者線程

生產者-消費者源代碼流程圖如圖所示。多線程程序包括三個模塊:主程序、生產者線程、消費者線程。

主程序包括:初始化結構體prodcon中的各個參數,創建生產者和消費者線程,等待線程結束。

生產者線程包括:不斷向共享數據區寫數據,將寫入的數據打印在屏幕上,寫1000個數據后,設置寫完標志OVER。生產者線程結束,退出。

消費者線程包括:定義讀取變量d,從共享數據區讀取數據到變量d,打印讀取的數據,判斷是否是OVER?不是表示數據沒有讀完,繼續讀。直到讀完所有的共享緩沖區數據,然后退出。生產、消費流程生產消費流程如圖所示,生產者和消費者共同操作共享數據區,操作中使用了互斥鎖。在獲得互斥鎖和釋放互斥鎖之間的代碼被鎖保護。獲得互斥鎖,即為上鎖。釋放互斥鎖,使用該鎖別的線程通過鎖即可獲得對共享數據的訪問。如果共享數據區特別大,允許運行在臨界區內運行較長的時間,使用互斥鎖即可解決生產者消費者問題。

它是一個整數的圓形緩沖區,在數據結構中被稱為環形隊列,是為了正確維護生產者消費者使用的共享數據,既不能將生產者的數據丟掉,也不會丟失消費者的數據且兩者的數據不會混亂。數據緩沖區多線程編程示例程序/i.MX6/exp/basic/02_pthread2.實驗目錄3.編譯源程序⑴

進入實驗目錄:uptech@uptech-virtual-machine:/$cd/i.MX6/exp/basic/02_pthreaduptech@uptech-virtual-machine:/i.MX6/exp/basic/02_pthread$lsMakefilepthreadpthread.cpthread.oroot@uptech-virtual-machine:/i.MX6/exp/02_pthread$⑵

清除中間代碼,重新編譯uptech@uptech-virtual-machine:/i.MX6/exp/basic/02_pthread$source/opt/poky/1.7/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabiuptech@uptech-virtual-machine:/i.MX6/exp/basic/02_pthread$makecleanrm-f../bin/pthread./pthread*.elf*.gdb*.ouptech@uptech-virtual-machine:/i.MX6/exp/basic/02_pthread$makeuptech@uptech-virtual-machine:/i.MX6/exp/basic/02_pthread$lsMakefilepthreadpthread.cpthread.ouptech@uptech-virtual-machine:/i.MX6/exp/basic/02_pthread$當前目錄下生成可執行程序pthread。⑶NFS掛載實驗目錄測試啟動i.MX6Solo/6DL嵌入式教學平臺,連好網線、串口線。通過串口終端掛載宿主機實驗目錄。設置開發板IP:192.168.88.33(默認宿主機ubuntu的IP192.168.88.22,NFS共享目錄/i.MX6)root@i.MX6dlsabresd:∽#ifconfigeth0192.168.88.33root@i.MX6dlsabresd:∽#mount-tnfs192.168.88.22:/i.MX6/mnt/進入串口終端的NFS共享實驗目錄。root@i.MX6dlsabresd:∽#cd/mnt/exp/basic/02_pthread$root@i.MX6dlsabresd:/mnt/exp/basic/02_pthread$lsMakefilepthreadpthread.cpthread.o執行程序root@i.MX6DLsabresd:/mnt/exp/basic/02_pthread$./pthread4.實驗結果提綱Linux基礎內存管理進程管理線程文件系統多線程應用程序設計實驗串行端口程序設計實驗實驗2—串行端口程序設計實驗1.實驗環境硬件:i.MX6Solo/6DL教學平臺,PC機酷睿i3以上,硬盤120GB以上,內存2GB以上。軟件:VmwareWorkstation+Yocto項目。2.實驗內容學習將多線程編程應用到串口的接收和發送程序設計中,編寫應用程序實現對ARM設備串口的讀和寫。串口程序流程圖

主程序包括:初始化互斥鎖初始化串口、打開串口、創建串口發送接收線程、等待線程結束、關閉串口。該程序是多線程的管理程序。

接收線程包括:初始化、創建并打開文件;若檢測到輸入“Esc”,則接受線程設置運行標志為假,關閉文件,退出并結束。

發送線程:由于發送線程不會自動關斷,引入一個靜態的全局變量Runing,當接收線程設置運行標志為假時,發送停止。由于發送進程也使用串口輸出,使用互斥鎖保護共享資源。延遲1秒的作用是控制超級終端顯示字符的時間間隔,讀者可以根據自己的喜好改變這一時間間隔。

有讀者會問全局變量Runing是共享資源嗎?答案是“是”。那有問什么不用互斥鎖保護共享資源呢?答案是:只有接收線程對該變量進行寫操作,因而不用保護共享資源。串口收發程序3.實驗目錄/i.MX6/exp/basic/03_tty4.編譯源程序(1)進入實驗目錄:uptech@uptech-virtual-machine:/$cd/i.MX6/exp/basic/03_ttyuptech@uptech-virtual-machine:/i.MX6/exp/basic/03_tty$lsMakefiletermterm.cterm.ouptech@uptech-virtual-machine:/i.MX6/exp/basic/03_tty$(2)清除中間代碼,重新編譯uptech@uptech-virtual-machine:/i.MX6/exp/basic/03_tty$source/opt/poky/1.7/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabiuptech@uptech-virtual-machine:/i.MX6/exp/basic/03_tty$makecleanrm-f../bin/term./term*.elf*.elf2flt*.gdb*.ouptech@uptech-virtual-machine:/i.MX6/exp/basic/03_tty$makeuptech@uptech-virtual-machine:/i.MX6/exp/basic/03_tty$lsMakefiletermterm.cterm.o當前目錄下生成可執行程序term。5.NFS掛載實驗目錄測試⑴

啟動i.MX6Solo/6DL嵌入式教學平臺,連好網線、串口線。通過串口終

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論