Это программируемое на Tibbo BASIC/C устройство, функциональность которого определяет загруженное приложение.
Мы предлагаем различные готовые к использованию приложения, например, Serial-over-IP (SoI), Modbus Gateway и Sensor Hub.
ОбзорNative C APINode.js APIУправление процессами

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

Перед запуском примера, пожалуйста, убедитесь в том, что вы правильно настроили среду SDK.

Напишите простой модуль

[dv@dvh tmp]$ mkdir kmod-hello_world
[dv@dvh tmp]$ cd kmod-hello_world/
[dv@dvh kmod-hello_world]$ touch ./mhello.c
  • Создайте файл mhello.c со следующим содержимым:
#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */

int init_module( void) {
  printk( KERN_INFO "Repent for Coming!\n");
  return( 0);  }

void cleanup_module( void) {
  printk( KERN_INFO "Goodbye cruel world\n");
  return;  }
  • А теперь создайте стандартный Makefile для нашего простого модуля ядра:
[dv@dvh kmod-hello_world]$ touch ./Makefile
[dv@dvh kmod-hello_world]$ vi ./Makefile
  • Содержимое Makefile:

Каждая строка начинается с двух отступов (при помощи клавиши TAB, а не пробела!).

obj-m += mhello.o

hello-objs := mhello.c

KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build/

default:
       make -C $(KERNEL_SRC) M=$(PWD) modules

modules_install:
       make -C $(KERNEL_SRC) M=$(PWD) modules_install

clean:
       make -C $(KERNEL_SRC) M=$(PWD) clean

Если вы не знакомы с синтаксисом, пожалуйста, прочитайте дискуссию о настройке makefile для внешнего модуля ядра на StackOverflow или обратитесь к полному руководству по созданию модуля ядра на Linux на сайте Kernel.Org

Прежде чем приступить к созданию модуля, в обязательном порядке выполните этап подготовки SDK для модуля ядра.

Соберите модуль с использованием SDK

  • Запустите команду make в том же окне эмулятора терминала, где был запущен скрипт настройки среды LTPS SDK.
[dv@localhost kmod-hello_world]$ make KERNEL_SRC=${SDKTARGETSYSROOT}/usr/src/kernel      
make -C /home/dv/tpssdk/sysroots/cortexa8hf-neon-tps-linux-gnueabi/usr/src/kernel M=/home/dv/work/Tibbo/kmod-hello_world modules
make[1]: Entering directory '/home/dv/tpssdk/sysroots/cortexa8hf-neon-tps-linux-gnueabi/usr/src/kernel'
  CC [M]  /home/dv/work/Tibbo/kmod-hello_world/mhello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/dv/work/Tibbo/kmod-hello_world/mhello.mod.o
  LD [M]  /home/dv/work/Tibbo/kmod-hello_world/mhello.ko
make[1]: Leaving directory '/home/dv/tpssdk/sysroots/cortexa8hf-neon-tps-linux-gnueabi/usr/src/kernel'
[dv@localhost kmod-hello_world]$

Как мы видим, в нашей директории создан модуль 'mhello.ko'.

Теперь (если вы собираете на хост-системе для запуска на хост-системе), необходимо запустить "make modules_install", чтобы разместить модуль на своем месте в /lib/modules/....Но мы на нашей хост-системе собираем модуль для иной платформы, поэтому нам придётся вручную закинуть результат сборки на LTPS,

[dv@localhost kmod-hello_world]$ scp ./mhello.ko root@192.168.75.218:/lib/modules/4.10.15-tpp/extra/
root@192.168.75.218's password: 
mhello.ko                                     100%   51KB   5.0MB/s   00:00    
[dv@localhost kmod-hello_world]$

а затем перестроить индекс модулей:

[dv@localhost kmod-hello_world]$ ssh root@192.168.75.218 
root@192.168.75.218's password: 
X11 forwarding request failed on channel 0
root@tpp:~# depmod -A

Протестируйте наш модуль, загрузив и выгрузив его. См. сообщения в системном журнале.

root@tpp:~# modprobe mhello
root@tpp:~# lsmod | grep mhello
mhello                   943  0
root@tpp:~# rmmod mhello
root@tpp:~# journalctl -l -n 10 | grep kernel
Sep 22 13:48:40 tpp kernel: mhello: module license 'unspecified' taints kernel.
Sep 22 13:48:40 tpp kernel: Disabling lock debugging due to kernel taint
Sep 22 13:48:40 tpp kernel: Repent for Coming!
Sep 22 13:49:58 tpp kernel: Goodbye cruel world

Готово!

ОбзорNative C APINode.js APIУправление процессами