Jump to content

    

Recommended Posts

Здравствуйте, коллеги. Скоро предстоит миграция на Ксайлинг. Почитал на досуге документацию.

PetaLinux это, конечно, очень хорошо, но хотелось бы узнать, есть ли ему классическая альтернатива.

Сейчас работаю на Soc от Альтеры. Заливаю на Sd прелодер, ебут, его скрипт, dtb, рутфс, кернел ядра, битстрим и все замечательно грузится и работает.

SDK вообще не запускаю. Из Квартуса беру только битстрим и папку handof из которой легко и просто собирается прелодер и ебут.

Программу пишу на QT и в общем SDK вообще не нужен по сути.

У Ксайлинг все иначе, весь софт (fsbl, u-boot и тд) лежит упакованный в одном файле с безумным пот сложности хэдэром (может привыкну еще).

Года 3 назад имел дело с Zynq-7000 но писал только логику и софт без операционной системы. Вроде, все несложно было из SDK делался файл, грузил его на карту и работало.

 Можно ли обойтись без SDK в Ксайлинге и без PetaLinux ? Буду рад любым советам, особенно со ссылками.

Спасибо

Share this post


Link to post
Share on other sites
51 minutes ago, gosha-z said:

Без SDK - нельзя, ибо PMUFW и FSBL генерится из SDK.

Без PetaLinux - можно и нужно.

 

кстати, насчет PMUFW. Если я не ошибаюсь, он для большинства задач не нужен. Или я не прав ? Если можно небольшой ликбез...

И по поводу dt где его брать ? Как называется софтина, которая делает dts<->dtb, ну которая dtc называется в альтере, типа девайстри компилер.

Рутфс с оф. сайта Дебиана можно взять ? Кернел с гитхаба ксайлинга ?  

 

Еще интересует, какой кросскомпилятор лучше использовать ?

Edited by карамболь

Share this post


Link to post
Share on other sites

ага нашел про PMUFW... оно действительно нужно... только для чего пока не понял. Удивительно корявая документация у Ксайлинга, надо признать 

Share this post


Link to post
Share on other sites
5 hours ago, карамболь said:

ага нашел про PMUFW... оно действительно нужно... только для чего пока не понял. Удивительно корявая документация у Ксайлинга, надо признать 

У них есть неплохой мануал, где прямо по шагам расписано на какие кнопочки жать. Ну и в целом, на вики немало полезной информации.

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841738/Getting+Started

Правда, у меня так и не получилось собрать полный образ по этому мануалу. Но тут, скорее, дело во мне)

Share this post


Link to post
Share on other sites
10 hours ago, карамболь said:

И по поводу dt где его брать ?

Генерить рыбу при помощи hsi и потом творчески подгонять под свое железо.

10 hours ago, карамболь said:

девайстри компилер.

Так и называется. Либо в _kernel_sources/scripts/dtc либо тут

10 hours ago, карамболь said:

Рутфс с оф. сайта Дебиана можно взять ?

Вот тут не скажу, я всегда buildroot'ом собираю.

10 hours ago, карамболь said:

Кернел с гитхаба ксайлинга ?

Да.

10 hours ago, карамболь said:

какой кросскомпилятор лучше использовать ?

gcc 8.4. Девятку использовать не надо.

Share this post


Link to post
Share on other sites

коллеги, какой кросс тулчейн посоветуете использовать ? Есть что-нибудь готовое или из сорцов собирать ? Хост - Дебиан 

Share this post


Link to post
Share on other sites
17 minutes ago, gosha-z said:

Я из исходников собираю. Хост - CentOS 7

1. А как насчет Линаро ? 

2. Так ли нужен SDK ? Vitis для установки под 100 Гигов хочет, а как отдельно установить SDK  я не нашел. Если я правильно понял, то все необходимое для запуска Линукс, можно скачать с репозитория ксайлинка и собирать без SDK. По сути, от SDK нужет только тулчейн. Я прав ?

3. Читаю разные доки и окончательно запутался. по поводу U-Boot Environment Variables. В одной доке его редактируют в SDK, путем копирования из одного хэдера в другой. В другой доке через uEnv.txt (где его брать ?).

4. Если правильно понял, то   U-Boot Environment Variables можно хранить в SPI flash ? А как ее туда записать ? И можно ли хранить скрипт убута в отдельном файле на SD карте ?

 

Вчера получил наконец плату живую, запустил из готового Линукс, убедился, что плата живая. Хочется полностью контролировать весь процесс. 

Попробовал импортировать настройки из Vivado в SDK, получил проект, но там кроме PMU, FSBL и битстрима ничего нет. В темплейтах надеялся увидеть ATF и DTS но их там нет.

 

Если не сложно, не могли бы вы помочь мне упорядочить знания. А то информации много, но она разрозненная и нет полной ясности куда двигаться оптимально. Спасибо

Share this post


Link to post
Share on other sites
On 7/3/2020 at 10:09 AM, карамболь said:

1. А как насчет Линаро ? 

2. Так ли нужен SDK ? Vitis для установки под 100 Гигов хочет, а как отдельно установить SDK  я не нашел. Если я правильно понял, то все необходимое для запуска Линукс, можно скачать с репозитория ксайлинка и собирать без SDK. По сути, от SDK нужет только тулчейн. Я прав ?

3. Читаю разные доки и окончательно запутался. по поводу U-Boot Environment Variables. В одной доке его редактируют в SDK, путем копирования из одного хэдера в другой. В другой доке через uEnv.txt (где его брать ?).

4. Если правильно понял, то   U-Boot Environment Variables можно хранить в SPI flash ? А как ее туда записать ? И можно ли хранить скрипт убута в отдельном файле на SD карте ?

 

Вчера получил наконец плату живую, запустил из готового Линукс, убедился, что плата живая. Хочется полностью контролировать весь процесс. 

Попробовал импортировать настройки из Vivado в SDK, получил проект, но там кроме PMU, FSBL и битстрима ничего нет. В темплейтах надеялся увидеть ATF и DTS но их там нет.

 

Если не сложно, не могли бы вы помочь мне упорядочить знания. А то информации много, но она разрозненная и нет полной ясности куда двигаться оптимально. Спасибо

4. ---

При компиляции u-boot у вас есть файл типа zynq_zed.h в котором прописываете CONFIG_EXTRA_ENV_SETTINGS, например так:

/* Extra U-Boot Env settings */
#define CONFIG_EXTRA_ENV_SETTINGS \ 
	"ethaddr=00:0a:35:00:01:22\0" \
    "kernel_size=0x140000\0" \
    "ramdisk_size=0x200000\0" \
	"sdboot=echo Copying Linux from SD to RAM...;" \
		"mmcinfo;" \
		"fatload mmc 0 0x3000000 uImage;" \
		"fatload mmc 0 0x2A00000 system.dtb;" \
		"fatload mmc 0 0x2000000 uramdisk.image.gz;" \
		"bootm 0x3000000 0x2000000 0x2A00000\0" \
""
#define CONFIG_BOOTCOMMAND	"run sdboot"

то есть есть команда sdboot которая и запускает скрипт. В команде sdboot можете указать загрузку напрямую из sd например (как у меня) или проверку наличия uEnv.txt файла и его чтение, и если такого нет, то загрузка далее продолжается (например опять же из sd).

 

Share this post


Link to post
Share on other sites
On 7/23/2020 at 5:36 PM, Alexey_Rostov said:

4. ---

При компиляции u-boot у вас есть файл типа zynq_zed.h в котором прописываете CONFIG_EXTRA_ENV_SETTINGS, например так:


/* Extra U-Boot Env settings */
#define CONFIG_EXTRA_ENV_SETTINGS \ 
	"ethaddr=00:0a:35:00:01:22\0" \
    "kernel_size=0x140000\0" \
    "ramdisk_size=0x200000\0" \
	"sdboot=echo Copying Linux from SD to RAM...;" \
		"mmcinfo;" \
		"fatload mmc 0 0x3000000 uImage;" \
		"fatload mmc 0 0x2A00000 system.dtb;" \
		"fatload mmc 0 0x2000000 uramdisk.image.gz;" \
		"bootm 0x3000000 0x2000000 0x2A00000\0" \
""
#define CONFIG_BOOTCOMMAND	"run sdboot"

то есть есть команда sdboot которая и запускает скрипт. В команде sdboot можете указать загрузку напрямую из sd например (как у меня) или проверку наличия uEnv.txt файла и его чтение, и если такого нет, то загрузка далее продолжается (например опять же из sd).

 

а из каких соображений берутся именно эти адреса в DDR для загрузки ?

В вашем случае, если не ошибаюсь, самораспаковывающийся образ ядра и корневая ФС в ОЗУ. У меня Image несжатый. В моем случае какой адрес использовать ? Какая тут логика ? И как кернел использует остальное ОЗУ ? Куда в итоге распакуется ядро и rootfs ? Где бы про это почитать ?

"fatload mmc 0 0x3000000 uImage;" \
		"fatload mmc 0 0x2A00000 system.dtb;" \
		"fatload mmc 0 0x2000000 uramdisk.image.gz;" \

Share this post


Link to post
Share on other sites
3 hours ago, карамболь said:

а из каких соображений берутся именно эти адреса в DDR для загрузки ?

В вашем случае, если не ошибаюсь, самораспаковывающийся образ ядра и корневая ФС в ОЗУ. У меня Image несжатый. В моем случае какой адрес использовать ? Какая тут логика ? И как кернел использует остальное ОЗУ ? Куда в итоге распакуется ядро и rootfs ? Где бы про это почитать ?


"fatload mmc 0 0x3000000 uImage;" \
		"fatload mmc 0 0x2A00000 system.dtb;" \
		"fatload mmc 0 0x2000000 uramdisk.image.gz;" \

Адреса в DDR: главное чтобы не перекрывались и в пределах диапазона. В интернете все есть, но вы пока с памятью не заморачивайтесь -- Linux сам разруливает работу с памятью (про initramfs / initrd позже посмотрите). https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

 

uImage это также несжатое ядро, только с оберткой u-boot.

При работе с Linux на Zynq\ZynqMP без sd карты, я делаю так :

 

1. Создаю с помощью утилиты mkimage бинарный файл image.itb (или как в petalinux image.ub) . Это бинарник, который объединяет ядро, DT, файловую систему. Вот например исходник для ZYnq 7000 моего image.its файла из которого я получаю image.itb:

/dts-v1/;
  
/ {
    description = "U-Boot fitImage for plnx_arm kernel";
    #address-cells = <1>;
  
    images {
        kernel@0 {
            description = "Linux Kernel";
            data = /incbin/("./zImage");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "none";
            load = <0x80000>;
            entry = <0x80000>;
            hash@1 {
                algo = "sha1";
            };
        };
        fdt@0 {
            description = "Flattened Device Tree blob";
            data = /incbin/("./system.dtb");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            hash@1 {
                algo = "sha1";
            };
        };
        ramdisk@0 {
            description = "ramdisk";
            data = /incbin/("./rootfs.cpio");
            type = "ramdisk";
            arch = "arm";
            os = "linux";
            compression = "none";
            hash@1 {
                algo = "sha1";
            };
        };
    };
    configurations {
        default = "conf@1";
        conf@1 {
            description = "Boot Linux kernel with FDT blob + ramdisk";
            kernel = "kernel@0";
            fdt = "fdt@0";
            ramdisk = "ramdisk@0";
            hash@1 {
                algo = "sha1";
            };
        };
    };
};

скрипт для сборки:

#!/bin/bash
mkimage -f image.its image.itb

2. Записываю во флеш память, откуда начинается загрузка BOOT.BIN (fsbl.elf, system.bit, u-boot.elf).

3. Запускаю загрузку из флеш до момента когда запустился u-boot.

4. В Xilinx SDK запускаю XSCT консоль и оттуда загружаю в DDR свой image.itb

dow -data image.itb 0x30000000

после загрузки файла в DDR возвращаюсь к консоли u-boot и запускаю загрузку залитого в DDR image.itb

bootm 30000000

5. Загрузка ядра и компании пошла

 

можете image.itb кинуть на sd и загрузиться с нее (кстати именно так часто описывается во всех мануалах petalinux: записать на раздел fat32 sd карты BOOT.BIN и image.ub, а на раздел ext4 -- rootfs)

 

Share this post


Link to post
Share on other sites
1 hour ago, Alexey_Rostov said:

Адреса в DDR: главное чтобы не перекрывались и в пределах диапазона. В интернете все есть, но вы пока с памятью не заморачивайтесь -- Linux сам разруливает работу с памятью (про initramfs / initrd позже посмотрите). https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

 

uImage это также несжатое ядро, только с оберткой u-boot.

При работе с Linux на Zynq\ZynqMP без sd карты, я делаю так :

 

1. Создаю с помощью утилиты mkimage бинарный файл image.itb (или как в petalinux image.ub) . Это бинарник, который объединяет ядро, DT, файловую систему. Вот например исходник для ZYnq 7000 моего image.its файла из которого я получаю image.itb:


/dts-v1/;
  
/ {
    description = "U-Boot fitImage for plnx_arm kernel";
    #address-cells = <1>;
  
    images {
        kernel@0 {
            description = "Linux Kernel";
            data = /incbin/("./zImage");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "none";
            load = <0x80000>;
            entry = <0x80000>;
            hash@1 {
                algo = "sha1";
            };
        };
        fdt@0 {
            description = "Flattened Device Tree blob";
            data = /incbin/("./system.dtb");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            hash@1 {
                algo = "sha1";
            };
        };
        ramdisk@0 {
            description = "ramdisk";
            data = /incbin/("./rootfs.cpio");
            type = "ramdisk";
            arch = "arm";
            os = "linux";
            compression = "none";
            hash@1 {
                algo = "sha1";
            };
        };
    };
    configurations {
        default = "conf@1";
        conf@1 {
            description = "Boot Linux kernel with FDT blob + ramdisk";
            kernel = "kernel@0";
            fdt = "fdt@0";
            ramdisk = "ramdisk@0";
            hash@1 {
                algo = "sha1";
            };
        };
    };
};

скрипт для сборки:


#!/bin/bash
mkimage -f image.its image.itb

2. Записываю во флеш память, откуда начинается загрузка BOOT.BIN (fsbl.elf, system.bit, u-boot.elf).

3. Запускаю загрузку из флеш до момента когда запустился u-boot.

4. В Xilinx SDK запускаю XSCT консоль и оттуда загружаю в DDR свой image.itb


dow -data image.itb 0x30000000

после загрузки файла в DDR возвращаюсь к консоли u-boot и запускаю загрузку залитого в DDR image.itb


bootm 30000000

5. Загрузка ядра и компании пошла

 

можете image.itb кинуть на sd и загрузиться с нее (кстати именно так часто описывается во всех мануалах petalinux: записать на раздел fat32 sd карты BOOT.BIN и image.ub, а на раздел ext4 -- rootfs)

 

Спасибо ! Для mpsoc аналогично (кроме нюансов pmu & atf) ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this