Raspbian: программирование модулей ядра

встраиваемые модели

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Raspbian: программирование модулей ядра

Непрочитанное сообщение Olej » 31 май 2022, 12:21

Raspberry Pi 2 ... снова
Плата:

Код: Выделить всё

olej@raspberrypi:/lib/modules $ inxi -Mxxx
Machine:   Type: ARM Device System: Raspberry Pi 2 Model B Rev 1.1 details: BCM2835 rev: a21041 serial: 00000000f57e2ca8 
С процессором:

Код: Выделить всё

olej@raspberrypi:/lib/modules $ inxi -Cxxxf
CPU:       Info: Quad Core model: ARMv7 v7l variant: cortex-a7 bits: 32 type: MCP arch: v7l rev: 5 bogomips: 256 
           Speed: 1000 MHz min/max: 600/1000 MHz Core speeds (MHz): 1: 1000 2: 1000 3: 1000 4: 1000 
           Features: edsp evtstrm fastmult half idiva idivt lpae neon thumb tls vfp vfpd32 vfpv3 vfpv4 
Система:

Код: Выделить всё

olej@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye
Проверка:

Код: Выделить всё

olej@raspberrypi:~ $ gcc --version
gcc (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Код: Выделить всё

olej@raspberrypi:~ $ make --version
GNU Make 4.3
Эта программа собрана для arm-unknown-linux-gnueabihf
Copyright (C) 1988-2020 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное программное обеспечение: вы можете свободно изменять его и
распространять. НЕТ НИКАКИХ ГАРАНТИЙ вне пределов, допустимых законом.
Всё в порядке - доустанавливать не надо.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Raspbian модули ядра

Непрочитанное сообщение Olej » 31 май 2022, 12:27

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ pwd
/home/olej/2022/kernel/first_hello

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ ls -l
итого 24
-rw-r--r-- 1 olej olej  323 июл 28  2012 hello_printk.c
-rw-rw-r-- 1 olej olej   82 мая 31 10:21 hello_printk.mod
-rw-r--r-- 1 olej olej  617 апр  1  2014 Makefile
-rw-r--r-- 1 olej olej 9205 мар 25  2014 printk.hist

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ cat hello_printk.c
#include <linux/module.h>

MODULE_LICENSE( "GPL" );
MODULE_AUTHOR( "Oleg Tsiliuric <olej@front.ru>" );

static int __init hello_init( void ) {
   printk( "Hello, world!\n" );
   return 0;
}

static void __exit hello_exit( void ) {
   printk( "Goodbye, world!\n" );
}

module_init( hello_init );
module_exit( hello_exit );

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ time make
make -C /lib/modules/5.15.32-v7+/build M=/home/olej/2022/kernel/first_hello modules
make[1]: *** /lib/modules/5.15.32-v7+/build: Нет такого файла или каталога.  Останов.
make: *** [Makefile:12: default] Ошибка 2

real	0m0,055s
user	0m0,027s
sys	0m0,026s
Всё правильно! Нет там, не установлено, ни заголовочных файлов, ничего другого...

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ ls /lib/modules/`uname -r`
kernel             modules.builtin            modules.builtin.modinfo  modules.devname  modules.symbols
modules.alias      modules.builtin.alias.bin  modules.dep              modules.order    modules.symbols.bin
modules.alias.bin  modules.builtin.bin        modules.dep.bin          modules.softdep

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Raspbian модули ядра

Непрочитанное сообщение Olej » 31 май 2022, 12:50

Olej писал(а):
31 май 2022, 12:27
Всё правильно! Нет там, не установлено, ни заголовочных файлов, ничего другого...

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ sudo apt install linux-headers
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Заметьте, вместо «linux-headers» выбирается «raspberrypi-kernel-headers»
Следующие НОВЫЕ пакеты будут установлены:
  raspberrypi-kernel-headers
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 28,6 MB архивов.
После данной операции объём занятого дискового пространства возрастёт на 182 MB.
Пол:1 http://archive.raspberrypi.org/debian bullseye/main armhf raspberrypi-kernel-headers armhf 1:1.20220331-1 [28,6 MB]
Получено 28,6 MB за 5с (5.500 kB/s)                    
Выбор ранее не выбранного пакета raspberrypi-kernel-headers.
(Чтение базы данных … на данный момент установлено 199014 файлов и каталогов.)
Подготовка к распаковке …/raspberrypi-kernel-headers_1%3a1.20220331-1_armhf.deb …
Распаковывается raspberrypi-kernel-headers (1:1.20220331-1) …
Настраивается пакет raspberrypi-kernel-headers (1:1.20220331-1) …
На время установки этого пакета процессор (4 ядра) значительно загружен:

Код: Выделить всё

olej@raspberrypi:/lib/modules $ uptime
 12:42:11 up 18:43,  5 users,  load average: 2,50, 0,84, 0,29
... и это потребует некоторого времени...
Картина поменялась - ссылка build на каталог каталог /usr/src/linux-headers-5.15.32-v7+:

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ ls /lib/modules/`uname -r`
build          modules.alias.bin          modules.builtin.bin      modules.dep.bin  modules.softdep
kernel         modules.builtin            modules.builtin.modinfo  modules.devname  modules.symbols
modules.alias  modules.builtin.alias.bin  modules.dep              modules.order    modules.symbols.bin

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ ls -l /lib/modules/`uname -r`/build
lrwxrwxrwx 1 root root 34 апр  1 09:57 /lib/modules/5.15.32-v7+/build -> /usr/src/linux-headers-5.15.32-v7+

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ uname -r
5.15.32-v7+

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ aptitude search kernel | grep ^i
i A python3-ipykernel - IPython kernel for Jupyter (Python 3)
i  raspberrypi-kernel - Raspberry Pi bootloader
i  raspberrypi-kernel-headers - Header files for the Raspberry Pi Linux kernel

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Raspbian модули ядра

Непрочитанное сообщение Olej » 31 май 2022, 13:05

Olej писал(а):
31 май 2022, 12:27
Всё правильно! Нет там, не установлено, ни заголовочных файлов, ничего другого...
Повторяю сборку:

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ time make
make -C /lib/modules/5.15.32-v7+/build M=/home/olej/2022/kernel/first_hello modules
make[1]: вход в каталог «/usr/src/linux-headers-5.15.32-v7+»
  CC [M]  /home/olej/2022/kernel/first_hello/hello_printk.o
  MODPOST /home/olej/2022/kernel/first_hello/Module.symvers
  CC [M]  /home/olej/2022/kernel/first_hello/hello_printk.mod.o
  LD [M]  /home/olej/2022/kernel/first_hello/hello_printk.ko
make[1]: выход из каталога «/usr/src/linux-headers-5.15.32-v7+»

real	0m10,026s
user	0m6,480s
sys	0m2,413s

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ ls -l *.ko
-rw-r--r-- 1 olej olej 3728 мая 31 12:55 hello_printk.ko

olej@raspberrypi:~/2022/kernel/first_hello $ file hello_printk.ko
hello_printk.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=6611eedee4c98846daa0ff516702e867bcb3b832, not stripped

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ modinfo hello_printk.ko
filename:       /home/olej/2022/kernel/first_hello/hello_printk.ko
author:         Oleg Tsiliuric <olej@front.ru>
license:        GPL
srcversion:     41B149114601F8815FBE409
depends:        
name:           hello_printk
vermagic:       5.15.32-v7+ SMP mod_unload modversions ARMv7 p2v8 

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Raspbian модули ядра

Непрочитанное сообщение Olej » 31 май 2022, 13:13

Olej писал(а):
31 май 2022, 13:05
Повторяю сборку:
Загрузка модуля:

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ sudo insmod ./hello_printk.ko

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ lsmod | head -n2
Module                  Size  Used by
hello_printk           16384  0
Лог загрузки:

Код: Выделить всё

olej@raspberrypi:~ $ dmesg | tail -n7
[68231.700600] hwmon hwmon1: Voltage normalised
[68854.378990] hello_printk: loading out-of-tree module taints kernel.
[68854.379423] Hello, world!
[68855.698666] hwmon hwmon1: Undervoltage detected!
[68859.858551] hwmon hwmon1: Voltage normalised
[68901.458614] hwmon hwmon1: Undervoltage detected!
[68905.618479] hwmon hwmon1: Voltage normalised
Удаление модуля:

Код: Выделить всё

olej@raspberrypi:~/2022/kernel/first_hello $ sudo rmmod hello_printk

olej@raspberrypi:~/2022/kernel/first_hello $ lsmod | grep hello
olej@raspberrypi:~/2022/kernel/first_hello $ 

Код: Выделить всё

olej@raspberrypi:~ $ dmesg | tail -n2
[68959.698426] hwmon hwmon1: Voltage normalised
[69136.444498] Goodbye, world!
В отношении общих позиций сборки модулей ядра Linux никаких отличий нет!

Ответить

Вернуться в «Одноплатные компьютеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя