首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 23733|回復(fù): 2
上一主題 下一主題

全志A20啟動代碼流程分析 ——Android

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2015-8-10 13:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 | 來自浙江
現(xiàn)在的CPU都固化了內(nèi)部 ROM,內(nèi)部 ROM中有一般都有一段程序,一般有如下幾個功能:
1,初始化,部分外設(shè),如USB,SDCARD
2,初始化DDR(內(nèi)存)和NandFlash
3,加載boot(這個階段的boot)


A20啟動代碼流程分析:

1:全志的啟動包括boot0,boot1,u-boot,boot0與boot1源碼在lichee/boot/目錄下,   機器上電執(zhí)行boot0,boot0
A20啟動代碼流程分析:
1:全志的啟動包括boot0,boot1,u-boot,boot0與boot1源碼在lichee/boot/目錄下,
   機器上電執(zhí)行boot0,boot0就會引導(dǎo)boot1,boot1再引導(dǎo)u-boot。
2:在lichee/boot/目錄下的Makefile文件指定了boot1的編譯目錄,例如
        make -f make_sdmmc  -C boot1/core -j8命令就是調(diào)用lichee/boot/boot1/core目錄下make_sdmmc腳本編譯,
        make_sdmmc最終又調(diào)用make.cfg腳本編譯,所以lichee/boot/目錄下的Makefile文件指定的編譯路徑最終都會
        調(diào)用各自目錄下的make.cfg來編譯。
3:使用make_nand與make_sdmmc腳本是core目錄生成的boot1_nand.bin與boot1_sdcard.bin,同時在
        lichee/boot/workspace/egon/與lichee/tools/pack/chips/sun7i/eGon/目錄生成,他們分別調(diào)用
        lichee/boot/boot1/driver/drv_nand/與lichee/boot/boot1/driver/drv_sd/目錄下的文件;
        boot1_nand.bin與boot1_sdcard.bin分別對應(yīng)啟動模式:nandflash與inand啟動,配置文件是在
        lichee/boot/pack/chips/sun7i/configs/android/目錄下相應(yīng)的文件指定,其中storage_type字段指定,
        2為inand啟動,—1為nandflash啟動;Boot_Android是正常啟動模式,Boot_Burn是調(diào)試模式,Card_Android
        是升級模式,他們分別生成boot.axf,prvt.axf與sprite.axf鏡像,同時在
        lichee/boot/workspace/wboot/bootfs/與lichee/tools/pack/chips/sun7i/wboot/bootfs/目錄生成;
        lichee/boot/boot1/driver/drv_de/目錄是多媒體庫源碼,是Lcd與HDMI等顯示源碼,同時在
        lichee/boot/workspace/wboot/bootfs/與lichee/tools/pack/chips/sun7i/wboot/bootfs/目錄生成
        drv_de.drv鏡像。
4:arm_start.S(boot1/core/arm_board)->eGon2_swi_handler->eGon2_swi_handler_entry->eGon2_init->
         eGon2_start->eGon2_storage_type_set(判斷啟動模式,加載boot.axf或者sprite.axf),eGon2_run_app->
         FS_fread(加載.axf文件),elf_loader[*entry = (__u32)priv->main;],func(argc, argv)[該函數(shù)就是
         BootMain()的指針]->BootMain。
         (1)正常啟動模式:
                 BootMain->BoardInit_Display[加載drv_de.drv,判斷顯示模式,LCD,TV,HDMI等],check_power_status[
                 檢測電壓與電池狀態(tài),判斷是否開機],BootOS_detect_os_type[加載u-boot.bin,PreBootOS->
                 boot_dsipatch_kernal[設(shè)置u-boot的物理地址是*kernal_addr = 0x4a000000]->wBoot_fopen("c:\\linux\\u-boot.bin", "rb")],
                 BootOS[wBoot_jump_to_linux->EGON2_SWI_JUMP_TO_LINUX->eGon2_jump_to_android_linux直接進入u-boot
                 接口]。
         (2)升級模式:
           BootMain->boot_ui_init[加載drv_de.drv,判斷顯示模式,LCD,TV,HDMI等],card_sprite->
           update_flash_hardware_scan[掃描當(dāng)前存儲設(shè)備是nand還是inand,update_boot0,update_boot1,
           根據(jù)sprite_type判斷升級nand還是inand]。
5:(1)lichee/tools/pack/pack腳本打包鏡像文件。
         (2)編譯kernel的時候首調(diào)用./build.sh -p sun7i_android->buildroot/scripts/common.sh->
                         lichee/linux-3.3/build.sh->lichee/buildroot/scripts/build_sun7i_android.sh編譯。
                         在編譯kernel的時候也編譯也u-boot,調(diào)用./build.sh -p sun7i_android->buildroot/scripts/common.sh->
                         lichee/u-boot/build.sh編譯。
6:lichee/boot/pack/chips/sun7i/wboot/bootfs.ini或lichee/tools/pack/chips/sun7i/wboot/bootfs.ini
                把文件系統(tǒng)盤符映射成C盤,就是代碼中使用的c:\\boot.ini","c:\\sprite.axf"等。
                lichee/tools/pack/chips/sun7i/configs/android/default/下有env.cfg與image.cfg配置文件,
                env.cfg是u-boot使用的配置文件,包括nand_root,mmc_root,loglevel,bootcmd等參數(shù);
                image.cfg是boot使用的文件列表與ITEM_ROOTFSFAT32等重要符號。
               


7:sys_partition.fex文件中各個分區(qū)與下載對應(yīng)的文件如下:
        bootloader分區(qū)保存bootloader.fex,bootloader.fex就是由boot.axf u-boot.bin等組成。
        env分區(qū)保存env.fex,env.fex就是lichee/tools/pack/chips/sun4i/configs/crane/default/env.cfg文件,它是u-boot的基本配置。
        boot分區(qū)保存boot.fex,boot.fex是boot.img的鏈接,它由kernel與ramdisk組成,使用fastboot下載的時候就是下載boot.img。
        system分區(qū)保存system.fex,system.fex是system.img的鏈接,它是android系統(tǒng),使用fastboot下載的時候就是下載system.img。
        recovery分區(qū)保存recovery.fex,recovery.fex是recovery.img的鏈接,它也是由kernel與ramdisk組成,用于系統(tǒng)恢復(fù),使用fastboot下載的時候就是下載recovery.img。
        misc分區(qū)用于恢復(fù)系統(tǒng)設(shè)置的時候在uboot中保存一些變量與命令的值。
        *.fex文件在lichee/tools/pack/out/目錄,*.img在anroid/out/...下。
        
8:A20的分區(qū)如下:
        --------fastboot partitions--------
        -total partitions:11-
        -name-        -start-       -size-      
        bootloader  : 8000          8000        
        env         : 10000         8000        
        boot        : 18000         8000        
        system      : 20000         100000      
        data        : 120000        100000      
        misc        : 220000        8000        
        recovery    : 228000        10000      
        cache       : 238000        80000      
        private     : 2b8000        8000        
        databk      : 2c0000        80000      
        UDISK       : 340000        3e0000      
        -----------------------------------
        其中UDISK就是作為SDCARD分區(qū),bootloader是從16MB開始,在bootloader的前面是
        16KB的MBR_SIZE與16KB的DL_SIZE。
        
9:各個鏡像的對應(yīng)的內(nèi)存地址:
        在read_boot_img()或者do_boota()都可以打印這些信息。
        u-boot的地址為0x4a000000,在boot_dsipatch_kernal函數(shù)里強制賦值,也在該函數(shù)里
        使用wBoot_fopen("c:\\linux\\u-boot.bin", "rb")與wBoot_fread((void *)(*kernal_addr), 1, file_length, hd_file)
        把u-boot.bin從存儲設(shè)備加載到0x4a000000內(nèi)存地址,之后boot1從BootOS(para_addr, kernal_addr)
        跳轉(zhuǎn)到u-boot。
        *kernal_addr = 0x4a000000。
        kernel地址為0x40008000,ramdisk地址為0x41000000,在CONFIG_EXTRA_ENV_SETTINGS
        中的boota 40007800其實是把boot.img下載到內(nèi)存中的地址,由于boot.img中包含了
        kernel與ramdisk,也包含了這兩個鏡像在內(nèi)存中的地址,還有檢查boot.img的magic
        是不是ANDROID,從存儲設(shè)備加載這個兩個鏡像到內(nèi)存的操作是在read_boot_img函數(shù)里,
        在u-boot是do_boota函數(shù)里再次檢查boot.img的合法性。


上一篇:DTMB數(shù)字電視機頂盒免費帶AVS+ 一起迎接2022冬奧運會
下一篇:全志A20平臺fex配置參數(shù)
沙發(fā)
發(fā)表于 2015-8-10 13:40 | 只看該作者 | 來自浙江
回復(fù) 支持 反對

使用道具 舉報

板凳
發(fā)表于 2017-2-6 16:04 | 只看該作者 | 來自廣東
學(xué)習(xí)學(xué)習(xí)!
回復(fù) 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-11-17 13:31 , Processed in 0.073253 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表