LINUX.ORG.RU

История изменений

Исправление Barracuda72, (текущая версия) :

Первый момент: я бы предложил вместо десятка заглушек (для _exit, _close и пр.) сделать одну-единственную, а все остальные имена повесить на нее weak alias’ами. Это копейки, безусловно, но зачем их тратить, если можно не тратить?

Второй момент: «Скопируем код из предыдущей части» уж очень буквально получилось) Или это упражнение для читателя?

Еще пара нюансов (возможно, специфичных):

  • В моем случае newlib была собрана с поддержкой инициализаторов / финализаторов, поэтому в файл os.c добавилась еще пустая функция _init без аргументов.
  • Почему-то GCC при линковке, несмотря на флаги, подсовывал мне армовую сборку libc (вместо тумбовой). Программа при этом собирается и даже стартует, но валится внутри __libc_init_array. Решилось возвращением ld в качестве компоновщика (впрочем, это не обязательно) и ручным указанием правильных путей к библиотекам. Возможно, я просто не нашел нужный флаг у GCC (ни -mcpu, ни -march, ни -mtune, ни -mthumb не помогают).

По итогу на C6T6 прошивка с printf даже в ПЗУ не влезает (тут его всего 32 кило). С iprintf помещается и работает вполне приемлемо.

Исправление Barracuda72, :

Первый момент: я бы предложил вместо десятка заглушек (для _exit, _close и пр.) сделать одну-единственную, а все остальные имена повесить на нее weak alias’ами. Это копейки, безусловно, но зачем их тратить, если можно не тратить?

Второй момент: «Скопируем код из предыдущей части» уж очень буквально получилось) Или это упражнение для читателя?

Еще пара нюансов (возможно, специфичных):

  • В моем случае newlib была собрана с поддержкой инициализаторов / финализаторов, поэтому в файл os.c добавилась еще пустая функция _init без аргументов.
  • Почему-то GCC при линковке, несмотря на флаги, подсовывал мне армовую сборку libc (вместо тумбовой). Программа при этом собирается и даже стартует, но валится внутри __libc_init_array. Решилось возвращением ld в качестве компоновщика (впрочем, это не обязательно) и ручным указанием правильных путей к билиотекам. Возможно, я просто не нашел нужный флаг у GCC (ни -mcpu, ни -march, ни -mtune, ни -mthumb не помогают).

По итогу на C6T6 прошивка с printf даже в ПЗУ не влезает (тут его всего 32 кило). С iprintf помещается и работает вполне приемлемо.

Исходная версия Barracuda72, :

Первый момент: я бы предложил вместо десятка заглушек (для _exit, _close и пр.) сделать одну-единственную, а все остальные имена повесить на нее weak alias’ами. Это копейки, безусловно, но зачем их тратить, если можно не тратить?

Второй момент: «Скопируем код из предыдущей части» уж очень буквально получилось) Или это упражнение для читателя?

Еще пара нюансов (возможно, специфичных):

  • В моем случае newlib была собрана с поддержкой инициализаторов / финализаторов, поэтому в файл os.c добавилась еще пустая функция _init без аргументов.
  • Почему-то GCC при линковке, несмотря на флаги, подсовывал мне армовую сборку libc (вместо тумбовой). Программа при этом собирается и даже стартует, но валится внутри __libc_init_array. Решилось возвращением ld в качестве компоновщика и ручным указанием правильных путей к билиотекам. Возможно, я просто не нашел нужный флаг у GCC (ни -mcpu, ни -march, ни -mtune, ни -mthumb не помогают).

По итогу на C6T6 прошивка с printf даже в ПЗУ не влезает (тут его всего 32 кило). С iprintf помещается и работает вполне приемлемо.