版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
較強的嵌入式系統(tǒng)工程師,而且還做了自己開發(fā)板,那么還是要學下如果將網上的通用u-boot移植到自己的開發(fā)板上,這個過程主要是修改主相關代碼以及開發(fā)板硬件Start.s、NANDUSBIO發(fā)板上的資源,畢竟做u-boot這個開源項目的人不可能知道你用的是什么開發(fā)板,所以只能做個通用應用程序,然后再由做板的人去移植u-boot。我這里不講移植,因為博芯已經為SEP4020和MINI4020移植好了u-boot,其實移植u-boot也屬于BSP的一部分,和就是做這塊的,我們只說如何使用u-boot,或者說如何修改別人移植好的u-boot來滿足自己的需求。要修改一個程序(u-boot也是一個程序,只不過非常大罷了啟動文件:一般為start.s或者startup.s,是在進入main()函數(shù)之前對開發(fā)板的初始MMU、打開中斷、初始化中斷向量表等,這個在學習ARM編程后會有所了解,在啟動文件的最后一句一般是到main去執(zhí)行,也即進入main()函數(shù)。lib_arm/board.c。這里建議使用SourceInsight這款軟件來看代碼,因為u-boot中代碼錯綜復雜,即使把執(zhí)行流程全部給你寫出來你也不一定能在整個u-boot文件夾中找到每個想要函數(shù),而SI能幫你解決這個問題,只要選中某個函數(shù),SI就會自動的在整個文件中中搜開源項目代碼(mady、web服務器等)時,也盡量使用SI,否則會無從下手。在flashu-bootflashRAM然后跳到lib_arm/board.c中的start_armboot中去執(zhí)行。清I/Dcache;MMU和CACHE;配置memorycontrol;如果當前代碼不在指定的地址上(一般在編譯源代碼時會有“ ”這句,表示地址為0x )則需要把u-boot從當前位置拷貝到RAM指定位置中;4、清.bss是這其實實在啟動文件中的最后一句話中指定的,如果寫為main,就跳轉到main,寫成start_armbootstart_armboot。它主要的任務是完成系統(tǒng)初始化工作,進入主循環(huán),voidstart_armboot{//全局數(shù)據(jù)變量指gd占用r8/*給全局數(shù)據(jù)變gd間gd=(gd_t*)(_armboot_start-CFG_MALLOC_LEN-sizeof(gd_t));memset((void*)gd,0,sizeof(gd_t));/*給板子數(shù)據(jù)變gd->bd間gd->bd=(bd_t*)((char*)gd-sizeof(bd_t));memset(gd->bd,0,sizeof(bd_t));monitor_flash_len=_bss_start-_armboot_start;//取u-boot的長/*順序執(zhí)init_sequence數(shù)組中的初始化函數(shù)for(init_fnc_ptr=init_sequence;*init_fnc_ptr;{if((*init_fnc_ptr)()!={hang}}/*配置可用的Flash*/size=flash_init();/*初始化堆空間mem_malloc_init(_armboot_start-/*環(huán)境變*/env_relocate();/*從環(huán)境變量中獲IP地址gd->bd->bi_ip_addr=getenv_IPaddr/*以太網接口MAC地址devices_init();/*設備初始化*/juteii();//跳轉表初始化console_init_r();/*完整地初始化控制臺設備*/enable_interrupts();/*使能中斷處理*//*通過環(huán)境變量初始化if((s=getenv("loadaddr"))!={load_addr=simple_strtoul(s,NULL,}/*m_lo循環(huán)不斷執(zhí)行*/for(;;){main_loop();/*主循環(huán)函數(shù)處理執(zhí)行用戶命令--common/main.c}}init_fnc_tntsequnc[= /*基本的處理器相關配置--cpu/arm920t/cpu.c*/ /*基本的板級相關配置--board/smdk2410/smdk2410.c*/ /*初始化例外處理--cpu/arm920t/s3c24x0/interrupt.c*/ /*初始化環(huán)境變量--common/env_flash.c*/init_baudrate,/*初始化波特率設置--lib_arm/board.c*/serial_init,/*串口通訊設置--cpu/arm920t/s3c24x0/serial.c*/console_init_f,/*控制臺初始化階段1--common/console.c*/disy_banner,/*打印u-boot信息--lib_arm/board.c*/ /*配置可用的RAM--board/smdk2410/smdk2410.c*/disy_dram_config,/*顯示RAM的配置大小--lib_arm/board.c*/整個u-bootmain_loopmain_loopcommon/main.ccommon/main.cabortboot(),它是用于設置啟動延時的,是個回調函數(shù),一般程序啟動時需要快速按spaceuboot一鍵式菜單,這個這段的意思是如果檢測到鍵盤輸入按鍵,則進入u-boot一鍵式菜單,否則啟動系統(tǒng)。里面的abort=1很重要,這個全局變量為1時進入u-boot一鍵式菜單,為0時則直接引導啟Linuxu-bootabort=1main_loop()里的注釋“MainLoopforMonitorCommandProcessing”處可以添加一鍵式:if"rn# Main##############\r\n");printf("\r\n********* EmbedRoadStudio *********\r\n\r\n");printf("[f]FormattheNandFlash\r\n");printf("[0]Setthebootparameters\r\n");printf("[1]Downloadu-boottoNandFlash\r\n");printf("[2]DownloadFontLibrarytoNandFlash\r\n");printf("[3]DownloadLOGOPicture(.bin)toNandla\");printf("[4]DownloadProgramtoSDRAMandRunit\r\n");printf("[d]DownloadUserProgram\r\nn");printf("[e]ExecUserProgram\r\n");printf("[q]Quitfrom \r\n");printf("\r\nEnteryourselection:");while(!(((keyselect>='0')&&(keyselect<='4'))||keyelec=='f')||keyeec=='F'))||((keyselect=='q')||(keyselect=='Q'))||((keyselect=='d')||(keyselect=='D'))||((keyselect=='e')||(keyselect=='E')))){keyselect=}switch{casecase'1':case'2':...}nandnandnandcommonc文件用來專門實現(xiàn)一鍵式菜單,像三星的板子配套的uboot一般有一個cmd_.c文件,也是在common/中,當然添加一個C文件后記在編譯前在makefile中把這個新添加(switch{case'0'://cfg{ }case'1':/owloau-boottoNand{strcpy(cmd_buf,"dnw ;nanderase0x00x40000;nand 0x0mand(cmd_buf,}case nib{sprintf(cmd_buf,"dnw0xc ;nanderase0x800000x50000;nandwrite.jffs20xc 0x800000x50000");mand(cmd_buf,}case'3':icu{}case'4':/onoProgramtoSDRAMandRun{chard_[]printf("Enteronoaddress:(eg: diNy(d_fnslffsprintf(cmd_buf,"dnw%s;go%s",addr_buff,addr_buff);mand(cmd_buf,0);}case'f'://FrmtheNandFlashcase'F':{strcpy(cmd_buf,"nandscrub");mand(cmd_buf,0);}case'D':/DwnoaUserProgramcase'd':{strcpy(cmd_buf,"dnw0xc ;nanderase0x 0x40000;nandwrite.jffs20xc mand(cmd_buf,}casecase{strcpy(cmd_buf,"nandread0x 0x80000;go0x mand(cmd_buf,0);}casecase{}}可以這么說,你平時在u-boot下手動輸入的哪些指令都是可以寫在u-boot程序中的,u-bootuboot1、dnw dnw命令是三星公司自己定義的一個命令,主要是用于通過 口從PC機程序到內存的。這句話的意思是等待PC傳送.bin文件,然后把接收的文件存放在0xc 2、nanderase nanderase是擦除NANDFlash中某段空間,這句話的意思是從NAND的偏移地址 開始,擦除0x40000大小。如果NAND在ARM里的器空間基址 ,那么擦除的區(qū)域為 3、nandread nandread可以從NANDFlash中一段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)合集人事管理篇十篇
- 《證券交易流程》課件
- 《企業(yè)戰(zhàn)略管理》課件
- 新生引航共筑未來
- 學校三年級班主任工作總結5篇
- 2023年-2024年新員工入職安全教育培訓試題附答案(突破訓練)
- 大學畢業(yè)晚會策劃書合集15篇
- 2023年-2024年新入職員工安全教育培訓試題附下載答案可打印
- 2024員工三級安全培訓考試題(原創(chuàng)題)
- 保護環(huán)境的建議書(合集15篇)
- DS12C887電子時鐘(附程序)
- 新產品試制流程管理辦法
- 王牌電話交換機說明書
- 列管式換熱器-換熱面積計算
- 10個地基基礎工程質量通病及防治措施
- 25m預應力混凝土簡支T梁橋設計(共30頁)
- 籃球校本課程教案
- 高一學生文理分班意向表
- 高等傳熱學部分答案
- 地球物理學進展投稿須知
- 機床精度檢驗標準 VDI3441 a ISO230-2
評論
0/150
提交評論