Linux核心模組新增的兩種方法
Linux核心模組新增的兩種方法
-
靜態載入:
把元件都新增進核心檔案中,在目錄kongfig檔案中增加新程式碼對應的編譯選項,在Makefile檔案中新增編譯條目。
-
動態載入:
下載並安裝Linux核心模板:
make modules _install ARCH = arm CROSS _COMPILE=arm-linux
編寫Makefile。
以hello world為例來實現這兩種方法:
靜態載入:
(1)hello 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");
把所有的元件都翻譯進核心檔案,即生成zImage或bzImage
(1)進入linux-2.6.32.2-mini2440核心
(2)進入/drivers建立Hello資料夾,在Hello資料夾裡面建立hello.c,Makefile,Kconfig
Makefiel:obj-y(CONFIG_HELLO_WORD)+=hello.o
Kconfig:config 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
動態載入:直接編譯成PC機X86的核心模組
(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進行載入模組:(7)lsmod檢視模組檢視載入模組輸出資訊
(8)刪除rmmod模組(9)檢視刪除模組輸出資訊
(10)這樣,就完成了對模組的新增和刪除。
總結:
通過對Linux核心模組的新增和刪除實驗,我學會了關於核心新增和刪除的很多相關知識,首先,把元件編譯進核心中,如果建立的一個資料夾,需要使建立的資料夾裡的Kconfig和Makefile生效,需要在上一級目錄裡修改Kconfig和Makefile,這樣才能使新建立的Kconfig和Makefile 生效。其次,在模組動態載入到核心過程中,常常會出現不成功的時候,通過問老師,知道了是版本的問題,使得模組載入不成功。我會在以後的學習過程中,加強這方面的學習,提高這方面的技能,讓自己所學得到運用。
相關推薦
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-