Volkov 0 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба во время загрузки, получаю предупреждение Loading Environment from SPI Flash... SF: Detected n25q512a with page size 512 Bytes, erase size 128 KiB, total 128 MiB *** Warning - bad CRC, using default environment Это как бы понятно, бутарги не сохранялись. и грузятся те что по умолчанию Я установил в реталинукс-конфиг партишины, Скопировал CONFIG_EXTRA_ENV_SETTINGS в platform-top.h Но дефолтные бутарги не соответствуют тем что я установил. В итоге, kernel грузится не с того адреса, так как kernelstart не соответствует правильному смещению. И если я установлю правильное смещение и сохраню - u-boot после этого не грузится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 4 часа назад, Volkov сказал: во время загрузки, получаю предупреждение Loading Environment from SPI Flash... SF: Detected n25q512a with page size 512 Bytes, erase size 128 KiB, total 128 MiB *** Warning - bad CRC, using default environment Это как бы понятно, бутарги не сохранялись. и грузятся те что по умолчанию Я установил в реталинукс-конфиг партишины, Скопировал CONFIG_EXTRA_ENV_SETTINGS в platform-top.h Но дефолтные бутарги не соответствуют тем что я установил. В итоге, kernel грузится не с того адреса, так как kernelstart не соответствует правильному смещению. И если я установлю правильное смещение и сохраню - u-boot после этого не грузится. очень сумбурно.. у вас есть область флеша, откуда грузиться u-boot, за ней обычно убут складывает бинарник после команды saveenv, потом по классике кладется ядро. как вариант, команда saveenv затирает кусок убута, т.к. убут больше чем запланированная область тогда в исходниках убута находите ветку, где отрабатывается команда saveenv и выводите на консоль все критичные адреса и размеры, потом вносите правки в "CONFIG_EXTRA_ENV_SETTINGS в platform-top.h" под окружение кажись выделяется страница или кратно странице Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 25 minutes ago, Jury093 said: очень сумбурно.. у вас есть область флеша, откуда грузиться u-boot, за ней обычно убут складывает бинарник после команды saveenv, потом по классике кладется ядро. как вариант, команда saveenv затирает кусок убута, т.к. убут больше чем запланированная область тогда в исходниках убута находите ветку, где отрабатывается команда saveenv и выводите на консоль все критичные адреса и размеры, потом вносите правки в "CONFIG_EXTRA_ENV_SETTINGS в platform-top.h" под окружение кажись выделяется страница или кратно странице В petalinux-config устанавливаю размеры partition Затем из platform-auto.h копирую в plaform-top.h #define CONFIG_EXTRA_ENV_SETTINGS \ SERIAL_MULTI \ CONSOLE_ARG \ DFU_ALT_INFO_RAM \ PSSERIAL0 \ "nc=setenv stdout nc;setenv stdin nc;\0" \ "ethaddr=00:0a:35:00:22:01\0" \ "autoload=no\0" \ "sdbootdev=0\0" \ "clobstart=0x10000000\0" \ "netstart=0x10000000\0" \ "dtbnetstart=0x23fff000\0" \ "loadaddr=0x10000000\0" \ "bootsize=0x1000000\0" \ "bootstart=0x0\0" \ "boot_img=BOOT.BIN\0" \ "load_boot=tftpboot ${clobstart} ${boot_img}\0" \ "update_boot=setenv img boot; setenv psize ${bootsize}; setenv installcmd \"install_boot\"; run load_boot test_img; setenv img; setenv psize; setenv installcmd\0" \ "install_boot=sf probe 0 && sf erase ${bootstart} ${bootsize} && " \ "sf write ${clobstart} ${bootstart} ${filesize}\0" \ "bootenvsize=0x40000\0" \ "bootenvstart=0x1000000\0" \ "eraseenv=sf probe 0 && sf erase ${bootenvstart} ${bootenvsize}\0" \ "jffs2size=0x2000000\0" \ "jffs2start=0x3040000\0" \ "jffs2_img=rootfs.jffs2\0" \ "load_jffs2=tftpboot ${clobstart} ${jffs2_img}\0" \ "update_jffs2=setenv img jffs2; setenv psize ${jffs2size}; setenv installcmd \"install_jffs2\"; run load_jffs2 test_img; setenv img; setenv psize; setenv installcmd\0" \ "install_jffs2=sf probe 0 && sf erase ${jffs2start} ${jffs2size} && " \ "sf write ${clobstart} ${jffs2start} ${filesize}\0" \ "kernelsize=0x2000000\0" \ "kernelstart=0x1040000\0" \ "kernel_img=image.ub\0" \ "load_kernel=tftpboot ${clobstart} ${kernel_img}\0" \ "update_kernel=setenv img kernel; setenv psize ${kernelsize}; setenv installcmd \"install_kernel\"; run load_kernel test_crc; setenv img; setenv psize; setenv installcmd\0" \ "install_kernel=sf probe 0 && sf erase ${kernelstart} ${kernelsize} && " \ "sf write ${clobstart} ${kernelstart} ${filesize}\0" \ "cp_kernel2ram=sf probe 0 && sf read ${netstart} ${kernelstart} ${kernelsize}\0" \ "dtb_img=system.dtb\0" \ "load_dtb=tftpboot ${clobstart} ${dtb_img}\0" \ "update_dtb=setenv img dtb; setenv psize ${dtbsize}; setenv installcmd \"install_dtb\"; run load_dtb test_img; setenv img; setenv psize; setenv installcmd\0" \ "fault=echo ${img} image size is greater than allocated place - partition ${img} is NOT UPDATED\0" \ "test_crc=if imi ${clobstart}; then run test_img; else echo ${img} Bad CRC - ${img} is NOT UPDATED; fi\0" \ "test_img=setenv var \"if test ${filesize} -gt ${psize}\\; then run fault\\; else run ${installcmd}\\; fi\"; run var; setenv var\0" \ "netboot=tftpboot ${netstart} ${kernel_img} && bootm\0" \ "default_bootcmd=run cp_kernel2ram && bootm ${netstart}\0" \ "" Тут, в CONFIG_EXTRA_ENV_SETTINGS, все смещения и размеры правильные. bootsize=0x1000000 - 16 МБ, а boot.bin 6.6 MB. Дальше радел bootenv bootenvstart=0x1000000 bootenvsize=0x40000 После него идет kernel kernelstart=0x1040000 И я ожидал эти бутарги после загрузки увидеть в u-boot. Но когда я их вывожу, то вижу что они совсем другие bootenvstart=0x100000 kernelstart=0x140000 Я пробовал записать правильные смещения, для bootenvstart, но после этого u-boot не грузится. Проблема в том, что у меня грузятся дефолтные переменные, которые не соответствуют,тем что я установил в проекте. И я не знаю, откуда они берутся, я ожидал, что они будут браться из /project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба Мыши плакали, кололись, но продолжали жрать петалинукс. Что вам мешает собрать связку PMU/FSBL/ATF/U-Boot отдельно и в конфиге убута явно сказать, с какого адреса у вас живет Environment? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 1 minute ago, gosha-z said: Мыши плакали, кололись, но продолжали жрать петалинукс. Что вам мешает собрать связку PMU/FSBL/ATF/U-Boot отдельно и в конфиге убута явно сказать, с какого адреса у вас живет Environment? Мыши жрут то, на что у них есть хоть какие то примеры. Вот то, что я делаю. petalinux-config --get-hw-description=/home/user/petalinux/2019.2 petalinux-build petalinux-package --boot --format BIN --fsbl images/linux/zynqmp_fsbl.elf --u-boot images/linux/u-boot.elf --pmufw images/linux/pmufw.elf --fpga /home/user/petalinux/2019.2/zynqus/Zynq_TOP.bit --force И задав партишины и и их размеры, я ведь указываю с какого адреса, кто где живет. Видимо я что то упустил изначально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба Партишны - это которые для bootgen??? Ибо флешовые партишны - они только для NAND, для QSPI надо явно указать адрес и размер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 5 minutes ago, gosha-z said: Партишны - это которые для bootgen??? Ибо флешовые партишны - они только для NAND, для QSPI надо явно указать адрес и размер. Я указал и адрес и размер, на скрине видно. И в system-conf.dtsi появились разделы с правильными адресами. partition@0x00000000 { label = "boot"; reg = <0x00000000 0x01000000>; }; partition@0x01000000 { label = "bootenv"; reg = <0x01000000 0x00040000>; }; partition@0x01040000 { label = "kernel"; reg = <0x01040000 0x02000000>; }; partition@0x03040000 { label = "jffs2"; reg = <0x03040000 0x02000000>; }; Я их еще и в system-user.dtsi прописал partition@boot { /* for testing purpose */ label = "boot"; reg = <0x0 0x01000000>; }; partition@bootenv { /* for testing purpose */ label = "bootenv"; reg = <0x1000000 0x00040000>; }; partition@kernel { /* for testing purpose */ label = "kernel"; reg = <0x01040000 0x02000000>; }; partition@jffs2 { /* for testing purpose */ label = "jffs2"; reg = <0x03040000 0x02000000>; }; И в #define CONFIG_EXTRA_ENV_SETTINGS они есть. Но в u-boot попадают левые адреса, и размеры. Warning - bad CRC, using default environment Возможно default environment это не переменные из CONFIG_EXTRA_ENV_SETTINGS . Но я не знаю где эти default environment прописать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 1 минуту назад, Volkov сказал: Warning - bad CRC, using default environment Возможно default environment это не переменные из CONFIG_EXTRA_ENV_SETTINGS . Но я не знаю где эти default environment прописать. я во все не вчитывался, но обычно дефолтные настройки формируются в файле хидера платы, там где прописывается номер консоли, адрес и размер памяти, ключи для веток работы убутовских команд. после компиляции, в бинарнике убута создается область дефолтных настроек и если разрешено внешнее хранилище (оно тоже прописывается в том хидере), то убут проверяет его существование и считает CRC, отсюда и начальный ворнинг. кстати, бинарник переменных можно сформировать отдельно и писать его в оговоренную область Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба Это чей DT, убута или ядра? Конфиг U-Boot должен выглядеть так: Соотв. Environment offset - смещение в QSPI, где хранится ваш Environment, Environment Size - его размер (не имеет смысла делать его меньше Erase Size, в вашем случае - 128kB) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 26 minutes ago, gosha-z said: Это чей DT, убута или ядра? Конфиг U-Boot должен выглядеть так: Соотв. Environment offset - смещение в QSPI, где хранится ваш Environment, Environment Size - его размер (не имеет смысла делать его меньше Erase Size, в вашем случае - 128kB) Это конфиг петалинукса. Я поменял и в у-буте - не помогло. 50 minutes ago, Jury093 said: я во все не вчитывался, но обычно дефолтные настройки формируются в файле хидера платы, там где прописывается номер консоли, адрес и размер памяти, ключи для веток работы убутовских команд. после компиляции, в бинарнике убута создается область дефолтных настроек и если разрешено внешнее хранилище (оно тоже прописывается в том хидере), то убут проверяет его существование и считает CRC, отсюда и начальный ворнинг. кстати, бинарник переменных можно сформировать отдельно и писать его в оговоренную область Так это и есть - plaform-top.h, я туда скопировал всю эту ерунду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 15 марта, 2020 Опубликовано 15 марта, 2020 · Жалоба 16 минут назад, Volkov сказал: Так это и есть - plaform-top.h, я туда скопировал всю эту ерунду. загляните в бинарник - попадают ли туда ваши настройки.. "bootenvsize=0x40000\0" \ - 256кБ не много для окружения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 11 hours ago, Jury093 said: "bootenvsize=0x40000\0" \ - 256кБ не много для окружения? У него размер сектора 128. И 128MB всего. В любом случае, не меньше Erase Size Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 7 минут назад, gosha-z сказал: У него размер сектора 128. И 128MB всего. В любом случае, не меньше Erase Size это-то понятно, но зачем 256? если 64к вполне достаточно, т.е. прописать надо разумный минимум 128 и вот это "kernelsize=0x2000000\0" \ ядро 36МБ - это или косяк в размере или ядро слинкованное с рамфс у ТС явно проблема с наложением областей и я дал выше совет, куда посмотреть и как проверить. я работал с spi загрузкой с 3-5 платформами, там ничего магического нет, чистая математика в одном случае накосячил с орфографией дефолтных настроек, получил подобный эффект, пишешь одно видишь другое. где-то упустил распухшее ядро и тыпы, но все случаи были решены Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба Если ничего не поменялось, то PetaLinux формирует FIT, а ему все эти установки в Environment до лампочки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 16 марта, 2020 Опубликовано 16 марта, 2020 · Жалоба 9 hours ago, Jury093 said: это-то понятно, но зачем 256? если 64к вполне достаточно, т.е. прописать надо разумный минимум 128 и вот это "kernelsize=0x2000000\0" \ ядро 36МБ - это или косяк в размере или ядро слинкованное с рамфс у ТС явно проблема с наложением областей и я дал выше совет, куда посмотреть и как проверить. я работал с spi загрузкой с 3-5 платформами, там ничего магического нет, чистая математика в одном случае накосячил с орфографией дефолтных настроек, получил подобный эффект, пишешь одно видишь другое. где-то упустил распухшее ядро и тыпы, но все случаи были решены Это не у ТС проблема - это петялинукс косячил. Создал новый проект, но в этот раз я изначально, перед petalinux-build ввел все адреса и размеры партов. И все заработало!!!!! Три дня я боролся фиг знает с чем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться