1. 程式人生 > >Linux核心模組新增的兩種方法

Linux核心模組新增的兩種方法



Linux核心模組新增的兩種方法

  1. 靜態載入

    把元件都新增進核心檔案中,在目錄kongfig檔案中增加新程式碼對應的編譯選項,在Makefile檔案中新增編譯條目。

  2. 動態載入

    下載並安裝Linux核心模板:

    make modules _install ARCH = arm CROSS _COMPILE=arm-linux

    編寫Makefile

    hello world為例來實現這兩種方法

    靜態載入

    1hello world.c原始碼

    #include <linux/init.h>

    #include <linux/module.h>

    static int hello_init(void)

    {

    printk(KERN_INFO " Hello World enter\n");

    return 0;

    }

    static void hello_exit(void)

    {

    printk(KERN_INFO " Hello World exit\n ");

    }

    module_init(hello_init);

    module_exit(hello_exit);

    MODULE_AUTHOR("Barry Song <[email protected]>");

    MODULE_LICENSE("Dual BSD/GPL");

    MODULE_DESCRIPTION("A simple Hello World Module");

    MODULE_ALIAS("a simplest module");

    把所有的元件都翻譯進核心檔案,即生成zImagebzImage

    1)進入linux-2.6.32.2-mini2440核心


    2)進入/drivers建立Hello資料夾,在Hello資料夾裡面建立hello.c,Makefile,Kconfig

    Makefielobj-y(CONFIG_HELLO_WORD)+=hello.o

    Kconfigconfig hello_word

    tristate "TEST hello word"

    help

    usually you have to make

    3)在drivers裡面的Makefile新增:obj-y(CONFIG_HELLO_WORD)+=Hello/


    4)在drivers裡面的Kconfig新增source"drivers/Hello/Kconfig"

    5)輸入make menuconfig進入核心配置介面

    6)然後輸入y退出並儲存

    7)生成了.config檔案為配置的記錄

    8)在make bzImage進行編譯核心

    9)然後在arch/arm/boot/下生成bzImage

    動態載入:直接編譯成PCX86的核心模組

    1)模組載入函式:insmod ;模組解除安裝函式:rmmod;檢視模組函式:lsmod

    2)模組可選資訊:模組引數、模組匯出符號、模組作者等資訊宣告

    3)在/work裡面加入hello.c檔案和Makefile檔案

    Makefile的內容為:

    ifneq ($(KERNELRELEASE),)

    obj-m :=hello.o####和要編譯的模組的名字一致

    else

    KDIR:= /lib/modules/3.5.0-17-generic/build

    ######以便尋找核心原始碼目錄下的Mmakefile

    all:

    make -C $(KDIR) M=$(PWD)modules

    ######KDIR目錄下的Makefile來編譯當前目錄下的模組

    clean:

    rm -f *.ko *.o *.mod.o *.mod.c.symvers

    endif

    4)執行make 命令


    5)、然後檢視hello資料夾生成hello.ko檔案


    6)執行insmod hello.ko進行載入模組:

    7lsmod檢視模組檢視載入模組輸出資訊



    8)刪除rmmod模組

    9)檢視刪除模組輸出資訊

    10)這樣,就完成了對模組的新增和刪除。

    總結:

    通過對Linux核心模組的新增和刪除實驗,我學會了關於核心新增和刪除的很多相關知識,首先,把元件編譯進核心中,如果建立的一個資料夾,需要使建立的資料夾裡的KconfigMakefile生效,需要在上一級目錄裡修改KconfigMakefile,這樣才能使新建立的KconfigMakefile 生效。其次,在模組動態載入到核心過程中,常常會出現不成功的時候,通過問老師,知道了是版本的問題,使得模組載入不成功。我會在以後的學習過程中,加強這方面的學習,提高這方面的技能,讓自己所學得到運用。

相關推薦

Linux核心模組新增方法

 Linux核心模組新增的兩種方法 靜態載入: 把元件都新增進核心檔案中,在目錄kongfig檔案中增加新程式碼對應的編譯選項,在Makefile檔案中新增編譯條目。 動態載入:

Linux下載入.ko驅動模組方法:insmod與modprobe

假設要載入的驅動程式模組名為SHT21.ko 載入驅動模組 方法一: 進入SHT21.ko驅動模組檔案所在的目錄,然後直接 insmod SHT21.ko 即可 方法二: 將SHT21.ko檔案拷貝到/lib/module/#uname -r#/目

centos核心升級的方法

對於一些特殊的軟體,如docker 需要linux核心3.1 之上才能很好支援,這時就需要升級核心了,而centos7預設的核心好像是  3.10.x,有些低。 方法一: 檢視當前系統核心版本 uname -r 1. 匯入key rpm --import https

Linux安裝MySQL的方法 先解除安裝之前版本

執行平臺:CentOS 8.2 x86_64 安裝方法:安裝MySQL主要有兩種方法:一種是通過原始碼自行編譯安裝,這種適合高階使用者定製MySQL的特性,這裡不做說明;另一種是通過編譯過的二進位制檔案進行安裝。二進位制檔案安裝的方法又分為兩種:一種是不針對特定平臺的通用安裝

1.建立一個Rectangle類,新增width和height個成員變數。 2.在Rectangle中新增方法分別計算矩形的周長和麵積 3.程式設計利用Rectangle輸出一個矩形的周

/* * 1.建立一個Rectangle類,新增width和height兩個成員變數。 * 2.在Rectangle中新增兩種方法分別計算矩形的周長和麵積 * 3.程式設計利用Rectangle輸出一個矩形的周長和麵積 */ public class ke1 {//

.建立一個Rectangle類,新增width和height個成員變數。 2.在Rectangle中新增方法分別計算矩形的周長和麵積 3.程式設計利用Rectangle輸出一個矩形的周

/* * 1.建立一個Rectangle類,新增width和height兩個成員變數。 * 2.在Rectangle中新增兩種方法分別計算矩形的周長和麵積 * 3.程式設計利用Rectangle輸出一個矩形的周長和麵積 */public class Rectangle {/

1.建立一個Rectangle類,新增width和height個成員變數。 2.在Rectangle中新增方法分別計算矩形的周長和麵積 3.程式設計利用Rectangle輸出一個矩形的周

/*  * 1.建立一個Rectangle類,新增width和height兩個成員變數。  * 2.在Rectangle中新增兩種方法分別計算矩形的周長和麵積  * 3.程式設計利用Rectangle輸出一個矩形的周長和麵積  */ public class Rectang

Linux新增路由的方法

Linux中增加軟路由的兩種方法 第一種:route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0 /* 增加一條網路172.16.6.0/24 經過172.16.2.254 eth0 */ /* -net增加網路 -ho

一、查看Linux內核版本命令(方法):

use proc color tex 2.6 distrib oot lin hat 一、查看Linux內核版本命令(兩種方法):1、cat /proc/version[[email protected]CentOS home]# cat /proc/versio

linux端口開放指定端口的方法

nbsp clas sysconfig sbin 端口號 重啟 new conf 並保存 重要的事情說三遍,強烈建議使用第二種方法!第二種方法!第二!; 開放端口的方法: 方法一:命令行方式 1. 開放端口命令: /sbin/iptables

方法實現Linux不活動用戶登錄超時後自動登出

https linux ted 一段 ali blog fig home 服務 在平常的工作中,windows系統使用的比較多一些,身邊的很多同事都會對自己的電腦進行一些個性化設置,比如離開一段時間後自動鎖屏、自動關閉屏幕、自動註銷當前登錄等。在windows下可以這樣操作

linux環境下編譯運行OpenCV程序的方法

https 鏈接庫 pen vco ons 程序 TP uil htm 一、命令行Command Line 1 g++ opencv_test.cpp -o opencv_test `pkg-config --cflags --libs opencv` 2 ./op

linux嘗試登錄失敗後鎖定用戶賬戶的方法

unix bubuko .net 管理 fir span first rst clas 一、pam_tally2模塊 用於對系統進行失敗的ssh登錄嘗試後鎖定用戶帳戶。此模塊保留已嘗試訪問的計數和過多的失敗嘗試。 配置 使用/etc/pam.d/system-auth

uboot中ramdisk啟動linux方法

轉載地址:https://blog.csdn.net/dropping_1979/article/details/20628109 首先要確保核心支援ramdisk啟動: The configuration of the kernel is as follow:  &nb

Linux命令傳送Http的get或post請求(curl和wget方法)

   Http請求指的是客戶端向伺服器的請求訊息,Http請求主要分為get或post兩種,在Linux系統下可以用curl和wget命令來模擬Http的請求。下面就來介紹一下Linux系統如何模擬Http的get或post請求。 一、get請求:   1、使用cur

Linux安裝(虛擬機器和雙系統方法

一、VMware虛擬機器 1.下載並安裝VMware: ①https://my.vmware.com/cn/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/15_0 ②下載Ubuntu映象檔案:http

jquery生成二維碼怎麼新增圖片(方法

自動生成二維碼裡面新增圖片,有兩種方法,一種是使用jquery原生的二維碼外掛,一種是別人有改動過的二維碼外掛,生成二維碼的圖片的時候有那麼一些寫的差別 第一種:使用的是原生的qrcode.js生成二維碼加上圖片 頁面 <div class="ma

eclipse in linux打包 方法

若不建立maven專案,建立java project編MapReduce的程式碼,記得匯入 •$HADOOP_HOME/share/hadoop/common/hadoop-common-2.8.5.jar •$HADOOP_HOME/share/hadoop/mapreduce/hadoop-

linux伺服器上安裝jdk的方法(yum+下載包)

這篇文章主要給大家介紹了關於在linux伺服器上安裝jdk的兩種方法,分別是利用yum安裝和從官網下載包安裝,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧 前言 對於開發者來說,安裝jdk按理說是非常簡單的事,

linux上安裝解除安裝redis的方法

redis安裝參考文件 linux上安裝redis的兩種方法 一、 手動下載安裝 1 wget 獲取redis的資源 2 tar xzvf 。。。。.tar.gz 3 可以使用mv 指令把解壓的安裝包移動到想要安裝到的目錄下   cd redis-