【正文】
寫作的過程中除了吳老師淵博的知識(shí)外,她嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度也讓我受益匪淺。6總結(jié)與展望總結(jié)Bootloader的啟動(dòng)流程[10]如圖61所示。USB host is connected. Waiting a download.Now, Downloading [ADDRESS:30000000h,TOTAL:249026]RECEIVED FILE SIZE: 249026 (243KB/S, 1S)Downloaded file at 0x30000000, size = 249016 bytesFound block size = 0x00040000Erasing... ... doneWriting... ... doneWritten 249016 bytes Flash的操作是先擦除后燒寫的,F(xiàn)lash的擦出方式還有點(diǎn)特別,是按塊擦除的,要注意一下塊大小。 //定義一個(gè)指向函數(shù)的指針LINUX_KERNEL_ENTRY pfExecKernel。 //快中斷模式跳轉(zhuǎn)向量地址GBLL THUMBCODE //定義全局邏輯變量[ {CONFIG} = 16 //16位的Thumb指令THUMBCODE SETL {TRUE} CODE32 //32位的ARM指令 |THUMBCODE SETL {FALSE} //使用32位的ARM指令集]、指令/數(shù)據(jù)高速緩存 MMU、ICache、Dcache狀態(tài)都由CP15協(xié)處理器的C1寄存器控制,復(fù)位的時(shí)候這三者都會(huì)自動(dòng)關(guān)閉。b HandleSWI條件標(biāo)志位位于程序代碼字節(jié)的Cond位,ARM指令的編碼格式[9]如圖23所示。2) 設(shè)置CPSR中相應(yīng)的位,禁止IRQ中斷,當(dāng)進(jìn)入FIQ模式時(shí),禁止FIQ模式,根據(jù)異常中斷的類型,設(shè)置CPSR的運(yùn)行模式位,使處理器進(jìn)入相應(yīng)的執(zhí)行模式。一般的中斷處理過程為[7]:1) 關(guān)中斷,進(jìn)入不可再次響應(yīng)的狀態(tài),有硬件自動(dòng)實(shí)現(xiàn)。正常執(zhí)行是指程序通過跳轉(zhuǎn)指令,跳到特定標(biāo)號(hào)或者子程序中執(zhí)行,異常跳轉(zhuǎn)是指有異常中斷發(fā)生時(shí),系統(tǒng)保存當(dāng)前狀態(tài),跳到相應(yīng)的異常處理函數(shù)去執(zhí)行,當(dāng)異常處理函數(shù)處理完成后返回中斷發(fā)生前的下一條指令繼續(xù)執(zhí)行。5) 另外還有兩個(gè)特殊的寄存器CPSR和SPSP,一個(gè)為當(dāng)前程序狀態(tài)寄存器,另一個(gè)為備份程序狀態(tài)寄存器,它們都包含了中斷禁止位、當(dāng)前處理器模式標(biāo)志位和狀態(tài)位等。其中除了用戶模式外,其他統(tǒng)稱為特權(quán)模式,特權(quán)模式中除系統(tǒng)模式外,其他統(tǒng)稱為異常模式,如圖21所示。最常見的情況就是,目標(biāo)機(jī)上的Bootloader通過串口與主機(jī)之間進(jìn)行文件傳輸,傳輸可以簡單的采用直接數(shù)據(jù)收發(fā)。不斷進(jìn)行功能擴(kuò)展的Bootloader已經(jīng)逐漸成為一個(gè)系統(tǒng)級(jí)的代碼包?,F(xiàn)在嵌入式產(chǎn)品日新月異,即使是采用相同架構(gòu)的CPU,如果采用不同的板級(jí)設(shè)備也會(huì)產(chǎn)生相應(yīng)的Bootloader,因此構(gòu)建一個(gè)完全通用的Bootloader基本上是不可能的,在資源有限的嵌入式世界里面,追求的是短小精悍中的高性能。Bootloader的啟動(dòng)過程可以是單階段的,也可以是多階段的。關(guān)鍵詞:Bootloader 啟動(dòng) 嵌入式 加載內(nèi)核Design and Implementation of Bootloader Based on MINI2440Student Majoring in Network Engineering Li DonghaiTutor Wu JunhuaAbstract: The embedded system is divided into four sections, such as bootloader, kernel, file systems and user application program. Bootloader design is an important part. The purpose of introducing the bootloader is to organize chip resources better, initialize hardware and load kernel image files conveniently when booting the operating system. The bootloader is designed with assembly language and C language, which implement many functions such as prohibition of closed dog, distribution of storage space, configuration of interrupt vectors and stack and etc. The design can implement the initialization of hardware, partition of stacks in application program and load kernel. It is convenient for user to increase, decrease and transplant programs. The developing efficiency is improved and developing difficulty is reduced.Key words: Bootloader。 Boot。通常多階段的Bootloader能提供更為復(fù)雜的功能,以及更好的可移植性。因此,Bootloader就像嵌入式產(chǎn)品一樣豐富多彩,但由于這部分程序的要求非常高,一般由各大芯片廠商提供。 ARM Bootloader的共性雖然Bootloader的設(shè)計(jì)和實(shí)現(xiàn)是根據(jù)具體的CPU和硬件設(shè)備緊密相關(guān)的,但其都是為了引導(dǎo)和加載內(nèi)核,一般來說對(duì)ARM Bootloader的操作具有以下的共性:初始化RAM,因?yàn)槌绦蛞赗AM上運(yùn)行,初始化串口,控制臺(tái)與串口連接能方便的進(jìn)行Debug工作和通信以及指定內(nèi)核的啟動(dòng),正確引導(dǎo)系統(tǒng)啟動(dòng)。當(dāng)然,在串口上也可以采用Xmodem/Ymodem/Zmodem協(xié)議以及在以太網(wǎng)上采用TFTP協(xié)議[3]。 ARM工作模式系統(tǒng)模式快速中斷模式普通中斷模式管理模式數(shù)據(jù)訪問中止模式未定義指令中止模式異常模式特權(quán)模式用戶模式圖 2 1 ARM處理器的7種工作模式 ARM寄存器ARM處理器7種運(yùn)行模式的描述如表21所示。其中CPSR可以在任何處理器模式下被訪問。當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí)稱之為異常,例如處理一個(gè)外部的中斷請(qǐng)求。2) 保存斷點(diǎn)和現(xiàn)場。3) 將當(dāng)前指令的下一條指令的地址存入相應(yīng)的LR,保證異常中斷返回時(shí)能接著正確的運(yùn)行。3128 27 26 25 24 21 20 1916 1512 11 0cond00opcodeRnISRd Operand22831為cond位,執(zhí)行指令的條件編碼25位I決定operand2的格式2425位表示操作碼20位S表示結(jié)果是否影響狀態(tài)寄存器的標(biāo)志位1619位Rn為第一操作數(shù)的寄存器編碼1215位Rd為目標(biāo)寄存器編碼011位為第二操作數(shù)編碼圖 2 3指令格式描述圖3 Bootloader的設(shè)計(jì)與實(shí)現(xiàn) S3C MINI2440的片上資源CPU主頻400MHz,最高533Mhz + SDRAM 64M 32Bit數(shù)據(jù)總線,時(shí)鐘頻率高達(dá)100MHz + 128M Nand Flash + 2M Nor Flash + 3 個(gè)串行口 + 1 間距10 針JTAG 接口 + 4 USER Leds + 12M 無源晶振。UserStack EQU(_STACK_BASEADDRESS0x3800)//用戶模式的堆棧地址SVCStack EQU (_STACK_BASEADDRESS0x2800)//管理模式的堆棧地址 UndefStack EQU(_STACK_BASEADDRESS0x2400) //未定義中止模式堆棧地址AbortStack EQU(_STACK_BASEADDRESS0x2000)//訪問中止模式堆棧地址 IRQStack EQU (_STACK_BASEADDRESS0x1000)//普通中斷模式堆棧地址FIQStack EQU (_STACK_BASEADDRESS0x0) //快速中斷模式堆棧地址