Raspberry Pi як комп’ютер для роботи
Не від хорошого життя довелося провести тест Raspberry Pi як робочого комп’ютера.
Не знаю, після якого оновлення Ubuntu MATE, але на моєму основному комп’ютері перестав працювати avr-ld, валиться з помилкою «*** buffer overflow detected ***» (це на 64-бітній системі, пізніше я перевірив, що на 32-бітній такій же МАТЕ і з тими ж оновленнями все працює — це не так, залежить не від розрядності, докладніше тут).
А мені терміново знадобилося внести маленьку зміну в прошивку ATtiny13A. Мій «червоненький» ноутбук зараз інтенсивно використовує дружина, то щоб їй не заважати, я згадав про Raspberry, на яку оце ж нещодавно ставив (таку ж!) убунту.
Поставив там avr-gcc, все зібрав, перекинув на основний комп, прошив.
Стало цікаво порівняти швидкість. Цей маленький (близько 400 байт прошивки) асемблерний проект на роль такого тесту геть не годиться, тому я вирішив позбирати більший. Поставив, відповідно, arm-none-eabi-gcc, щоб збирати поточний проект для STM32F105. Там десятки файлів, за 40 кілобайт результат, — час вже можна міряти. Збирав на Raspberry, на основному своєму комп’ютері (AMD A8), на «червоненькому» Dell Vostro V130 (Core i3) і на роботі на Pentium D (дохлий, як на нинішні часи, комп’ютер, але його там цілком вистачає). На всіх системах стоїть Ubuntu MATE 16.04 з усіма оновленнями. Лише на AMD A8 64-бітна, всі інші 32-бітні (і на всіх 32-бітних avr-ld свою роботу чесно робить).
Ось що вийшло (time make -j число_ядер, час у секундах).
Воно від збирання до збирання трохи стрибало, але не принципово.
система (ядер*ГГц) |
real | user | system |
---|---|---|---|
Raspberry Pi 3 (4*1.2) |
12.2 | 32.6 | 3.3 |
Pentium E2160 (2*1,8) |
9.5 | 13.3 | 1.8 |
Core i3 M380 (4*1,33) |
8.2 | 20.6 | 2.7 |
AMD A8-7600 (4*3.1) |
3.1 | 7.7 | 1.2 |
Тут у табличці нема ширини і швидкості шини пам’яті, своє слово сказало і те, що Raspberry працює з SD-карти, Pentium-D і AMD A8 з SATA-дисків, а Core-i3 з SSD. Але тут я хочу порівняти все ж таки не кількість зкомпільованих рядків коду на гігагерц-ядро чи DDR-истість пам’яті, а абсолютний час — питання, що турбує: «чи йти заварювати чай, чи воно раніше збере» 🙂
Виявилося, що Pi 3, на відміну від перших Raspberry, цілком придатний для роботи з прошивками такого обсягу.
І що ця плата реально набагато швидша, ніж комп’ютер, на якому років 15 тому я запускав альтерівський Quartus-II 9.1 для збирання прошивок альтер (не можу пригадати, що у мене тоді було… якийсь Athlon-550 чи що). Та й «мікроконтролерні» компіляції там більше часу займали.
Натрапив на цей пост в пошуках згадок про помилку *** buffer overflow detected *** на етапі Linking: main.elf, рішення якої я випадково щойно знайшов і хочу поділитися, бо ніде не знайшов рішення. Потратив 2 дні, дійшов до компіляції всього avr-toolchain. Так і не добився. Поки в одному з вікон терміналу тестовий проект скомпілювався. В іншому вікні цей же проект видавав цю помилку. І як всі подібні баги все було просто. В тому терміналі, де лінковка проходила успішно я перед цим змінив мову середовища на англійську: LANG=en !!!
З-за цього прикрого бага я більше року мусив вести розробку на AVR в Windows, добре що була наклейка на ноутбуці, бо я проти піратського софту.
Може комусь знадобиться.
Баг цей здається з’явився починаючи з xUbuntu 16.04. Зараз в мене Mint Cinnamon 17.3,
avr-gcc 4.9.2+Atmel3.5.0-1
avr-libc 1.8.0+Atmel3.5.0-1
binutils-avr 2.25+Atmel3.5.0-2
gdb-avr 7.7-2build1
Дуже цікаво, дякую!
Треба подивитися, я не пам’ятаю, що там у LANG на роботі на 32-бітній MATE, адже вона теж 16.04, як і 64-бітна, але там все добре.
Ну може бути, що це вилазить при 64 бітах + не-англ локаллю. Сама проблема сидить десь на етапі створення .map, бо я пізніше знайшов на одному болгарському форумі рішення проблеми через видалення -Map=$(TARGET).map, з параметру LDFLAGS. Так як я пишу код в IDE Code::Blocks, то саме цей спосіб використав.
А може бути просто інша версія пакунка. Можна спробувати локалізувати баг через порівняння джерельних кодів в робочій версії і в поломаній. Я буде час, може цим і займуся.
Версії я подивлюся, цікаво стало. Є ще ноутбук із «саме Ubuntu», якій потім було доставлено оболонку MATE, Unity більше не використовується. З точки зору gcc для avr відрізнятися не повинно, але там можуть бути інші версії. Ноут заразу дружини, я давно ним не користувався.
Самому перезібрати і подивитися думка була, але є цікавіші речі 🙂
Ви на форумі replace не зареєстровані?
Не знав що такий є. Зараз зареєструюся.