Про 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 в настройках ядра