【正文】
寫作的過程中除了吳老師淵博的知識外,她嚴謹?shù)墓ぷ鲬B(tài)度也讓我受益匪淺。6總結(jié)與展望總結(jié)Bootloader的啟動流程[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的擦出方式還有點特別,是按塊擦除的,要注意一下塊大小。 //定義一個指向函數(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寄存器控制,復位的時候這三者都會自動關(guān)閉。b HandleSWI條件標志位位于程序代碼字節(jié)的Cond位,ARM指令的編碼格式[9]如圖23所示。2) 設置CPSR中相應的位,禁止IRQ中斷,當進入FIQ模式時,禁止FIQ模式,根據(jù)異常中斷的類型,設置CPSR的運行模式位,使處理器進入相應的執(zhí)行模式。一般的中斷處理過程為[7]:1) 關(guān)中斷,進入不可再次響應的狀態(tài),有硬件自動實現(xiàn)。正常執(zhí)行是指程序通過跳轉(zhuǎn)指令,跳到特定標號或者子程序中執(zhí)行,異常跳轉(zhuǎn)是指有異常中斷發(fā)生時,系統(tǒng)保存當前狀態(tài),跳到相應的異常處理函數(shù)去執(zhí)行,當異常處理函數(shù)處理完成后返回中斷發(fā)生前的下一條指令繼續(xù)執(zhí)行。5) 另外還有兩個特殊的寄存器CPSR和SPSP,一個為當前程序狀態(tài)寄存器,另一個為備份程序狀態(tài)寄存器,它們都包含了中斷禁止位、當前處理器模式標志位和狀態(tài)位等。其中除了用戶模式外,其他統(tǒng)稱為特權(quán)模式,特權(quán)模式中除系統(tǒng)模式外,其他統(tǒng)稱為異常模式,如圖21所示。最常見的情況就是,目標機上的Bootloader通過串口與主機之間進行文件傳輸,傳輸可以簡單的采用直接數(shù)據(jù)收發(fā)。不斷進行功能擴展的Bootloader已經(jīng)逐漸成為一個系統(tǒng)級的代碼包?,F(xiàn)在嵌入式產(chǎn)品日新月異,即使是采用相同架構(gòu)的CPU,如果采用不同的板級設備也會產(chǎn)生相應的Bootloader,因此構(gòu)建一個完全通用的Bootloader基本上是不可能的,在資源有限的嵌入式世界里面,追求的是短小精悍中的高性能。Bootloader的啟動過程可以是單階段的,也可以是多階段的。關(guān)鍵詞:Bootloader 啟動 嵌入式 加載內(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能提供更為復雜的功能,以及更好的可移植性。因此,Bootloader就像嵌入式產(chǎn)品一樣豐富多彩,但由于這部分程序的要求非常高,一般由各大芯片廠商提供。 ARM Bootloader的共性雖然Bootloader的設計和實現(xiàn)是根據(jù)具體的CPU和硬件設備緊密相關(guān)的,但其都是為了引導和加載內(nèi)核,一般來說對ARM Bootloader的操作具有以下的共性:初始化RAM,因為程序要在RAM上運行,初始化串口,控制臺與串口連接能方便的進行Debug工作和通信以及指定內(nèi)核的啟動,正確引導系統(tǒng)啟動。當然,在串口上也可以采用Xmodem/Ymodem/Zmodem協(xié)議以及在以太網(wǎng)上采用TFTP協(xié)議[3]。 ARM工作模式系統(tǒng)模式快速中斷模式普通中斷模式管理模式數(shù)據(jù)訪問中止模式未定義指令中止模式異常模式特權(quán)模式用戶模式圖 2 1 ARM處理器的7種工作模式 ARM寄存器ARM處理器7種運行模式的描述如表21所示。其中CPSR可以在任何處理器模式下被訪問。當正常的程序執(zhí)行流程發(fā)生暫時的停止時稱之為異常,例如處理一個外部的中斷請求。2) 保存斷點和現(xiàn)場。3) 將當前指令的下一條指令的地址存入相應的LR,保證異常中斷返回時能接著正確的運行。3128 27 26 25 24 21 20 1916 1512 11 0cond00opcodeRnISRd Operand22831為cond位,執(zhí)行指令的條件編碼25位I決定operand2的格式2425位表示操作碼20位S表示結(jié)果是否影響狀態(tài)寄存器的標志位1619位Rn為第一操作數(shù)的寄存器編碼1215位Rd為目標寄存器編碼011位為第二操作數(shù)編碼圖 2 3指令格式描述圖3 Bootloader的設計與實現(xiàn) S3C MINI2440的片上資源CPU主頻400MHz,最高533Mhz + SDRAM 64M 32Bit數(shù)據(jù)總線,時鐘頻率高達100MHz + 128M Nand Flash + 2M Nor Flash + 3 個串行口 + 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) //快速中斷模式堆棧地址