- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры Nuvoton на ядре ARM9
- NUC98R
- NUC98R. SPI. Компиляция U-boot, Ядра и Файловой системы JFFS2. Загрузка образов.
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры Nuvoton на ядре ARM9
- NUC98R
- NUC98R. SPI. Компиляция U-boot, Ядра и Файловой системы JFFS2. Загрузка образов.
NUC98R. SPI. Компиляция U-boot, Ядра и Файловой системы JFFS2. Загрузка образов.
4 года 7 мес. назад - 4 года 7 мес. назад #6369
от AEfimov
AEfimov создал тему: NUC98R. SPI. Компиляция U-boot, Ядра и Файловой системы JFFS2. Загрузка образов.
Представленная конфигурация отладки (NK-NUC98R) помимо NAND-flash укомплектован QSPI и SPI0 модулями, 16 и 1 мб соответственно, которые могут также могут использоваться для установки Linux, независимо от содержимого NAND-памяти. Таким образом возможна установка сразу двух независимых операционных систем на данную плату.
Процедура компиляции загрузчика, ядра, а также способ компиляции и тип используемой файловой системы отличны от описанных нами для NAND -flash памяти.
В этой публикации мы коснемся всех отличии в процессе установки Linux на SPI-flash. Те же операции, что были упомянуты в NAND-алгоритме, и не были затронуты здесь, выполняются в соответствии с руководством по NAND-flash, поэтому перед установкой Linux в SPI необходимо ознакомиться со всеми нашими предыдущими материалами по работе с этой отладкой.
Компиляция U-boot:
Для работы с SPI-flash требуется провести следующие настройки U-boot
В файле include/configs/nuc980_evb.h:
В интерфейсе menuconfig:
Файл u-boot.bin запишется в корневую директорию.
Компиляция ядра:
Для работы с SPI-flash необходимо провести следующие настройки в menuconfig:
Если инженерное решение по применению отладки требует поддержки PDMA, необходимо в первую очередь включить его UART драйвер, соответствующий задействованному UART-порту и выставить поддержку PDMA в настройках SPI-шины.
Далее необходимо задать параметры форматирования QSPI - flash, для этого внесем в файл arch/arm/mach-nuc970/dev.c
Важно: Параметры форматирования должны совпадать с атрибутами загрузки образов в SPI через Nu-Writer, то есть image_offset_size не должен быть меньше реального размера образа.
Данная отладка укомплектована QSPI-модулем W25Q128FV имеющей размер сектора в 4K, в то время как файловая система использует минимальный размер сектора 8K. Для корректной работы файловой системы необходимо внести следующие изменения в файл drivers/mtd/spi-nor/spi-nor.c. (SECT_4K меняем на 0)
Теперь можно скомпилировать образ ядра с поддержкой SPI командой “make uimage”
Файл образа 980uImage появится в папке Image в директории, содержащей папку с дистрибутивом ядра.
Файловая система:
Для работы с SPI используем утилиту mkjffs2 из в пакета MTD-Utils.
Скачаем дистрибутив (в нашем случае для Fedora32, если вы используете другую сборку Linux, необходимо найти в сети соответствующую версию пакета):
Устанавливаем пакет:
Выполняем:
Полученный образ копируется в директорию из который выполнена утилита.
Теперь, собственно, приступим к загрузке подготовленных производителем образов Linux, U-Boot и файловой системы.
Порядок загрузки образов в SPI-Flash:
1) Выбираем loader в поле Image Type, в поле Image execute address вписываем 0xe00000. Нажимаем на иконку справа от поля Image Name, находим файл u-boot.bin. Нажимаем Burn.
Далее загружаем непосредственно образ LINUX:
Выбираем файл 980uimage (выбираем All files (*.*), чтобы образ отобразился в окне). В поле Image start offset вписываем 0х200000 и нажимаем Burn (Image type - Data).
Теперь нужно загрузить в память файловую систему:
Выбираем файл rootfs.img (выбираем All files (*.*), чтобы образ отобразился в окне). В поле Image start offset (Image type - Data) указываем 500000 и нажимаем Burn.
Перезагружаем плату и в командной строке U-boot вводим следующие команды:
ОС Linux запущен и можно начинать работу.
Процедура компиляции загрузчика, ядра, а также способ компиляции и тип используемой файловой системы отличны от описанных нами для NAND -flash памяти.
В этой публикации мы коснемся всех отличии в процессе установки Linux на SPI-flash. Те же операции, что были упомянуты в NAND-алгоритме, и не были затронуты здесь, выполняются в соответствии с руководством по NAND-flash, поэтому перед установкой Linux в SPI необходимо ознакомиться со всеми нашими предыдущими материалами по работе с этой отладкой.
Компиляция U-boot:
Для работы с SPI-flash требуется провести следующие настройки U-boot
В файле include/configs/nuc980_evb.h:
#define CONFIG_SYS_USE_SPIFLASH
/#define CONFIG_SYS_USE_NANDFLASH*/
/#define CONFIG_ENV_IS_IN_NAND*/
#define CONFIG_ENV_IS_IN_SPI_FLASH
В интерфейсе menuconfig:
-> SPL / TPL --->
[ ] enable SPL
-> Device Drivers ->
SPI Support [*]
NUC980 SPI driver Select NUC980 SPI in Quad mode or Normal mode (Quad mode) --->
-> Device Drivers
-> SPI Flash Support [*]
Legacy SPI Flash Interface support [*]
SPI flash Bank/Extended address register support [*]
Winbond SPI flash support [*]
-> Command line interface
-> Device access commands
[ ] nand
[*] sf
[*] sspi
Файл u-boot.bin запишется в корневую директорию.
Компиляция ядра:
Для работы с SPI-flash необходимо провести следующие настройки в menuconfig:
General setup --->
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Boot options --->
(root=/dev/mtdblock1 rw rootfstype=jffs2 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M) Default kernel command string Kernel command line type
Device Drivers --->
[*] SPI support --->
<*> Nuvoton NUC980 Series QSPI Port 0
QSPI0 pin selection (Normal mode) --->
<*> QSPI0 enable pin for the second chip select
<*> QSPI0 TX/RX by PDMA or not (No PDMA)
Pin selection (Use SS1 (PD0)) --->
<*> Nuvoton NUC980 Series SPI Port 0
SPI0 transfer mode selection (Normal mode) --->
<*> SPI0 TX/RX by PDMA or not (No PDMA)
SPI0 IO port selection (Port D) --->
< > SPI0 enable pin for the second chip select
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> Caching block device access to MTD devices
<*> SPI-NOR device support
Self-contained MTD device drivers --->
<*> Support most SPI Flash chips (AT26DF, M25P, W25X, ...)
File systems --->
[*] Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
[*] JFFS2 write-buffering support
Если инженерное решение по применению отладки требует поддержки PDMA, необходимо в первую очередь включить его UART драйвер, соответствующий задействованному UART-порту и выставить поддержку PDMA в настройках SPI-шины.
-> Device Drivers
-> Character devices
-> Serial drivers
-> NUC980 UART (1-9) support (NUC980_UART(1-9) [=y])
Device Drivers --->
[*] SPI support --->
<*> Nuvoton NUC980 Series QSPI Port 0
<*> QSPI0 TX/RX by PDMA or not (USE PDMA)
<*> Nuvoton NUC980 Series SPI Port 1
<*> SPI0 TX/RX by PDMA or not (USE PDMA)
Далее необходимо задать параметры форматирования QSPI - flash, для этого внесем в файл arch/arm/mach-nuc970/dev.c
Важно: Параметры форматирования должны совпадать с атрибутами загрузки образов в SPI через Nu-Writer, то есть image_offset_size не должен быть меньше реального размера образа.
static struct mtd_partition nuc970_spi0_flash_partitions[] = {
{
.name = "u-boot",
.size = 512 * 1024,
.offset = 0,
},
{
.name = "u-boot env",
.size = 512 * 1024,
.offset = MTDPART_OFS_APPEND,
},
{
.name = "kernel",
.size = 4 * 1024 * 1024,
.offset = MTDPART_OFS_APPEND,
},
{
.name = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
},
};
Данная отладка укомплектована QSPI-модулем W25Q128FV имеющей размер сектора в 4K, в то время как файловая система использует минимальный размер сектора 8K. Для корректной работы файловой системы необходимо внести следующие изменения в файл drivers/mtd/spi-nor/spi-nor.c. (SECT_4K меняем на 0)
{ "en25qh256", INFO(0x1c7019, 0, 64 * 1024, 512, SECT_4K) },
=>
{ "en25qh256", INFO(0x1c7019, 0, 64 * 1024, 512, 0) },
Теперь можно скомпилировать образ ядра с поддержкой SPI командой “make uimage”
Файл образа 980uImage появится в папке Image в директории, содержащей папку с дистрибутивом ядра.
Файловая система:
Для работы с SPI используем утилиту mkjffs2 из в пакета MTD-Utils.
Скачаем дистрибутив (в нашем случае для Fedora32, если вы используете другую сборку Linux, необходимо найти в сети соответствующую версию пакета):
https://fedora.pkgs.org/32/fedora-aarch64/mtd-utils-2.1.1-2.fc32.aarch64.rpm.html
Устанавливаем пакет:
# dnf install mtd-utils
Выполняем:
$ mkfs.jffs2 -s 0x1000 -e 0x10000 -p 0x800000 -d rootfs_jffs2/ - o rootfs.img
Полученный образ копируется в директорию из который выполнена утилита.
Теперь, собственно, приступим к загрузке подготовленных производителем образов Linux, U-Boot и файловой системы.
Порядок загрузки образов в SPI-Flash:
1) Выбираем loader в поле Image Type, в поле Image execute address вписываем 0xe00000. Нажимаем на иконку справа от поля Image Name, находим файл u-boot.bin. Нажимаем Burn.
Далее загружаем непосредственно образ LINUX:
Выбираем файл 980uimage (выбираем All files (*.*), чтобы образ отобразился в окне). В поле Image start offset вписываем 0х200000 и нажимаем Burn (Image type - Data).
Теперь нужно загрузить в память файловую систему:
Выбираем файл rootfs.img (выбираем All files (*.*), чтобы образ отобразился в окне). В поле Image start offset (Image type - Data) указываем 500000 и нажимаем Burn.
Перезагружаем плату и в командной строке U-boot вводим следующие команды:
set bootcmd sf probe 0 18000000\;sf read 0x7fc0 0x100000 0x400000\;bootm 0x7fc0
sa
ОС Linux запущен и можно начинать работу.
Последнее редактирование: 4 года 7 мес. назад пользователем AEfimov.
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры Nuvoton на ядре ARM9
- NUC98R
- NUC98R. SPI. Компиляция U-boot, Ядра и Файловой системы JFFS2. Загрузка образов.
Время создания страницы: 0.038 секунд