Igor68 0 10 августа, 2021 Опубликовано 10 августа, 2021 · Жалоба Quote Могу порекомендовать SiP ATSAM9X60, делал на нем "linux-микросхему" - 100-ногий модуль для напаивания на несущую плату, Ethernet и 4ГБ eMMC на борту. Получилось 35x35мм. Подобное и интересует. Quote 3 hours ago, Овчинников Игорь said: Ну не ESP же предлагать для изделий........ Почему нет, если удовлетворяет запросам? Не нравится в плане того, что надо и сеть и какой-то(какой скажут) коннект. Опыт применения был - вроде нормально, но не то. Красивее было бы применять USB устройства (есть во всей торговле). Всавил... хочешь WI-FI хочешь Bluetooth, хочешь флешка. Меняй только в менющке опции. Не надо ничего в плане прибора, тогда по Ethernen серверок системы упраления устройттвами по Modbus RTU. Одним словом одна маленькая плата на множество случаев применения. На производстве заказываем как сами платы, так и автопайку. Местный только ручной монтаж. Ради интереса на плате запустил GCC (скачал) - работает. Клиент MySQL - работает с Базой (ранее сделал для Moxa IA240LX). Чем не блочок(заготовка) системы управления и/или сбора данных и не только полевых приборов (для того и возможность беспроводной связи и др.). Руки не дошли клиент (сбор данных) OPC_UA установить... сейчас самодельный крутится на IA240LX (уже год круглосуточно читает данные от SIENENS по Ethenet). Все мои коды для IA240LX спокойно работают на этой плате. Вот только рабочий linux-headers сделать не могу. Не умею, надеюсь, что пока. А вот это: bash-3.2# /usr/bin/gcc -I/lib/modules/kernel/2.6.27/build/include -Wall -DMODULE -D__KERNEL__ -D_LINUX -v -E -c main.c Invoked as /usr/bin/gcc Reference path: /usr/bin/.. arg[ 0] = rawgcc arg[ 1] = -nostdinc arg[ 2] = -isystem arg[ 3] = /usr/bin/../include arg[ 4] = -isystem arg[ 5] = /usr/bin/../gcc/include arg[ 6] = -U__nptl__ arg[ 7] = -I/lib/modules/kernel/2.6.27/build/include arg[ 8] = -Wall arg[ 9] = -DMODULE arg[10] = -D__KERNEL__ arg[11] = -D_LINUX arg[12] = -v arg[13] = -E arg[14] = -c arg[15] = main.c Using built-in specs. Target: armv5l-unknown-linux Configured with: /home/landley/firmware-0.9.6/build/temp-armv5l/gcc-core/configure --prefix=/home/landley/firmware-0.9.6/build/mini-native-armv5l/usr --disable-multilib --build=x86_64-walrus-linux --host=armv5l-unknown-linux --target=armv5l-unknown-linux --enable-long-long --enable-c99 --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-nls --enable-languages=c,c++ --disable-libstdcxx-pch --enable-sjlj-exceptions --program-prefix= Thread model: posix gcc version 4.1.2 /usr/bin/../libexec/gcc/armv5l-unknown-linux/4.1.2/cc1 -E -quiet -nostdinc -v -I/lib/modules/kernel/2.6.27/build/include -iprefix /usr/bin/../lib/gcc/armv5l-unknown-linux/4.1.2/ -U__nptl__ -DMODULE -D__KERNEL__ -D_LINUX -isystem /usr/bin/../include -isystem /usr/bin/../gcc/include main.c -Wall ignoring nonexistent directory "/lib/modules/kernel/2.6.27/build/include" #include "..." search starts here: #include <...> search starts here: /usr/bin/../include /usr/bin/../gcc/include End of search list. # 1 "main.c" # 1 "<built-in>" # 1 "<command line>" # 1 "main.c" main.c:1:24: error: linux/init.h: No such file or directory main.c:2:26: error: linux/module.h: No such file or directory # 1 "/usr/bin/../include/linux/kernel.h" 1 3 4 # 10 "/usr/bin/../include/linux/kernel.h" 3 4 struct sysinfo { long uptime; unsigned long loads[3]; unsigned long totalram; unsigned long freeram; unsigned long sharedram; unsigned long bufferram; unsigned long totalswap; unsigned long freeswap; unsigned short procs; unsigned short pad; unsigned long totalhigh; unsigned long freehigh; unsigned int mem_unit; char _f[20-2*sizeof(long)-sizeof(int)]; }; # 4 "main.c" 2 MODULE_LICENSE("GPL"); MODULE_AUTHOR("Robert W. Oliver II"); MODULE_DESCRIPTION("A simple example Linux module."); MODULE_VERSION("0.01"); static int __init lkm_example_init(void) { printk(KERN_INFO "Hello, World!\n"); return 0; } static void __exit lkm_example_exit(void) { printk(KERN_INFO "Goodbye, World!\n"); } module_init(lkm_example_init); module_exit(lkm_example_exit); bash-3.2# была глупая попытка скомпилировать пример на самой плате и на её нативном gcc. Глаза уже устали - устал сам и попробовал мнова плату ради опыта Пародийный linux-headers скопировал на плату и испытфл компиляцию. Глупо конечно - но это перед выключением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба Необходимы уточнения! Ччо следует делать... ну и в какой последовательности. Может я что-то не так делаю? Выбираю плату (это пример на том исходнике, что у меня под рукой): make ARCH=arm at91_dt_defconfig Конфигурация (где надо ответить на кучу вопросов): make ARCH=arm config Сборка модулей исходя из конфигурации(а может и не так): make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules Формирование linux-headers: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- headers_install INSTALL_HDR_PATH=/usr/src/linux-headers делал и это: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules_headers_install INSTALL_MODULES_HDR_PATH=/usr/src/linux-headers/build Может что-то не то? Может надо ещё что-то? Или пропустил что-то? Ребята!!! Вы уж простите! Честное слово я никогда подобного не делал. А надо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 67 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба 3 minutes ago, Овчинников Игорь said: Конфигурация Нет необходимости. Для изменения конфига лучше использовать menuconfig. 3 minutes ago, Овчинников Игорь said: Может что-то не то? Может надо ещё что-то? Или пропустил что-то? Что нужно получить в результате? Если собрать свой модуль, то достаточно самого первого пункта - не нужно отдельно собирать подобие "linux-headers", если исходники ядра с конфигом в наличии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 67 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба Сборка модуля Makefile: obj-m = my_module.o make ARCH=arm CROSS_COMPILE=<...> -C <путь к исходникам ядра> -M=<путь к исходникам модуля, содержащим Makefile и my_module.c> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба 8 minutes ago, aaarrr said: Сборка модуля Makefile: obj-m = my_module.o make ARCH=arm CROSS_COMPILE=<...> -C <путь к исходникам ядра> -M=<путь к исходникам модуля, содержащим Makefile и my_module.c> Я правильно понял ( на примере)?: obj-m := mymodule.o make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C /usr/src/linux-X.X.X -M mymodule.c Одним слоыом это содержимое моего(условно) Makefile... А исходники надо только сконфигурировать? И ничего более? Но много видел похожих Makefile типа: obj-m +=tm.o KDIR := /lib/modules/$(shell uname -r)/build all: $(MAKE) -C $(KDIR) ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- SUBDIRS=$(PWD) modules clean: rm -rf *.o *.ko *.mod.* *.symvers *.orde но там лежит Makefile следующего содержания(смотрю в дебиане родной): VERSION = 2 PATCHLEVEL = 6 MAKEARGS := -C /usr/src/linux-headers-3.16.0-10-common O=/usr/src/linux-headers-3.16.0-10-amd64 MAKEFLAGS += --no-print-directory .PHONY: all $(MAKECMDGOALS) cmd := $(filter-out all Makefile,$(MAKECMDGOALS)) all: @$(MAKE) $(MAKEARGS) $(cmd) Makefile:; $(cmd): all @: %/: all @: Но я как ни конфигурировал у меня не вышло сделать так что бы он был... ну или похожий. В ваше примере командой make идёт натравливание на Makefile в диретории с исходниками, которого у меня нет - наверное я сто-то не сделал, или сделал не так. Потому и пвтаюсь натравить собственно компмлятор в своём Makefile: obj-m +=tm.o CC := /usr/bin/arm-linux-gnueabi-gcc MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX -v KD ?= /usr/src/linux-2.6.27 tm.o: tm.c $(CC) $(MODCFLAGS) $(INC) $(KD) tm.c # echo insmod hello.o to turn it on # echo rmmod hello to turn if off # echo # echo X and kernel programming do not mix. # echo Do the insmod and rmmod from outside X. Я знаю, что не верно всё, что я делал(лаю) иначе бы всё получалось. Сегодня попробую натравит ь маке на тот Makefile, что есть. Или Вы хотите сказать, что надо указать параметр modules. Т.е применяется один и тот же Makefile для сборки ядра и для всего? Спасибо! Сечас попробую! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 67 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба 8 minutes ago, Овчинников Игорь said: применяется один и тот же Makefile для сборки ядра и для всего? Да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба 13 minutes ago, aaarrr said: Да Спасибо! Теперь для меня многое прояснилось! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 11 августа, 2021 Опубликовано 11 августа, 2021 · Жалоба Спасибо!!! Вот: oot@debian:/home/kto/coding/GCC/testmod# make make ARCH=arm CROSS_COMPILE=armv5l- -C /lib/modules/5.4.81-linux4sam-2020.102.6.27/source M=/home/kto/coding/GCC/testmod modules make[1]: вход в каталог «/home/kto/Загрузки/at91sam9260_Linux_board/linux-at91-wilc_15_4_1» CC [M] /home/kto/coding/GCC/testmod/tm.o cc1: error: unrecognized command line option "-Werror=strict-prototypes" cc1: error: unrecognized command line option "-Werror=implicit-function-declaration" cc1: error: unrecognized command line option "-Werror=implicit-int" cc1: error: unrecognized command line option "-Wno-unused-but-set-variable" cc1: error: unrecognized command line option "-Wvla" cc1: error: unrecognized command line option "-fstack-protector-strong" scripts/Makefile.build:265: ошибка выполнения рецепта для цели «/home/kto/coding/GCC/testmod/tm.o» make[2]: *** [/home/kto/coding/GCC/testmod/tm.o] Ошибка 1 Makefile:1738: ошибка выполнения рецепта для цели «/home/kto/coding/GCC/testmod» make[1]: *** [/home/kto/coding/GCC/testmod] Ошибка 2 make[1]: выход из каталога «/home/kto/Загрузки/at91sam9260_Linux_board/linux-at91-wilc_15_4_1» Makefile:28: ошибка выполнения рецепта для цели «all» make: *** [all] Ошибка 2 root@debian:/home/kto/coding/GCC/testmod# Это разумеется не результат, но тут уже на сам компилятор ругань идёт. Буду либо патчить, либо компилятор другой ставить... но это уже дома -там машин подручных больше! Спасибо Ребята! Спасибо, что помогли понять! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 12 августа, 2021 Опубликовано 12 августа, 2021 · Жалоба 10.08.2021 в 18:27, Овчинников Игорь сказал: Красивее было бы применять USB устройства (есть во всей торговле). Всавил... хочешь WI-FI хочешь Bluetooth, хочешь флешка. Меняй только в менющке опции. Не надо ничего в плане прибора Ой обломаетесь об это знатно. Если хотите стабильность и предсказуемость - ставьте свои, проверенные модули, или весь гемор по глюкам и несовместимости перенесете на клиента, который купив "что-то" в магазе по-дешевке, и вот это не заработав на вашей системе, будет долго вспоминать вас "добрым" словом... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 16 августа, 2021 Опубликовано 16 августа, 2021 (изменено) · Жалоба On 8/12/2021 at 10:26 AM, mantech said: Ой обломаетесь об это знатно. Если хотите стабильность и предсказуемость - ставьте свои, проверенные модули, или весь гемор по глюкам и несовместимости перенесете на клиента, который купив "что-то" в магазе по-дешевке, и вот это не заработав на вашей системе, будет долго вспоминать вас "добрым" словом... Доброго времени суток!!! Понятное дело, что обломаюсь и круче, чем Вы говорите. Но вот... надо учиться. На данный момент на плате загружены модули... не мои, а из исходников мною собраны. Вот: bash-3.2# lsmod hidp 13600 0 - Live 0xbf033000 bpa10x 5536 0 - Live 0xbf030000 hci_vhci 5344 0 - Live 0xbf02d000 hci_uart 18852 0 - Live 0xbf027000 hci_usb 10648 0 - Live 0xbf023000 sco 9416 0 - Live 0xbf01f000 l2cap 18852 1 hidp, Live 0xbf019000 bcm203x 4224 0 - Live 0xbf016000 btusb 11384 0 - Live 0xbf012000 bfusb 8640 0 - Live 0xbf00e000 bluetooth 51200 9 hidp,bpa10x,hci_vhci,hci_uart,hci_usb,sco,l2cap,btusb,bfusb, Live 0xbf000000 bash-3.2# А вот вырезка из тоого, что сказал dmesg: .... Bluetooth: Core ver 2.13 NET: Registered protocol family 31 Bluetooth: HCI device and connection manager initialized Bluetooth: HCI socket layer initialized Bluetooth: BlueFRITZ! USB driver ver 1.2 usbcore: registered new interface driver bfusb Bluetooth: Generic Bluetooth USB driver ver 0.3 usbcore: registered new interface driver btusb Bluetooth: Broadcom Blutonium firmware driver ver 1.2 usbcore: registered new interface driver bcm203x Bluetooth: L2CAP ver 2.11 Bluetooth: L2CAP socket layer initialized Bluetooth: SCO (Voice Link) ver 0.6 Bluetooth: SCO socket layer initialized Bluetooth: HCI USB driver ver 2.10 usbcore: registered new interface driver hci_usb Bluetooth: HCI UART driver ver 2.2 Bluetooth: HCI H4 protocol initialized Bluetooth: HCI BCSP protocol initialized Bluetooth: HCILL protocol initialized Bluetooth: Virtual HCI driver ver 1.2 Bluetooth: Digianswer Bluetooth USB driver ver 0.10 usbcore: registered new interface driver bpa10x Bluetooth: HIDP (Human Interface Emulation) ver 1.2 JFFS2 notice: (373) check_node_data: wrong data CRC in data node at 0x06dfb200: read 0xbaaaeb7a, calculated 0x65659d89. JFFS2 notice: (373) check_node_data: wrong data CRC in data node at 0x005dc0f8: read 0xf729a7f3, calculated 0xab32e3fa. eth0: link up (100/Full) JFFS2 notice: (373) check_node_data: wrong data CRC in data node at 0x0b577fa0: read 0x2e3c64b3, calculated 0xaafbc8fb. JFFS2 notice: (373) check_node_data: wrong data CRC in data node at 0x07fc1300: read 0x3196b0b0, calculated 0x24f86d62. JFFS2 notice: (373) check_node_data: wrong data CRC in data node at 0x09ef5684: read 0xf8fdddca, calculated 0xb17a0d2f. JFFS2 notice: (373) check_node_data: wrong data CRC in data node at 0x09ef13dc: read 0xc0c0bf55, calculated 0x4572c916. bash-3.2# Это моя неумелая попытка поднять bluetooth. Тут конечно произнорированы firmware (некоторые их требуют). Закружаются скриптом bash при переезагруке платы. Только вот наверное надо сделать устройства в /dev, а вот как они называются не знаю. Позже добавлю(скачаю) файлы firmware для USB-DEVICE устройства. Ну и как получить доступ к этим загруженным модулям из кода на Си? Повторюсь - я в этой теме ноль. Надо позарез, дабы показать работоспособность... и получить добро на разработку маленького модуля с Linux, разумеется с другим контроллером и кончно же не с linux-2.6.27, а новым. План: сделать маленькую плату, минимальную сборку Linux что бы загружая модули сделать гибкую конфигурацию. И применять в разных местах. И простите за флуд! А по поводу кто-то в магазине купит скажу - будет плохо работать на периодических испытаниях в продажу не пойдёт. А буду делать на контроллере без Linux прикручивая в прошивку и связь и прочее... Тут же возможность уйти на контроллеры с ОС, коли трубуется то, что есть в ОС. А что касается меня, то дома у меня игрушек хватает. Изменено 16 августа, 2021 пользователем Овчинников Игорь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба Дорого времени суток!!! Извините за мое незнание!!! вопрос по такой ошибке: bluetooth: Unknown symbol __dynamic_pr_debug (err 0) Эта ошибка возникает, при загрузке модуля. Аналогичная ошибка и при загрузке других модулей. Ещё один вопрос и то же по ошибке: libertas: version magic '4.8.6 mod_unload ARMv4 p2v8 ' should be '4.8.6 mod_unload ARMv5 p2v8 ' В одном случае кернел и модули собирались из buildroot (linux-4.8.6), в другом случае из исходников linux-4.8.6 с помощью arm-none-eabi-gcc командой make ARCH=arm CROSS_COMPILE=arm-none-eabi- В обоих случаях модуль загружается, но используется rootfs, сделанный через buildroot. И хотелось бы уточнить: модули и ядро обязательно должны быть собранны одним и тем же компилятором при одной ти той же и версии linux? Или всё же возможно применение разных компиляторов, но при одной версии linux? Может я что-то в сборке ядра накосячил? Пользовался make ARCH=arm menuconfig. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 67 9 октября, 2021 Опубликовано 9 октября, 2021 · Жалоба У ядра и модуля должны совпадать версия, архитектура и конфигурация. В первом случае отличается конфигурация (CONFIG_DYNAMIC_DEBUG), во втором - архитектура (ARMv4 vs ARMv5). Компилятор не обязательно должен быть один и тот же. Советую все же использовать один, причем отдельный от buildroot и хостовой системы (т.е. не пакет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 10 октября, 2021 Опубликовано 10 октября, 2021 · Жалоба 9 часов назад, Овчинников Игорь сказал: с помощью arm-none-eabi-gcc А разве так можно в случае линухи? ИМХО, так собирается baremetal... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 195 10 октября, 2021 Опубликовано 10 октября, 2021 · Жалоба 4 минуты назад, mantech сказал: А разве так можно в случае линухи? ИМХО, так собирается baremetal... Регулярно так собираю без каких-либо проблем. Ядро Linux и работает на самом что ни на есть baremetal. Кстати u-boot собирается этим же компилятором, как ни странно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor68 0 10 октября, 2021 Опубликовано 10 октября, 2021 (изменено) · Жалоба 12 hours ago, aaarrr said: У ядра и модуля должны совпадать версия, архитектура и конфигурация. В первом случае отличается конфигурация (CONFIG_DYNAMIC_DEBUG), во втором - архитектура (ARMv4 vs ARMv5). Компилятор не обязательно должен быть один и тот же. Советую все же использовать один, причем отдельный от buildroot и хостовой системы (т.е. не пакет). Спасибо! про ARMv4 и ARMv5 (почему-то вчерашнее сообщение про извинение не проскочило - сегодня я его не вижу) я понал - был не внимателен. Простите! Про : __dynamic_pr_debug (err 0) такая ошибка со всеми модулями... пересобрал кернел (где в menuconfig что исправлял не помню - ночь всё-таки) и вроде всё стало работать. Сейчас пересобираю опять. Хочу всё, что можно вытащить в модули из кернела, оставив только средства загрузки и запуска. Спасибо! 3 hours ago, mantech said: А разве так можно в случае линухи? ИМХО, так собирается baremetal... Выполняю так; make ARCH=arm CROSS_COMPILE=arm-none-eabi- Срабатывает как на PC с этими бинутилитами, так и на Raspberry Pi 4 в РАМ диске(4Гб). На малине удобнее - можно всё таскать на работу, и выполнять на ней же. Потому как к малине нужен только доступ по SSH и не важно какого типа машины в сети на работе... типа плевать был бы только доступ по сети. На малине ещё поднят HTTP (Apache), на странице которой есть PuTTY и др., которые можно сразу взять на машину с виндой. Изменено 10 октября, 2021 пользователем Овчинников Игорь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться