川師arm linux系統(tǒng)實(shí)驗(yàn)報(bào)告.doc_第1頁
川師arm linux系統(tǒng)實(shí)驗(yàn)報(bào)告.doc_第2頁
川師arm linux系統(tǒng)實(shí)驗(yàn)報(bào)告.doc_第3頁
川師arm linux系統(tǒng)實(shí)驗(yàn)報(bào)告.doc_第4頁
川師arm linux系統(tǒng)實(shí)驗(yàn)報(bào)告.doc_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

VIP免費(fèi)下載

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

文檔簡介

Linux嵌入式系統(tǒng)開發(fā)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)學(xué)時(shí):32實(shí)驗(yàn)個(gè)數(shù):5實(shí)驗(yàn)學(xué)分:1課程性質(zhì):專業(yè)選修課適用專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)教材及參考書:1.嵌入式Linux系統(tǒng)開發(fā)標(biāo)準(zhǔn)教程,華清遠(yuǎn)見嵌入式培訓(xùn)中心著,人民郵電出版社,2009-32.ARM嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解,楊水清,電子工業(yè)出版社,2008-11大綱執(zhí)筆人:大綱審定人:一、實(shí)驗(yàn)課的性質(zhì)與任務(wù)本課程實(shí)驗(yàn)大綱是面向計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生開設(shè)的Linux嵌入式系統(tǒng)開發(fā)(以pc機(jī)、xsbase270實(shí)驗(yàn)平臺為開發(fā)環(huán)境)實(shí)驗(yàn)課計(jì)劃指導(dǎo)大綱,是依據(jù)Linux嵌入式系統(tǒng)開發(fā)課程教學(xué)計(jì)劃指導(dǎo)大綱編制。本課程主要講述了在上位機(jī)PC、目標(biāo)機(jī)xsbase270實(shí)驗(yàn)平臺所共同搭建的交叉編譯開發(fā)環(huán)境中,利用C語言、QT圖形庫進(jìn)行簡單的Linux嵌入式系統(tǒng)設(shè)計(jì)與開發(fā),結(jié)合該課程教學(xué)計(jì)劃大綱的相應(yīng)內(nèi)容,設(shè)計(jì)了8個(gè)單項(xiàng)實(shí)驗(yàn)和綜合實(shí)驗(yàn),力求提高學(xué)生的動手能力,做到理論和實(shí)踐相結(jié)合。使學(xué)生在實(shí)驗(yàn)過程中掌握Linux嵌入式系統(tǒng)開發(fā)的基本原理和流程,培養(yǎng)學(xué)生規(guī)范設(shè)計(jì)、熟練實(shí)現(xiàn)嵌入式系統(tǒng)的能力,為后續(xù)相關(guān)課程實(shí)訓(xùn)奠定基礎(chǔ)。二、實(shí)驗(yàn)課程目的與要求1. 實(shí)驗(yàn)?zāi)康模篖inux嵌入式系統(tǒng)開發(fā)實(shí)驗(yàn)課的開設(shè),是為了使學(xué)生更好地理解和掌握Linux操作系統(tǒng),并在此基礎(chǔ)上熟悉嵌入式系統(tǒng)開發(fā)的基本流程,靈活運(yùn)用網(wǎng)絡(luò)、busybox等相關(guān)工具順利完成交叉編譯環(huán)境搭建、操作系統(tǒng)移植、文件系統(tǒng)定制和qt圖形庫編程等階段性任務(wù),強(qiáng)化嵌入式系統(tǒng)設(shè)計(jì)、開發(fā)能力。2. 實(shí)驗(yàn)要求:(1) 在實(shí)驗(yàn)中,要求學(xué)生個(gè)人獨(dú)立思考,嚴(yán)格遵循實(shí)驗(yàn)手冊進(jìn)行實(shí)驗(yàn),并給出電子版實(shí)驗(yàn)報(bào)告存檔。(2) 本課程的學(xué)習(xí)過程是一個(gè)綜合訓(xùn)練過程,要求學(xué)生在完成實(shí)驗(yàn)過程中,不僅應(yīng)牢固記憶每個(gè)操作步驟,更應(yīng)利用網(wǎng)絡(luò)等多種渠道理解每個(gè)步驟在本階段任務(wù)中發(fā)揮的重要作用。(3) 在實(shí)驗(yàn)中,提倡學(xué)生之間、師生之間相互交流,以達(dá)到暢所欲言、博采眾長的目的。三、實(shí)驗(yàn)項(xiàng)目及內(nèi)容提要Linux嵌入式系統(tǒng)開發(fā)實(shí)驗(yàn)課程 序號實(shí)驗(yàn)項(xiàng)目編號實(shí)驗(yàn)名稱學(xué)時(shí)必做選做學(xué)分?jǐn)?shù)實(shí)驗(yàn)類型內(nèi)容提要基本操作驗(yàn)證綜合設(shè)計(jì)4四Bootloader跟蹤打印實(shí)驗(yàn)4熟悉Linux嵌入式系統(tǒng)bootloader實(shí)現(xiàn)原理。5五Bootloader增加命令選項(xiàng)實(shí)驗(yàn)4熟悉根據(jù)實(shí)際需要修改bootloader的基本步驟6六內(nèi)核編譯實(shí)驗(yàn)2熟悉Linux嵌入式系統(tǒng)內(nèi)核移植過程。7七文件系統(tǒng)制作實(shí)驗(yàn)4熟悉Linux嵌入式系統(tǒng)根文件制作。8八驅(qū)動程序加載實(shí)驗(yàn)4熟悉驅(qū)動程序動態(tài)、靜態(tài)的加載過程四、實(shí)驗(yàn)內(nèi)容安排:實(shí)驗(yàn)四 Bootloader跟蹤打印實(shí)驗(yàn)(驗(yàn)證型實(shí)驗(yàn) 4學(xué)時(shí))1. 目的要求:(1) 熟練掌握Bootloader的啟動過程。(2) 熟練掌握Bootloader的基本調(diào)試方法。(3) 熟練掌握Bootloader的編譯過程。2. 實(shí)驗(yàn)內(nèi)容(1) Blob第1階段分析l 打開Boot-XSBase270srcstart.S,該源碼文件完成系統(tǒng)的Blob 程序的第1階段的編程及程序調(diào)用實(shí)現(xiàn)過程。(主要包括:GPIO的初始化調(diào)用bl define_gpio;系統(tǒng)時(shí)鐘信號使能調(diào)用bl clock_enable;SDRAM內(nèi)存設(shè)置調(diào)用bl setup_memory、Blob 自拷貝、堆棧的設(shè)置 ldr sp, stack_point-4以及跳轉(zhuǎn)到Blob 第二階段 ldr pc, main)【圖4-1】l 打開Boot-XSBase270srcfixgpio.S 文件,找到配置GPIO的define_gpio函數(shù),該函數(shù)主要實(shí)現(xiàn)對系統(tǒng)微處理器的GPIO的初始化過程。其中涉及GPIO的輸入/輸出方向設(shè)置寄存器:GPDRn、置位和清零寄存器(GPSRn、GPCRn)以及功能配置寄存器GPFRnL、GPFRnH等?!緢D4-2】l 打開Boot-XSBase270src memsetup.S文件,找到setup_memory函數(shù),該函數(shù)主要對系統(tǒng)外部的DRAM、SRAM(FLASH)、PC Card接口等存儲設(shè)備所需參數(shù)進(jìn)行配置,其中包括:MDCNFG、MDREFR、MSCn等寄存器的配置?!緢D4-3】(2) Blob 第2階段分析l 打開Boot-XSBase270srcmain.c文件,找到int main(void)函數(shù),該函數(shù)完成系統(tǒng)的Blob 程序的第2階段的硬件初始化和菜單顯示等程序調(diào)用實(shí)現(xiàn)過程(主要包括:終端顯示串口初始化uart_init();系統(tǒng)定時(shí)器time_init();存儲分配映射配置config_init();Flash內(nèi)存器操作配置初始化iflash_init();以及網(wǎng)絡(luò)芯片初始化eth_init();等本階段硬件初始化過程調(diào)用;提示延時(shí)、菜單顯示調(diào)用)【圖4-4】 main程序初始化【圖4-5】 main程序延遲 【圖4-6】 Bootloader打印菜單函數(shù)l 打開Boot-XSBase270srcserial.c文件,分別找到uart_init(void)、int uart_putc(int ch)和int uart_getc(void)三個(gè)串口操作基本函數(shù)。主要完成串口初始化與從串口獲取和輸出字符等操作。實(shí)現(xiàn)對PXA270的串口相關(guān)寄存器進(jìn)行配置。其他與串口相關(guān)的函數(shù)都直接或間接調(diào)用這三個(gè)函數(shù)?!緢D4-7】 串口初始化函數(shù)【圖4-8】 串口輸入、輸出函數(shù)l 打開Boot-XSBase270srcPartition.c文件,找到init_map(void)和find_map(const char* name)函數(shù),這兩個(gè)函數(shù)主要完成對存儲分配映射進(jìn)行配置和查找某個(gè)指定類型的內(nèi)存映射參數(shù)。其中parts結(jié)構(gòu)體數(shù)組定義了整個(gè)系統(tǒng)的SRAM、SDRAM等內(nèi)存映射的相關(guān)參數(shù)。 【圖4-9】 DRAMSRAM地址映像函數(shù) 【圖4-10】 內(nèi)存地址分配映射結(jié)構(gòu)體數(shù)值l 打開Boot-XSBase270srcFlash.c文件,該文件中函數(shù)主要完成對flash的編程、擦除、加/解鎖等操作。其中iflash_init(void)函數(shù)主要實(shí)現(xiàn)查詢平臺的flash存儲芯片的相關(guān)信息,flash操作的命令可參考flash芯片的資料文檔。【圖4-11】 flash初始化函數(shù)l 打開Boot-XSBase270src lan91c111.c文件,該文件中函數(shù)主要實(shí)現(xiàn)lan91c111網(wǎng)絡(luò)芯片的底層操作配置操作,其中l(wèi)an91c111_init(void)函數(shù)由main.c文件中的eth_init()函數(shù)間接調(diào)用。具體寄存器操作方法參考lan91c111的資料文檔。 【圖4-12】 Ethernet初始化函數(shù)l 打開Boot-XSBase270src Network.c文件,該文件中的函數(shù)主要完成網(wǎng)絡(luò)傳輸相關(guān)協(xié)議的封裝(如: set_udp_header、set_ip_header、set_ether_header、set_arp_heade、set_icmp_header等)、網(wǎng)絡(luò)數(shù)據(jù)包的解壓(udp_recv_packet、ip_recv_packet、eth_recv_packet、arp_recv_packet、icmp_recv_packet)以及網(wǎng)絡(luò)傳輸請求數(shù)據(jù)包的發(fā)送(send_arp_request_packet、send_icmp_echo_request等)等操作。 【圖4-13】 網(wǎng)絡(luò)傳輸函數(shù)l 打開Boot-XSBase270src tftp.c文件,該文件中的函數(shù)主要完成文件TFTP傳輸相關(guān)操作。 【圖4-14】 tftp命令結(jié)構(gòu)體定義(3) Blob 跟蹤調(diào)試信息輸出l 打開Boot-XSBase270srcmain.c文件,屏蔽config_init函數(shù)后面的printf(033H033Jn);語句,同時(shí)將該語句添加到uart_init函數(shù)后,并在uart_init函數(shù)后面添加printf(UART init overn);語句?!緢D4-15】 跟蹤UARTl 打開Boot-XSBase270src Lan91c111.c文件,在lan91c111_init()函數(shù)返回前添加test_get_reg();函數(shù),測試lan91c111網(wǎng)卡芯片的相關(guān)寄存器?!緢D4-16】 測試網(wǎng)卡寄存器l 打開Boot-XSBase270src Time.c文件,分別在time_init()函數(shù)中添加如下調(diào)試輸出信息。printf(time_init+n);printf(udelay : msecond_boundary : %d 0x%08lxn, msecond_boundary, msecond_boundary);printf(time_init-n); 【圖4-17】 跟蹤時(shí)間初始化l 打開Boot-XSBase270src Partition.c文件,在init_map函數(shù)中增加如下調(diào)試信息。printf(Memory map name is %sn,part-name);printf(Memory map SRAM Base Address is 0x%08xn,part-sramb);printf(Memory map SRAM SIZE is 0x%08xn,part-srams);printf(Memory map DRAM Base Address is 0x%08xn,part-dramb);printf(Memory map DRAM Size is 0x%08xn,part-drams);printf(Memory map Max Size is 0x%08xn,part-maxs); 【圖4-18】 跟蹤DRAM/SRAM映射關(guān)系l 打開Boot-XSBase270src Flash.c文件,去掉/#define detail(fmt, args.) printf(fmt, #args)宏定義的屏蔽符“/”,使該宏定義功能有效。 【圖4-19】 打印flash寄存器l 保存所有修改后的文件在Boot-XSBase270目錄下利用make命令對修改后的源碼進(jìn)行編譯;編譯后將生成boot文件。make cleanmake【圖4-20】 Bootloader編譯l 將成功編譯后的boot文件拷貝到JFlash_MM文件夾中,連接JTAG,開啟電源,并在該目錄下執(zhí)行下載燒錄命令start.bat。. 【圖4-21】 Bootloader燒寫l 重新啟動開發(fā)板,在延時(shí)時(shí)間內(nèi)(3秒)按空格鍵,Blob 顯示修改后調(diào)試信息。 【圖4-22】 存儲器映射關(guān)系打印 【圖4-23】 Flash寄存器信息打印 【圖4-24】 Bootloader菜單打印3. 主要儀器設(shè)備及軟件:(1) PC(2) XSBase270 ARM 實(shí)驗(yàn)開發(fā)平臺一套實(shí)驗(yàn)五 Bootloader新增命令項(xiàng)實(shí)驗(yàn)(驗(yàn)證型實(shí)驗(yàn) 4學(xué)時(shí))1. 目的要求:(1) 熟悉Bootloader。(2) 深入理解Bootloader的源代碼。(3) 熟練掌握Bootloader新增命令項(xiàng)的基本步驟。2. 實(shí)驗(yàn)內(nèi)容(1) 打開Boot-XSBase270srcmenu.c文件,在DisplayMenu函數(shù)中增加:printf(d LED Testn);使Bootloader程序在啟動時(shí)提供顯示LED燈測試選項(xiàng)。 【圖5-1】 增加Bootloader菜單項(xiàng)(2) 打開Boot-XSBase270srccommand.c文件,在該文件中增加測試LED燈命令項(xiàng)對象extern struct command_t cmd_led;,并將命令項(xiàng)對象添加到命令列表結(jié)構(gòu)體static struct command_t *cmdlist中。 【圖5-2】 增加命令結(jié)構(gòu)體(3) 打開Boot-XSBase270srcmain.c文件,在等待選項(xiàng)輸入的地方增加對小寫英文字符”d”輸入條件的選擇。 【圖5-3】 增加命令菜單字符項(xiàng)(4) 打開Boot-XSBase270srcmain.c文件,在選項(xiàng)判斷的case語句中增加小寫英文字符”d”輸入條件的選擇判斷。case 100:command_run(ledtest);break; 【圖5-4】 增加命令菜單項(xiàng)響應(yīng)(5) 在Boot-XSBase270src文件夾中新增一個(gè)Testled.c文件,文件內(nèi)容如下,主要完成對Led測試命令項(xiàng)的操作,該命令實(shí)現(xiàn)對開發(fā)板中的8個(gè)LED二極管循環(huán)向右移動,直到用戶選擇小寫英文字符“f”后退出。#include #include #include #define LED_CS4 (*(volatile unsigned char *)(0x10500000)static bool do_led(int argc, char *argv);static void led_usage(void);struct command_t cmd_led = .name = ledtest,.run = do_led,.usage = led_usage;static bool do_led(int argc, char *argv)int LED_Value = 0x01;int iNum = 0;printf( Led Shift Command Test !n);printf( Please press f key exit !);while(1)LED_CS4 = LED_Value;mdelay(1000);iNum = getc();if(iNum = 102)break;LED_Value = LED_Value 0x80)LED_Value = 0x01;LED_CS4 = 0xFF;return true;static void led_usage(void)usage_format(testled, Testing the LEDS);return;【圖5-5】 Testled.c(6) 打開Boot-XSBase270srcMakefile文件,在該文件中的objfiles變量中增加:objfiles +=testled.o,實(shí)現(xiàn)對testled.c的編譯和鏈接。【圖5-6】 修改Makefile(7) 在Boot-XSBase270目錄下利用make命令對修改后的源碼進(jìn)行編譯;編譯后將生成boot文件。make cleanmake【圖5-7】 編譯Bootloader(8) 將成功編譯后的boot文件拷貝到JFlash_MM文件夾中,連接JTAG,開啟電源,并在該目錄下執(zhí)行下載燒錄命令start.bat。.【圖5-8】 燒寫B(tài)ootloader(9) 重新啟動開發(fā)板,在延時(shí)時(shí)間內(nèi)(3秒)按空格鍵,bootloader顯示修改后的啟動菜單。 【圖5-9】 命令菜單添加效果圖(10) 輸入小寫英文字母“d”,查看開發(fā)平臺上8個(gè)LED發(fā)光二極管的運(yùn)行情況和boot菜單的變化。 【圖5-10】 命令菜單運(yùn)行效果圖(11) 輸入小寫英文字母“f”,查看開發(fā)平臺上8個(gè)LED發(fā)光二極管的運(yùn)行情況和boot菜單的變化。3. 主要儀器設(shè)備及軟件:(1) PC(2) XSBase270 ARM 實(shí)驗(yàn)開發(fā)平臺一套實(shí)驗(yàn)六、Linux-0移植實(shí)驗(yàn)1. 實(shí)驗(yàn)?zāi)康?掌握Linux 源碼結(jié)構(gòu)。 掌握Linux系統(tǒng)移植方法和步驟。2. 實(shí)驗(yàn)步驟第1步、 從/pub/linux/kernel/v2.6下載linux-0.tar.bz2壓縮文件(或光盤中提供); 第2步、 將linux-0.tar.bz2壓縮文件復(fù)制到Linux工作目錄(如root/work目錄下);第3步、 在Linux下利用tar jxvf linux-0.tar.bz2命令解壓linux-0.tar.bz2壓縮文件。第4步、 進(jìn)入解壓后的linux-0目錄下,利用vi編輯工具修改linux-0目錄下的頂層Makefile文件。修改linux-0目錄下的頂層Makefile文件,設(shè)置編譯linux操作系統(tǒng)的CPU體系架構(gòu)變量ARCH 和所使用的交叉編譯工具鏈變量CROSS_COMPILE(注:實(shí)驗(yàn)使用arm-linux交叉編譯工具鏈4.4.3版本,可從/pub/snapgear/tools/arm-linux/下載arm-linux-tools-20070808.tar.gz壓縮文件)。ARCH?= armCROSS_COMPILE?=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-將linux-0目錄下的arch/arm/configs/mainstone_defconfig文件復(fù)制為xsbase270_defconfig文件。第5步、 將實(shí)驗(yàn)源碼目錄下的linux-0_patcharcharmmach-pxa目錄下的xsbase270.c文件復(fù)制到linux-0archarmmach-pxa目錄中(注:xsbase270.c從該目錄下的mainstone.c修改而來)。第6步、 修改linux-0archarmmach-pxa目錄下的Makefile文件,增加編譯xsbase270.c的編譯選項(xiàng),即:obj-$ (CONGIG_MACH_XSBASE270 ) += xsbase270.o。obj-$(CONFIG_MACH_XSBASE270) += xsbase270.o rtc4513.o第7步、 修改linux-0archarmmach-pxa目錄下的Kconfig文件,增加在裁剪內(nèi)核時(shí)支持對EELiod/Liod平臺的選擇第8步、 將實(shí)驗(yàn)源碼目錄下的linux-0_patchdriversmtdmaps目錄下的xsbase270-flash.c文件復(fù)制到linux-0driversmtdmaps目錄中(注:xsbase270-flash.c從該目錄下的mainstone-flash.c修改而來)。修改linux-0driversmtdmaps目錄下的Makefile文件,增加編譯xsbase270-flash.c的編譯選項(xiàng),即:obj-$ (CONGIG_MTD_XSBASE270 ) += xsbase270-flash.o。第9步、 修改linux-0driversmtdmaps目錄下的Kconfig文件,增加在裁剪內(nèi)核時(shí)支持對EELiod/Liod平臺flash驅(qū)動的選擇第10步、 將實(shí)驗(yàn)源碼目錄下的linux-0_patchincludeasm-armarch-pxa目錄下的xsbase270.h文件復(fù)制到linux-0includeasm-armarch-pxa目錄中。第11步、 修改linux-0includeasm-armarch-pxa目錄中irqs.h文件,在文件最后增加EELiod/Liod平臺相關(guān)中斷定義,內(nèi)容如下。#define XSBEDR_USBWAKE_IRQ IRQ_GPIO(1)#define XSBEDR_USB2_IRQ IRQ_GPIO(9)#define XSBEDR_ETH_IRQ IRQ_GPIO(10)#define XSBEDR_CF_DETECT_IRQ IRQ_GPIO(12)#define XSBEDR_AC97_IRQ IRQ_GPIO(13)#define XSBEDR_CF_IRQ IRQ_GPIO(22)#define XSBDVK_IRQ(x) (IRQ_BOARD_START + (x)#define XSBDVK_ETH_IRQ IRQ_GPIO(10)#define XSBDVK_2700G_IRQ IRQ_GPIO(12)#define XSBDVK_AC97_IRQ IRQ_GPIO(13)#define XSBDVK_CF_IRQ IRQ_GPIO(22)#define XSBDVK_MMC_IN_IRQ XSBDVK_IRQ(0)#define XSBDVK_MMC_OUT_IRQ XSBDVK_IRQ(1)#define XSBDVK_SIM_IN_IRQ XSBDVK_IRQ(2)#define XSBDVK_SIM_OUT_IRQ XSBDVK_IRQ(3)#define XSBDVK_USB_IN_IRQ XSBDVK_IRQ(4)#define XSBDVK_USB_OUT_IRQ XSBDVK_IRQ(5)#define XSBDVK_CF_IN_IRQ XSBDVK_IRQ(6)#define XSBDVK_CF_OUT_IRQ XSBDVK_IRQ(7)#define XSBDVK_SW1_IRQ XSBDVK_IRQ(8)#define XSBDVK_SW2_IRQ XSBDVK_IRQ(9)#define XSBDVK_SW3_IRQ XSBDVK_IRQ(10)#define XSBDVK_SW4_1_IRQ XSBDVK_IRQ(11)#define XSBDVK_SW4_2_IRQ XSBDVK_IRQ(12)#define XSBDVK_SW4_3_IRQ XSBDVK_IRQ(13)第12步、 在linux-0目錄下執(zhí)行make xsbase270_defconfig。第13步、 在linux-0目錄下執(zhí)行make menuconfig命令,進(jìn)入內(nèi)核配置主菜單。第14步、 在內(nèi)核配置主菜單中選擇System Type- Intel PXA2xx Implementations - Select target board 選擇 (X) Emdoor EELiod/Liod Development Platform,該選項(xiàng)對應(yīng)于第9步修改的內(nèi)容。第15步、 在內(nèi)核配置主菜單中選擇Device Drivers- Memory Technology Device(MTD)support - Mapping drivers for chip access - 選擇 (*) CFI Flash device mapped on Emdoor EELiod board,該選項(xiàng)對應(yīng)于第12步修改的內(nèi)容。第16步、 在內(nèi)核配置主菜單中選擇Boot options-(root=/dev/nfs ip=bootp console=tyyS0,115200 mem=64)改為root=/dev/mtdblock2 rootfstype=jffs2 console=tyyS0, 115200 mem=64M第17步、 配置完成后,在提示是否保存內(nèi)核配置的提示對話框中選擇。第18步、 配置完成后,在Linux-0目錄下運(yùn)行make zIamge編譯內(nèi)核,編譯后的內(nèi)核文件保存在Linux-0/arch/arm/boot/目錄下。第19步、 將編譯好的內(nèi)核文件zImage下載到目標(biāo)平臺,(必須同時(shí)要下載Linux文件系統(tǒng)),重新啟動開發(fā)平臺,查看內(nèi)核啟動情況(注:需要利用所提供的bootloader程序來啟動linux-0內(nèi)核)。下載的步驟:1、 先要設(shè)置開發(fā)平臺的IP2、 設(shè)置服務(wù)器即主機(jī)的IP3、 設(shè)置要下載文件即內(nèi)核的名字:4、 Ftp32下載5、下載完3、主要儀器設(shè)備及軟件:(1) PC(2) XSBase270 ARM 實(shí)驗(yàn)開發(fā)平臺一套實(shí)驗(yàn)七 嵌入式文件系統(tǒng)的構(gòu)建1、實(shí)驗(yàn)?zāi)康?了解嵌入式操作系統(tǒng)中文件系統(tǒng)的類型和作用 了解JFFS2文件系統(tǒng)的優(yōu)點(diǎn)及其在嵌入式系統(tǒng)中的作用 掌握利用BusyBox軟件制作嵌入式文件系統(tǒng)的方法 掌握嵌入式Linux文件系統(tǒng)的的掛載過程2、實(shí)驗(yàn)原理2.1、Linux文件系統(tǒng)的類型(1)、EXT文件系統(tǒng)Ext2fs是Linux的標(biāo)準(zhǔn)文件系統(tǒng),它已經(jīng)取代了擴(kuò)展文件系統(tǒng)(或 Extfs)。擴(kuò)展文件系統(tǒng)Extfs支持的文件大小最大為2 GB,支持的最大文件名稱大小為255個(gè)字符,而且它不支持索引節(jié)點(diǎn)(包括數(shù)據(jù)修改時(shí)間標(biāo)記)。Ext2fs取代Extfs具有一些優(yōu)點(diǎn):l Ext2fs支持達(dá)4 TB的內(nèi)存。l Ext2fs文件名稱最長可以到1012個(gè)字符。l 在創(chuàng)建文件系統(tǒng)時(shí),管理員可以根據(jù)需要選擇存儲邏輯塊的大?。ㄍǔ4笮】蛇x擇 1024、2048和4096字節(jié))。l Ext2fs可以實(shí)現(xiàn)快速符號鏈接(相當(dāng)windows文件系統(tǒng)的快捷方式),不需為符號鏈接分配數(shù)據(jù)塊,并且可將目標(biāo)名稱直接存儲在索引節(jié)點(diǎn)(inode)表中。這使文件系統(tǒng)的性能有所提高,特別在訪問速度上。 由于 Ext2fs文件系統(tǒng)的穩(wěn)定性、可靠性和健壯性,所以幾乎在所有基于Linux 的系統(tǒng)(包括臺式機(jī)、服務(wù)器和工作站,并且甚至一些嵌入式設(shè)備)上都使用Ext2fs文件系統(tǒng)。(2)、NFS文件系統(tǒng)NFS是一個(gè)RPC service ,它是由SUN公司開發(fā),并于1984年推出。NFS文件系統(tǒng)能夠使文件實(shí)現(xiàn)共享,它的設(shè)計(jì)是為了在不同的系統(tǒng)之間使用,所以NFS文件系統(tǒng)的通信協(xié)議設(shè)計(jì)與作業(yè)系統(tǒng)無關(guān)。當(dāng)使用者想使用遠(yuǎn)端文件時(shí)只要用“mount”命令就可以把遠(yuǎn)端文件系統(tǒng)掛載在自己的文件系統(tǒng)上,使遠(yuǎn)端的文件在使用上和本地機(jī)器的文件沒有區(qū)別。NFS的具體配置可參考實(shí)驗(yàn)一的網(wǎng)絡(luò)文件系統(tǒng)nfs的配置。(3)、JFFS2文件系統(tǒng)JFFS文件系統(tǒng)是瑞典Axis通信公司開發(fā)的一種基于Flash的日志文件系統(tǒng),它在設(shè)計(jì)時(shí)充分考慮了Flash的讀寫特性和電池供電的嵌入式系統(tǒng)的特點(diǎn),在這類系統(tǒng)中必需確保在讀取文件時(shí),如果系統(tǒng)突然掉電,其文件的可靠性不受到影響。 對Red Hat的Davie Woodhouse進(jìn)行改進(jìn)后,形成了JFFS2。主要改善了存取策略以提高FLASH的抗疲勞性,同時(shí)也優(yōu)化了碎片整理性能,增加了數(shù)據(jù)壓縮功能。需要注意的是,當(dāng)文件系統(tǒng)已滿或接近滿時(shí),JFFS2會大大放慢運(yùn)行速度。這是因?yàn)槔占膯栴}。相對于EXT2fs而言,JFFS2在嵌入式設(shè)備中更受歡迎。JFFS2文件系統(tǒng)通常用來當(dāng)作嵌入式系統(tǒng)的文件系統(tǒng)。JFFS2克服了JFFS的一些缺點(diǎn):使用了基于哈希表的日志節(jié)點(diǎn)結(jié)構(gòu),大大加快了對節(jié)點(diǎn)的操作速度l 支持?jǐn)?shù)據(jù)壓縮l 提供了“寫平衡”支持l 支持多種節(jié)點(diǎn)類型l 提高了對閃存的利用率,降低了內(nèi)存的消耗我們只需要在自己的嵌入式Linux中加入JFFS2文件系統(tǒng)并做少量的改動,就可以使用JFFS文件系統(tǒng)。通過JFFS2文件系統(tǒng),可以用Flash存儲器來保存數(shù)據(jù),即將Flash存儲器作為系統(tǒng)的硬盤來使用??梢韵癫僮饔脖P上的文件一樣操作Flash芯片上的文件和數(shù)據(jù)。同時(shí)系統(tǒng)運(yùn)行的參數(shù)可以實(shí)時(shí)保存到Flash存儲器芯片中,在系統(tǒng)斷電后數(shù)據(jù)不會丟失。作為一種EEPROM,F(xiàn)lash可分為NOR Flash 和NAND Flash兩種主要類型。一片沒有使用過的Flash存儲器,每一位的值都是邏輯1,對Flash的寫操作就是將特定位的邏輯1改變?yōu)檫壿?。而擦除就是將邏輯0改變?yōu)檫壿?。Flash的數(shù)據(jù)存儲是以塊(Block)為單位進(jìn)行組織,所以Flash在進(jìn)行擦除操作時(shí)只能進(jìn)行整塊擦除。Flash的使用壽命是以擦除次數(shù)進(jìn)行計(jì)算,一般是每塊100,000次。為了保證flash存儲芯片的某些塊不早于其他塊到達(dá)其壽命,有必要將在所有塊中盡可能地平均分配擦除次數(shù),這就是“損耗平衡”。JFFS2文件系統(tǒng)是一種“追加式”的文件系統(tǒng),新的數(shù)據(jù)總是被追加到上次寫入數(shù)據(jù)的后面。這種“追加式”的結(jié)構(gòu)就自然實(shí)現(xiàn)了“損耗平衡”。3、文件系統(tǒng)的制作(1)、Busybox介紹 Busybox是Debian GNU/Linux著名的Bruce Perens 首先開發(fā),主要使用在 Debian 的安裝程序中。后來又有許多 Debian 開發(fā)者對Busybox貢獻(xiàn)力量。Busybox 編譯成一個(gè)叫做 busybox獨(dú)立執(zhí)行程序,并且可以根據(jù)配置,執(zhí)行 ash shell 的功能,以及幾十個(gè)小應(yīng)用程序。這其中包括一個(gè)迷你的 vi 編輯器,系統(tǒng)不可或缺的 /sbin/init 程序,以及其他諸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat等等,所有這些都是一個(gè)正常的系統(tǒng)必不可少的,但如果把這些程序的原件拿過來的話,大小在一個(gè)嵌入式系統(tǒng)中無法承受。busybox 具有全部這些功能,大小也不過 100K 左右。而且用戶還可以根據(jù)自己的需要對busybox的應(yīng)用程序功能進(jìn)行配置選擇。這樣可以使busybox 的大小進(jìn)一步縮小。BusyBox支持多種體系結(jié)構(gòu),它可以靜態(tài)或動態(tài)鏈接glic或者uclibc庫,以滿足不同的需要,也可以修改BusyBox默認(rèn)的編譯配置以移除不想使用的命令的支持。(2)、busybox的編譯第1步、 從網(wǎng)上下載BusyBox軟件包,這里下載的是busybox-1.15.0tar.tar。首先把它放在/root/Xsbase270_Linux/Filesystem目錄下并進(jìn)行解壓縮。rootlocalhost$cd /root/Xsbase270_Linux/FilesystemrootFilesystem$ tar jxvf busybox-1.15.0.tar.tarrootFilesystemcd busybox-1.15.0rootFilesystemmake menuconfig 在busybox的頂層目錄下的Makefile中包含一些選項(xiàng)來控制BusyBox的創(chuàng)建。其中大部分選項(xiàng)是在開發(fā)busybox時(shí)為了調(diào)試而使用的。圖5-1是BusyBox的配置界面。圖5-1 配置BusyBox的主界面在Build Option菜單下,可以選擇靜態(tài)庫編譯方式,設(shè)置如下:* Build BusyBox as a static binary (no shared libs)由于為ARM系統(tǒng)制作文件系統(tǒng),所以在交叉編譯選項(xiàng)中需要使用帶glibc庫的支持的交叉編譯器arm-linux-gcc,具體配置如圖5-2所示:(假設(shè)ARM交叉編譯工具所在的目錄為/opt/xscalev1/bin) 圖5-2 配置BusyBox交叉編譯選項(xiàng)busybox默認(rèn)的安裝路徑為_install,用戶可以根據(jù)需要在Installation Options配置中輸入自定義路徑。圖5-3文件系統(tǒng)安裝路徑用戶可以根據(jù)需要對文件系統(tǒng)的功能選項(xiàng)進(jìn)行配置,這樣可以減少文件系統(tǒng)的大小,以節(jié)省存儲空間,當(dāng)用戶對文件系統(tǒng)的配置選項(xiàng)配置完畢后,需要對配置選項(xiàng)進(jìn)行保存操作,如圖5-5所示。圖5-3 文件系統(tǒng)安裝路徑圖 5-4配置完成后便可對BusyBox進(jìn)行編譯。rootFilesystem$ make dep rootFilesystem$ make install編譯和安裝完后生成_install目錄。并且可以看到bin、sbin和usr 三個(gè)目錄,在這三個(gè)目錄,可以看到一個(gè)busybox應(yīng)用程序和許多符號鏈接,并且還可以看出所有這些符號鏈接都指向busybox應(yīng)用程序。4、配置文件系統(tǒng)在_install下建立etc目錄:rootlocalhost _install# mkdir etc下面我們要在此etc下分別建立rc,inittab,motd三個(gè)文件。進(jìn)入剛新建的etc,在其下用vi rc命令建立rc文件:#!/bin/shhostname emdoor mount -t proc proc /proccat /etc/motd保存后退出,用chmod命令改變r(jià)c文件屬性rootlocalhost etc$chmod 777 rc在etc下新建一個(gè)inittab文件,內(nèi)容如下:sysinit:/etc/init.d/rcS# Start an askfirst shell on the console (whatever that may be):askfirst:/bin/sh# /sbin/getty invocations for selected ttystty4:respawn:/sbin/getty 38400 tty5tty5:respawn:/sbin/getty 38400 tty6# Example of how to put a getty on a serial line (for a terminal)#:respawn:/sbin/getty -L ttyS0 9600 vt100#:respawn:/sbin/getty -L ttyS1 9600 vt100# Example how to put a getty on a modem line.#:respawn:/sbin/getty 57600 ttyS2# Stuff to do when restarting the init process:restart:/sbin/init# Stuff to do before rebooting:ctrlaltdel:/sbin/reboot:shutdown:/bin/umount -a -r:shutdown:/sbin/swapoff -a 繼續(xù)在etc下建立motd文件,其內(nèi)容用戶隨意。Welcome to = ARM-LINUX WORLD =Base on : Xsbase270-EDRPartner : emdoor()= 2012110140=在etc下建立init.d目錄,而后在init.d目錄下建立rc文件的符號連接文件rcS。rootlocalhost etc$ ls inittab motd rc rootlocalhost etc$ mkdir init.drootlocalhost etc$cd init.drootlocalhost init.d$ ln -s ./rc rcS在_install下建立dev目錄,創(chuàng)建設(shè)備文件。在本實(shí)驗(yàn)中一些設(shè)備文件是必需的,比如系統(tǒng)控制臺console,MTD 塊設(shè)備 mdblock3等,可以使用mknod命令來創(chuàng)建。#mknod console c 5 1#mknod mdblock3 b 31 3除了使用mknod命令來手工創(chuàng)建設(shè)備文件外,還可以復(fù)制主機(jī)平臺/dev目錄下一些必要的設(shè)備文件/root/Xsbase270_Linux/Filesystem/busybox-1.15.0/_install/dev目錄下:# cp -dpR /dev/* /root/Xsbase270_Linux/Filesystem/busybox-1.15.0/_install/dev-dp參數(shù)表示復(fù)制過程中保證鏈接文件保持不變,但不會復(fù)制鏈接所指的原文件,而且屬性不變,然后刪除不必要的設(shè)備文件。5、制作JFFS2文件映像將光盤的filesystem下的mkfs.jffs2拷貝到buybox下返回到busybox的根目錄下,運(yùn)行命令mkfs.jffs2# ./mkfs.jffs2 -o rootfs -e 0x40000 -r _install -p -l生成映像文件rootfs,拷貝到/tftpboot中燒寫到flash中,啟動后運(yùn)行結(jié)果。6、結(jié)果7、實(shí)驗(yàn)儀器1、裝有Linux操作系統(tǒng)的PC機(jī)一臺;2、XSBase270或XSBase255 ARM實(shí)驗(yàn)開發(fā)平臺一套實(shí)驗(yàn)8 IO口驅(qū)動實(shí)驗(yàn)第1步:利用vi編輯器,編寫一個(gè)wqgk_seg.c 驅(qū)動代碼;(1)增加驅(qū)動所需的頭文件和變量#include #include #include #include #include MODULE_LICENSE(GPL);char LED_MODULE=0;#define DEVICE_NAMEwqgk_seg#define SEG_CS1 0x10300000 #define SEG_CS2 0x10400000static char LED10=0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7F, 0x6F;unsigned long *CS1_Address, *CS2_Address;struct wqgkchar LED1_Val;char LED2_Val;char LED3_Val;char LED4_Val;char negative;(2)同時(shí)更新所有七段數(shù)碼光驅(qū)動管顯示函數(shù)static void Updateled(struct wqgk *seg_7)unsigned short buff=0x00;buff=seg_7-LED1_Val;buff=buff|( seg_7-LED2_Val LED3_Val;buff=buff|( seg

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論