U-boot

U-boot — вторичный загрузчик, расположенный в NAND-чипе и загружаемый IPL (первичным загрузчиком, вшитым в процессор), если выбрана загрузка с NAND (по умолчанию, если не зажата кнопка, заставляющая грузиться с USB). U-boot умеет делать множество интересных вещей, включая прошивку флешки образом, полученным по последовательному интерфейсу, загрузку Linux и манипуляциями с памятью.

U-boot, работающий с процессорами Ingenic, основан на довольно древней версии 1.1.6, так что каких-то новых фич может и не быть, однако в нем вроде как все работает.

Уже пропатченная и настроенная под XZ0032 версия лежит на git.whitequark.org, есть зеркало на gitorious. Если не хочется ставить git, то можно вытянуть сразу архив с последним коммитом.

Для сборки нужен тулчейн, установка которого описана здесь.

Собирать его можно двумя способами:

  1. Для запуска непосредственно из памяти, без прошивки:

    make volans_config
    make

    В итоге получается файл u-boot.bin, который можно запустить при помощи jzboot:

    $ ./jzboot -C config/boot.cfg
    jzboot> load /path/to/u-boot.bin 0x80100000
    jzboot> go 0x80100000
  2. Для прошивки в NAND:

    make volans_nand_config
    make

    В итоге получается файл u-boot-nand.bin, который можно прошить, внезапно, при помощи jzboot:

    $ ./jzboot -C config/boot.cfg
    jzboot> source script/ecc_boot.cfg # эта команда нужна, потому что бутлоадер прошивается в NAND с другими метаданными коррекции ошибок
    jzboot> nerase 0 0 1
    jzboot> nprogram 0 0 /path/to/u-boot-nand.bin

Все, U-Boot загружен или установлен, можно общаться с ним по последовательному порту с бодрейтом 57600. Если хочется поменять настройки по умолчанию, то они находятся в файле include/configs/volans.h в дереве исходников; интересные дефайны включают в себя CONFIG_BAUDRATE и CONFIG_BOOT*.

Comments