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

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

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

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

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

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

Orange Pi One - Armbian GUI
Плата:

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

olej@orangepione:~$ inxi -Mxxx
Machine:   Type: ARM Device System: Xunlong Orange Pi One details: Allwinner sun8i Family rev: N/A serial: 02c000815fd5e717 
Процессор:

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

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

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

olej@orangepione:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 10 (buster)
Release:	10
Codename:	buster
Проверка инструментов:

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

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

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

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

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

По аналогии с Raspbian модули ядра чтобы не ловить ошибки :-o ...

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

olej@orangepione:~$ uname -r
5.15.25-sunxi

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

olej@orangepione:~$ ls /lib/modules
5.15.25-sunxi

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

olej@orangepione:~$ 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
Ожидаемо, что ссылки-каталога build там нет.

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

olej@orangepione:~$ aptitude search linux-headers
v   linux-headers                                             -                                                                     
p   linux-headers-4.19.0-18-all                               - All header files for Linux 4.19 (meta-package)                      
p   linux-headers-4.19.0-18-all-armhf                         - All header files for Linux 4.19 (meta-package)                      
p   linux-headers-4.19.0-18-armmp                             - Header files for Linux 4.19.0-18-armmp                              
p   linux-headers-4.19.0-18-armmp-lpae                        - Header files for Linux 4.19.0-18-armmp-lpae                         
p   linux-headers-4.19.0-18-common                            - Common header files for Linux 4.19.0-18                             
p   linux-headers-4.19.0-18-common-rt                         - Common header files for Linux 4.19.0-18-rt                          
p   linux-headers-4.19.0-18-rt-armmp                          - Header files for Linux 4.19.0-18-rt-armmp                           
p   linux-headers-4.19.0-19-all                               - All header files for Linux 4.19 (meta-package)                      
p   linux-headers-4.19.0-19-all-armhf                         - All header files for Linux 4.19 (meta-package)                      
p   linux-headers-4.19.0-19-armmp                             - Header files for Linux 4.19.0-19-armmp                              
p   linux-headers-4.19.0-19-armmp-lpae                        - Header files for Linux 4.19.0-19-armmp-lpae                         
p   linux-headers-4.19.0-19-common                            - Common header files for Linux 4.19.0-19                             
p   linux-headers-4.19.0-19-common-rt                         - Common header files for Linux 4.19.0-19-rt                          
p   linux-headers-4.19.0-19-rt-armmp                          - Header files for Linux 4.19.0-19-rt-armmp                           
p   linux-headers-4.19.0-20-all                               - All header files for Linux 4.19 (meta-package)                      
p   linux-headers-4.19.0-20-all-armhf                         - All header files for Linux 4.19 (meta-package)                      
p   linux-headers-4.19.0-20-armmp                             - Header files for Linux 4.19.0-20-armmp                              
p   linux-headers-4.19.0-20-armmp-lpae                        - Header files for Linux 4.19.0-20-armmp-lpae                         
p   linux-headers-4.19.0-20-common                            - Common header files for Linux 4.19.0-20                             
p   linux-headers-4.19.0-20-common-rt                         - Common header files for Linux 4.19.0-20-rt                          
p   linux-headers-4.19.0-20-rt-armmp                          - Header files for Linux 4.19.0-20-rt-armmp                           
p   linux-headers-5.10.0-0.bpo.11-armmp                       - Header files for Linux 5.10.0-0.bpo.11-armmp                        
p   linux-headers-5.10.0-0.bpo.11-armmp-lpae                  - Header files for Linux 5.10.0-0.bpo.11-armmp-lpae                   
p   linux-headers-5.10.0-0.bpo.11-common                      - Common header files for Linux 5.10.0-0.bpo.11                       
p   linux-headers-5.10.0-0.bpo.11-common-rt                   - Common header files for Linux 5.10.0-0.bpo.11-rt                    
p   linux-headers-5.10.0-0.bpo.11-rt-armmp                    - Header files for Linux 5.10.0-0.bpo.11-rt-armmp                     
p   linux-headers-5.10.0-0.bpo.12-armmp                       - Header files for Linux 5.10.0-0.bpo.12-armmp                        
p   linux-headers-5.10.0-0.bpo.12-armmp-lpae                  - Header files for Linux 5.10.0-0.bpo.12-armmp-lpae                   
p   linux-headers-5.10.0-0.bpo.12-common                      - Common header files for Linux 5.10.0-0.bpo.12                       
p   linux-headers-5.10.0-0.bpo.12-common-rt                   - Common header files for Linux 5.10.0-0.bpo.12-rt                    
p   linux-headers-5.10.0-0.bpo.12-rt-armmp                    - Header files for Linux 5.10.0-0.bpo.12-rt-armmp                     
p   linux-headers-5.10.0-0.bpo.9-armmp                        - Header files for Linux 5.10.0-0.bpo.9-armmp                         
p   linux-headers-5.10.0-0.bpo.9-armmp-lpae                   - Header files for Linux 5.10.0-0.bpo.9-armmp-lpae                    
p   linux-headers-5.10.0-0.bpo.9-common                       - Common header files for Linux 5.10.0-0.bpo.9                        
p   linux-headers-5.10.0-0.bpo.9-common-rt                    - Common header files for Linux 5.10.0-0.bpo.9-rt                     
p   linux-headers-5.10.0-0.bpo.9-rt-armmp                     - Header files for Linux 5.10.0-0.bpo.9-rt-armmp                      
v   linux-headers-armbian                                     -                                                                     
p   linux-headers-armmp                                       - Header files for Linux armmp configuration (meta-package)           
p   linux-headers-armmp-lpae                                  - Header files for Linux armmp-lpae configuration (meta-package)      
p   linux-headers-current-imx6                                - Linux kernel headers for 5.15.25-imx6 on armhf current              
p   linux-headers-current-meson                               - Linux kernel headers for 5.10.21-meson on armhf                     
p   linux-headers-current-mvebu                               - Linux kernel headers for 5.15.25-mvebu on armhf current             
p   linux-headers-current-odroidxu4                           - Linux kernel headers for 5.4.181-odroidxu4 on armhf                 
p   linux-headers-current-rk322x                              - Linux kernel headers for 5.15.25-rk322x on armhf current            
p   linux-headers-current-rockchip                            - Linux kernel headers for 5.15.25-rockchip on armhf current          
p   linux-headers-current-sunxi                               - Linux kernel headers for 5.15.25-sunxi on armhf current             
p   linux-headers-edge-imx6                                   - Linux kernel headers for 5.15.11-imx6 on armhf edge                 
p   linux-headers-edge-mvebu                                  - Linux kernel headers for 5.16.9-mvebu on armhf edge                 
p   linux-headers-edge-odroidxu4                              - Linux kernel headers for 5.17.5-odroidxu4 on armhf edge             
p   linux-headers-edge-rk322x                                 - Linux kernel headers for 5.17.5-rk322x on armhf edge                
p   linux-headers-edge-rockchip                               - Linux kernel headers for 5.17.5-rockchip on armhf edge              
p   linux-headers-edge-sunxi                                  - Linux kernel headers for 5.17.5-sunxi on armhf edge                 
v   linux-headers-generic                                     -                                                                     
p   linux-headers-legacy-mt7623                               - Linux kernel headers for 4.19.204-mt7623 on armhf                   
p   linux-headers-legacy-mvebu                                - Linux kernel headers for 4.19.167-mvebu on armhf                    
p   linux-headers-legacy-odroidxu4                            - Linux kernel headers for 4.14.222-odroidxu4 on armhf                
p   linux-headers-legacy-rk322x                               - Linux kernel headers for 4.4.194-rk322x on armhf                    
p   linux-headers-legacy-rockchip                             - Linux kernel headers for 4.4.213-rockchip on armhf                  
p   linux-headers-legacy-sunxi                                - Linux kernel headers for 5.4.88-sunxi on armhf                      
p   linux-headers-rt-armmp                                    - Header files for Linux rt-armmp configuration (meta-package)        

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

olej@orangepione:~$ sudo apt install linux-headers
[sudo] пароль для olej: 
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Пакет linux-headers — виртуальный, его функции предоставляются пакетами:
  linux-headers-edge-sunxi 22.05.0-trunk.0060
  linux-headers-edge-rockchip 22.05.0-trunk.0064
  linux-headers-edge-rk322x 22.05.0-trunk.0064
  linux-headers-edge-odroidxu4 22.05.0-trunk.0064
  linux-headers-edge-mvebu 22.02.0-trunk.0035
  linux-headers-edge-imx6 21.11.0-trunk.115
  linux-headers-current-sunxi 22.02.1
  linux-headers-current-rockchip 22.02.1
  linux-headers-current-rk322x 22.02.1
  linux-headers-current-mvebu 22.02.1
  linux-headers-current-imx6 22.02.1
Вы должны явно указать, какой именно вы хотите установить.

E: Для пакета «linux-headers» не найден кандидат на установку
Так вот просто - облом! :-o

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

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

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

Olej писал(а):
31 май 2022, 13:29
Так вот просто - облом!
Систему я устанавливал из имиджа Armbian_21.08.1_Orangepione_buster_current_5.10.60_xfce_desktop.img.xz (Orange Pi One - Armbian GUI).

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

olej@orangepione:~$ uname -r
5.15.25-sunxi
Могу предположить что хэдеры они положили сюда:
Olej писал(а):
31 май 2022, 13:29

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

...
p   linux-headers-current-sunxi                               - Linux kernel headers for 5.15.25-sunxi on armhf current
...

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

olej@orangepione:~$ sudo apt install linux-headers-current-sunxi
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
  linux-headers-current-sunxi
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 12,0 MB архивов.
После данной операции объём занятого дискового пространства возрастёт на 79,2 MB.
Пол:1 http://armbian.12z.eu/apt buster/main armhf linux-headers-current-sunxi armhf 22.02.1 [12,0 MB]
Получено 12,0 MB за 4с (2.803 kB/s)                     
Выбор ранее не выбранного пакета linux-headers-current-sunxi.
(Чтение базы данных … на данный момент установлено 136539 файлов и каталогов.)
Подготовка к распаковке …/linux-headers-current-sunxi_22.02.1_armhf.deb …
Распаковывается linux-headers-current-sunxi (22.02.1) …
Настраивается пакет linux-headers-current-sunxi (22.02.1) …
Compiling headers - please wait ...
На вот той строчке: Compiling headers - процессор достаточно сильно загружается:

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

olej@orangepione:~$ uptime
 13:41:05 up 2 days, 18:14,  6 users,  load average: 1,65, 0,54, 0,19

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

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

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

Изменения очевидны:

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

olej@orangepione:~$ 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@orangepione:~$ ls -l /lib/modules/`uname -r`/build
lrwxrwxrwx 1 root root 36 фев 27 11:23 /lib/modules/5.15.25-sunxi/build -> /usr/src/linux-headers-5.15.25-sunxi

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

olej@orangepione:~$ ls -lL /lib/modules/`uname -r`/build
итого 1280
drwxr-xr-x  25 root root    4096 мая 31 13:39 arch
drwxr-xr-x   3 root root    4096 мая 31 13:39 block
drwxr-xr-x   2 root root    4096 мая 31 13:39 certs
drwxr-xr-x   4 root root    4096 мая 31 13:39 crypto
drwxr-xr-x   8 root root    4096 мая 31 13:39 Documentation
drwxr-xr-x 138 root root    4096 мая 31 13:39 drivers
drwxr-xr-x  84 root root    4096 мая 31 13:39 fs
drwxr-xr-x  31 root root    4096 мая 31 13:39 include
drwxr-xr-x   2 root root    4096 мая 31 13:39 init
drwxr-xr-x   2 root root    4096 мая 31 13:39 ipc
-rw-r--r--   1 root root     555 мая 31 13:39 Kconfig
drwxr-xr-x  19 root root    4096 мая 31 13:39 kernel
drwxr-xr-x  21 root root    4096 мая 31 13:39 lib
-rw-r--r--   1 root root   65702 мая 31 13:39 Makefile
drwxr-xr-x   5 root root    4096 мая 31 13:39 mm
-rw-r--r--   1 root root 1139837 мая 31 13:39 Module.symvers
drwxr-xr-x  72 root root    4096 мая 31 13:39 net
drwxr-xr-x  33 root root    4096 мая 31 13:39 samples
drwxr-xr-x  17 root root   12288 мая 31 13:41 scripts
drwxr-xr-x  14 root root    4096 мая 31 13:39 security
drwxr-xr-x  27 root root    4096 мая 31 13:39 sound
drwxr-xr-x  36 root root    4096 мая 31 13:39 tools
drwxr-xr-x   3 root root    4096 мая 31 13:39 usr
drwxr-xr-x   4 root root    4096 мая 31 13:39 virt

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

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

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

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

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

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

olej@orangepione:~/2022/kernel/first_hello$ ls
hello_printk.c  Makefile  printk.hist

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

olej@orangepione:~/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@orangepione:~/2022/kernel/first_hello$ time make
make -C /lib/modules/5.15.25-sunxi/build M=/home/olej/2022/kernel/first_hello modules
make[1]: вход в каталог «/usr/src/linux-headers-5.15.25-sunxi»
  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.25-sunxi»

real	0m6,039s
user	0m4,109s
sys	0m1,670s

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

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

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

Olej писал(а):
31 май 2022, 13:51
Сборка модуля:

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

olej@orangepione:~/2022/kernel/first_hello$ ls -l *.ko
-rw-r--r-- 1 olej olej 3848 мая 31 13:49 hello_printk.ko

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

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

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

olej@orangepione:~/2022/kernel/first_hello$ modinfo hello_printk.ko
bash: modinfo: команда не найдена
olej@orangepione:~/2022/kernel/first_hello$ /sbin/modinfo hello_printk.ko
filename:       /home/olej/2022/kernel/first_hello/hello_printk.ko
author:         Oleg Tsiliuric <olej@front.ru>
license:        GPL
depends:        
name:           hello_printk
vermagic:       5.15.25-sunxi SMP mod_unload ARMv7 thumb2 p2v8 

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

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

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

Загрузка модуля:

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

olej@orangepione:~/2022/kernel/first_hello$ sudo insmod ./hello_printk.ko
[sudo] пароль для olej: 

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

olej@orangepione:~/2022/kernel/first_hello$ lsmod | head -n2
Module                  Size  Used by
hello_printk           16384  0

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

olej@orangepione:~/2022/kernel/first_hello$ dmesg | tail -n4
[89924.689933] oom_reaper: reaped process 10273 (compile), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
[239336.319238] hello_printk: loading out-of-tree module taints kernel.
[239336.319381] hello_printk: module verification failed: signature and/or required key missing - tainting kernel
[239336.319728] Hello, world!
Модуль загружен!

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

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

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

Olej писал(а):
31 май 2022, 13:58
Модуль загружен!
Выгрузка модуля:

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

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

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

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

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

olej@orangepione:~/2022/kernel/first_hello$ lsmod | head -n2
Module                  Size  Used by
l2tp_ppp               20480  0

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

olej@orangepione:~/2022/kernel/first_hello$ dmesg | tail -n4
[239336.319238] hello_printk: loading out-of-tree module taints kernel.
[239336.319381] hello_printk: module verification failed: signature and/or required key missing - tainting kernel
[239336.319728] Hello, world!
[239609.640016] Goodbye, world!

Ответить

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

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

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