Страница 1 из 1
Raspbian: программирование модулей ядра
Добавлено: 31 май 2022, 12:21
Olej
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>
Это свободное программное обеспечение: вы можете свободно изменять его и
распространять. НЕТ НИКАКИХ ГАРАНТИЙ вне пределов, допустимых законом.
Всё в порядке - доустанавливать не надо.
Re: Raspbian модули ядра
Добавлено: 31 май 2022, 12:27
Olej
Код: Выделить всё
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
Re: Raspbian модули ядра
Добавлено: 31 май 2022, 12:50
Olej
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
Re: Raspbian модули ядра
Добавлено: 31 май 2022, 13:05
Olej
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
Re: Raspbian модули ядра
Добавлено: 31 май 2022, 13:13
Olej
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
никаких отличий нет!