1. 程式人生 > >Linux核心模組程式設計——hello,world

Linux核心模組程式設計——hello,world

檔案hello.c(放在目錄/root/lnq/modules/hello下):

#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>

MODULE_LICENSE("GPL");

static int hello_init(void){ #模組初始化函式
    printk(KERN_INFO "Hello,world!\n");
    return 0;
}

static void hello_exit(){ #模組退出和清理函式
    printk(KERN_INFO "Hello,exit!\n"
); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("lnq"); MODULE_DESCRIPTION("This is hello modules"); MODULE_ALIAS("a simple example");

檔案Makefile

obj-m += hello.o #產生hello模組的目標檔案
kernel_path=/usr/src/kernels/objms-kernel #自己的核心檔案路徑

all:
    make -C $(kernel_path) M=$(pwd) modules #pwd是當前所在目錄
clean: make -C $(kernel_path) M=$(pwd) clean

編譯

make

編譯成功之後,在此目錄下會生成如下幾個檔案:
hello.c 、hello.ko 、 hello.mod.c 、 hello.mod.o 、 hello.o 、Makefile 、modules.order 、 Module.symvers
其中,hello.ko就是所需要的模組。

載入模組(會呼叫hello_init函式):

insmod hello.ko

如果載入成功,用dmesg檢視可以看到打印出“hello,world!”資訊。

檢視模組

lsmod

解除安裝模組(會呼叫hello_exit函式):

rmmod hello

如果解除安裝成功,用dmesg檢視可以看到打印出“hello,exit!”資訊。

相關推薦

Linux核心模組程式設計——helloworld

檔案hello.c(放在目錄/root/lnq/modules/hello下): #include<linux/kernel.h> #include<linux/module.h

Linux核心模組程式設計——Hello World

一、實驗環境: 環境配置:VMware® Workstation 15 Pro、ubuntu Desktop 18.10、記憶體 2GB、處理器數量2、每個處理器核心數量1、硬碟大小30GB……還有一個就是用的咱Xidian的源(因為校內不需要流量啊,而且還很快!) 二、知識儲備

Linux 核心模組程式設計 Hello World 模組

         Linux 核心的整體結構非常龐大,其包含的元件也非常多。怎麼樣把需要的部分包含在核心中呢?         一種是將所需要的功能都編譯到Linux 核心。但會導致兩個問題,一是生成的核心會很大,二是如要在現有的核心中新增或刪除功能,將不得不重新編譯。因此L

linux 核心模組程式設計hello word(二)

我們的目的是要編譯個hello.ko的檔案,然後安裝到核心中。 先來看下需要的程式碼,hello.c檔案如下 #include <linux/module.h> #include <linux/init.h> static int hello_init(vo

Linux核心模組程式設計

Linux核心模組程式設計 (作者:Baron_wu 禁止轉載) 首先,建立一個核心模組並插入Linux核心中。這是實驗第一部分 首先檢視當前核心模組使用情概況:lsmod Module:模組名 Size:模組大小 Used by:這些模組在哪被使用 接下來編寫一個simple.c

linux 核心模組程式設計之LED驅動程式(六)

我使用的是tiny6410的核心板,板子如下,淘寶可以買到 為了不與板子上的任何驅動發生IO衝突,我使用CON1那一排沒用到的IO口,引腳如下   LED1 LED2 LED3 LED4

linux 核心模組程式設計核心符號匯出(五)

/proc/kallsyms 記錄了核心中所有匯出的符號的名字與地址 我們需要編譯2個核心模組,然後其中一個核心模組去呼叫另一個核心模組中的函式 hello.c程式碼如下 #include <linux/module.h> #include <linux/in

linux 核心模組程式設計模組引數(四)

通過巨集module_param指定模組引數,模組引數用於在載入模組時傳遞給模組。 module_param(name, type, perm) name是模組引數的名字 type是這個引數的型別,常見值:bool、int、charp(字串型) perm是模組

linux 核心模組程式設計之編譯多個原始檔(三)

編譯擁有多個原始檔的核心模組的方式和編譯一個原始檔的方式差不多,我們先來看下我們需要的檔案都有哪些。 首先是main.c檔案 #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE

linux 核心模組程式設計之環境搭建(一)

這裡介紹些關於Tiny6410開發板核心的編譯,為後期驅動開發做前期的準備。 開發環境:64位的Ubuntu 14.01虛擬機器 目標機:友善之臂Tiny6410開發板 核心:linux-2.6.38-20110325.tar.gz 核心原始碼下載地址 htt

Linux核心模組程式設計系列1

1.準備工作 使用如下命令檢視自己Linux的核心版本 uname -a 結果如下: Linux VM-73-203-debian 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Lin

linux 核心模組程式設計

一個linux核心模組主要由以下幾個部分組成。 1、模組載入函式"用module_init()來指定"(必須)    當通過insmod和modprobe命令載入核心模組時,模組的載入函式會自動被核心執行,完成本模組的相關初始化工作。 linux模組載入函式一般以 __init表示宣告。典型宣告如下:: s

Linux核心模組程式設計(列出系統中所有核心執行緒的程式名、PID 號、程序狀態及程序優先順序、父程序的PID)

(1) 設計一個模組,要求列出系統中所有核心執行緒的程式名、PID 號、程序狀態及程序優先順序、父程序的PID。 1.首先,我們開始編寫模組程式碼,這是Linux核心程式設計的核心程式碼,程式碼如下: #include <linux/init.h&

Linux核心模組程式設計-proc檔案系統

什麼是proc proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過proc得到系統的資訊,並可以改變核心的某些引數。由於系統的資訊,如程序,是動態改變的,所以使用

Linux核心模組程式設計核心模組LICENSE -《詳解(第3版)》預讀

Linux核心模組簡介Linux核心的整體結構已經非常龐大,而其包含的元件也非常多。我們怎樣把需要的部分都包含在核心中呢?一種方法是把所有需要的功能都編譯到Linux核心。這會導致兩個問題,一是生成的核心會很大,二是如果我們要在現有的核心中新增或刪除功能,將不得不重新編譯核心

Linux核心模組程式設計-字元裝置驅動

裝置驅動簡介 裝置被大概的分為兩類: 字元裝置和塊裝置。 字元裝置 提供連續的資料流,應用程式可以順序讀取,通常不支援隨機存取。相反,此類裝置支援按位元組/字元來讀寫資料。舉例來說,鍵盤、串列埠、調變解調器都是典型的字元裝置。 塊裝置 應用程式可以隨機

Linux核心模組程式設計-HelloWorld

HelloWorld核心 開始斷斷續續學習核心,大概半年了,多少開始對核心有點感悟了,但是對於這個龐然大物我顯得很渺小,在枯燥的核心原始碼之中似乎沒有一點點成功的喜悅,因此我選擇學習核心模組程式設計,通過編寫一些核心模組來體驗那一點點小小的成就感吧! 什麼是

Linux核心模組程式設計指南(一)

Peter Jay Salzman Michael Burian Ori Pomerantz Copyright © 2001 Peter Jay Salzman 2007-05-18 ver 2.6.4 Linux核心模組程式設計指南是一本免費的

關於linux核心模組程式設計時多個原始碼檔案Makefile書寫的問題

在學習核心模組程式設計的時候遇到了一些由於Makefile書寫不正確導致的問題。一個.c原始檔的Makefile按照網上的大部分資料介紹那樣是沒有問題的,多個原始檔的核心模組程式設計時,就出現問題了,自己糾結了半天,最後查資料、請教大神才搞定的。把過程和解決方法貼出來,供

讀Kernel感悟-Linux核心啟動-從hello world說起

核心是從哪裡開始執行的呢?幾乎任何一本Linux核心原始碼分析的書都會給出詳細的答案。不過,我試圖從一個不同的角度(一個初學者的角度)來敘述,而不是一上來就給出答案。從熟悉的事物入手,慢慢接近陌生的事物,這是比較常見的思路。既然都是二進位制程式碼,那麼不妨從最簡單的使用者態C