Category: it

Лампа

В копилку Windows

Уж не буду говорить, что винда меня банально бесит тем, что когда она загрузилась тупо до ввода логина и пароля чем-то жутко хрустит винтом, будто терабайты туды-сюды копирует (и судя по всему так и есть, что копирует - не ясно). Включил так комп, ну просто чтобы загрузился, и он херачит винтом (да, я пользуюсь обычными блинами). С линуксом такого нет. Да и шустрее он несоразмерно.

Но столкнулся с весьма неприятной багой, да ещё и на сервере, да ещё и не имея доступа к нему, но бага касается меня (сорян, ни слова больше, ни сантиметра... гм). Короче говоря, столкнулся с тем что у винды есть ограничение на длинну пути. Если вы создадите папку в 256 символов, то внутри этой папки вы уже создать файл или папку не сможете, без специальных танцев с бубном.

Это боль и унижение из коробки. И подстава подстав на удалённых не обслуживаемых серверах.
Лампа

Чековый принтер HX-7100

Народ, завалялся у меня китайский чековый принтер. Рабочий, есть в комплекте диск с дровами. Даже его запускал на ХРюшке или семёрке. Не без геморроя, но работает. Печатал даже из ворда. Можно хоть картинки печатать.


Лежит без дела много лет. Вчера попробовал его в линуксе запустить, но что-то так и не разобрался, а пол вечера тратить на него лениво. Короче говоря, может нужен кому. Фото под катом.Collapse )

Хочу за него 300 рублей. Торг уместен. Могу встретиться в метро.
З.Ы. Из поста остался фотик, сетевухи, радиатор.

Купили.
Лампа

Как одной командой повесить linux

С любыми правами, нужен просто bash

:(){ :|:& };:




Двоеточие можно заменить на любой другой символ или слово. Нормального линукс-хоста, которого не жалко у меня под рукой не оказалось, но телефон умер быстро.



Не благодарите. Ограничение только на количество процессов.
UPD Fork bomb
Лампа

sopwith

Сопвич, известнейшая игра детства. Вспомнил о ней, после ряда постов на хабре. Вот она.



Самолётики с упоротым управлением. Потом привыкаешь и понимаешь, что игрушка огонь. Существует официальный сайт автора данной игры (редкость для ДОСовских игр). Вот он. Есть прям совсем сайт игры http://www.sopwith.org/ (я прям рекомендую заглянуть, если псот зацепил!)

Собтвенно говоря, самая крутая штука, что летать можно в двоём, по "сети" того времени - нуль модему. Я что-то решил вспомнить молодость и хотел сыграть с камрадом goodic по сети. Расчехлил ДОСбокс под Виндой. Винда=боль, во всех аспектах, т.к. повторил операции под линуксом - всё для людей. Таки расчехлил, потратил часа два в попытке его русифицировать и чтобы он не крашился. Плюнул, использую английскую версию. Всё это делал из-за 5 Нортон Коммандер, у которого была своя терминалка (эх, сколько BBS она видела...). Через терминалки мне не удалось поговорить (знаю, рукожоп). Бился, бился. В общем-то нульмодем настраивается в досбоксе просто :
На сервере:
serial1 nullmodem port:5000
На клиенте:
serial1 nullmodem server: port:5000

Но не получилось. При любых попытках коннекта падает с такой ошибкой...



Указать СОМ-порт не удаётся, т.е. любой вариант -p падает.



Всё делал на самой первой версии этой игрушки. На второй версии те же яица, хотя там меню крупнее. Психанул, и тупо поставил виртуальную машину с линуксом, из репозитариев поставил sopwith и там есть нормальный tcp-сервер!!! Тот случай, когда проще виртуалку накатить, чем трахаться с DOSBOX. А вообще ностальгичные слёзы пускал, глядя на Нортон Коммандер, квадратную мышу, скринсервер... Всплакнул...



З.Ы. Но я бы в тру-дос версию сыграл бы по сети. Ай да, ребят? Давайте вместе настроим?
Лампа

Windows 10 vs Linux Mint

Windows 10 говно. Вот говно и точка. Глючная, тормозная, говённая ОС. Долго грузится, медленно работает, не интуйтивный интерфейс. Узнать мощность сигнала вайфай? Я не нашёл где! Установить ПО... Установка ПО это боль и печаль, не то что в минт.

Чих-пых, перезагрузка, обновления - это отдельная боль. Я бы никогда в жизни не использовал бы виндоус и всех бы отговаривал это делать, но есть ПО, которое на виртуалке не тянет, а под линукс пока не выпустили. Печаль, тоска.
Лампа

Makefile

Может показаться смешным и забавным, но не смотря на то, что я программирую большую часть своей сознательной жизни, я никогда особо не умел писать мейкфайл.
У меня есть готовый Make, который кочует из проекта в проект и я его редактирую по мере надобностей. Ну я просто правил его под свои нужды, не особо задумываясь над смыслом того, что происходит. И тут ВНЕЗАПНО решил на make сделать систему сборки. Не, ну а чего, в ядре, убуте и прочем есть make, питон есть не везде и не всегда, и типа система сборки должна быть на нём.

Основная проблема была даже не в самом make, а тупо в самом подходе системы сборки. Когда ты собираешь что-то здоровенное с подтягиванием с гитов, созданием образов и т.п. - это очень долго. Пересборка может занимать 20 минут. И если ты ошибся, то минус 20 минут. Десять ошибок с поиском и редактированием - минус пол рабочего дня. Тут make конечно не при чём.

А вот теперь о Make. Все инструкции по мейкфайлам написаны людьми, которые на них съели собаку и пока не попробуешь что же там написано, нифига непонятно что они хотели сказать. Итак, ряд открытий, которые я сделал.

1. Makefile - двухпроходной. Сначала инициализируются переменные и цели, а потом уже выполняется. Это хорошо и плохо. Хорошо, потому что не надо думать в каком месте у тебя находится цель.

2. Переменные. Это вообще раздел специальной олимпиады (примерно как + ++ +++ в js).
Простой пример, задание переменной идёт как обычно:

imagename:="image.img" , но есть нюанс.
imagename="image.img" - это уже не строгое присваивание. Может быть сделано во второй проход...

Обращение к переменной идёт ВНЕЗАПНО через функцию. $(imagename) - это не как в BASH обращение к переменной, это обращение к функции, которая возвращает значение переменной!!! Доказательство, что это функция в следующем коде

gitcheckout= cd $(1) && git checkout $(2) && cd ..
...
trololo:
	$(call gitcheckout, $(dtsdir), master)


Или ещё интереснее:

current_dir = $(shell pwd)

Получает текущую дирректорию в переменную, к которой будет обращение через функцию. Функции могут быть рекурсивными. Отсюда идёт третий пункт.

3. bash в Make - это боль и унижение...
Серьёзно, я внятно так и не понял как использовать переменные bash в Make. В результате использую временные файлы, в которое сохраняю содержимое... А. Ещё многострочное надо писать таким образом ;\ . При чём, при такой записи надо самостоятельно проверять ошибку в коде bash, make никак не проверяет эту порнографию. Вот пример извращений
$(imagename): 
	{ \
	fallocate -l $(imagesize) $(imagename) ; \
	sudo losetup --find --show $(imagename) > mountpoint ; \
	sudo parted --script `cat mountpoint` mklabel msdos ; \
	sudo parted --script `cat mountpoint` mkpart primary fat32 0% 100M ; \
	sudo parted --script `cat mountpoint` mkpart primary ext4 100M 100% ; \
	sudo mkfs.vfat -F32  `cat mountpoint`p1 ; \
	sudo mkfs.ext4 -F  `cat mountpoint`p2 ; \
...
	}


Простой кусок кода, который алокирует разреженный файл заданной длинный, потом монтирует его как loop-устройство и дальше мы начинаем его размечать. Вместо того, чтобы написать, как в bash (кавычка где буква "Ё")

mountpoint=`sudo losetup --find --show $(imagename)`
sudo parted --script $mountpoint mklabel msdos 


Пришлось городить этот цирк с конями. Пока писал этот пост, подумал, что можно было через функцию $(shell sudo losetup --find --show $(imagename)) , но лень пробовать.

В общем если нужна помощь по Make и вы боялись спросить, то у вас есть уникальный шанс!

P.S. Пост будет не полон без ссылки на толковый ман
Лампа

Допиливание SOM-модуля на процессоре i.mx6ul



Есть вот такой чудесный SOM-модуль и я в нём допиливаю потихоньку всё что не допилили. Вообще портирование - эта та сфера, которая одновременно меня и сказочно бесит и радует. Бесит тем, что ты мало что создаёшь в реальности, а только пилишь чужие ошибки (это вымораживает, так как код хочется писать, надо больше кода). И часто ходишь по каким-то граблям и не понимаешь почему оно работает вот именно так, а не иначе, поиски решений в интернетах приводят иногда к куче битых ссылок. Иногда можно неделями стучаться головой в закрытые двери. С другой стороны, ты ковыряешься в u-boot и ядре. Т.е. правишь одну громадную программу и есть ощущение единства в глобальном проекте. Я пока ещё не определился, нравится мне это или нет, но тошнит не сильно (пока получается).
Больше всего не хватает человека, который бы мог обучить всему этому безобразию. Вопросов тысяча.

Из любопытных штук. Была задача, чтобы при обращении cat /proc/cpuinfo выдавался серийный номер процессора. До этого был нули. Примерно так:

Hardware        : Freescale i.MX6 Quad/DualLite (Device Tree)
Revision        : 0000
Serial          : 0000000000000000



Как обычно подступаем к задаче? Гуглим. Нахожу такой же вопрос, точнее два. Раз и два и написанно там следующее и страшное:

- the contents of /proc/cpuinfo are generated by c_show in arch/arm/kernel/setup.c.
- c_show takes global values system_serial_high and system_serial_low.
- these two are in turn set in arch/arm/kernel/atags_parse.c, from a tag structure (atag) with ATAG_SERIAL identifier.
- ATAGs are passed to the kernel by the bootloader.
- u-boot has ATAG support in arch/arm/lib/bootm.c, in this case if CONFIG_SERIAL_TAG is defined, setup_serial_tag exists and calls get_board_serial to get the serial number.
- unfortunately, get_board_serial is not implemented for i.MX6.


Короче говоря, передача параметров через ATAG (как я понял, типа область памяти, которая шарится между u-boot и ядром, от туда ядро берёт свои параметры) и там надо ещё поплясать. Ну и мякотка на торте, что вообще серийный номер не поддерживается. Т.е. разберись с ATAG, добавь в ядро кусок кода, в u-boot и не факт что будет работать.
Вы чувствуете этот запах? Запах старого геммороя? По второй ссылке там хоть какие-то примеры кода, которые оказались полезны хоть немного. Рассказываю гениальное и простое решение данной проблемы.

Оказалось, что серийный номер камня можно передать просто установив env "serial#" в u-boot и "мистическим" образом она попадёт в ядро. В результате, нам нужно в инициализации борды в u-boot прочитать серийник и установить env:

 get_board_serial(&serialnr);
 char board_serial_str [19];
 sprintf(board_serial_str, "0x%X%X",serialnr.high, serialnr.low);
 env_set("serial#", board_serial_str);



Четыре строчки кода!!! И да, оно работает:

cat /proc/cpuinfo 
processor       : 0
model name      : ARMv7 Processor rev 5 (v7l)
...
Serial          : 0x2F30C1D2604355C0




Поздравляю, вы великолепны.
P.S. Вообще среди читателей нет тех, кто работал с камнем i.mx6ul? Может кто знает как решить проблемы частоты работы камня.
Лампа

Открытий чудных, китайцы нам несут

Вообще, за время работы много чего узнал, от чего шевелятся волосы. Все ваши вопли, мол Поттеринг всё сломал и линукс превратил в мастдайку (привет eddy_em ) ерунда, в сравнении с реальным положением дел. И даже то что мелкомягкие мейнтенерят в ядро, это тоже не так страшно. Титан надвигающегося вселенского ада - это Китай. В частности один из самых распространённых китайских процессоров - Mediatek и прочее такое же гхм... Тысячи их и терабайты и петабайты китайского говнокода, который никто и никогда не перепишет и всё радостно идёт в ядро ведра.

Итак, пару примеров из моей практики. Мы говорим о чудесных открытиях и откровениях, не только по коду.

1. Если устройство не загрузилось, оно не будет заряжаться. Да-да, если вдруг слетела прошивка и работает только загрузчик (даже вторичный), а не ядро - заряжаться не будет. Для зарядки, суко, нужны ДРАЙВЕРА (фейспалм). Пример на фото. Железка (некоторая железка на медиатеке), к ней аппаратная консоль. Я втыкаю просто провод питания от зарядного устройства и на аппаратной консоли (припаяна и висит сзади платка преобразователя на 1,8 в) вижу лог загрузки и сообщения ядра.


Данное открытие я сделал, когда поймал бутлуп на устройстве, да что скрывать, на bv6000s. Аккумулятор не съёмный. Я был молод и глуп не видал больших ... и ушёл в пятницу домой, оставив его на зарядке. А в понедельник утром обнаружил полностью разряженный кирпич. Так что, если играетесь с прошивкой телефона, заряжайте его на 100% и в случае неудачи - снимайте аккумулятор. Реанимировать прошивку возможно (если, конечно калибровки не затёрли, но это надо талант иметь), но если устройство полностью сядет - сделать это будет сложнее.

2. Китайский говнокод.

Для меня было адовым откровением, что в сорцах ведра огромное количество тупо бинарных файлов, которые из userspace напрямую работают с железом, минуя системные вызовы ядра. И у меня вообще ощущение, что там libc используют едва-едва, только чтобы хоть запускалось. Это прямо боль и унижение. А самое большое унижение, это сами дрова железа. Вот ковыряю драйвер вайфая, в ядре линукс. И вижу такой, эм... Такое странное место.


На минуточку - это ЯДРО! Святая святых. Какого лешего там дефайны на windows??? Что за лютый треш? И такого ада там куча. Дрова написаны через жопу, даже мимолётно не соблюдая стандарты POSIX. Это АД!!!

Всё, я выплеснул свои впечатления ада, который есть сейчас.
Лампа

kicad 5 upd

Благодаря iosaaris выяснилось, что таки да, на Linux mint 18.02 есть некоторые тонкости установки.
Удалось победить схематик. Осталось теперь сопоставить футпринты микросхем.
Лампа

Арудино, будь она неладна

Попросили меня знакомые помочь им с кодом для Ардуино. Я к ардуино отношусь ровно, не плохо и не хорошо. Хорошо, что она есть, плохо что люди на неё и останавливаются. Но народ пилит на ней свои железки, вот и я решил помочь.


Честно говоря я давно не брал в руки шашек, и давным давно ничего не писал для контроллеров. Ну на ардуинке на позапрошлой работе делал водосчётчики. Это было нужно как временное дешёвое решение, и оно себя вполне оправдало.Но там код писал от силы часа два, вместе с отладкой (до этого практически ничего не писал).
С контроллерами вообще редко сталкиваюсь. Нет, в код лазать приходиться - перенести что-то с контроллера, либо посмотреть прокол работы. Но писать - давно не писал.

Ну в общем, помогаю я с кодом. Типа по скайпу онлайн переписываю их код с пояснениями. И тут понимаю, что для опроса датчиков и кнопок в коде не хватает таймера. Ибо можно пропустить нажатие. Ну и начинаю смотреть что сделано для ардуины в области таймеров. И волосы шевелятся... Си++ на 8-ми битах, всякие кривые скетчи... Ужас. В общем, я плюнул и начал смотреть, как это всё сделать по взрослому, и вернулся к истокам easyelectronics ну и хороший пример именно для ардуино. Без всяких скетчей.
Желание вообще весь это ардуно говнокод переписать на ламповом си, а лучше на ассемблере. Ещё у ардуинки убогий редактор. Интересно, можно ли компилировать и прошивать из консоли? Так же, каким образом можно писать на gcc и использовать арудино-загрузчик?