天天看點

核心子產品調試常用指令整理一、 子產品加載二、 子產品依賴三、子產品解除安裝四、列出系統的子產品五、檢視子產品的資訊

一、 子產品加載

1.1 最簡單的一個驅動

static int __init my_driver_init( void )
{
    printk("init my_driver\n");
    return 0;
}

static void __exit my_driver_exit( void )
{
    printk("exit my_driver\n");
}

module_init( my_driver_init );
module_exit( my_driver_exit );
MODULE_LICENSE("GPL");
MODULE_AUTHOR("fatfat");
           

當通過

insmod

或者

modprobe

指令加載核心子產品時,子產品的加載函數就會自動被核心執行(

my_driver_init

)。

1.2 insmod

insmod

是最簡單的将一個子產品加載到核心的辦法。前提是子產品不依賴于其他子產品。

insmod hello_drv.ko
           

1.3 modprobe

modprobe 在将子產品加載進核心之前,先檢查子產品之間的依賴關系,并且按照順序加載這些依賴。

modprobe hello_drv.ko 
           

二、 子產品依賴

2.1 生成依賴檔案

depmod

會生成目前安裝目錄下子產品的依賴關系檔案module.dep 。modprobe 讀取依賴檔案 module.dep ,并加載相關的依賴.

在 ”/lib/modules/核心版本” (/lib/modules/4.1.15)目錄下,執行下面指令,生成依賴檔案。

depmod -a
           

2.2 檢視依賴檔案

我們打開module.dep 檔案,可以檢視目前目錄下子產品的依賴檔案。

核心子產品調試常用指令整理一、 子產品加載二、 子產品依賴三、子產品解除安裝四、列出系統的子產品五、檢視子產品的資訊

三、子產品解除安裝

當執行

rmmod

指令,子產品解除安裝函數(

my_driver_exit

)就會自動被核心執行,完成相關清理工作。

rmmod hello_drv.ko
           

四、列出系統的子產品

4.1 lsmod

lsmod 列出目前已經加載到核心中的所有子產品。

其原理就是将/proc/modules 中的資訊調整一下格式輸出。lsmod 輸出清單中有一列

Used by

,它表明此子產品正在被其他子產品使用,顯示了子產品之間的依賴關系。

核心子產品調試常用指令整理一、 子產品加載二、 子產品依賴三、子產品解除安裝四、列出系統的子產品五、檢視子產品的資訊

4.2 /sys/module 目錄

該目錄下有系統中所有的子產品資訊,不論這些子產品是以内聯(inlined) 方式 編譯到核心鏡像檔案中,還是編譯為外部子產品(.ko) 。

當我們加載驅動程式之後,我們可以通過 調用

lsmod

指令 或者檢視

/sys/module

目錄,檢視我們剛加載的子產品有沒加載成功。

五、檢視子產品的資訊

modinfo

指令用于顯示指定的核心子產品資訊。

modinfo hello_drv.ko
           

如下輸出可見,指令可以輸出核心子產品的外部依賴、編譯核心版本,作者等等資訊。

核心子產品調試常用指令整理一、 子產品加載二、 子產品依賴三、子產品解除安裝四、列出系統的子產品五、檢視子產品的資訊

繼續閱讀