Embedded Linux
  • Cover
  • Summary
  • About This Training
    • Objectives
    • Skills
    • Prerequisites
    • Requirements
  • Once Upon A Time ...
  • Embedded Linux
  • Build Systems
    • Yocto Board Support Package
      • Yocto
      • Compilation
        • Make
        • Bitbake
        • Script
      • Building Blocks
      • SDK
      • Extra Packages
      • Kernel
        • Patch
        • Building
        • Headers
      • Modules
        • Cross Compilation
        • Native
      • Filesystem
      • Flashing
    • Distributions
      • CentOS
      • Google Brillo
      • Jubilinux
      • Kali
      • Ostro
      • Ubilinux
      • Debian
  • Boot Loaders
    • U-Boot
  • Initialization
    • Upgrade
    • Boot Up
    • Dual Boot
    • Root Directory
    • Display Message
    • Modules
    • Filesystem
    • Memory
    • Backup
    • Recovery
    • Reboot
    • Processes
  • User Space
    • Virtual Network Computing
    • Text Editors
    • Services
    • Logs
    • Package Management Systems
      • Open Package Management
      • Python Package Index
      • Nicely Package Make
      • Advanced Packaging Tool
      • Manual
      • Conda
    • Libraries
      • Mraa
      • Upm
      • OpenCv
      • Temboo
      • Libiio
    • Frameworks
      • Cylon JS
      • Johnny Five
      • ROS
      • Gobot
      • Pixhawk
      • Artoo
      • Bower
      • Zetta
      • Miscellaneous
  • Subsystems
    • X File Systems
    • Pin Muxing
    • Virtual File System
    • Memory
    • Input
    • General Purpose Input Output
    • Serial
    • Bluetooth
      • Advanced Audio Distribution Profile
        • Bluez
        • Gstreamer
        • Alsa
      • Human Interface Device Game Controller
      • Serial Port Protocol
      • Arduino
    • WiFi
    • Audio
    • Camera
    • Block
    • Universal Serial Bus
      • Human Interface Device Mini Keyboard
      • Python USB
    • Inter Integrated Circuit
    • Inter Process Communication
    • Peripheral Component Interconnect
    • Clock
    • Modems
    • Networking
    • Power
    • Thermal
    • Graphics
    • LED
    • LIDAR
    • Printer
    • Serial Peripheral Interface
  • Application Development
    • C
    • C++
    • Cross Compile
    • Containers
    • Python
    • NodeJS
    • Cloud9
    • Data
    • Drone Code
    • Speech
      • Python
    • Radio Frequency
    • Bots
    • Artificial Intelligence
      • WitAi
      • MycroftAi
    • Games
    • Vision
      • Bar Codes
      • Google Cloud Vision API
    • Messaging
    • Entertainment
    • Home Assistants
    • Dashboards
    • IRC
    • Location
    • Facial Recognition
    • Software Defined Radio
    • REST
    • Notes
    • Security
    • HAM Radio
    • Automotive
    • Digital Signage
    • Photography
  • Debug
  • Wrap-Up
    • Online Training
    • Challenge
    • Tbd
  • SandBox
Powered by GitBook
On this page
  • Native
  • Project: Hello World Kernel Module Native Compilation
  • Kernel Headers Setup
  • Version 3.10.98-poky-edison+
  • Version 3.10.17-poky-edison+
  • Kernel Module Compilation
  • Project: Hello World Kernel Module Native Compilation Automatic Startup
  1. Build Systems
  2. Yocto Board Support Package
  3. Modules

Native

Native

Project: Hello World Kernel Module Native Compilation

Kernel Headers Setup

root@edison:~# cd
root@edison:~# wget https://github.com/SourceCodeCat/IoTDownloads/raw/master/linux-headers-3.10.17-poky-edison_3.10.17-poky-edison-1_i386.deb
root@edison:~# ar x linux-headers-3.10.17-poky-edison_3.10.17-poky-edison-1_i386.deb
root@edison:~# ls data.tar.gz 
data.tar.gz
root@edison:~# tar -xvf data.tar.gz
...
./usr/src/linux-headers-3.10.17-poky-edison/drivers/iio/frequency/Makefile
./usr/src/linux-headers-3.10.17-poky-edison/drivers/iio/frequency/Kconfig
./lib/
./lib/modules/
./lib/modules/3.10.17-poky-edison/
./lib/modules/3.10.17-poky-edison/build
root@edison:~# uname -a
Linux edison 3.10.98-poky-edison+ #1 SMP PREEMPT Mon Jun 6 14:32:08 PDT 2016 i6x
root@edison:~#

Version 3.10.98-poky-edison+

root@edison:~# cd ~/usr/src/
root@edison:~# ln -s linux-headers-3.10.17-poky-edison linux-headers-3.10.98-poky-edison
root@edison:~/usr/src# ls ~/usr/src/                                            
linux-headers-3.10.17-poky-edison  linux-headers-3.10.98-poky-edison
root@edison:~# nano ~/usr/src/linux-headers-3.10.98-poky-edison/include/generated/utsrelease.h
#define UTS_RELEASE "3.10.98-poky-edison+"
<Save Changes>
root@edison:~# cd /lib/modules/3.10.98-poky-edison+
root@edison:/lib/modules/3.10.98-poky-edison+# ls
extra                modules.builtin.bin  modules.softdep
kernel               modules.dep          modules.symbols
modules.alias        modules.dep.bin      modules.symbols.bin
modules.alias.bin    modules.devname
modules.builtin      modules.order
root@edison:/lib/modules/3.10.98-poky-edison+# ln -s /home/root/usr/src/linux-headers-3.10.98-poky-edison build
    root@edison:/lib/modules/3.10.98-poky-edison+# cd
    root@edison:~#

Version 3.10.17-poky-edison+

    root@edison:~# nano ~/usr/src/linux-headers-3.10.17-poky-edison/include/generated/utsrelease.h
    #define UTS_RELEASE "3.10.17-poky-edison+"
    <Save Changes>
    root@edison:~# cd /lib/modules/3.10.17-poky-edison+
    root@edison:/lib/modules/3.10.17-poky-edison+# ls
    extra                modules.builtin.bin  modules.softdep
    kernel               modules.dep          modules.symbols
    modules.alias        modules.dep.bin      modules.symbols.bin
    modules.alias.bin    modules.devname
    modules.builtin      modules.order
    root@edison:/lib/modules/3.10.17-poky-edison+# ln -s /home/root/usr/src/linux-headers-3.10.17-poky-edison build
    root@edison:/lib/modules/3.10.17-poky-edison+# cd
    root@edison:~#

Kernel Module Compilation

    root@edison:~# mkdir kernelmodule
    root@edison:~# cd kernelmodule/
    root@edison:~/kernelmodule# nano helloworld.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

static int module_init_function(void)
{
    printk(KERN_INFO "Module? Hello!\n");
    return 0;
}

static void module_exit_function(void)
{
    printk(KERN_INFO "Module? Bye!\n");
}

MODULE_LICENSE("GPL");
MODULE_AUTHOR("xe1gyq");
MODULE_DESCRIPTION("My First Linux Kernel Module");

module_init(module_init_function);
module_exit(module_exit_function);
    root@edison:~/kernelmodule# nano Makefile
obj-m += helloworld.o

all:
  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    root@edison:~/kernelmodule# make
    make -C /lib/modules/3.10.17-poky-edison+/build M=/home/root/kernelmodule modules
    make[1]: Entering directory '/home/root/usr/src/linux-headers-3.10.17-poky-edison'
      CC [M]  /home/root/kernelmodule/helloworld.o
      Building modules, stage 2.
      MODPOST 1 modules
      CC      /home/root/kernelmodule/helloworld.mod.o
      LD [M]  /home/root/kernelmodule/helloworld.ko
    make[1]: Leaving directory '/home/root/usr/src/linux-headers-3.10.17-poky-edison'
    root@edison:~/kernelmodule# dmesg
    ...
    [   20.395746] ip (334) used greatest stack depth: 5208 bytes left
    root@edison:~/kernelmodule# insmod helloworld.ko
    root@edison:~/kernelmodule# dmesg
    ...
    [   20.395746] ip (334) used greatest stack depth: 5208 bytes left
    [26227.828425] Module? Hello!
    root@edison:~/kernelmodule# rmmod helloworld.ko
    root@edison:~/kernelmodule# dmesg
    ...
    [   21.122640] snd_intel_sst: runtime_suspend called                                               [96175.271153] Module? Hello! 
    [96185.098677] Module? Bye!

Project: Hello World Kernel Module Native Compilation Automatic Startup

ToDo

PreviousCross CompilationNextFilesystem

Last updated 7 years ago