中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
uboot_mt7620對(duì)SPI flash操作的分析

接上篇文章,AR9331系統(tǒng)與mt7620系統(tǒng)對(duì)flash的劃分是不一樣的,AR系統(tǒng)劃分為Flash(可能是作為NAND來(lái)處理),而mt7620(mips)系統(tǒng)則劃分的比較明確,用的是SPI_FLASH。

在uboot的啟動(dòng)界面上,可以看到這樣一些信息:

  1. Please choose the operation:   
  2.    1: Load system code to SDRAM via TFTP.   
  3.    2: Load system code then write to Flash via TFTP.   
  4.    3: Boot system code via Flash (default).  
  5.    4: Entr boot command line interface.  
  6.    7: Load Boot Loader code then write to Flash via Serial.   
  7.    9: Load Boot Loader code then write to Flash via TFTP.   

于是,
  1. grep 'write to Flash via TFTP' -r .  
找到:
  1. ./lib_mips/board.c: printf("   %d: Load system code then write to Flash via TFTP. \n", SEL_LOAD_LINUX_WRITE_FLASH);  
  2. ./lib_mips/board.c: printf("   %d: Load Boot Loader code then write to Flash via TFTP. \n", SEL_LOAD_BOOT_WRITE_FLASH);  
  3. ./lib_mips/board.c:         printf("   \n%d: System Load Linux Kernel then write to Flash via TFTP. \n", SEL_LOAD_LINUX_WRITE_FLASH);  
  4. ./lib_mips/board.c:         printf("   \n%d: System Load Boot Loader then write to Flash via TFTP. (.bin)\n", SEL_LOAD_BOOT_WRITE_FLASH);  
打開(kāi)board.c一看究竟。
  1. void OperationSelect(void)  
  2. {  
  3.     printf("\nPlease choose the operation: \n");  
  4.     printf("   %d: Load system code then write to Flash via Serial. \n", SEL_LOAD_LINUX_WRITE_FLASH_BY_SERIAL);  
  5.     printf("   %d: Load system code to SDRAM via TFTP. \n", SEL_LOAD_LINUX_SDRAM);  
  6.     printf("   %d: Load system code then write to Flash via TFTP. \n", SEL_LOAD_LINUX_WRITE_FLASH);  
  7.     printf("   %d: Boot system code via Flash (default).\n", SEL_BOOT_FLASH);  
  8. #ifdef RALINK_CMDLINE  
  9.     printf("   %d: Entr boot command line interface.\n", SEL_ENTER_CLI);  
  10. #endif // RALINK_CMDLINE //  
  11.   
  12. #if defined(ASUS_RTN14U)  
  13.     printf("   %d: Load Boot Loader code to SDRAM via Serial. \n", SEL_LOAD_BOOT_SDRAM_VIA_SERIAL);  
  14. #endif    
  15. #ifdef RALINK_UPGRADE_BY_SERIAL  
  16.     printf("   %d: Load Boot Loader code then write to Flash via Serial. \n", SEL_LOAD_BOOT_WRITE_FLASH_BY_SERIAL);  
  17. #endif // RALINK_UPGRADE_BY_SERIAL //  
  18.   
  19. #if defined(ASUS_RTN14U)  
  20.     printf("   %d: Load Boot Loader code to SDRAM via TFTP. \n", SEL_LOAD_BOOT_SDRAM);  
  21. #endif  
  22.     printf("   %d: Load Boot Loader code then write to Flash via TFTP. \n", SEL_LOAD_BOOT_WRITE_FLASH);  
  23. }  
調(diào)用層次為:【./cpu/ralink_soc/start.S: lat9, board_init_r】→【board_init_r】→【OperationSelect】
  1.         case '2':  
  2.             printf("   \n%d: System Load Linux Kernel then write to Flash via TFTP. \n", SEL_LOAD_LINUX_WRITE_FLASH);  
  3.             printf(" Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)\n");  
  4.             confirm = getc();  
  5.             if (confirm != 'y' && confirm != 'Y') {  
  6.                 printf(" Operation terminated\n");  
  7.                 break;  
  8.             }  
  9.             tftp_config(SEL_LOAD_LINUX_WRITE_FLASH, argv);  
  10.             argc= 3;  
  11.             setenv("autostart""no");  
  12.             do_tftpb(cmdtp, 0, argc, argv);  
  13.   
  14. #if defined (CFG_ENV_IS_IN_NAND)  
  15.             if (1) {  
  16.                 unsigned int load_address = simple_strtoul(argv[1], NULL, 16);  
  17.                 ranand_erase_write((u8 *)load_address, CFG_KERN_ADDR-CFG_FLASH_BASE, NetBootFileXferSize);  
  18.             }  
  19. #elif defined (CFG_ENV_IS_IN_SPI)  
  20.             if (1) {  
  21.                 unsigned int load_address = simple_strtoul(argv[1], NULL, 16);  
  22.                 raspi_erase_write((u8 *)load_address, CFG_KERN_ADDR-CFG_FLASH_BASE, NetBootFileXferSize);  
  23.             }  
  24. #else //CFG_ENV_IS_IN_FLASH  
  25. #if (defined (ON_BOARD_8M_FLASH_COMPONENT) || defined (ON_BOARD_16M_FLASH_COMPONENT)) && (defined (RT2880_ASIC_BOARD) || defined (RT2880_FPGA_BOARD) || defined (RT3052_MP1))  
  26.             //erase linux  
  27.             if (NetBootFileXferSize <= (0x400000 - (CFG_BOOTLOADER_SIZE + CFG_CONFIG_SIZE + CFG_FACTORY_SIZE))) {  
  28.                 e_end = CFG_KERN_ADDR + NetBootFileXferSize;  
  29.                 if (0 != get_addr_boundary(&e_end))  
  30.                     break;  
  31.                 printf("Erase linux kernel block !!\n");  
  32.                 printf("From 0x%X To 0x%X\n", CFG_KERN_ADDR, e_end);  
  33.                 flash_sect_erase(CFG_KERN_ADDR, e_end);  
  34.             }  
  35.             else if (NetBootFileXferSize <= CFG_KERN_SIZE) {  
  36.                 e_end = PHYS_FLASH_2 + NetBootFileXferSize - (0x400000 - (CFG_BOOTLOADER_SIZE + CFG_CONFIG_SIZE + CFG_FACTORY_SIZE));  
  37.                 if (0 != get_addr_boundary(&e_end))  
  38.                     break;  
  39.                 printf("Erase linux kernel block !!\n");  
  40.                 printf("From 0x%X To 0x%X\n", CFG_KERN_ADDR, CFG_FLASH_BASE+0x3FFFFF);  
  41.                 flash_sect_erase(CFG_KERN_ADDR, CFG_FLASH_BASE+0x3FFFFF);  
  42.                 printf("Erase linux file system block !!\n");  
  43.                 printf("From 0x%X To 0x%X\n", PHYS_FLASH_2, e_end);  
  44.                 flash_sect_erase(PHYS_FLASH_2, e_end);  
  45.             }  
  46. #else  
  47.             if (NetBootFileXferSize <= (bd->bi_flashsize - (CFG_BOOTLOADER_SIZE + CFG_CONFIG_SIZE + CFG_FACTORY_SIZE))) {  
  48.                 e_end = CFG_KERN_ADDR + NetBootFileXferSize;  
  49.                 if (0 != get_addr_boundary(&e_end))  
  50.                     break;  
  51.                 printf("Erase linux kernel block !!\n");  
  52.                 printf("From 0x%X To 0x%X\n", CFG_KERN_ADDR, e_end);  
  53.                 flash_sect_erase(CFG_KERN_ADDR, e_end);  
  54.             }  
  55. #endif  
  56.             else {  
  57.                 printf("***********************************\n");  
  58.                 printf("The Linux Image size is too big !! \n");  
  59.                 printf("***********************************\n");  
  60.                 break;  
  61.             }  
  62.   
  63.             //cp.linux  
  64.             argc = 4;  
  65.             argv[0]= "cp.linux";  
  66.             do_mem_cp(cmdtp, 0, argc, argv);  
  67. #endif //CFG_ENV_IS_IN_FLASH  
  68.   
  69. #ifdef DUAL_IMAGE_SUPPORT  
  70.             /* Don't do anything to the firmware upgraded in Uboot, since it may be used for testing */  
  71.             setenv("Image1Stable""1");  
  72.             saveenv();  
  73. #endif  
  74.   
  75.             //bootm bc050000  
  76.             argc= 2;  
  77.             sprintf(addr_str, "0x%X", CFG_KERN_ADDR);  
  78.             argv[1] = &addr_str[0];  
  79.             do_bootm(cmdtp, 0, argc, argv);              
  80.             break;  

調(diào)用的是 raspi_erase_write 方法來(lái)對(duì)spi flash進(jìn)行擦除和寫(xiě)入。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
AT91RM9200引導(dǎo)程序的建立(三)--------U-Boot1.1.4在AT91R...
【嵌入式Linux學(xué)習(xí)七步曲之第三篇 Linux系統(tǒng)bootlaoder移植】U-BOOT全線(xiàn)移植分析系列之四--U-boot如何引導(dǎo)Linux內(nèi)核啟動(dòng)? - Sailor
Uboot使用查看uboot支持命令-RK3568開(kāi)發(fā)板
uboot常用命令總結(jié)
Uboot移植--支持yaffs2,TFTP菜單制作,支持Xmodem
cisco 2600 ios誤刪除后恢復(fù)(tftp)
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服