全志A1X启动步骤

   首先,全志目前的CPU内部都是有一段程序brom的,这段程序出厂的时候已经固化,不能修改。系统加电首先运行brom,然后扫描所有支持的启动介质,扫描顺序:SD0->NAND->SD2->SPI0 Norflash,以上启动都失败会自动进入USB0烧录模式。因此,如果系统只能预留一个SD卡接口时,一定要预留SD0或者SD2。

全志A1X启动步骤_第1张图片


以下参考:

A10 boot overview

A10 is a quite 'closed chip'. There is a brom in the chip, which can not be modified. This brom will load program from external storage(nand, mmc), which is called boot0 in allwinner. Brom will check the header of boot0, and get hardware information from boot0. The hardware information is in a config file called sys_config.fex. A pc tools will read the config file, and write the hardware information to the head of boot0. After boot0 is booted up, it will continue to load another loader boot1, boot1 init all other hardware and provides hardware abstracts and services. According to the boot OS, boot1 loads an arm elf program, boot.axf. For booting linux, boot.axf loads the u-boot and jumps to the u-boot. Then u-boot will take over.

So, the whole boot process is: brom -> boot0 -> boot1 -> boot.axf -> u-boot -> kernel

BROM

Brom in A10 is at the address 0xFFFF0000, After power up, arm core will fetch the first instruction at 0xFFFF0000 and execute it. The brom code contains two parts, one is the normal boot, the other is a block of code called FEL, which is mainly a USB communication program with host pc. Steps of brom boot:

  1. Check the status of one pin (the bsp pin), if the pin is low, jump to FEL, waiting host command through usb, usually communicate with a pc tool livesuite to update the firmware in nand flash. This pin can be accessible by a button marked as Recovery or RECV on tablets.

  2. Load 4k data from sdcard slot 0 beginning at offset 8k to the internal sram, check if the data has a magic string, if so, it's a boot0 head. Get boot0 size from the boot0 head, and load the whole boot0. If the checksum of boot0 is ok, will jump to boot0. Any of above is wrong, will jump to FEL.

  3. Similar to 2, load boot0 from nand flash. First load the first page of nand flash, check the magic string, get the boot0 size, load the whole boot0, and jump to boot0.

  4. Almost the same as step 2, except that boot0 is loaded from sdcard slot2.

你可能感兴趣的:(全志A1X启动步骤)