linux模塊
Ⅰ linux 什麼命令顯示所有裝載的模塊
運行下面的命令:
$ cat /lib/moles/$(uname -r)/moles.builtin
Ⅱ 什麼是 linux 模塊編程
操作系統就像是一個房間,你如果想睡覺你就要買張床,想看世界盃你就得買個電視,等等,這個床和電視就相當於模塊,沒有這些房子仍然是房子,也就是說模塊的有無不會對操作系統的功能有影響(有可能對性能有影響),這個模塊也就是你寫的程序,而你實現這個程序的動作就可以叫模塊化編程,好處是跟操作系統的內聚降低了更利於開發和維護。個人淺見。
Ⅲ linux下模塊怎麼安裝
一、 單文件模塊
直接把文件拷貝到 $python_dir/Lib
二、 多文件模塊,帶setup.py
python setup.py install
三、 egg文件
1) 下載ez_setup.py,運行python ez_setup
2) easy_install *.egg
註:雖然Python的模塊可以拷貝安裝,但是一般情況下推薦製作一個安裝包,即寫一個setup.py文件來安裝。
Ⅳ 如何編譯一個linux下的驅動模塊
linux下編譯運行驅動
嵌入式linux下設備驅動的運行和linux x86 pc下運行設備驅動是類似的,由於手頭沒有嵌入式linux設備,先在vmware上的linux上學習驅動開發。
按照如下方法就可以成功編譯出hello world模塊驅動。
1、首先確定本機linux版本
怎麼查看Linux的內核kernel版本?
'uname'是Linux/unix系統中用來查看系統信息的命令,適用於所有Linux發行版。配合使用'uname'參數可以查看當前伺服器內核運行的各個狀態。
#uname -a
Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux
只列印內核版本,以及主要和次要版本:
#uname -r
3.5.0-19-generic
要列印系統的體系架構類型,即的機器是32位還是64位,使用:
#uname -p
i686
/proc/version 文件也包含系統內核信息:
# cat /proc/version
Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012
發現自己的機器linux版本是:3.5.0-19-generic
2、下載機器內核對應linux源碼
到下面網站可以下載各個版本linux源碼https://www.kernel.org/
如我的機器3.5.0版本源碼下載地址為:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.tar.bz2
下載完後,找一個路徑解壓,如我解壓到/linux-3.5/
然後很重要的一步是:執行命令uname -r,可以看到Ubuntu的版本信息是3.5.0-19-generic
。進入linux源碼目錄,編輯Makefile,將EXTRAVERSION = 修改為EXTRAVERSION= -19-generic。
這些都是要配置源碼的版本號與系統版本號,如果源碼版本號和系統版本號不一致,在載入模塊的時候會出現如下錯誤:insmod: error inserting 'hello.ko': -1 Invalid mole format。
原因很明確:編譯時用的hello.ko的kenerl 不是我的pc的kenerl版本。
執行命令cp /boot/config-3.5.0-19-generic ./config,覆蓋原有配置文件。
進入linux源碼目錄,執行make menuconfig配置內核,執行make編譯內核。
3、寫一個最簡單的linux驅動代碼hello.c
/*======================================================================
Asimple kernel mole: "hello world"
======================================================================*/
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("zeroboundaryBSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO"Hello World enter\n");
return0;
}
static void hello_exit(void)
{
printk(KERN_INFO"Hello World exit\n ");
}
mole_init(hello_init);
mole_exit(hello_exit);
MODULE_AUTHOR("zeroboundary");
MODULE_DESCRIPTION("A simple HelloWorld Mole");
MODULE_ALIAS("a simplestmole");
4、寫一個Makefile對源碼進行編譯
KERN_DIR = /linux-3.5
all:
make-C $(KERN_DIR) M=`pwd` moles
clean:
make-C $(KERN_DIR) M=`pwd` clean
obj-m += hello.o
5、模塊載入卸載測試
insmod hello.ko
rmmod hello.ko
然後dmesg|tail就可以看見結果了
最後,再次編譯驅動程序hello.c得到hello.ko。執行insmod ./hello.ko,即可正確insert模塊。
使用insmod hello.ko 將該Mole加入內核中。在這里需要注意的是要用 su 命令切換到root用戶,否則會顯示如下的錯誤:insmod: error inserting 'hello.ko': -1 Operation not permitted
內核模塊版本信息的命令為modinfo hello.ko
通過lsmod命令可以查看驅動是否成功載入到內核中
通過insmod命令載入剛編譯成功的time.ko模塊後,似乎系統沒有反應,也沒看到列印信息。而事實上,內核模塊的列印信息一般不會列印在終端上。驅動的列印都在內核日誌中,我們可以使用dmesg命令查看內核日誌信息。dmesg|tail
可能還會遇到這種問題insmod: error inserting 'hello.ko': -1 Invalid mole format
用dmesg|tail查看內核日誌詳細錯誤
disagrees about version of symbolmole_layout,詳細看這里。
http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmoles/index.html
在X86上我的辦法是:
make -C/usr/src/linux-headers-3.5.0-19-generic SUBDIRS=$PWD moles
Ⅳ Linux系統中文件、模塊與設備驅動之間的的區別與聯系
linux下的文件的操作方式都是相同的,不要求後綴名,普通文件當然沒什麼好說的了。
模塊是由編譯後的內核生成的,也可以自己生成,自己載入。比如說系統啟動時載入的usb模塊有 usbcore.o、usb-uhci.o、usb-ohci.o、 uhci.o、ehci-hcd.o(usb2.0)、hid.o( USB人機界面設備)、usb-storage.o (U盤驅動),最後一個就是具體的設備驅動程序模塊,驅動程序也是以模塊的方式載入到系統中,然後才工作的。linux的系統載入了非常多的模塊,很多模塊在不用的時候都是處於掛起狀態,是不佔用內存和資源的,用的時候才去喚醒。
linux下操作設備是通過設備文件結點來操作的,/dev下面的東西。應用程序操作這些文件結點,就像操作普通文件一樣進行來回的讀/寫,剩下的事情都是由文件結點具體對應的設備驅動模塊完成的,文件結點和設備驅動之間的關系由一個鏈表來記錄。
Ⅵ linux操作系統中,載入和刪除內核模塊的命令是什麼。
modprobe命令
Linux命令:modprobe 。
功能說明:自動處理可載入模塊。
語法:modprobe [-acdlrtvV][--help][模塊文件][符號名稱 = 符號值]。
補充說明:modprobe可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據depmod所產生的相依關系,決定要載入哪些模塊。若在載入過程中發生錯誤,在modprobe會卸載整組的模塊。
內容
1、modprobe 命令是根據depmod -a的輸出/lib/moles/version/moles.dep來載入全部的所需要模塊。
2、刪除模塊的命令是:modprobe -r filename。
3、系統啟動後,正常工作的模塊都在/proc/moles文件中列出。使用lsmod命令也可顯示相同內容。
4、在內核中有一個「Automatic kernel mole loading"功能被編譯到了內核中。當用戶嘗試打開某類型的文件時,內核會根據需要嘗試載入相應的模塊。/etc/moles.conf或 /etc/modprobe.conf文件是一個自動處理內核模塊的控制文件。
modprobe命令主要用於在Linux 2.6內核中載入和刪除Linux內核模塊。通過此命令用戶可以輕松地載入和刪除Linux內核模塊,同時使用此命令載入Linux內核模塊時,Linux內核會自動解決內核模塊之間的依賴關系,將相互依賴的模塊自動載入,如下所示:
1) 載入RAID1陣列級別模塊:
[root@rhel5 boot]# modprobe raid1
2) 顯示已載入的RAID1陣列級別模塊:
[root@rhel5 boot]# lsmod |grep raid1 raid1 25153 0
3) 刪除RAID1陣列級別模塊:
[root@rhel5 boot]# modprobe -r raid1
4) 顯示RAID1陣列級別模塊:
[root@rhel5 boot]# lsmod |grep raid1
modprobe命令在載入模塊時會自動解決依賴的模塊。當載入的模塊需依賴另一個模塊時,系統會自動將此模塊載入。而當用戶使用insmod命令載入模塊時,則不會自動解決相對應的依賴模塊。
modprobe命令中的"-r"參數表示刪除指定模塊,"-c"參數表示顯示/etc/modprobe.conf配置文件的參數,"-C"參數表示指定內核配置文件,"-f"表示覆蓋,"-l"表示顯示模塊的絕對路徑。
[root@rhel5 boot]# modprobe -l|grep raid /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid0.ko /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid456.ko /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid1.ko /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid10.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/aacraid/aacraid.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mbox.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mm.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_sas.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/raid_class.ko
以上命令表示顯示系統中所有的編譯模塊,並過濾包含有raid字元串的模塊。
Ⅶ linux模塊
[root@www ~]# modinfo [-adln] [mole_name|filename]
選項與參數:
-a :僅列出作者名稱;
-d :僅列出該 moles 的說明 (description);
-l :僅列出授權 (license);
-n :僅列出該模塊的詳細路徑。
範例一:由上個表格當中,請列出 mii 這個模塊的相關資訊:
[root@www ~]# modinfo mii
filename: /lib/moles/2.6.18-92.el5/kernel/drivers/net/mii.ko
license: GPL
description: MII hardware support library
author: Jeff Garzik <[email protected]>
srcversion: 16DCEDEE4B5629C222C352D
depends:
vermagic: 2.6.18-92.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
# 可以看到這個模塊的來源,以及該模塊的簡易說明!(是硬體支持函式庫)
範例二:我有一個模塊名稱為 a.ko ,請問該模塊的資訊為?
[root@www ~]# modinfo a.ko
....(省略)....
Ⅷ 怎麼查看linux下的模塊,很多命令的介紹
1、lsmod 列加以掛載的內核模塊;
lsmod 是列出目前系統中已載入的模塊的名稱及大小等;另外我們還可以查看 /proc/moles ,我們一樣可以知道系統已經載入的模塊;
代碼:
[root@localhost beinan]# lsmod
2、modinfo 查看模塊信息;
modinfo 可以查看模塊的信息,通過查看模塊信息來判定這個模塊的用途;
代碼:
[root@localhost beinan]# moinfo 模塊名
免費提供最新Linux技術教程書籍,入門自學書籍《linux就該這么學》,為開源技術愛好者努力做得更多更好