環境管理_嵌入式linux開發環境的搭建_第1頁
環境管理_嵌入式linux開發環境的搭建_第2頁
環境管理_嵌入式linux開發環境的搭建_第3頁
環境管理_嵌入式linux開發環境的搭建_第4頁
環境管理_嵌入式linux開發環境的搭建_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

www embedu org 本章的要求 第5章 嵌入式Linux開發環境的搭建掌握嵌入式交叉編譯環境的搭建掌握嵌入式主機通信環境的配置學會使用交叉編譯工具鏈學會配置Linux下的minicom和Windows下的超級終端學會在Linux下和Windows下配置TFTP服務學會配置NFS服務學會編譯Linux內核學會搭建Linux的根文件系統熟悉嵌入式Linux的內核相關代碼的分布情況掌握Bootloader的原理了解U Boot的代碼結構和移植 www embedu org 本章的主要內容 5 1嵌入式開發環境的搭建5 2U Boot移植5 3實驗內容 創建Linux內核和文件系統 www embedu org 5 1嵌入式開發環境的搭建 www embedu org 嵌入式交叉編譯環境的搭建 1 搭建交叉編譯環境是嵌入式開發的第一步 也是必備一步 搭建交叉編譯環境的方法很多 不同的體系結構 不同的操作內容甚至是不同版本的內核 都會用到不同的交叉編譯器 交叉編譯器完整的安裝一般涉及到多個軟件的安裝 讀者可以從ftp gcc gnu org pub 下載 包括binutils gcc glibc等軟件 其中 binutils主要用于生成一些輔助工具 如objdump as ld等 gcc是用來生成交叉編譯器的 主要生成arm linux gcc交叉編譯工具 應該說 生成此工具后已經搭建起了交叉編譯環境 可以編譯Linux內核了 但由于沒有提供標準用戶函數庫 用戶程序還無法編譯 glibc主要是提供用戶程序所使用的一些基本的函數庫 這樣 交叉編譯環境就完全搭建起來了 www embedu org 嵌入式交叉編譯環境的搭建 2 第1步 取得Binutils GCC Glibc源碼 第2步 配置并編譯Binutils取得我們所需要的匯編和連接程序 第3步 配置并編譯GCC源碼生成GCC編譯器 一般是C編譯器首先生成 然后以這個為基礎在結合下一步生成的Glibc的C函數庫 再編譯生成其它編譯器 第4步 配置Glibc并編譯生成Glibc的C函數庫 第5步 再次配置和編譯GCC源碼 生成其它語言的編譯器 如C 編譯器等 www embedu org 超級終端的使用 www embedu org minicom的使用 1 鍵入 ctrl AZ 鍵入 ctrl AO 鍵入 O www embedu org minicom的使用 2 鍵入 A 鍵入 E www embedu org minicom的使用 3 www embedu org Linux下tftp服務配置 1 root localhosttftpboot vim etc xinetd d tftp default off description Thetftpserverservesfilesusingthetrivialfiletransfer protocol Thetftpprotocolisoftenusedtobootdiskless workstations downloadconfigurationfilestonetwork awareprinters andtostarttheinstallationprocessforsomeoperatingsystems servicetftp socket type dgram 使用數據報套接字 protocol udp 使用UDP協議 wait yes 允許等待 user root 用戶 server usr sbin in tftpd 服務程序 server args s tftpboot 服務器端的根目錄 disable no 使能 per source 11cps 1002flags IPv4 www embedu org Linux下tftp服務配置 2 root localhosttftpboot servicexinetdrestart 或者使用 etc init d xinetdrestart 而且因發行版的不同具體路徑會有所不同 關閉xinetd 確定 啟動xinetd 確定 root localhosttftpboot netstat au greptftpActiveInternetconnections serversandestablished ProtoRecv QSend QLocalAddressForeignAddressStateudp00 tftp tftpboot0 x30200000zImageTFTPfromserver192 168 1 1 ourIPaddressis192 168 1 100Filename zImage Loadaddress 0 x30200000Loading doneBytestransferred 881988 d7544hex www embedu org Windows下tftp服務 tftpd32 配置 www embedu org 串口下載 使用DNW工具 串口配置 下載界面 啟動Bootloader www embedu org 內核配置 1 makemenuconfig 處理器選擇 www embedu org 內核配置 2 啟動選項 串口設置 退出并保存 www embedu org 建立依賴關系 由于內核源碼樹中的大多數文件都與一些頭文件有依賴關系 因此要順利建立內核 內核源碼樹中的每個Makefile都必須知道這些依賴關系 建立依賴關系通常在第一次編譯內核的時候 或者源碼目錄樹的結構發生變化的時候 進行 它會在內核源碼樹中每個子目錄產生一個 depend 文件 運行 makedep 即可 在編譯linux2 6版本的內核通常不需要這個過程 直接輸入 make 即可 www embedu org 創建內核鏡像 建立內核可以使用 make makezImage 或 makebzImage 這里建立的為壓縮的內核映像 通常在Linux中 內核映像分為壓縮的內核映像和未壓縮的內核映像 其中 壓縮的內核映像通常名為zImage 位于 arch ARCH boot 目錄中 而未壓縮的內核映像通常名為vmlinux 位于源碼樹的根目錄中 www embedu org Linux內核源碼目錄結構 include子目錄包含了建立內核代碼時所需的大部分包含文件 這個模塊利用其他模塊重建內核 init子目錄包含了內核的初始化代碼 這里的代碼是內核工作的起始入口 arch子目錄包含了所有處理器體系結構特定的內核代碼 如 arm i386 alpha drivers子目錄包含了內核中所有的設備驅動程序 如塊設備和SCSI設備 fs子目錄包含了所有的文件系統的代碼 如 ext2 vfat等 net子目錄包含了內核的網絡相關代碼 mm子目錄包含了所有內存管理代碼 ipc子目錄包含了進程間通信代碼 kernel子目錄包含了內核核心代碼 www embedu org 為什么需要文件系統 www embedu org 嵌入式文件系統 嵌入式Linux也支持多種文件系統 雖然在嵌入式中 由于資源受限的原因 它的文件系統和PC機Linux的文件系統有較大的區別 但是 它們的總體架構是一樣的 都是采用目錄樹的結構 在嵌入式中常見的文件系統有cramfs romfs jffs yaffs等 cramfs文件系統是一種經過壓縮的 極為簡單的只讀文件系統 因此非常適合嵌入式系統 www embedu org busybox busybox是構造文件系統最常用的軟件工具包 它被非常形象地稱為嵌入式Linux系統中的 瑞士軍刀 因為它將許多常用的Linux命令和工具結合到了一個單獨的可執行程序 busybox 中 雖然與相應的GNU工具比較起來 busybox所提供的功能和參數略少 但在比較小的系統 例如啟動盤 或者嵌入式系統中已經足夠了 busybox在設計上就充分考慮了硬件資源受限的特殊工作環境 它采用一種很巧妙的辦法減少自己的體積 所有的命令都通過 插件 的方式集中到一個可執行文件中 在實際應用過程中通過不同的符號鏈接來確定到底要執行哪個操作 采用單一執行文件的方式最大限度地共享了程序代碼 甚至連文件頭 內存中的程序控制塊等其他系統資源都共享了 對于資源比較緊張的系統來說 真是最合適不過了 在busybox的編譯過程中 可以非常方便地加減它的 插件 最后的符號鏈接也可以由編譯系統自動生成 www embedu org 使用busybox創建文件系統 1 root localhostfs2410 tarjxvfbusybox 1 00 tar bz2 root localhostfs2410 cdbusybox 1 00 root localhostbusybox 1 00 makedefconfig 首先進行默認配置 root localhostbusybox 1 00 makemenuconfig www embedu org 使用busybox創建文件系統 2 make makeinstallPREFIX home david fs2410 cramfs root localhostcramfs lsbinlinuxrcsbinusr root localhostcramfs mkdirmntrootvartmpprocbootetclib root localhostcramfs mkdir var lock log mail run spool 如果busybox是動態編譯的 即在配置busybox時沒選中靜態編譯 則把所需的交叉編譯的動態鏈接庫文件復制到lib目錄中 接下來 需要創建一些重要文件 首先要創建 etc inittab和 etc fstab文件 inittab是Linux啟動之后第一個被訪問的腳本文件 而fstab文件是定義了文件系統的各個 掛接點 需要與實際的系統相配合 接下來要創建用戶和用戶組文件 www embedu org 創建文件系統映像 root localhostfs2410 mkdircramfs root localhostfs2410 mountfs2410 cramgscramfs oloop root localhostfs2410 lscramfsbindevetchomeliblinuxrcprocQtopiaramdisksbintestshelltmpusrvar root localhostfs2410 mkdirbackup cramfs root localhostfs2410 tarcvfbackup cramfs tarcramfs root localhostfs2410 mvbackup cramfs tarbackup cramfs root localhostfs2410 umountcramfs root localhostfs2410 cdbackup cramfs root localhostbackup cramfs tarzvfbackup cramfs tar root localhostbackup cramfs rmbackup cramfs tar 因為cramfs文件系統是只讀的 所以不能在這個掛載目錄下直接進行修改 因此需要將文件系統中的內容復制到另一個目錄中 root localhostfs2410 cp hellobackup cramfs cramfs root localhostfs2410 mkcramfsbackup cramfs cramfs new cramfs www embedu org NFS文件系統 1 NFS為NetworkFileSystem的簡稱 最早是由Sun公司提出發展起來的 其目的就是讓不同的機器 不同的操作系統之間通過網絡可以彼此共享文件 NFS可以讓不同的主機通過網絡將遠端的NFS服務器共享出來的文件安裝到自己的系統中 從客戶端看來 使用NFS的遠端文件就像是使用本地文件一樣 在嵌入式中使用NFS會使應用程序的開發變得十分方便 并且不用反復地進行燒寫映像文件 NFS的使用分為服務端和客戶端 其中服務端是提供要共享的文件而客戶端則通過掛載 mount 這一動作來實現對共享文件的訪問操作 下面主要介紹NFS服務端的使用 在嵌入式開發中 通常NFS服務端在宿主機上運行 而客戶端在目標板上運行 www embedu org NFS文件系統 2 NFS服務端是通過讀入它的配置文件 etc exports 來決定所共享的文件目錄的 在這個配置文件中 每一行都代表一項要共享的文件目錄以及所指定的客戶端對它的操作權限 客戶端可以根據相應的權限 對該目錄下的所有目錄文件進行訪問 共享的目錄 客戶端主機名稱或IP 參數1 參數2 在這里 主機名或IP是可供共享的客戶端主機名或IP 若對所有的IP都可以訪問 則可用 表示 這里的參數有很多種組合方式 www embedu org NFS文件系統 3 root localhostfs cat etc exports root workplace192 168 2 rw no root squash root localhostfs serviceportmapstart啟動portmap 確定 root localhostfs servicenfsstart啟動NFS服務 確定 關掉NFS配額 確定 啟動NFS守護進程 確定 啟動NFSmountd 確定 www embedu org 其它命令 exportfs命令可以重新掃描 etc exports 使用戶在修改了 etc exports 配置文件之后不需要每次重啟NFS服務 showmount命令用于顯示當前的掛載情況 www embedu org 5 2U Boot移植 www embedu org Bootloader介紹 簡單地說 Bootloader就是在操作系統內核運行之前運行的一段程序 它類似于PC機中的BIOS程序 通過這段程序 可以完成硬件設備的初始化 并建立內存空間的映射關系 從而將系統的軟硬件環境帶到一個合適的狀態 為最終加載系統內核做好準備 通常 Bootloader比較依賴于硬件平臺 特別是在嵌入式系統中 更為如此 因此 在嵌入式世界里建立一個通用的Bootloader是一件比較困難的事情 www embedu org Bootloader與哪些相關 Bootloader所支持的CPU和嵌入式開發板Bootloader的存儲位置Bootloader的啟動過程分為單階段和多階段兩種 通常多階段的Bootloader能提供更為復雜的功能 以及更好的可移植性 Bootloader的操作模式Bootloader與主機之間進行文件傳輸所用的通信設備及協議 最常見的情況就是 目標機上的Bootloader通過串口與主機之間進行文件傳輸 傳輸協議通常是xmodem ymodem zmodem等 但是 串口傳輸的速度是有限的 因此通過以太網連接并借助TFTP等一些協議來下載文件是個更好的選擇 www embedu org Bootloader啟動流程 stage1 基本的硬件初始化 包括屏蔽所有的中斷 設置CPU的速度和時鐘頻率 RAM初始化 初始化外圍設備 關閉CPU內部指令和數據cache等 為加載stage2準備RAM空間 通常為了獲得更快的執行速度 通常把stage2加載到RAM空間中來執行 因此必須為加載Bootloader的stage2準備好一段可用的RAM空間 拷貝stage2到RAM中 在這里要確定兩點 stage2的可執行映像在固態存儲設備的存放起始地址和終止地址 RAM空間的起始地址 設置堆棧指針sp 這是為執行stage2的C語言代碼做好準備 www embedu org Bootloader啟動流程 stage2 用匯編語言跳轉到main入口函數由于stage2的代碼通常用C語言來實現 目的是實現更復雜的功能和取得更好的代碼可讀性和可移植性 但是與普通C語言應用程序不同的是 在編譯和鏈接Bootloader這樣的程序時 不能使用glibc庫中的任何支持函數 初始化本階段要使用到的硬件設備 包括初始化串口 初始化計時器等 在初始化這些設備之前 可以輸出一些打印信息 檢測系統的內存映射 所謂內存映射就是指在整個4GB物理地址空間中指出哪些地址范圍被分配用來尋址系統的內存 加載內核映像和根文件系統映像 這里包括規劃內存占用的布局和從Flash上拷貝數據 設置內核的啟動參數 www embedu org U Boot特點 開放源碼 支持多種嵌入式操作系統內核 如Linux NetBSD VxWorks QNX RTEMS ARTOS LynxOS 支持多個處理器系列 如PowerPC ARM x86 MIPS XScale 較高的可靠性和穩定性 高度靈活的功能設置 適合U Boot調試 操作系統不同引導要求和產品發布等 豐富的設備驅動源碼 如串口 以太網 SDRAM FLASH LCD NVRAM EEPROM RTC 鍵盤等 較為豐富的開發調試文檔與強大的網絡技術支持 www embedu org U Boot功能 系統引導 支持NFS掛載 RAMDISK 壓縮或非壓縮 形式的根文件系統 支持NFS掛載 并從FLASH中引導壓縮或非壓縮系統內核 基本輔助功能 強大的操作系統接口功能 可靈活設置 傳遞多個關鍵參數給操作系統 適合系統在不同開發階段的調試要求與產品發布 尤其對Linux支持最為強勁 支持目標板環境參數多種存儲方式 如FLASH NVRAM EEPROM CRC32校驗 可校驗FLASH中內核 RAMDISK映像文件是否完好 設備驅動 串口 SDRAM FLASH 以太網 LCD NVRAM EEPROM 鍵盤 USB PCMCIA PCI RTC等驅動支持 上電自檢功能 SDRAM FLASH大小自動檢測 SDRAM故障檢測 CPU型號 特殊功能 XIP內核引導 www embedu org U Boot源碼結構 1 board 和一些已有開發板有關的代碼 比如makefile和U Boot lds等都和具體開發板的硬件和地址分配有關 common 與體系結構無關的代碼 用來實現各種命令的C程序 cpu 包含CPU相關代碼 其中的子目錄都是以U BOOT所支持的CPU為名 比如有子目錄arm926ejs mips mpc8260和nios等 每個特定的子目錄中都包括cpu c和interrupt c start S等 其中cpu c初始化CPU 設置指令Cache和數據Cache等 interrupt c設置系統的各種中斷和異常 比如快速中斷 開關中斷 時鐘中斷 軟件中斷 預取中止和未定義指令等 匯編代碼文件start S是U BOOT啟動時執行的第一個文件 它主要是設置系統堆棧和工作方式 為進入C程序奠定基礎 disk disk驅動的分區相關代碼 doc 文檔 www embedu org U Boot源碼結構 2 drivers 通用設備驅動程序 比如各種網卡 支持CFI的Flash 串口和USB總線等 fs 支持文件系統的文件 U BOOT現在支持cramfs fat fdos jffs2和registerfs等 include 頭文件 還有對各種硬件平臺支持的匯編文件 系統的配置文件和對文件系統支持的文件 net 與網絡有關的代碼 BOOTP協議 TFTP協議 RARP協議和NFS文件系統的實現 lib arm 與ARM體系結構相關的代碼 tools 創建S Record格式文件和U BOOTimages的工具 www embedu org U Boot重要代碼 cpu arm920t start Sinterrupts

溫馨提示

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

評論

0/150

提交評論