Archivio Articoli

Categorie

Commenti recenti

[buildroot] Aggiungere un modulo al Kernel

closeQuesto articolo è stato pubblicato 1 anno 8 mesi 27 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.

 

 

 

[Public draft]

Per aggiungere un modulo personalizzato al kernel della nostro sistema operativo creato con buildroot occorre seguire alcuni passi.

1. Supponiamo di avere a disposizione il package del modulo con all’interno il sorgente .c e il Makefile con una struttura simile alla seguente:

=> mykmod-X.X.tar.bz2
   => mykmod/mykmod.c
   => mykmod/Kbuild

Posizioniamo questo file in una posizione accessibile dal web, oppure direttamente nella cartella dl/ di buildroot (preferibile).

2. Nella cartella package/ creiamo la cartella mykmod ed al suo interno creiamo due file di testo.

mykmod.mk  che conterrà:

MYKMOD_VERSION = 1.0
MYKMOD_SOURCE = mykmod-$(MYKMOD_VERSION).tar.bz2
MYKMOD_DEPENDENCIES = linux

define MYKMOD_BUILD_CMDS
$(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) M=$(@D) modules
endef

define MYKMOD_INSTALL_TARGET_CMDS
$(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) M=$(@D) modules_install
endef

$(eval $(call GENTARGETS,package,mykmod))

 

Config.in  che conterrà:

config BR2_PACKAGE_MYKMOD
    bool "mykmod"
    depends on BR2_LINUX_KERNEL
    help
      This is a kernel module

Adesso andiamo ad aggiungere il modulo al menu del configuratore, modifichiamo il file package/Config.in  aggiungendo le seguenti righe:

menu "My kernel Modules"
source "package/mykmod/Config.in"
endmenu
Dopo aver compilato buildroot:
make

il modulo si troverà nella posizione1:

buildroot_folder/output/target/lib/modules/kernel_version/extra/mykmod.ko

per caricarlo all’avvio creare uno script eseguibile nella posizione2:

buildroot_folder/output/target/etc/init.d/SXX

con il seguente contenuto:

modprobe mykmod
mknod -m 0666 /dev/mykmod c M m

Sostituendo a m e M il numero di Major e minor.

Per verificare il corretto caricamento del modulo sul sistema finale:

dmesg | tail

dovrebbe mostrare il messaggio di caricamento inserito nella funzione di init nel sorgente del modulo.

  1. buildroot_folder è la cartella dove abbiamo scompattato il pacchetto di buildroot
  2. XX è il numero d’ordine con cui lo script verrà eseguito.

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.