dlinyj: (Default)
[personal profile] dlinyj


Есть вот такой чудесный 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? Может кто знает как решить проблемы частоты работы камня.

Date: 2019-06-19 03:36 pm (UTC)
From: [identity profile] air-the-best.livejournal.com
Я не работал с таким камнем, но я застал момент, когда в интернете не было ответов на большинство моих вопросов ;)
и приходилось думать головой. помню это ощущение.

прочел твой курсив и то, что там было написано - не вызвало непонимания, вроде все разжевано.

но я скорее пошел бы в исходники ядра и смотрел бы на другие архитектуры и делал ctrl+c и ctrl+v

Если ты считаешь, что это гемморой - то у тебя впереди очень много всего интересного :)
и я тебе завидую :)

Date: 2019-06-19 04:08 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Я в том смысле, что проблема решилась сильно проще. А то что написано курсивом не работает, я попробовал :)

Согласись, что тогда системы были несколько проще и проще было разобраться. Я бы с удовольствием с ядром 2.6 и ниже работал бы, там всё просто и доступно.

Edited Date: 2019-06-19 04:09 pm (UTC)

Date: 2019-06-19 05:59 pm (UTC)
From: [identity profile] air-the-best.livejournal.com
Там курсивом написано:
- unfortunately, get_board_serial is not implemented for i.MX6.

ты ее имплементировал. работает :)

Я ковырял старые ядра, про новые не скажу, но, мне кажется, тут все должно быть еще проще - в сторону модульности, универсальности,но масштабнее уже.

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

Сейчас - вообще рай для разработчиков. dev kits почти ничего не стоят. инфы - валом.. Здорово! хорошее время.

Date: 2019-06-19 06:07 pm (UTC)
From: [identity profile] minimumlaw.livejournal.com
По клокам процессора - своего драйвера нет, вместо него используется cpufreq-dt (универсальный).

Для начала смотреть
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/cpufreq/cpufreq-dt.txt
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/cpufreq/cpufreq-dt.c

Потом
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/imx6ul.dtsi (строки 54...93)

Обрати внимание на то, что частотам однозначно сопоставляется напряжение (а значит должен быть описан соответствующий регулятор и он должен уметь выдавать нужное). Ну и "губернатор" со своими настройками, который этим всем рулит. Конкретно с UL дел не имел, но с очень похожим сталкивался.

Подробнее, боюсь, копать придется самому

Date: 2019-06-20 07:21 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Спасибо большое. imx6ul.dtsi уже начал расковыривать, ещё до комментария. Но проблема в том, что оказалось что в u-boot и в ядре они чутка различаются, как раз на уровне напряжений и частот.

Date: 2019-06-20 09:28 am (UTC)
From: [identity profile] sergey gimaev (from livejournal.com)
у Пашки на форуме "стартеркит" есть Саша - sasamy, он же на электрониксе вроде был.
спроси его. они с Пашей плотно иМХ грызли.

Date: 2019-06-20 09:29 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Кто все эти люди? И где были?

Date: 2019-06-20 09:39 am (UTC)
From: [identity profile] sergey gimaev (from livejournal.com)
ссылка на форум
http://starterkit.ru/html/index.php?name=forum&cat=73
ссылка на Александра - sasamy
http://starterkit.ru/html/index.php?name=account&op=info&uname=sasamy

Date: 2019-06-19 06:45 pm (UTC)
From: [identity profile] murz0id.livejournal.com
Наконец то ты вернулся к любимому делу.... Приятно читать... А откуда этот модуль?

Date: 2019-06-20 07:22 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Разрабатывает наша контора.

Date: 2019-06-20 02:05 am (UTC)
From: [identity profile] masterspammer.livejournal.com
Поздравляю с id!

P.S. С давних пор привыкший, что ответов в явном виде нет нигде, а в неявном ещё поискать.

Пример - формат .doc, где как в утёкшей, так и в официальной информации многого просто нет.

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 06:31 am
Powered by Dreamwidth Studios