linux内核及其模块的查询,加载,卸载 lsusb等
http://blog.sina.com.cn/s/blog_53e81e2a0100zkxi.html
?
1,/sbin/update-modules文件,他是一個linux通用的模塊管理腳本程序.
2,modprobe 和 insmod 的區別: 前者功能比較強大,既可以插入和取出模塊,也可以解決依賴性問題
modprobe后跟的模塊名不需要是絕對路徑,也不用加.o或.ko后綴,但是后者需要
在運行時管理 / 查詢內核和內核模塊 Weight: 4
考生應該能夠管理和查詢內核和可加載內核模塊 . 這個目標包括使用命令行工具獲得當前內核和內核模塊的信息 . 還包括手工的加載和卸載合適的模塊 . 還包括能夠判斷何時能夠卸載模塊以及模塊能夠接受的參數 . 考生應該能夠配置系統根據模塊名加載模塊 .
關鍵文件 , 術語 , 和 工具 包括?:
/lib/modules/kernel-version/modules.dep /etc/modules.conf & /etc/conf.modules depmod insmod lsmod rmmod modinfo modprobe uname
重新配置 , 構建和安裝定制的內核和模塊 Weight: 3
考生應該能夠從源代碼定制 , 構建和安裝內核和可加載內核模塊 . 這個目標包括定制當前內核配置 , 構建一個新內核以及合適的內核模塊 . 還包括安裝新內核和模塊 , 確認引導管理器能夠定位新內核和相關文件 ( 通常在 /boot 目錄下 ).
關鍵文件 , 術語 , 和 工具 包括?: /usr/src/linux/* /usr/src/linux/.config /lib/modules/kernel-version/* /boot/* make make targets?: config , menuconfig , xconfig , oldconfig , modules , install , modules_install , depmod
?
?
內核模塊基礎知識,
一、什么是內核;
??? 內核官方:http://www.kernel.org
??? 內核洋文用 kernel,我剛才翻了一下詞典,kernel 中文意思是內核、核心、中心、精髓的意思;也是果仁、果核的意思。從字面理解,kernel 是一事物的中心,植物的果實最重要的也是果仁和果核;:) 由此我們可以推斷內核是操作系統的中心。
??? 我們知道Linus Torvalds 開發了Linux ,其實他開發的就是內核,按內核官方主頁的理解,這個內核就是Linux ;其它的擴展和應用都是圍繞內核而展開的。所有Linux應用程序都會和內核發生直接或者間接的接觸;比如硬件需要內核支持,網絡的通信也需要內核支持;文件系統更需要內核支持... ...
??? 直言我的能力的不行,如果您想了解和學習解操作系統,我寫的教程只是初級應用,理論性的東西不是一言兩語能說的清楚的,更不是應用者能說的清楚的。
??? 二、為什么需要編譯內核和管理內核
??? 硬件是需要內核支持才行,有些硬件的支持沒有被編入內核,這也需要我們重編內核;內核的包含的不僅僅是設備的驅動,還有其它的內容,比如網絡協議的支持,防火墻的支持... ... 比如iptables的實現,有些功能是需要內核支持的,如果內核與iptables相關的內容沒有被編入,iptables 相關的功能就無法實現;
??? 三、內核編譯方法
??? 請參考:《編譯內核操作流程 ──為新手指南》
??? 四、管理內核模塊的相關命令
??? 1、lsmod 列加以掛載的內核模塊;
??? lsmod 是列出目前系統中已加載的模塊的名稱及大小等;另外我們還可以查看 /proc/modules ,我們一樣可以知道系統已經加載的模塊;
??? [root@localhost beinan]# lsmod
??? 2、modinfo 查看模塊信息;
??? modinfo 可以查看模塊的信息,通過查看模塊信息來判定這個模塊的用途;
??? [root@localhost beinan]# moinfo 模塊名
??? 舉例:
??? [root@localhost beinan]# modinfo ne2k-pci
??? filename: /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.ko
??? author: Donald Becker / Paul Gortmaker
??? description: PCI NE2000 clone driver
??? license: GPL
??? parmtype: debug:int
??? parmtype: options:array of int
??? parmtype: full_duplex:array of int
??? parm: debug:debug level (1-2)
??? parm: options:Bit 5: full duplex
??? parm: full_duplex:full duplex setting(s) (1)
??? vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0
??? depends: 8390
??? alias: pci:v000010ECd00008029sv*sd*bc*sc*i*
??? alias: pci:v00001050d00000940sv*sd*bc*sc*i*
??? alias: pci:v000011F6d00001401sv*sd*bc*sc*i*
??? alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*
??? alias: pci:v00004A14d00005000sv*sd*bc*sc*i*
??? alias: pci:v00001106d00000926sv*sd*bc*sc*i*
??? alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*
??? alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*
??? alias: pci:v000012C3d00000058sv*sd*bc*sc*i*
??? alias: pci:v000012C3d00005598sv*sd*bc*sc*i*
??? alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*
??? srcversion: 6ACE95F441CD26DF9DC31C2
??? 上面的例子是我們查看 ne2k-pci 這個模塊的信息,通過查看,我們知道ne2k-pci 模塊是8029網卡(PCI NE2000 clone driver)的驅動;模塊是位于 /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko
??? 我們現在常用的網卡也有8139的,8139網卡所用的驅動是 8139too ;查查看?
??? [root@localhost beinan]# modinfo 8139too
??? 我們再查查vfat 和ntfs 的模塊信息;
??? [root@localhost beinan]# modinfo vfat
??? [root@localhost beinan]# modinfo ntfs
??? 自己嘗試一下;
??? 注意: 模塊名是不能帶有后綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o后綴;
??? 3、modprobe 掛載新模塊以及新模塊相依賴的模塊
??? modprobe 我們常用的功能就是掛載模塊,在掛載某個內核模塊的同時,這個模塊所依賴的模塊也被同時掛載;當然modprobe 也有列出內核所有模塊,還有移除模塊的功能;下在我們舉個例子說一說咱們常用的功能和參數;
??? modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]
??? modprobe -r [-n] [-i] [-v] ...
??? modprobe -l -t [ -a ...]
??? 上面是modprobe 的用法,具體更為詳細的幫助,我們可以查看 man modprobe ;
??? [root@localhost beinan]# modprobe -c
??? modprobe -c 可以查看modules 的配置文件,比如模塊的別名是什么等;
??? [root@localhost beinan]# modprobe -l
??? modprobe -l 是列出內核中所有的模塊,包括已掛載和未掛載的;通過modprobe -l ,我們能查看到我們所需要的模塊,然后根據我們的需要來掛載;其實modprobe -l 讀取的模塊列表就位于 /lib/modules/'uname -r' 目錄中;其中uname -r 是內核的版本;
??? [root@localhost beinan]# uname -r
??? 2.6.11-1.1369_FC4
??? [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/
??? 通過上面的命令,自己試試看?
??? [root@localhost beinan]# modprobe 模塊名 注:掛載一個模塊;
??? 舉例:
??? [root@localhost beinan]# modprobe ne2k-pci 注:掛載 ne2k-pci 模塊;
??? [root@localhost beinan]# modprobe vfat 注:掛載vfat 模塊
??? [root@localhost beinan]# modprobe ntfs 注:掛載ntfs 模塊
??? [root@localhost beinan]# lsmod 注:列出已掛載模塊, 我們會看到ne2k-pci ,vfat ,ntfs的模塊 ;
??? 注意: 模塊名是不能帶有后綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o后綴;
??? [root@localhost beinan]# modprobe -r 模塊名 注:移除已加載的模塊,和rmmod 功能相同;
??? 注意: 模塊名是不能帶有后綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o后綴;
??? [root@localhost beinan]# modprobe -r 模塊名
??? 舉例:
??? [root@localhost beinan]# modprobe -r ne2k-pci
??? 就說這么多吧,更為詳細的還是用 man modprobe 來查看和嘗試;
??? 4、rmmod 移除已掛載模塊;
??? 命令格式:
??? rmmod 模塊名
??? 注意: 模塊名是不能帶有后綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o后綴;
??? 舉例:
??? [root@localhost beinan]# rmmod vfat 注:移除已掛載的模塊vfat
??? 5、depmod 創建模塊依賴關系的列表
??? 這個模塊管理工具是創建模塊依賴關系的列表,有幾個參數我們注意一下就行了,目前的的Linux 發行版所用的內核是2.6x版本,是自動解決依賴關系,所以這個命令知道就行了;模塊之前也有依賴關系,比如我們想驅動USB 移動硬盤,目前有兩種驅動,一種是udev ,在內核中有,但目前不太穩定;另一種辦法是用usb-storage驅動,而usb-storage 依賴的模塊是scsi 模塊,所以我們要用usb-storage 的模塊,也得把scsi 編譯安裝;
??? 再舉個例子:sata的硬盤,在Linux中的設備表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等... 系統要驅動 sata硬盤,則需要把sata在內核中選中,或編譯成模塊,或內置于內核之中,在此同時,還需要在內核中選中ide ,scsi 的支持等;
??? depmod 工具的洋文原意:depmod — program to generate modules.dep and map files.(我譯的:為modules.dep 文件或映射文件創建依賴關系)
??? [root@localhost beinan]# depmod -a 注:為所有列在/etc/modprobe.conf 或/etc/modules.conf 中的所有模塊創建依賴關系,并且寫入到modules.dep文件;
??? [root@localhost beinan]# depmod -e 注:列出已掛載但不可用的模塊;
??? [root@localhost beinan]# depmod -n 注:列出所有模塊的依賴關系,但僅僅是輸出出來 (Write the dependency file on stdout only)
??? 注:modules.dep 位于 /lib/modules/內核版本 目錄
??? 比如 Fedora Core 4.0 中,系統默認的內核:
??? [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/modules.dep
??? /lib/modules/2.6.11-1.1369_FC4/modules.dep
??? 6、insmod 掛載模塊;
??? insmod 這個工具,和modprobe 有點類似,但功能上沒有modprobe 強,modprobe 在掛載模塊是不用指定模塊文件的路徑,也不用帶文件的后綴.o 或.ko ;而insmod 需要的是模塊的所在目錄的絕對路徑,并且一定要帶有模塊文件名后綴的(modulefile.o 或modulesfile.ko );
??? 對于這個工具,我們只是介紹一下, 并不推薦使用。因為模塊有依賴關系,對于新手來說,可能不知道這個模塊依賴和哪個模塊依賴;
??? 舉例:
??? [root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko
??? 我們要到 /lib/modules/內核版本 uname -r 的命令輸出/kernel/drivers 中找相對應的模塊才行,要有絕對路徑,而且必須要用到文件名的全稱,不能把文件名的后綴省略;
??? 五、與內核模塊加載相關的配置文件;
??? 1、模塊的配置文件 modules.conf 或 modprobe.conf
??? 內核模塊的開機自動掛載模塊一般是位于一個配置文件,一般的Linux發行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 內核模塊開機自動加載文件是 /etc/modprobe.conf ;在這個文件中,一般是寫入模塊的加載命令或模塊的別名的定義等;比如我們在modules.conf 中可能會發行類似的一行 ;
??? alias eth0 8139too
?
?
插入usb鼠標后執行lsusb的輸出內容如下:-----------------------------------------
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 006: ID 15d9:0a37
Bus 002 Device 001: ID 0000:0000
內容解讀:
-----------------------------------------
Bus 005
表示第五個usb主控制器(機器上總共有5個usb主控制器 -- 可以通過命令lspci | grep USB查看)
Device 006
表示系統給usb鼠標分配的設備號(devnum),同時也可以看到該鼠標是插入到了第二個usb主控制器
006 usb_device.devnum
/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/devnum
ID 15d9:0a37
表示usb設備的ID(這個ID由芯片制造商設置,可以唯一表示該設備)
15d9 usb_device_descriptor.idVendor
0a37 usb_device_descriptor.idProduct
/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/idVendor
Bus 002 Device 006: ID 15d9:0a37
Bus 002 Device 001: ID 0000:0000
表示002號usb主控制器上接入了兩個設備:
一個是usb根Hub -- 001
一個是usb鼠標 -- 006
轉載于:https://www.cnblogs.com/jingzhishen/p/3673343.html
總結
以上是生活随笔為你收集整理的linux内核及其模块的查询,加载,卸载 lsusb等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大型互联网网站架构心得之:分、并、换
- 下一篇: .net开发微信公众平台