Перейти к содержанию
    

AT91SAM9260 linux-headers вопрос

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 скопировал на плату и испытфл компиляцию. Глупо конечно -  но это перед выключением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимы уточнения! Ччо следует делать... ну и в какой последовательности. Может я что-то не так делаю?

Выбираю плату (это пример на том исходнике, что у меня под рукой):

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

Может что-то не то? Может надо ещё что-то? Или пропустил что-то?

Ребята!!! Вы уж простите! Честное слово я никогда подобного не делал. А надо!

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Овчинников Игорь said:

Конфигурация

Нет необходимости. Для изменения конфига лучше использовать menuconfig.

 

3 minutes ago, Овчинников Игорь said:

Может что-то не то? Может надо ещё что-то? Или пропустил что-то?

Что нужно получить в результате? Если собрать свой модуль, то достаточно самого первого пункта - не нужно отдельно собирать подобие "linux-headers", если исходники ядра с конфигом в наличии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Сборка модуля

Makefile:

obj-m = my_module.o

make ARCH=arm CROSS_COMPILE=<...> -C <путь к исходникам ядра> -M=<путь к исходникам модуля, содержащим Makefile и my_module.c>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 для сборки ядра и для всего?

Спасибо! Сечас попробую!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, Овчинников Игорь said:

применяется один и тот же Makefile для сборки ядра и для всего?

Да

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!!! Вот:

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# 

Это разумеется не результат, но тут уже на сам компилятор ругань идёт. Буду либо патчить, либо компилятор другой ставить... но это уже дома -там машин подручных больше!

Спасибо Ребята!

Спасибо, что помогли понять!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10.08.2021 в 18:27, Овчинников Игорь сказал:

Красивее было бы применять USB устройства (есть во всей торговле).

Всавил... хочешь WI-FI хочешь Bluetooth, хочешь флешка. Меняй только в менющке опции. Не надо ничего в плане прибора

Ой обломаетесь об это знатно. Если хотите стабильность и предсказуемость - ставьте свои, проверенные модули, или весь гемор по глюкам и несовместимости перенесете на клиента, который купив "что-то" в магазе по-дешевке, и вот это не заработав на вашей системе, будет долго вспоминать вас "добрым" словом...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 прикручивая в прошивку и связь и прочее... Тут же возможность уйти на контроллеры с ОС, коли трубуется то, что есть в ОС. А что касается меня, то дома у меня игрушек хватает.

Изменено пользователем Овчинников Игорь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дорого времени суток!!!

Извините за мое незнание!!!

вопрос по такой ошибке:

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.

Спасибо!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У ядра и модуля должны совпадать версия, архитектура и конфигурация. В первом случае отличается конфигурация (CONFIG_DYNAMIC_DEBUG), во втором - архитектура (ARMv4 vs ARMv5).

Компилятор не обязательно должен быть один и тот же. Советую все же использовать один, причем отдельный от buildroot и хостовой системы (т.е. не пакет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Овчинников Игорь сказал:

с помощью arm-none-eabi-gcc

А разве так можно в случае линухи? ИМХО, так собирается baremetal...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, mantech сказал:

А разве так можно в случае линухи? ИМХО, так собирается baremetal...

Регулярно так собираю без каких-либо проблем. Ядро Linux и работает на самом что ни на есть baremetal. Кстати u-boot собирается этим же компилятором, как ни странно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 и др., которые можно сразу взять на машину с виндой.

Изменено пользователем Овчинников Игорь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...