cstdint, arm-none-eabi- та Ubuntu

Міняв диск, заразом поміняв і Убунту 16.04 на 18.10. Як і минулого разу на шістнадцятій, поставив «рідний» для системи пакет arm-none-eabi-. Мабуть, пора закінчувати з такою практикою, всістися на якусь іншу збірку компілятора, ту ж linaro. Бо проекти перестали збиратися. І на чому, на рівному місці! Компілятор не знаходить файл cstdint.

Короткий пошук показав, що версія компілятора 6.3.1, include-файли лежать в /usr/lib/gcc/arm-none-eabi/6.3.1/include та в /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/include, який, зрештою, вказує на /usr/include/newlib.

А от заголовочні файли C++ лежать в /usr/include/newlib/с++/7.3.1. Звідки взялася сімка — важко сказати. Може це одрук, може дійсно поклали іншу версію, але жодного файлу від C++ cpp не знаходить. Назву 7.3.1 вирішив не чіпати, просто поруч додав лінк 6.3.1->7.3.1. Після цього cpp по -v показав додаткові шляхи до файлів і все стало збиратися.

Неприємна помилка в Doxygen 1.8.11

Зазвичай я не поспішаю переповзати на нову версію Ubuntu і досі сиджу в Ubuntu Mate 16.04. І я не один такий, на роботі також 16.04 (тільки не Mate, а «звичайна», зі стільницею Unity).
І от на роботі ж і виловив помилку в Doxygen, який в убунті 16.04 стоїть версії 1.8.11. Заманулося отримати для перегляду дерева викликів, CALL_GRAPH і CALLER_GRAPH, щоб швидше ознайомитися зі структурою чужого коду. А отримав страшну кашу з довгими циклічними петлями викликів. Виявилося, що всі функції, прототипи яких описано в .h-файлі безпосередньо під inline-функцією, вважаються такими, що викликані з цієї inline-функції.
Мінімальний приклад, doxy-bug.{h,c}:

static inline foo(void) { }

void moo(void);
#include <doxy-bug.h>

void moo(void)
{
    foo();
}

Doxygen 1.8.11 генерує для inline-функції foo() такий граф викликів

Wrong call graph (doxygen 1.8.11)

а для moo() взагалі отакий:
Wrong call graph (doxygen 1.8.11)

Уявляєте, що я отримав на дереві з кількох каталогів і сотень функцій, а в h-файлах під inline-функцією може бути описано декілька прототипів, всі з яких стають «викликаними» з неї? Оскільки всі ці функції викликали ще у глибину на декілька рівнів статичні функції всередині своїх файлів, а вже ті викликали ці inline-операції, утворювалося багато довгих петель.

На щастя, у свіжій версії Doxygen 1.8.15 цю помилку виправлено. Все красиво:
Correct call graph (doxygen 1.8.15)

Переставлю тепер doxygen і на роботі, буде легше.

Linux Kernel під Creedence Clearwater Revival

Сьогодні над CLRS сиділося під Creedence Clearwater Revival.
Але ж у голові паралельно й інше крутиться, то вийшло:

Oh Working Queue, oh Waiting Queue
And IRQ, how I love you, all IRQ
I like the way you walk
I like the way you talk
I like all your spinlocks
 but hate if you deadlock, All Linux *Q*

Well, say that you’ll be hard
Well, say that you’ll be soft
Well, say that you’ll work fine
 and never give me pain, oh IRQ

Well, say that you’ll be mine
Well, say that you’ll be mine,
Well, say that you’ll works fine,
 works all the time, my Working Queue

Oh Working Queue, oh Waiting Queue
And IRQ, how I love you, all IRQ

I like the fast top half
I like the bottom half
I like the user space
I like the user space, oh Working Queue

Oh Working Queue, oh Waiting Queue
And IRQ, how I love you, all IRQ

© моє

Пінгвінятко Лінукс

Пінгвінятко Лінукс, яке вишивалося донькою, губилося, вишивалося наново, потім десь лежало, потім знайшлося — нарешті отримало рамку і постійне місце на стіні.

Міні-комп’ютер розміром з монету (конкурс)

Конкурс, у якому можна виграти одну з трьох плат VoCore v1.0 з OpenWRT/Linux:

Плата VoCore v1.0

  • Процесор RT5350, 360 MHz + память 32 МБ SDRAM
  • WiFi на борту
  • OpenWRT/LEDE Linux
  • Розміри 25.6 x 25.6 mm – приблизно як ураїнська монета 1 гривня
  • Повністю відкритий код та схема

Треба лише описати — що хочеш на цій платі зробити, розмір і можливості плати такі, що можна зробити багато всього.
З надісланого відберуть 10% найцікавіших заявок, тоді серед них розіграють три плати, по Україні відправлять «Новою Поштою» за власний рахунок.

Детальніше у фейсбуці, в оголошенні від Володимира Шиманського, співзасновника Blynk IoT Platform.

p.s. Сам я участі в конкурсі не беру, бо то треба спочатку навчитися краще керувати своїм часом, вивільнити його трохи, і лише затим придумати, що ж я хочу зробити. За місяць я не вкладуся 😀

SEC_ERROR_LIBRARY_FAILURE

Або «як заблокувати собі інтернет за кілька секунд і як повернути його собі назад»
Щоправда, якщо це вперше, то назад не за кілька секунд і якщо є ще з чого погуглити.

Минулого разу я запускав Wireshark давно і у WindowsXP. Пам’яталося, що там запускав його від адміністратора, тому коли в Linux він мені сказав, що на щось там (на dumpcap, але то не важливо) йому не вистачає привілеїв, я не поліз читати, що треба робити (додати себе в групу wireshark), а взяв і запустив його через sudo.

Йому це однак не сподобалося (і правильно!) і він послав мене читати документацію. В інтернеті. Через Firefox. Ну я прочитав, зробив як він просив, захотів ще щось глянути в мережі, запустив Firefox, а він мені і каже оце кляте SEC_ERROR_LIBRARY_FAILURE

Добре, що є ще планшет. Причина хвороби та ліки знайшлися швидко — Firefox з-під sudo-шного Wireshark кілька файлів у мене в ~/.mosilla/ перезаписав від рута. При роботі від звичайного користувача ті файли не читалися і робота далі не йшла.
Ліки:

find ~/.mozilla/firefox/ -user root -print0 | xargs -0 sudo chown fooluser:fooluser

де fooluser — логін необережного користувача.

p.s. Дійсно щось я став необережним поспішайком 🙁

Символ діаметру

І не лише він.

Вже багато років використовую розкладку клавіатури «Ukrainian unicode».
Спочатку вибирав її при налаштуванні Linux, тепер вже багато років ця розкладка встановлюється автоматично при виборі української мови системи. До речі, цю розкладку можна встановити і для Windows.

Переваги цієї розкладки для мене суттєві:
• У системі залишається дві розкладки — англійська та ця. Російську мову я використовую доволі рідко і можливості набрати російські літери Ы ы Ё ё Э э Ъ ъчерез правий Alt вистачало ще тоді, коли я відносно багато часу проводив на форумах, а зараз і поготів. Перемикання можна призначити на клавішу CapsLock — капсом я пишу ще рідше, ніж російською, а якщо сильно потрібно, то можна натиснути Shift-CapsLock. Індикацію вибраної розкладки для двох розкладок можна призначити на світлодіод ScrollLock на клавіатурі, що теж доволі зручно.
• Доступні символи, заради яких зазвичай доводилося перемикатися на англійську. Це «більше-менше», різноманітні дужки, косі риски.
• Доступні символи, яких раніше просто не було і доводилося пам’ятати код Unicode для набору через Ctrl-Shift-u або шукати потрібне через меню «вставити символ». Це ± та , еліпсис , градус °, лапки потрібного виду, em- та en- тире і © ® ™. Також є можливість поставити наголос та вставити нерозривний пробіл.

Але завжди хочеться більшого 😉

»»» Наприклад…

Quartus, USB-blaster та Ubuntu 13.04

Років десять тому була задумка з підручних матеріалів (мікросхем, які однак завжди є у шафці) зробити спеціалізоване «щось схоже на логаналізатор» — запис з мітками часу прийнятого з двох каналів UART, кількох цифрових входів з дискретністю в десяток мікросекунд та пари аналогових входів з дискретністю в сотню мікросекунд.

На платі ATmega64, FT245, мікросхема статичної пам’яті 512Kx8 та між ними мостом EPM240. Ця альтеринка повинна була сама писати у буферну пам’ять цифрові входи при зміні їх стану, а також супроводжувати міткою часу записи від мікроконтролера (UART-и та аналогові входи) а також бути «DMA-каналом» для FT245.
Але змінилися задачі, змінилася робота, … Через кілька років по виготовленні плат парочку навіть було запаяно, але далі справа не пішла.

Заманулося таки хоч якось запустити цю стару плату, хоча б для тестування змін у scmRTOS 🙂

Знайшов у себе в завалах якийсь Квартус 9.1 (free-шна версія для Linux). Поставив. Поруч в архівах лежали рекомендовані для роботи з USB-blaster файли 51-usbblaster.rules (записувати у каталог /etc/udev/rules.d)

# USB-Blaster
#
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001|6002|6003",\
OWNER="root", GROUP="root", MODE="0666", SYMLINK+="usbblaster"

та рядки, що їх треба додати до файлу /etc/rc.local

# For Altera USB Blaster
mount --bind /dev/bus /proc/bus
ln -s /sys/kernel/debug/usb/devices /proc/bus/usb/devices
#

«Вмикаю — не працює». На деякий час програматор квартуса задумався, потім сказав, що не знайшов нічого, що його могло б зацікавити. Пробую cat /sys/kernel/debug/usb/devices, а воно мене не пускає. О, дивлюся далі.

$ ls -l /sys/kernel | grep debug
drwx------  22 root root    0 лис 19 08:58 debug

При тому, що

$ sudo ls -l /sys/kernel/debug | grep usb
drwxr-xr-x  3 root root 0 лис 19 08:58 usb

Тобто доступ на читання до підкаталогу usb є, так само до всіх інших у debug, поруч лежать файли з правами 444.
Отже, все, що лежить у debug — дозволено читати всім. Тому не став гаяти часу, зробив просто

$ sudo chmod 755 /sys/kernel/debug

Програматор квартуса побачив мій усб-бластер, тепер, може, щось і зроблю.

Обмалинився і я

І що цікаво — син учора ввечері спитав: «а чого це у нас в хаті малиною пахне?»

Про те, що я десять днів тому замовив з британського сайту RS плату Raspberry Pi, він нічого не знав. Але нюх у нього є 🙂
Сьогодні вранці по дорозі на роботу мене перехопив дзвінком кур’єр DHL, зрадів що не треба буде пертися до мене додому в наш куток. У Києві під’їхати — туди, куди і без мене, імовірно, щось було, бо поруч офісний центр немаленький — набагато простіше.

Загалом конверт, коробочка та плата — все таке саме, як мало бути, фотографувати та показувати нема сенсу.

Прибуло кур’єром, перехопив мене дзвінком по дорозі на роботу, то туди й підвіз.

RS Stock No. Qty     Description                  Unit Price Goods Value
756-8308      1   Raspberry Pi Type B
                  Single Board Computer 512MB     US$35.00   US$35.00
                                             Running Total   US$35.00

    Standard Delivery (Despatch expected within 2 week(s))    US$8.02

                                               Order total   US$43.02

Доставили за десять днів після оплати, в два тижні чудово вклалися.

Тепер треба знайти час з цим поколупатися. Боюся, за наступні пару тижнів лише викачаю образ лінукса та запишу на SD карту…
Ой, це ж треба ще SD карту знайти. Хоча тимчасово можна з Canon A610 вийняти.

Gnumeric

Останнім часом починає доходити, що «необхідність сумісності з тими, хто у віндовсі» — це для мене така «міська легенда», яка, здебільшого, не має жодного стосунку до реальності. Досить багато «документів» у мене — для внутрішнього використання. З тих, що мають виходити назовні — переважна більшість не призначені для редагування там, «іззовні». Тобто можуть іти у світ у вигляді pdf-файлів. І вже багато років так і роблять, бо це виключає імовірність випадкового редагування в процесі читання/друкування.
Так, спільної роботи над документами у мене практично нема, точніше, вона є у формі «посиділи за столом, обговорили, підказали/попросили, а далі редагую все одно я».

Так чому ж я досі навіть свої майже тимчасові таблички, наприклад, напруга-струм на вході-виході для різних режимів та пораховані з них потужності, коефіцієнти корисної дії та подібне — роблю у OpenOffice (на роботі убунта новіша і він там називається LibreOffice — «вони самі не знають, чого хочуть»)?

Кілька місяців тому майже випадково запустив gnumeric. Здається, коли xfce пробував, він прикрутив запуск gnumeric і для .ods-файлів. Так, місцями воно простіше, місцями трохи незвичне. Але запускається практично моментально, ті ж самі файли мають менший розмір, …
А таки якщо сильно буде треба, то .gnumeric експортується і в .ods, і в .xls.

[flagcounter image]