Jump to content

    

alx2

Участник
  • Content Count

    340
  • Joined

  • Last visited

Community Reputation

0 Обычный

About alx2

  • Rank
    Местный
  • Birthday 06/02/1972

Контакты

  • Сайт
    http://

Информация

  • Город
    Пермь, Россия
  1. Цитата(yanvasiij @ Oct 7 2016, 11:58) Выдает ошибку синтаксиса. И правильно делает, что выдает. Смотрите в руководстве, как надо указывать ссылки на файлы в архивах: КодYou can also specify files within archives by writing a pattern matching the archive, a colon, then the pattern matching the file, with no whitespace around the colon. `archive:file'     matches file within archive `archive:'     matches the whole archive `:file'     matches file but not one in an archive
  2. Цитата(yanvasiij @ Sep 20 2016, 15:58) Команда ликнковки: Код ... ..\obj\heap_1.o ... Ну вот. Оказывается, файл-то не heap_1.o, а ..\obj\heap_1.o! То есть он не в текущем каталоге, а в ../obj. А в скрипте линкера Вы как этот файл указали?
  3. Цитата(yanvasiij @ Sep 16 2016, 19:24) Такой файл в проекте есть. Можете показать фрагмент map-файла, где говорится о загрузке этого файла (когда Вы собираете проект без вынесения его .bss в SDRAM)? Цитата(yanvasiij @ Sep 16 2016, 19:24) Мне не понятно, как это линкеру объяснить. В зависимости от того, отдельный ли это файл, или часть библиотели, либо указанием этого файла в командной строке линкера, либо указанием библиотеки через -l... Можете показать команду, которой линкуете проект?
  4. Цитата(yanvasiij @ Sep 15 2016, 15:18) Добавил в скрипт эти строчки, при сборке выдает ошибку: Не понял, зачем Вы это здесь написали... Вам непонятна суть ошибки? Линкер не нашел указанный в скрипте объектный файл. Такой файл вообще в вашем проекте есть?
  5. Цитата(yanvasiij @ Sep 13 2016, 16:42) Спрошу тут, чтобы не плодить веток. Подскажите как разместит в bss опредленного файла в сраме, с помощь линкерскрпита? Что нужно дописать в скрипт, чтобы, например, bss файла heap_1.c распологалось в области SDRAM ? Наверное что-то типа Код.bss.sdram : {   heap_1.o(.bss) } >SDRAM
  6. Цитата(Genadi Zawidowski @ Sep 5 2016, 13:16) Не, libm указана явно (ключил -lm компилятору): Ну тогда либо у Вас в libm нет sinf/cosf (что вряд ли), либо баг линкера.
  7. Цитата(Genadi Zawidowski @ Sep 5 2016, 03:53) Компиляция прошла нормально, но линковка не срослась - что надо указать кроме libm? Кроме libm надо еще libc - там находятся memcpy/memset. Но Вы, похоже, и libm не указали, судя по тому, что линкер не находит powf, sinf и т.п., которые должны там быть... Цитата(Genadi Zawidowski @ Sep 5 2016, 03:53) И чего это memcpy/memset повылезали? Если я правильно понял, memset требуется, например, функции wave_startrecording(). Смотрите map-файл - там должно быть написано, кто какой символ потребовал.
  8. Цитата(ARV @ Aug 16 2016, 23:52) но не понятно, почему никаких ошибок и варнингов на отсутствие библиотеки... Видимо, те же символы линкер находил в какой-то еще из используемых Вами библиотек, и код там не очень адекватный... Смотрите map-файл, там много полезной информации о том, откуда что взяли...
  9. Цитата(Tarbal @ Jul 8 2016, 07:07) Как бы строить самому не пришлось Что плохого в самостоятельном строительстве?
  10. Цитата(Herz @ Apr 1 2016, 00:48) Вижу утром время поста некоторого пользователя на домашнем компьютере: 3.51. На моих часах около девяти. К десяти добираюсь до работы, открываю сайт, то же сообщение датировано 6.51. Часовые пояса не пересекаю, если что. Проверьте, какие часовые пояса установлены на ваших двух компьютерах. Неоднократно обнаруживал на компьютерах коллег по работе, что в системе был установлен неверный часовой пояс. Причем пользователь компьютера этого не замечал, так как системное время также было установлено со сдвигом, компенсировавшим разницу часовых поясов.
  11. Цитата(yanvasiij @ Mar 31 2016, 13:21) 1) Когда я добавляю syscalls.o в статическую библиотеку вместе со всем остальным, то при компиляции приложения с использованием этой либы вылазит ошибка: Кодc:/program files (x86)/gnu tools arm embedded/4.9 2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libg.a(lib_a-abort.o): In function `abort': abort.c:(.text.abort+0xa): undefined reference to `_exit' Но все перечисленные функции реализованы в syscalls.c! Почему он их не видит?! Покажите полностью команду, которая завершается приведенными Вами выше ошибками. Покажите также (для полноты понимания ситуации) вывод команд: objdump -a <ваша библиотека> | grep syscalls nm <ваша библиотека> | grep _exit Цитата(demiurg_spb @ Mar 31 2016, 17:06) Попробуйте поменять очерёдность включения библиотек, как ни странно, но это роялит... Ничего странного в этом нет. Если Вы при линковке, к примеру, сначала укажете библиотеку с файлом syscalls.o, на символы которого ссылок нет, то линкер, естественно, syscalls.o из библиотеки не загрузит. А потом Вы, допустим, укажете фйл, ссылающийся на что-то из syscalls.o - и, естественно, получите ошибку "символ не определен". Точно так же очевидно, что если Вы поменяете местами этот файл с библиотекой, ошибки не будет, так как на момент чтения библиотеки у линкера уже будет неопределенная ссылка, скажем, на тот же _exit, и линкер разрешит ее загрузкой syscalls.o из библиотеки.
  12. Цитата(yanvasiij @ Mar 30 2016, 17:51) Как выяснилось[/url] линковка статических либ осуществляется arm-none-eabi-gcc-ar, а линковка исполняемого файла arm-none-eabi-gcc. Как же сделать так, чтобы на выходе получать и то и то? Извините, но по-моему у Вас в голове каша. Линковка производится программой ld, так как именно это и есть линкер. Программа ar - это архиватор, который объединяет объектные файлы в архив (библиотеку). Программа же gcc - это просто враппер, который сам по себе никакой обработки компонентов программы не выполняет, а вызывает для этого другое программы - препроцессор, компилятор, ассемблер, линкер. Каким именно операции будут выполнены, зависит от параметров командной строки. Думаю, Вам стоит разобраться, из каких этапов (операций) состоит процесс сборки программы, что для каждого этапа является входными данными, а что - результатом. И сам вопрос ваш, действительно, непонятен. Если Вы знаете и как получить библиотеку, и как получить hex-файл, какая проблема выполнить и то, и другое? Цитата(yanvasiij @ Mar 30 2016, 18:11) Ну вот как указать, чтобы либа собиралась arm-none-eabi-gcc-ar? Указать кому/чему? make'у? Написать в Makefile что-то типа: Кодliba.a: file1.o file2.o file3.o           arm-none-eabi-gcc-ar cq $@ $^           arm-none-eabi-gcc-ranlib $@
  13. Qt ругается на "<"

    Цитата(muravei @ Mar 26 2016, 16:21) Теперь новая проблема : оно требует glibc 2.4, а у меня 2.13 если ldd --vertion это о том. Это не о том: КодNAME        ldd - print shared library dependencies OPTIONS        --version               Print the version number of ldd.
  14. Sysupgrade / switch root to ram

    Цитата(vgovseychuk @ Mar 18 2016, 17:18) Посмотрел код U-Boot (cmd_nand.c). Просто nand read(write) тоже учитывает бэдблоки: (в районе 690 строки) Да, верно. В 2014.10 просто read бэдблоки пропускает. Я использую другую версию, там просто read не пропускает...
  15. Sysupgrade / switch root to ram

    Цитата(vgovseychuk @ Mar 17 2016, 14:06) Вообще да, можно и так. Но это же каждый раз надо вписывать в скрипт, какие пакеты и файлы ты обновлял. Не понял, о каком скрипте Вы говорите. Возможно, Вы не совсем понимаете, как работают менеджеры пакетов. В системе имеется список пакетов, установленных в текущий момент. При необходимости обновиться менеджер пакетов скачивает из репозитория свежий список пакетов и сравнивает с установленными. Если он видит в списке пакет более поздней версии, чем установленный, то новый пакет скачивается и устанавливается. Все это (и многое другое, я тут сильно упростил процесс) выполняет готовый менеджер пакетов, Вам как разработчику об этом заботиться не надо, разве что не забывать менять версию пакета (да и это можно автоматизировать, у меня версии пакетов формируются автоматически из ревизии SVN)... Цитата(vgovseychuk @ Mar 17 2016, 16:09) Например, нет команды mtd read в OpenWrt, и не проверить, правильно ли все записалось. Хм... Да, mdt read нет. Но чем Вас не устраивает mtd verify? Цитата(vgovseychuk @ Mar 17 2016, 16:09) Или как узнать, все ли бутлоадер правильно прочтет, если в разделе есть так любимые NAND-ом бэдблоки. Смотрите документацию/код вашего бутлоадера. Вы, кстати, не сказали, каким бутлоадером пользуетесь. Например u-boot может читать как с учетом, так и без учета бэдблоков. В вашем случае, очевидно, бэдблоки надо учитывать, поэтому вместо nand read следует использовать nand read.jffs2 (если у Вас u-boot). То же самое касается nand write. Цитата(vgovseychuk @ Mar 17 2016, 16:09) Нормально ли то, что я копирую весь раздел операцией read/write а не размер файла(понятно, что это медленнее, но что будет происходить при наличии бэдблоков)? В общем случае - не нормально. Это может быть нормально, если целевой раздел (куда мы копируем) больше размера копируемых данных, и даже при наличии бэдблоков данные в него заведомо влезут. Иначе, если в процессе записи будет пропуск бэдблока, запись "вылезет" за пределы раздела. У Вас здесь, кстати, вообще какая-то путаница с размерами: в первом сообщении Вы пишете, что размер раздела fdt 128k. А теперь Вы пишете в него данные размером 0x40000, то есть 256k! Надеюсь, это не ошибка, а Вы просто поменяли разбивку... Цитата(vgovseychuk @ Mar 17 2016, 16:09) P.S. В Openwrt есть еще команда nandwrite. Может, ее применять вместо mtd write? Это - на Ваш вкус. Лично я именно nandwrite использую для обновления ядра. И еще вопрос - зачем Вы fdt и ядро переписываете дважды (через промежуточные разделы)? С файловой системой понятно - Вы не можете переписать ее пока она смонтирована. Но с fdt и kernel-то какая проблема? Вы не перемудрили ли здесь?