嵌入式系統(tǒng)開發(fā)環(huán)境的建立課件_第1頁
嵌入式系統(tǒng)開發(fā)環(huán)境的建立課件_第2頁
嵌入式系統(tǒng)開發(fā)環(huán)境的建立課件_第3頁
嵌入式系統(tǒng)開發(fā)環(huán)境的建立課件_第4頁
嵌入式系統(tǒng)開發(fā)環(huán)境的建立課件_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

armlinux系統(tǒng)開發(fā)流程1、開發(fā)目標硬件系統(tǒng)2、建立交叉編譯工具3、開發(fā)bootloader4、移植linux內核5、開發(fā)一個文件系統(tǒng)6、開發(fā)相關硬件的驅動程序7、開發(fā)上層應用程序8、燒寫bootloader、內核、文件系統(tǒng)等。armlinux系統(tǒng)開發(fā)流程1、開發(fā)目標硬件系統(tǒng)嵌入式交叉編譯環(huán)境簡介交叉編譯就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。這里說的平臺分別指的是主機平臺Host和目標平臺Target。就我們在ARM平臺上移植Linux來說,Host是一臺一般的PC機,它通過串口或網絡接口與Target通信;Target是arm-linux平臺(這里說的arm指的是平臺所使用的CPU是ARM9處理器,linux指的是運行的操作系統(tǒng)是Linux)。我們在Host上開發(fā)程序,并在這個平臺上運行交叉編譯器CrossComplier,編譯我們的程序,而由CrossComplier生成的程序將在Target上運行嵌入式交叉編譯環(huán)境簡介交叉編譯就是在一個平臺上生成另一個平臺

需要交叉編譯的原因:首先,在項目的起始階段,目標平臺尚未建立,因此需要做交叉編譯,以生成我們所需要的Bootloader以及kernel(因為Bootloader和kernel的源碼需要經過交叉編譯后才可以在目標平臺上運行);其次,當目標平臺能啟動之后,由于目標平臺上資源的限制,當我們編譯大型程序時,依然可能需要用到交叉編譯。需要交叉編譯的原因:如何建立交叉編譯工具鏈構建交叉工具鏈通常有以下3種方法:1.分步驟手工編譯分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。2.通過腳本編譯通過crosstool腳本工具來實現一次編譯生成交叉編譯工具鏈3.直接獲取交叉編譯工具鏈直接通過網上下載已經制作好的交叉編譯工具鏈。ftp:.ukftp:ftp:Linux內核代碼linux-2.6.10.tar.gzglibc庫glibc-2.3.2.tar.gz工具程序binutils-2.15.tar.bz2內核線程包glibc-linuxthreads-2.3.2.tar.gz編譯器gcc-3.3.6.tar.gz如何建立交叉編譯工具鏈構建交叉工具鏈通常有以下3種方法:ft配置開發(fā)板PXA270嵌入式系統(tǒng)的宿主機交叉編譯環(huán)境arm-linux.tar.gz提供ARM系統(tǒng)開發(fā)的交叉編譯器/usr/local/arm-linux/binvi/etc/profilepathmunge/usr/local/arm-linux/bincparm-linux.tar.gz/usr/localcd/usr/localtar-xzfarm-linux.tar.gz配置開發(fā)板PXA270嵌入式系統(tǒng)的宿主機交叉編譯環(huán)境arm-目標機與主機的通訊方式目標機與主機的通訊方式1、minicomminicom很像Windows下面的超級終端,我們利用minicom作為目標板的終端顯示視窗;通過串口控制目標板1、minicomminicom很像Windows下面的2、從菜單中選擇SerialPortSetup配置minicom1、#minicom-s2、從菜單中選擇SerialPortSetup配置min3、“A”以設置“SerialDevice”。如果使用串口1,則輸入/dev/ttyS0。如果使用串口2,則輸入/dev/ttyS1。3、“A”以設置“SerialDevice”。如果使用串口4、“E”鍵進入設置“bps/par/Bits”(波特率)界面,再按“I”以設置波特率為1152004、“E”鍵進入設置“bps/par/Bits”(波特率)界設置被保存到“/etc/minirc.dfl”設置被保存到“/etc/minirc.dfl”目標板上電后,目標板的啟動過程顯示在minicom;CTR+A+s---zmodern目標板上電后,目標板的啟動過程顯示在minicom;2NFS服務NFS服務可以使網絡上的同為Linux或Unix系統(tǒng)主機共享文件系統(tǒng)。NFS可以將遠程文件系統(tǒng)載入在本地文件系統(tǒng)下。遠程的硬盤、目錄和光驅都可以變成本地主機目錄樹中的一個子目錄。載入后與處理自己的文件系統(tǒng)一樣使用即可。不只方便,也節(jié)省了重復保存文件的空間、傳輸文件的時間及網絡帶寬。2NFS服務NFS服務可以使網絡上的同為Linux或UniNFS特點NFS系統(tǒng)也是使用C/S體系結構,就是有服務器端與客戶端服務器端提供共享的文件系統(tǒng),必須把文件系統(tǒng)輸出(export)出去客戶端則要把文件系統(tǒng)載入到自己的系統(tǒng)下使用NFS,需要在服務器端設置輸出,在客戶端設置載入NFS特點NFS系統(tǒng)也是使用C/S體系結構,就是有服務器端與NFS服務器端配置(1)關閉防火墻(2)配置共享目錄----客戶端主機IP范圍(3)主機IP(4)啟動NFS服務NFS客戶端(1)設置客戶端IP地址(2)掛載共享目錄mount-tnfs主機ip:共享目錄掛載點注意事項:關閉防火墻,主機與客戶端在同一ip段NFS服務器端配置NFS客戶端mount-tnfs主具體配置步驟服務器端1)關閉防火墻具體配置步驟具體配置步驟2)配置NFS服務器具體配置步驟2)配置NFS服務器具體配置步驟2-1)設置共享目錄和主機范圍具體配置步驟2-1)設置共享目具體配置步驟2-2)設置其他選項具體配置步驟2-2)設置其他選項具體配置步驟2-3)設置其他選項具體配置步驟2-3)設置其他選項具體配置步驟3)設置NFS服務器的IP具體配置步驟3)設置NFS具體配置步驟4)啟動NFS服務具體配置步驟4)啟動NFS服務具體配置步驟客戶端1)配置ip具體配置步驟客戶端具體配置步驟2)掛載NFS具體配置步驟2)掛載NFS/etc/exports它的基本格式是Directoryhost(權限選項、用戶映像、)Directory:表示打算共享的目錄名稱;Host:共享這個目錄的主機名稱;權限選項:定義安全選項;/etc/exports權限選項1)ro:只讀,只允許客戶機掛載這個文件系統(tǒng)為只讀模式。2)rw:明確指定共享目錄為讀/寫權限。用戶映像來限定某些用戶對NFS共享文件的使用權限no_root_squash:其他安全選項1)Insecure:以非安全端口的方式訪問,即默認用戶端口是1024或者更高,而NFS服務器默認的安全的服務器端口應該是低于1024的。2)Sync:根據請求進行同步。權限選項例:vi/etc/exports/home/ls0(rw,insecure,no_root_squash)表示共享的目錄為/home/ls,允許訪問的客戶機地址為0的主機,權限為可讀可寫(rw),非安全方式訪問(insecure),讓客戶機的根用戶在服務器上擁有根權限。例:例:vi/etc/exports/home/ls*(rw)表示共享的目錄為/home/ls,允許任意主機訪問,權限可讀可寫例:

Bootloader是什么?Bootloader,為引導加載程序,是嵌入式系統(tǒng)加電后運行的第一段代碼,相當于PC機的BIOS。Bootloader的位置:通常固化在硬件上的某個固態(tài)存儲設備上,加電后自啟動?;贏RM處理器核的CPU在復位時通常都從地址0x00000000取它的第一條指令。在這個地址處安排的就是Bootloader。Bootloader是在操作系統(tǒng)運行之前執(zhí)行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映像表,從而建立適當的系統(tǒng)軟硬件環(huán)境,為最終調用操作系統(tǒng)內核做好準備。

3BootloaderBootloader參數系統(tǒng)內核根文件系統(tǒng)從低地址到高地址方向FlashBootloader是什么?3BootloaderBoo

幾種發(fā)布的BootloaderBootloader是嚴重地依賴于硬件而實現的。每種不同體系結構的處理器都有不同的Bootloader。不過Bootloader的發(fā)展也趨于支持多種體系結構,如現在比較成熟的vivi、RedBoot和U-Boot等。ftp://ftp.denx.de/pub/u-boot/幾種發(fā)布的BootloaderBootloader是嚴重地Bootloader操作模式大多數Bootloader都有兩種不同的操作模式:“啟動加載”模式和“下載”模式。其區(qū)別對于開發(fā)人員才有意義。從最終用戶的角度看,Bootloader的作用就是用來加載操作系統(tǒng),而并不存在所謂的啟動加載模式與下載模式的區(qū)別。Bootloader操作模式大多數Bootloader都有兩1、啟動加載(Bootloading)模式 即Bootloader從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到RAM中運行,整個過程并沒有用戶的介入。 啟動加載模式是Bootloader的正常工作模式,在嵌入式產品發(fā)布的時侯,Bootloader必須工作在這種模式下。1、啟動加載(Bootloading)模式2、下載(Downloading)模式

下載方式:在這種模式下,目標機上的Bootloader將通過串口連接或網絡連接等通信手段從主機下載文件。

下載內容及存儲:主要是下載內核映像和根文件系統(tǒng)映像等。從主機下載的文件通常首先被Bootloader保存到目標機的RAM中,然后再被Bootloader寫到目標機上的FLASH類固態(tài)存儲設備中。2、下載(Downloading)模式下載模式應用場合:Bootloader的這種模式通常在第一次安裝內核與根文件系統(tǒng)時被使用;此外,以后的系統(tǒng)更新也會使用到這種工作模式。用戶應用接口:工作于這種模式下的Bootloader通常都會向它的終端用戶提供一個簡單的命令行接口。如在U-BOOT下,將出現“#”提示符;在vivi下出現“vivi>”提示符。下載模式應用場合:Bootloader的這種模式通常在第一次下載(Downloading)模式示例下載(Downloading)模式示例Bootloader啟動過程大多數BootLoader啟動都分為stage1和stage2兩大部分。依賴于處理器體系結構和板級初始化的代碼,通常都放在stage1中,用匯編語言實現而stage2則通常用C語言來實現,這樣可以實現更復雜的功能,而且代碼會具有更好的可讀性和可移植性。Bootloader啟動過程大多數BootLoaderBootLoader的stage1通常包括以下步驟(以執(zhí)行的先后順序):硬件設備初始化。為加載BootLoader的stage2準備RAM空間??截怋ootLoader的stage2到RAM空間中。設置好堆棧跳轉到stage2的C入口點。

Stage1主要工作是硬件初始化,并準備第二階段的C語言運行環(huán)境關閉處理器內部指令/數據cache等設置CPU的速度和時鐘頻率RAM初始化初始化led等為了獲得更快的執(zhí)行速度,通常把階段2的代碼加載到RAM空間中來執(zhí)行。準備RAM空間考慮的因素:階段2代碼大小、堆棧、頁大小(4KB的倍數)、安排位置等。BootLoader的stage1關閉處理器內部指令BootLoader的stage2通常包括以下步驟(以執(zhí)行的先后順序):初始化本階段要使用到的硬件設備。檢測系統(tǒng)內存映射(memorymap)。將kernel映像和根文件系統(tǒng)映像從flash上讀到RAM空間中。為內核設置啟動參數。調用內核。stage2的代碼通常用C語言來實現,以便于實現更復雜的功能和取得更好的代碼可讀性和可移植性。與普通C語言應用程序不同的是,在編譯和鏈接bootloader這樣的程序時,我們不能使用glibc庫中的任何支持函數。Stage2的主要目的是運行Linux內核,在此之前需要完成硬件和內存初始化工作。Bootloader調用Linuxkernel的方法是直接跳轉到內核的第一條指令處。在跳轉時必須滿足下列條件:1)、CPU寄存器的設置:R0為0;R1為機器類型ID;R2為啟動參數,標記列表在RAM中的起始基地址。2)、CPU模式:CPU必須設置為SVC模式,必須禁止中斷(IRQs和FIQs)。3)、MMU和Cache的設置:MMU必須關閉;指令Cache可以打開也可以關閉;數據Cache必須關閉。BootLoader的stage2BootloaderviviBootloader源碼分析vivi是韓國Mizi公司開發(fā)的Bootloader,適用于ARM9處理器。vivi有兩種工作模式,在啟動時可以選擇。在vivi啟動時,通過串行口發(fā)出如下信息:PressReturntostarttheLinuxnow,anyotherkeyforvivi按回車鍵啟動LinuxOS,按其它鍵進入vivi命令接口模式,可以使用vivi提供的命令進行一些操作。viviBootloader源碼分析vivi是韓國Mizivivi源代碼目錄結構vivi源代碼包含的目錄有:arch、Documentation、drivers、init、include、lib、scripts、test、util等10目錄,共300多個文件。各個目錄內容如下:1、arch(architecture)目錄它下面的文件為與CPU硬件相關的初始化代碼,此目錄包含了所用vivi支持的CPU。一般只包含S3C2410x的文件。2、Documentation目錄其下文件為vivi使用指南。3、drivers目錄存放的為MTD(memorytechnologydevice內存技術設備)(數據存儲媒質)設備讀寫控制文件和串行口操作文件,對串行口支持xmodem和ymodem協(xié)議。4、include目錄存放所有的頭文件,包括S3C2410微處理器的和S3C2410開發(fā)板的頭文件。vivi源代碼目錄結構vivi源代碼包含的目錄有:arch、5、init目錄該目錄下是系統(tǒng)初始化文件main.c、version.c,后者是vivi版本信息,main.c為vivi整個初始化的結構。6、lib目錄該目錄下是公共應用及接口代碼,如時鐘功能文件time.c,堆棧初始化文件heap.c等文件。7、scripts目錄該目錄存放的是系統(tǒng)配置需要的腳本文件,如menuconfig和configue文件。8、CVS目錄所有的目錄下面都有一個CVS目錄,存放的是該目錄的路徑和它的子目錄。5、init目錄vivi源代碼文件與功能結構vivi源代碼文件:1、vivi/arch/s3c2410/head.s2、一段過渡,實現循環(huán)調用,main返回后重新復位 LDR SP, DW_STACK_START MOV FP, #0 MOV A2, #0 BL MAIN MOV PC, #FLASH_BASE;main返回后重新復位3、vivi/init/main.cvivi源代碼文件與功能結構vivi源代碼文件:viviBootloader接口命令命令功能Load下載flash或RAM命令PartMTD分區(qū)操作命令param設置、查看參數命令Boot啟動系統(tǒng)命令flashFlash管理命令vivi>loadflashkernelxvivi>bootnand0x80000flasherase0x800000xc0000viviBootloader接口命令命令功vivi源碼的修改移植 vivi的移植方法步驟: 對vivi進行修改移植 對vivi進行配置 對vivi進行編譯 下載、運行vivivivi源碼的修改移植 vivi的移植方法步驟:1、修改vivi/Makefile(1)修改交叉編譯庫和頭文件

1)修改編譯器路徑 CROSS_COMPILE=2)修改編譯器庫文件路徑: ARM_GCC_LIBS=3)增加交叉編譯時頭文件的搜索路徑:LIBC_INCLUDE_DIR=(2)Linux內核包含文件LINUX_INCLUDE_DIR=編譯vivi用到的交叉編譯工具版本是cross-2.95.3.tar.bz2

1、修改vivi/Makefile編譯vivi用到的交叉編譯

2、修改Flash的分區(qū)信息(vivi/arch/s3c2410/smdk.c)

#ifdefCONFIG_S3C2410_AMD_BOOTmtd_partition_tdefault_mtd_partitions[]={ { name: "vivi", offset: 0, size: 0x00020000, flag: 0 },

{ name: "param", offset: 0x00020000, size: 0x00010000, flag: 0 },{ name: "kernel", offset: 0x00030000, size: 0x000C0000, flag: 0 },{ name: "root", offset: 0x00100000, size: 0x00140000, flag: MF_BONFS }};#endif 2、修改Flash的分區(qū)信息(vivi/arch/s3c

二、對vivi進行配置 運行vivi配置程序menuconfig: make menuconfig 啟動對vivi配置的主菜單,根據自己的目標系統(tǒng)逐項進行設置,設置完后退出保存即可。 二、對vivi進行配置

三、對vivi進行編譯 在vivi目錄下執(zhí)行以下命令:

make clean make

makeclean是清除以前編譯時生成的所有目標文件和臨時文件。 如果沒有錯誤,編譯后會生成vivi的目標文件vivi.bin。 三、對vivi進行編譯 四、對vivi進行下載 利用JTAG口將vivi下載到目標板的flash空間(0x00000---0x20000)。 然后對目標板加電,使vivi啟動運行,觀察運行情況。Jflash-s3c2410<vivi文件名>/t=<flash_type>其中,Flash類型有如下選項:1:SMDK2410:K9S32084MB2:SMDK2410:K9S64088MB3:SMDK2410:K9S280816MB4:SMDK2410:K9S560832MB5:SMDK2410:K9S120864MB6:SMDK2410:AM29LV800BBJflash-s3c2410<vivi文件名>/在燒寫過程中,有3次提示,要求用戶選擇:(1)在“Selectthefunctiontotest:”后面輸入“0”,表示對型號為K9S1208的Flash芯片進行燒寫,燒寫類型為程序。(2)在“Inputtargetblocknumber:”后面輸入“0”,表示從偏移地址0處開始燒寫。在燒寫過程中,有3次提示,要求用戶選擇:經過數分鐘的燒寫之后,將vivi燒寫到Flash之中。再次出現提示:經過數分鐘的燒寫之后,將vivi燒寫到Flash之中。再次出在“Selectthefunctiontotest:”后面輸入“2”,退出vivi燒寫。并關閉開發(fā)板電源,拔下JTAG連接線。在完成vivi燒寫之后,使用串口線,通過串口將宿主機與開發(fā)板連接起來。在“Selectthefunctiontotest在宿主機上打開超級終端minicom窗口,再按下“Backspace”(回格)鍵不放,接通開發(fā)板電源。這時我們通過超級終端minicom窗口可以觀察到嵌入式系統(tǒng)開發(fā)板上Linux系統(tǒng)的啟動過程,并在出現提示符“vivi>”時停?。ㄈ绻鸏inux系統(tǒng)有啟動,但沒有“vivi>”提示符出現,則需要再一次按住鍵盤上的“Backspace”(回格)鍵不放,對開發(fā)板“Reset”重啟)。進入vivi提示狀態(tài)在宿主機上打開超級終端minicom窗口,再按下“Backs(1)對Flash分區(qū)在“vivi>”提示符下用命令“bonpart”對Flash進行分區(qū):Bonpart0192k1M其中,從地址0處開始為vivi,地址192k(192*1024=196608)處開始為內核,地址1M(1*1024*1024=1048576)處開始為文件系統(tǒng)。(1)對Flash分區(qū)由于對Flash進行了重新分區(qū),原來燒寫在Flash中從地址0處開始的引導加載程序vivi亦被擦除了,因此,這時不能掉電,也不能重啟開發(fā)板,必須緊接著重新燒寫vivi程序。(2)vivi>loadflashvivix當出現:Readyfordownloadingusingxmodem...Waiting...然后,按下Ctrl+A+S,彈出一個對話框由于對Flash進行了重新分區(qū),原來燒寫在Flash中從地址(3)燒寫內核當vivi燒寫完畢后,需要重新啟動開發(fā)板,使剛才的分區(qū)及引導程序生效。重新啟動開發(fā)板時,操作過程如前所述,按下“Backspace”(回格)鍵不放的同時,重新啟動開發(fā)板系統(tǒng),出現提示符“vivi>”。vivi>loadflashkernelx4)燒寫文件系統(tǒng)緊接著上面的操作,在提示符“vivi>”下,輸入命令:vivi>loadflashrootx(3)燒寫內核Linux內核Linux內核主要功能進程管理內存管理文件管理設備管理網絡管理Linux內核Linux內核主要功能Linux內核結構Linux內核結構Linux配置與編譯編譯內核的步驟:下載內核源碼修改內核目錄樹根下的的Makefile,指明交叉編譯器設置環(huán)境變量配置內核產生.config文件輸入內核配置命令(makemenuconfig),進行內核選項的選擇編譯內核下載Linux內核Linux配置與編譯編譯內核的步驟:1、確定處理器類型Linux內核源代碼支持20多種微處理器類型,在編譯之前要先確定微處理器類型。ARCH:=armCROSS_COMPILE=arm-linux-Linux2.4內核還沒有包含S3C2410處理器Linux2.6內核已經支持。1、確定處理器類型ARCH:=armCROSS_COMPI2、確定配置方法內核支持4種不同的配置方法,每種方法是讀取一個根目錄下隱藏的配置文件“.config”。這4種方式如下。makeconfig:基于文本的最為傳統(tǒng)的配置界面,不推薦使用。makemenuconfig:基于文本選單的配置界面,字符終端下推薦使用。makexconfig:基于圖形窗口模式的配置界面,Xwindow下推薦使用。makeoldconfig:自動讀入“.config”配置文件,并且只要求用戶設定前次沒有設定過的選項。

2、確定配置方法【例】以makemenuconfig為例進行S3C2410系統(tǒng)的內裁剪核配置。#makemenuconfig彈出內核裁剪配置窗口【例】以makemenuconfig為例進行S3C24“SystemType---→”子項的界面“SystemType---→”子項的界面在完成配置之后,就可以保存退出,如圖所示。在完成配置之后,就可以保存退出,如圖所示。內核編譯makezImagearch/$(ARCH)/boot”目錄中。

內核編譯文件系統(tǒng)文件系統(tǒng)是嵌入式Linux系統(tǒng)必備的一個組成部分,是系統(tǒng)文件和應用文件存儲的地方。文件系統(tǒng)文件系統(tǒng)是嵌入式Linux系統(tǒng)必備的一個組成部分,文件目錄/bin 目錄下需要包含常用的用戶命令,如sh等。/sbin 目錄要包含所有系統(tǒng)命令,如reboot等。/etc 目錄下是系統(tǒng)配置文件。/boot 目錄下是內核映像/dev 目錄含有系統(tǒng)所有的特殊設備文件/lib 目錄包含系統(tǒng)所有的庫文件/mnt 目錄只用于掛接,可以是空目錄/proc 目錄是/proc文件系統(tǒng)的主目錄,包含了系統(tǒng)的啟動信息/usr 目錄含有用戶選取的命令。文件目錄/bin 目錄下需要包含常用的用戶命令,如sh等。上述目錄還包含適當的文件和子目錄(1)目錄/binbin中包含命令文件:date、sh、login、mount、umount、cp、ls、ftp、ping。(2)目錄/sbinsbin包含命令文件mingetty、reboot、halt、sulogin、update、init、fsck、telinit和mkfs。上述目錄還包含適當的文件和子目錄(1)目錄/bin(3)目錄/etcetc包含配置文件HOSTNAME、bashrc、fstab、group、inittab、nsswitch、pam.d、passwd、pwdb.conf、rc.d、securetty、shadow、shells以及l(fā)ilo.conf。(3)目錄/etc(4)目錄/devdev包含設備文件console、hda1、hda2、hda3、kmem、mem、null、tty1和ttyS0。5)目錄/liblib包含庫文件libc.so.6、ld-linux.so.2、libcom_err.so.2、libcrypt.so.2、libpam.so.0、libpam_misc.so.2、libuuid.so.2、libnss_files.so.2、libtermcap.so.2和security。(4)目錄/dev制作文件系統(tǒng)的鏡像文件嵌入式Linux支持多種文件系統(tǒng)。這些文件系統(tǒng)的總體架構是一樣的,都是采用目錄樹的結構。在嵌入式中常見的文件系統(tǒng)有cramfs、romfs、jffs、yaffs等。制作文件系統(tǒng)的鏡像文件嵌入式Linux支持多種文件系統(tǒng)。制作cramfs文件系統(tǒng)cramfs文件系統(tǒng)是一種經壓縮的、極為簡單的只讀文件系統(tǒng),因此非常適合嵌入式系統(tǒng)。不同的文件系統(tǒng)都有相應的制作工具,制作cramfs文件系統(tǒng)需要用到的工具是mkcramfs。制作cramfs文件系統(tǒng)cramfs文件系統(tǒng)是一種經壓假設用戶已經設置了一個文件系統(tǒng),在目錄“/fs/root/”下,如下所示:

#lsrootbindevetclibprocsbinusr使用mkcramfs工具了,命令格式為:

mkcramfs[系統(tǒng)文件目錄名]

[生成的鏡像文件名]/projects/cramfs在嵌入式Linux中busybox是構造文件系統(tǒng)最常用的軟件工具包/downloads假設用戶已經設置了一個文件系統(tǒng),在目錄“/fs/root/”演講完畢,謝謝觀看!演講完畢,謝謝觀看!armlinux系統(tǒng)開發(fā)流程1、開發(fā)目標硬件系統(tǒng)2、建立交叉編譯工具3、開發(fā)bootloader4、移植linux內核5、開發(fā)一個文件系統(tǒng)6、開發(fā)相關硬件的驅動程序7、開發(fā)上層應用程序8、燒寫bootloader、內核、文件系統(tǒng)等。armlinux系統(tǒng)開發(fā)流程1、開發(fā)目標硬件系統(tǒng)嵌入式交叉編譯環(huán)境簡介交叉編譯就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。這里說的平臺分別指的是主機平臺Host和目標平臺Target。就我們在ARM平臺上移植Linux來說,Host是一臺一般的PC機,它通過串口或網絡接口與Target通信;Target是arm-linux平臺(這里說的arm指的是平臺所使用的CPU是ARM9處理器,linux指的是運行的操作系統(tǒng)是Linux)。我們在Host上開發(fā)程序,并在這個平臺上運行交叉編譯器CrossComplier,編譯我們的程序,而由CrossComplier生成的程序將在Target上運行嵌入式交叉編譯環(huán)境簡介交叉編譯就是在一個平臺上生成另一個平臺

需要交叉編譯的原因:首先,在項目的起始階段,目標平臺尚未建立,因此需要做交叉編譯,以生成我們所需要的Bootloader以及kernel(因為Bootloader和kernel的源碼需要經過交叉編譯后才可以在目標平臺上運行);其次,當目標平臺能啟動之后,由于目標平臺上資源的限制,當我們編譯大型程序時,依然可能需要用到交叉編譯。需要交叉編譯的原因:如何建立交叉編譯工具鏈構建交叉工具鏈通常有以下3種方法:1.分步驟手工編譯分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。2.通過腳本編譯通過crosstool腳本工具來實現一次編譯生成交叉編譯工具鏈3.直接獲取交叉編譯工具鏈直接通過網上下載已經制作好的交叉編譯工具鏈。ftp:.ukftp:ftp:Linux內核代碼linux-2.6.10.tar.gzglibc庫glibc-2.3.2.tar.gz工具程序binutils-2.15.tar.bz2內核線程包glibc-linuxthreads-2.3.2.tar.gz編譯器gcc-3.3.6.tar.gz如何建立交叉編譯工具鏈構建交叉工具鏈通常有以下3種方法:ft配置開發(fā)板PXA270嵌入式系統(tǒng)的宿主機交叉編譯環(huán)境arm-linux.tar.gz提供ARM系統(tǒng)開發(fā)的交叉編譯器/usr/local/arm-linux/binvi/etc/profilepathmunge/usr/local/arm-linux/bincparm-linux.tar.gz/usr/localcd/usr/localtar-xzfarm-linux.tar.gz配置開發(fā)板PXA270嵌入式系統(tǒng)的宿主機交叉編譯環(huán)境arm-目標機與主機的通訊方式目標機與主機的通訊方式1、minicomminicom很像Windows下面的超級終端,我們利用minicom作為目標板的終端顯示視窗;通過串口控制目標板1、minicomminicom很像Windows下面的2、從菜單中選擇SerialPortSetup配置minicom1、#minicom-s2、從菜單中選擇SerialPortSetup配置min3、“A”以設置“SerialDevice”。如果使用串口1,則輸入/dev/ttyS0。如果使用串口2,則輸入/dev/ttyS1。3、“A”以設置“SerialDevice”。如果使用串口4、“E”鍵進入設置“bps/par/Bits”(波特率)界面,再按“I”以設置波特率為1152004、“E”鍵進入設置“bps/par/Bits”(波特率)界設置被保存到“/etc/minirc.dfl”設置被保存到“/etc/minirc.dfl”目標板上電后,目標板的啟動過程顯示在minicom;CTR+A+s---zmodern目標板上電后,目標板的啟動過程顯示在minicom;2NFS服務NFS服務可以使網絡上的同為Linux或Unix系統(tǒng)主機共享文件系統(tǒng)。NFS可以將遠程文件系統(tǒng)載入在本地文件系統(tǒng)下。遠程的硬盤、目錄和光驅都可以變成本地主機目錄樹中的一個子目錄。載入后與處理自己的文件系統(tǒng)一樣使用即可。不只方便,也節(jié)省了重復保存文件的空間、傳輸文件的時間及網絡帶寬。2NFS服務NFS服務可以使網絡上的同為Linux或UniNFS特點NFS系統(tǒng)也是使用C/S體系結構,就是有服務器端與客戶端服務器端提供共享的文件系統(tǒng),必須把文件系統(tǒng)輸出(export)出去客戶端則要把文件系統(tǒng)載入到自己的系統(tǒng)下使用NFS,需要在服務器端設置輸出,在客戶端設置載入NFS特點NFS系統(tǒng)也是使用C/S體系結構,就是有服務器端與NFS服務器端配置(1)關閉防火墻(2)配置共享目錄----客戶端主機IP范圍(3)主機IP(4)啟動NFS服務NFS客戶端(1)設置客戶端IP地址(2)掛載共享目錄mount-tnfs主機ip:共享目錄掛載點注意事項:關閉防火墻,主機與客戶端在同一ip段NFS服務器端配置NFS客戶端mount-tnfs主具體配置步驟服務器端1)關閉防火墻具體配置步驟具體配置步驟2)配置NFS服務器具體配置步驟2)配置NFS服務器具體配置步驟2-1)設置共享目錄和主機范圍具體配置步驟2-1)設置共享目具體配置步驟2-2)設置其他選項具體配置步驟2-2)設置其他選項具體配置步驟2-3)設置其他選項具體配置步驟2-3)設置其他選項具體配置步驟3)設置NFS服務器的IP具體配置步驟3)設置NFS具體配置步驟4)啟動NFS服務具體配置步驟4)啟動NFS服務具體配置步驟客戶端1)配置ip具體配置步驟客戶端具體配置步驟2)掛載NFS具體配置步驟2)掛載NFS/etc/exports它的基本格式是Directoryhost(權限選項、用戶映像、)Directory:表示打算共享的目錄名稱;Host:共享這個目錄的主機名稱;權限選項:定義安全選項;/etc/exports權限選項1)ro:只讀,只允許客戶機掛載這個文件系統(tǒng)為只讀模式。2)rw:明確指定共享目錄為讀/寫權限。用戶映像來限定某些用戶對NFS共享文件的使用權限no_root_squash:其他安全選項1)Insecure:以非安全端口的方式訪問,即默認用戶端口是1024或者更高,而NFS服務器默認的安全的服務器端口應該是低于1024的。2)Sync:根據請求進行同步。權限選項例:vi/etc/exports/home/ls0(rw,insecure,no_root_squash)表示共享的目錄為/home/ls,允許訪問的客戶機地址為0的主機,權限為可讀可寫(rw),非安全方式訪問(insecure),讓客戶機的根用戶在服務器上擁有根權限。例:例:vi/etc/exports/home/ls*(rw)表示共享的目錄為/home/ls,允許任意主機訪問,權限可讀可寫例:

Bootloader是什么?Bootloader,為引導加載程序,是嵌入式系統(tǒng)加電后運行的第一段代碼,相當于PC機的BIOS。Bootloader的位置:通常固化在硬件上的某個固態(tài)存儲設備上,加電后自啟動。基于ARM處理器核的CPU在復位時通常都從地址0x00000000取它的第一條指令。在這個地址處安排的就是Bootloader。Bootloader是在操作系統(tǒng)運行之前執(zhí)行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映像表,從而建立適當的系統(tǒng)軟硬件環(huán)境,為最終調用操作系統(tǒng)內核做好準備。

3BootloaderBootloader參數系統(tǒng)內核根文件系統(tǒng)從低地址到高地址方向FlashBootloader是什么?3BootloaderBoo

幾種發(fā)布的BootloaderBootloader是嚴重地依賴于硬件而實現的。每種不同體系結構的處理器都有不同的Bootloader。不過Bootloader的發(fā)展也趨于支持多種體系結構,如現在比較成熟的vivi、RedBoot和U-Boot等。ftp://ftp.denx.de/pub/u-boot/幾種發(fā)布的BootloaderBootloader是嚴重地Bootloader操作模式大多數Bootloader都有兩種不同的操作模式:“啟動加載”模式和“下載”模式。其區(qū)別對于開發(fā)人員才有意義。從最終用戶的角度看,Bootloader的作用就是用來加載操作系統(tǒng),而并不存在所謂的啟動加載模式與下載模式的區(qū)別。Bootloader操作模式大多數Bootloader都有兩1、啟動加載(Bootloading)模式 即Bootloader從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到RAM中運行,整個過程并沒有用戶的介入。 啟動加載模式是Bootloader的正常工作模式,在嵌入式產品發(fā)布的時侯,Bootloader必須工作在這種模式下。1、啟動加載(Bootloading)模式2、下載(Downloading)模式

下載方式:在這種模式下,目標機上的Bootloader將通過串口連接或網絡連接等通信手段從主機下載文件。

下載內容及存儲:主要是下載內核映像和根文件系統(tǒng)映像等。從主機下載的文件通常首先被Bootloader保存到目標機的RAM中,然后再被Bootloader寫到目標機上的FLASH類固態(tài)存儲設備中。2、下載(Downloading)模式下載模式應用場合:Bootloader的這種模式通常在第一次安裝內核與根文件系統(tǒng)時被使用;此外,以后的系統(tǒng)更新也會使用到這種工作模式。用戶應用接口:工作于這種模式下的Bootloader通常都會向它的終端用戶提供一個簡單的命令行接口。如在U-BOOT下,將出現“#”提示符;在vivi下出現“vivi>”提示符。下載模式應用場合:Bootloader的這種模式通常在第一次下載(Downloading)模式示例下載(Downloading)模式示例Bootloader啟動過程大多數BootLoader啟動都分為stage1和stage2兩大部分。依賴于處理器體系結構和板級初始化的代碼,通常都放在stage1中,用匯編語言實現而stage2則通常用C語言來實現,這樣可以實現更復雜的功能,而且代碼會具有更好的可讀性和可移植性。Bootloader啟動過程大多數BootLoaderBootLoader的stage1通常包括以下步驟(以執(zhí)行的先后順序):硬件設備初始化。為加載BootLoader的stage2準備RAM空間。拷貝BootLoader的stage2到RAM空間中。設置好堆棧跳轉到stage2的C入口點。

Stage1主要工作是硬件初始化,并準備第二階段的C語言運行環(huán)境關閉處理器內部指令/數據cache等設置CPU的速度和時鐘頻率RAM初始化初始化led等為了獲得更快的執(zhí)行速度,通常把階段2的代碼加載到RAM空間中來執(zhí)行。準備RAM空間考慮的因素:階段2代碼大小、堆棧、頁大小(4KB的倍數)、安排位置等。BootLoader的stage1關閉處理器內部指令BootLoader的stage2通常包括以下步驟(以執(zhí)行的先后順序):初始化本階段要使用到的硬件設備。檢測系統(tǒng)內存映射(memorymap)。將kernel映像和根文件系統(tǒng)映像從flash上讀到RAM空間中。為內核設置啟動參數。調用內核。stage2的代碼通常用C語言來實現,以便于實現更復雜的功能和取得更好的代碼可讀性和可移植性。與普通C語言應用程序不同的是,在編譯和鏈接bootloader這樣的程序時,我們不能使用glibc庫中的任何支持函數。Stage2的主要目的是運行Linux內核,在此之前需要完成硬件和內存初始化工作。Bootloader調用Linuxkernel的方法是直接跳轉到內核的第一條指令處。在跳轉時必須滿足下列條件:1)、CPU寄存器的設置:R0為0;R1為機器類型ID;R2為啟動參數,標記列表在RAM中的起始基地址。2)、CPU模式:CPU必須設置為SVC模式,必須禁止中斷(IRQs和FIQs)。3)、MMU和Cache的設置:MMU必須關閉;指令Cache可以打開也可以關閉;數據Cache必須關閉。BootLoader的stage2BootloaderviviBootloader源碼分析vivi是韓國Mizi公司開發(fā)的Bootloader,適用于ARM9處理器。vivi有兩種工作模式,在啟動時可以選擇。在vivi啟動時,通過串行口發(fā)出如下信息:PressReturntostarttheLinuxnow,anyotherkeyforvivi按回車鍵啟動LinuxOS,按其它鍵進入vivi命令接口模式,可以使用vivi提供的命令進行一些操作。viviBootloader源碼分析vivi是韓國Mizivivi源代碼目錄結構vivi源代碼包含的目錄有:arch、Documentation、drivers、init、include、lib、scripts、test、util等10目錄,共300多個文件。各個目錄內容如下:1、arch(architecture)目錄它下面的文件為與CPU硬件相關的初始化代碼,此目錄包含了所用vivi支持的CPU。一般只包含S3C2410x的文件。2、Documentation目錄其下文件為vivi使用指南。3、drivers目錄存放的為MTD(memorytechnologydevice內存技術設備)(數據存儲媒質)設備讀寫控制文件和串行口操作文件,對串行口支持xmodem和ymodem協(xié)議。4、include目錄存放所有的頭文件,包括S3C2410微處理器的和S3C2410開發(fā)板的頭文件。vivi源代碼目錄結構vivi源代碼包含的目錄有:arch、5、init目錄該目錄下是系統(tǒng)初始化文件main.c、version.c,后者是vivi版本信息,main.c為vivi整個初始化的結構。6、lib目錄該目錄下是公共應用及接口代碼,如時鐘功能文件time.c,堆棧初始化文件heap.c等文件。7、scripts目錄該目錄存放的是系統(tǒng)配置需要的腳本文件,如menuconfig和configue文件。8、CVS目錄所有的目錄下面都有一個CVS目錄,存放的是該目錄的路徑和它的子目錄。5、init目錄vivi源代碼文件與功能結構vivi源代碼文件:1、vivi/arch/s3c2410/head.s2、一段過渡,實現循環(huán)調用,main返回后重新復位 LDR SP, DW_STACK_START MOV FP, #0 MOV A2, #0 BL MAIN MOV PC, #FLASH_BASE;main返回后重新復位3、vivi/init/main.cvivi源代碼文件與功能結構vivi源代碼文件:viviBootloader接口命令命令功能Load下載flash或RAM命令PartMTD分區(qū)操作命令param設置、查看參數命令Boot啟動系統(tǒng)命令flashFlash管理命令vivi>loadflashkernelxvivi>bootnand0x80000flasherase0x800000xc0000viviBootloader接口命令命令功vivi源碼的修改移植 vivi的移植方法步驟: 對vivi進行修改移植 對vivi進行配置 對vivi進行編譯 下載、運行vivivivi源碼的修改移植 vivi的移植方法步驟:1、修改vivi/Makefile(1)修改交叉編譯庫和頭文件

1)修改編譯器路徑 CROSS_COMPILE=2)修改編譯器庫文件路徑: ARM_GCC_LIBS=3)增加交叉編譯時頭文件的搜索路徑:LIBC_INCLUDE_DIR=(2)Linux內核包含文件LINUX_INCLUDE_DIR=編譯vivi用到的交叉編譯工具版本是cross-2.95.3.tar.bz2

1、修改vivi/Makefile編譯vivi用到的交叉編譯

2、修改Flash的分區(qū)信息(vivi/arch/s3c2410/smdk.c)

#ifdefCONFIG_S3C2410_AMD_BOOTmtd_partition_tdefault_mtd_partitions[]={ { name: "vivi", offset: 0, size: 0x00020000, flag: 0 },

{ name: "param", offset: 0x00020000, size: 0x00010000, flag: 0 },{ name: "kernel", offset: 0x00030000, size: 0x000C0000, flag: 0 },{ name: "root", offset: 0x00100000, size: 0x00140000, flag: MF_BONFS }};#endif 2、修改Flash的分區(qū)信息(vivi/arch/s3c

二、對vivi進行配置 運行vivi配置程序menuconfig: make menuconfig 啟動對vivi配置的主菜單,根據自己的目標系統(tǒng)逐項進行設置,設置完后退出保存即可。 二、對vivi進行配置

三、對vivi進行編譯 在vivi目錄下執(zhí)行以下命令:

make clean make

makeclean是清除以前編譯時生成的所有目標文件和臨時文件。 如果沒有錯誤,編譯后會生成vivi的目標文件vivi.bin。 三、對vivi進行編譯 四、對vivi進行下載 利用JTAG口將vivi下載到目標板的flash空間(0x00000---0x20000)。 然后對目標板加電,使vivi啟動運行,觀察運行情況。Jflash-s3c2410<vivi文件名>/t=<flash_type>其中,Flash類型有如下選項:1:SMDK2410:K9S32084MB2:SMDK2410:K9S64088MB3:SMDK2410:K9S280816MB4:SMDK2410:K9S560832MB5:SMDK2410:K9S120864MB6:SMDK2410:AM29LV800BBJflash-s3c2410<vivi文件名>/在燒寫過程中,有3次提示,要求用戶選擇:(1)在“Selectthefunctiontotest:”后面輸入“0”,表示對型號為K9S1208的Flash芯片進行燒寫,燒寫類型為程序。(2)在“Inputtargetblocknumber:”后面輸入“0”,表示從偏移地址0處開始燒寫。在燒寫過程中,有3次提示,要求用戶選擇:經過數分鐘的燒寫之后,將vivi燒寫到Flash之中。再次出現提示:經過數分鐘的燒寫之后,將vivi燒寫到Flash之中。再次出在“Selectthefunctiontotest:”后面輸入“2”,退出vivi燒寫。并關閉開發(fā)板電源,拔下JTAG連接線。在完成vivi燒寫之后,使用串口線,通過串口將宿主機與開發(fā)板連接起來。在“Selectthefunctiontotest在宿主機上打開超級終端minicom窗口,再按下“Backspace”(回格)鍵不放,接通開發(fā)板電源。這時我們通過超級終端minicom窗口可以觀察到嵌入式系統(tǒng)開發(fā)板上Linux系統(tǒng)的啟動過程,并在出現提示符“vivi>”時停?。ㄈ绻鸏inux系統(tǒng)有啟動,但沒有“vivi>”提示符出現,則需要再一次按住鍵盤上的“Backspace”(回格)鍵不放,對開發(fā)板“Reset”重啟)。進入vivi提示狀態(tài)在宿主機上打開超級終端minicom窗口,再按下“Backs(1)對Flash分區(qū)在“vivi>”提示符下用命令“bonpart”對Flash進行分區(qū):Bonpart0192k1M其中,從地址0處開始為vivi,地址192k(192*1024=196608)處開始為內核,地址1M(1*1024*1024=1048576)處開始為文件系統(tǒng)。(1)對Flash分區(qū)由于對Flash進行了重新分區(qū),原來燒寫在Flash中從地址0處開始的引導加載程序vivi亦被擦除了,因此,這時不能掉電,也不能重啟開發(fā)板,必須緊接著重新燒寫vivi程序。(2)vivi>loadflashvivix當出現:Readyfordownloadingusingxmodem...Waiting...然后,按下Ctrl+A+S,彈出一個對話框由于對Flash進行了重新分區(qū),原來燒寫在Flash中從地址(3)燒寫內核當vivi燒寫完畢后,需要重新啟動開發(fā)板,使剛才的分區(qū)及引導程序生效。重新啟動開發(fā)板時,操作過程如前所述,按下“Backspace”(回格)鍵不放的同時,重新啟動開發(fā)板系統(tǒng),出現提示符“vivi>”。vivi>loadflashkernelx4)燒寫文件系統(tǒng)緊接著上面的操作,在提示符“vivi>”下,輸入命令:vivi>loadfl

溫馨提示

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

評論

0/150

提交評論