Про Linux под Nios II

Ниос должен быть собран с поддержкой MMU, I-cache, D-cache.

В моей системе оперативная память располагалось по физическому адресу (адрес видно через qsys/sopcbuilder) 0x4000000 и сама память имела размер 0x200000 т. е. 32МБт.

Также для загрузки ядра требуется сгенерировать dts файл на основе файла sopcinfo из прокта quartus. Делается это как и в случае с u-boot для nios ii, с помощью утилиты Sopc2DTS.

Вот так не затейлево выглядят переменные юбут для загрузки ядра по tftp.

#define CONFIG_EXTRA_ENV_SETTINGS                            \
        "kernel_file=nios/vmImage\0"                         \
        "kernel_addr=0xc5000000\0"                           \
        "fdt_file=nios/nios.dtb\0"                           \
        "fdt_addr=0xc5200000\0"                              \
        "load_kernel=tf ${fdt_addr} ${fdt_file}; tf ${kernel_addr} ${kernel_file}; run start_kernel\0"                           \
        "start_kernel=bootm ${kernel_addr} - ${fdt_addr}\0"  \
        ""

Данный дефайн располагается в файле include/configs/nios2-generic.h дистрибутива u-boot для nios ii.

Вывод информации о загрузке ядра nios ii в консоль.
За этот функционал отвечают опции ядра:

CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE

и

CONFIG_SERIAL_ALTERA_UART_CONSOLE

Как несложно догадаться, если включена опция CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE то вывод информации будет в порт jtag uart.

Если включена опция CONFIG_SERIAL_ALTERA_UART_CONSOLE то вывод будет в стандартный порт uart и позволит подключиться любимым миникомом к ниос ii.

Сейчас лень тестить, но если включены обе опции одновременно то вроде как вывод будет в порт jtag uart.

После старта ядра видим вот такое сообщение об ошибке в консоли:

BUG: failure at mm/bootmem.c:378/mark_bootmem()!

Иммет место быть если не правильно указан параметр ядра CONFIG_NIOS2_MEM_BASE. Изначально указывал его как 0xc4000000 посольку такое значение прописано в юбуте у дефайна CONFIG_SYS_SDRAM_BASE. Но вроде как нужно указывать именно физический адрес, а он равен 0x4000000.

Также во время старта была вот такая ошибка

initda instruction is unimplemented. Please update your hardware system to have more than 4-byte line data cache

С чем связана данная ошибка хз. Для решения этой проблемы следует в файле dts заменить все ALTR на altr.

Следующая ошибка:

ERROR: NiosII DIV different for kernel and DTS

Причина её так же мне не понятна. Решается отключением CONFIG_NIOS2_HW_DIV_SUPPORT в настройках ядра