環(huán)境管理_嵌入式linux開發(fā)環(huán)境的搭建_第1頁
環(huán)境管理_嵌入式linux開發(fā)環(huán)境的搭建_第2頁
環(huán)境管理_嵌入式linux開發(fā)環(huán)境的搭建_第3頁
環(huán)境管理_嵌入式linux開發(fā)環(huán)境的搭建_第4頁
環(huán)境管理_嵌入式linux開發(fā)環(huán)境的搭建_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論