banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Manage/Query Kernel and Kernel Modules at Runtime  XML
  [Question]   Manage/Query Kernel and Kernel Modules at Runtime 12/11/2007 15:11:21 (+0700) | #1 | 97065
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Nguồn: Chương 13 - LPI

Với Linux, mã cho thiết bị hệ thống có thể được biên dịch trong kernel. Bởi vì kernel đã hỗ trợ sẵn phần lớn các thiết bị (điều này được gọi là monolithic), nên kernel quản lý phần cứng hệ thống bằng chính nó. Những kernel monolithic rất không linh động, bởi vì việc build một kernel mới là cần thiết cho những thiết bị ngoại vi mới để thêm vào hệ thống. Những kernel monolithic cũng tiềm tàng trở nên "bloated" (tạm dịch là cồng kềnh) bởi vì drivers cho hardware không được cài đặt kiểu vật lý. Thay vào đó, phần lớn users chạy modular kernels, những drivers cho thiết bị được chèn vào kernel đang chạy khi cần thiết. Modular cấu hình có thể được gắn vào để thay đổi trong phần cứng hoặc cung cấp hoặc cung cấp một cách quy ước để nâng cấp phần mềm driver khi hệ thống đang chạy.

1. Module Files

Những modules kernel của Linux là những object files (.o) được trình biên dịch C biên dịch nhưng chúng ko gộp lại để trở thành 1 file executable. Phần lớn các module được phân bố với kernel và biên dịch theo đó. Bởi vì chúng có liên quan rất gần với kernel, tập hợp các modules riêng rẽ được cài đặt khi nhiều kernels được cài. Điều này sẽ làm giảm khả năng một module kernel sẽ được chèn vào một phiên bản kernel sai.

Các modules được lưu trong /lib/modules/kernel-version (kernel-version được xác định bằng lệnh uname -r). Chẳng hạn trên máy tớ lệnh uname -r trả về:
2.6.21-1.3194.fc7 

Nhiều modules có thể nằm trong lib/modules nếu có nhiều kernel được cài trên hệ thống của bạn. Nếu bạn từng update kernel, hoặc compile kernel cho các phiên bản mới hơn, trong lib/modules của bạn sẽ có nhiều thư mục kernel-version, ví dụ như:

2.6.21-1.3194.fc7
2.6.23.1
2.6.23.1-21.fc7
 
Trong mỗi kernel-version là một thư mục con kernel- chứa đựng kernel modules, được sắp xếp theo category.

Một vài categories:

  • block
: Các modules cho một vài thiết bị xác định: RAID, IDE

  • cdrom
: Các modules driver cho thiết bị CD-ROM nonstandard

  • fs
: Các drivers thiết bị cho file hệ thống như MSDOS

  • net
: Các modules drivers cho giao thức mạng

  • scsi
: Các modules driver cho điều khiển SCSI

  • video
: Các modules driver cho bộ tiếp hợp video
...

Phần tiếp theo: 2. Manipulating Modules
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Re: Manage/Query Kernel and Kernel Modules at Runtime 13/11/2007 01:33:54 (+0700) | #2 | 97113
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Phần 2. Manipulating Modules

Một module được liên kết động với kernel đang chạy khi nó được load. Nhiều kernel module được thực hiện một cách tự động. Tuy nhiên cũng có lúc là cần thiết khi bạn tự thực hiện những modules đó, bạn có thể làm việc này bằng cách viết scripts. Chẳng hạn, khi bạn gặp khó khăn với 1 driver đặc biệt, bạn cần lấy mã nguồn cho phiên bản mới hơn của driver, biên dịch nó, và chèn một module mới vào kernel đang chạy. Những lệnh được liệt kê trong phần này có thể dùng để liệt kê, chèn, xoá bỏ, và query modules

Code:
$ lsmod

Với mỗi kernel module được load, lệnh này sẽ hiển thị tên, kích cỡ, số lượng sử dụng, danh sách các modules tham chiếu khác.
Ví dụ:
Code:
$ /sbin/lsmod
Module                  Size  Used by
i915                   25793  2 
drm                    78037  3 i915
battery                14149  0 
ac                      9413  0 
autofs4                24645  2 
sunrpc                159133  1 
xt_tcpudp               7233  6 
ip6t_REJECT             9537  2 
ip6table_filter         6849  1 
ip6_tables             17541  1 ip6table_filter
x_tables               18757  3 xt_tcpudp,ip6t_REJECT,ip6_tables
cpufreq_ondemand       11981  2 
acpi_cpufreq           14281  1 
ipv6                  276673  15 ip6t_REJECT
dm_mirror              24405  0 
dm_multipath           21705  0 
dm_mod                 57485  2 dm_mirror,dm_multipath
snd_usb_audio          79297  0 
snd_usb_lib            19393  1 snd_usb_audio
snd_rawmidi            26561  1 snd_usb_lib
snd_hwdep              12869  1 snd_usb_audio
snd_hda_intel          24281  2 
snd_hda_codec         202689  1 snd_hda_intel
snd_seq_dummy           7877  0 
snd_seq_oss            33345  0 
snd_seq_midi_event     11073  1 snd_seq_oss
snd_seq                50353  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event
i2c_i801               12241  0 
snd_seq_device         11852  4 snd_rawmidi,snd_seq_dummy,snd_seq_oss,snd_seq
i2c_core               24641  1 i2c_i801
snd_pcm_oss            43489  0 
tifm_7xx1              12993  0 
snd_mixer_oss          19393  2 snd_pcm_oss
fw_ohci                19649  0 
serio_raw              10821  0 
snd_pcm                74565  4 snd_usb_audio,snd_hda_intel,snd_hda_codec,snd_pcm_oss
tifm_core              12993  1 tifm_7xx1
fw_core                42625  1 fw_ohci
pcspkr                  7105  0 
sky2                   45129  0 
iTCO_wdt               14693  0 
iTCO_vendor_support     7877  1 iTCO_wdt
snd_timer              24773  2 snd_seq,snd_pcm
snd                    53189  14 snd_usb_audio,snd_rawmidi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
iwl3945               141477  0 
mac80211              136005  1 iwl3945
soundcore              11553  2 snd
snd_page_alloc         13769  2 snd_hda_intel,snd_pcm
cfg80211               12105  1 mac80211
sr_mod                 20197  0 
cdrom                  37217  1 sr_mod
sg                     37213  0 
joydev                 13441  0 
ata_piix               18757  7 
ata_generic            12101  0 
libata                115417  2 ata_piix,ata_generic
sd_mod                 23873  8 
scsi_mod              137549  4 sr_mod,sg,libata,sd_mod
ext3                  125385  6 
jbd                    59881  1 ext3
mbcache                12357  1 ext3
ehci_hcd               35405  0 
ohci_hcd               23749  0 
uhci_hcd               26833  0 
[/quote]
Module                  Size  Used by
i915                   25793  2 
drm                    78037  3 i915
battery                14149  0 
ac                      9413  0 
autofs4                24645  2 
sunrpc                159133  1 
xt_tcpudp               7233  6 
ip6t_REJECT             9537  2 
ip6table_filter         6849  1 
ip6_tables             17541  1 ip6table_filter
x_tables               18757  3 xt_tcpudp,ip6t_REJECT,ip6_tables
cpufreq_ondemand       11981  2 
acpi_cpufreq           14281  1 
ipv6                  276673  15 ip6t_REJECT
dm_mirror              24405  0 
dm_multipath           21705  0 
dm_mod                 57485  2 dm_mirror,dm_multipath
snd_usb_audio          79297  0 
snd_usb_lib            19393  1 snd_usb_audio
snd_rawmidi            26561  1 snd_usb_lib
snd_hwdep              12869  1 snd_usb_audio
snd_hda_intel          24281  2 
snd_hda_codec         202689  1 snd_hda_intel
snd_seq_dummy           7877  0 
snd_seq_oss            33345  0 
snd_seq_midi_event     11073  1 snd_seq_oss
snd_seq                50353  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event
i2c_i801               12241  0 
snd_seq_device         11852  4 snd_rawmidi,snd_seq_dummy,snd_seq_oss,snd_seq
i2c_core               24641  1 i2c_i801
snd_pcm_oss            43489  0 
tifm_7xx1              12993  0 
snd_mixer_oss          19393  2 snd_pcm_oss
fw_ohci                19649  0 
serio_raw              10821  0 
snd_pcm                74565  4 snd_usb_audio,snd_hda_intel,snd_hda_codec,snd_pcm_oss
tifm_core              12993  1 tifm_7xx1
fw_core                42625  1 fw_ohci
pcspkr                  7105  0 
sky2                   45129  0 
iTCO_wdt               14693  0 
iTCO_vendor_support     7877  1 iTCO_wdt
snd_timer              24773  2 snd_seq,snd_pcm
snd                    53189  14 snd_usb_audio,snd_rawmidi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
iwl3945               141477  0 
mac80211              136005  1 iwl3945
soundcore              11553  2 snd
snd_page_alloc         13769  2 snd_hda_intel,snd_pcm
cfg80211               12105  1 mac80211
sr_mod                 20197  0 
cdrom                  37217  1 sr_mod
sg                     37213  0 
joydev                 13441  0 
ata_piix               18757  7 
ata_generic            12101  0 
libata                115417  2 ata_piix,ata_generic
sd_mod                 23873  8 
scsi_mod              137549  4 sr_mod,sg,libata,sd_mod
ext3                  125385  6 
jbd                    59881  1 ext3
mbcache                12357  1 ext3
ehci_hcd               35405  0 
ohci_hcd               23749  0 
uhci_hcd               26833  0


Code:
$ insmod [option] module

Lệnh này chèn một module vào kernel đang chạy. Module được định vị tự động và chèn. Bạn phải login với superuser. Các tham số:
-s: đưa output vào syslog thay vì stdout
-v: set verbose mode

Code:
$ rmmod [options] modules

Lệnh này được sử dụng để xoá bỏ những modules từ kernel đang chạy (superuser), lệnh này sẽ lỗi nếu module đang được sử dụng hoặc tham chiếu đến một module khác
-a: xoá bỏ tất cả modules không dùng
-s: đưa output vào syslog thay vì stdout

Code:
$ modinfo [options] module_object_file

Lệnh này hiển thị thông tin về module. Một vài modueles sẽ không chứa thông tin nào cả, một số thì có 1 vài dòng, số khác thì miêu tả chi tiết.
-a: hiển thị tác giả của modules
-d: hiển thị miêu tả về module
-p: hiển thị loại tham số mà module hỗ trợ
Ví dụ:
Hiển thị tác giả của module ac
Code:
$ /sbin/modinfo -a ac
Paul Diefenbaugh


Miêu tả về module battery
Code:
$ /sbin/modinfo -d battery
ACPI Battery Driver


Code:
$ modprobe [options] module [symbol=value...]

Giống như insmod, modprobe đuợc sử dụng để chèn module. Thực tế thì modprobe bao quanh insmod và cung cấp thêm vài tính năng. Để load những module đơn, modprobe có khả năng load những module cần thiết trước, hoặc những modules được lưu trong một thư mục xác định. Cũng có thể dùng modprobe để gỡ bỏ module bằng cách thêm vào tuỳ chọn -r

Nếu module phụ thuộc vào những modules khác, thì chúng sẽ được load đầu tiên. Lệnh modprobe xác định mối quan hệ cần thiết giữa các modules bằng cách đọc modules.dep nằm trên cùng của hệ thống thư mục module (/lib/modules/2.6.23.1-21.fc7/modules.dep)

-a: load tất cả các modules
-c : hiển thị cấu hình module
-l: liệt kê các modules
-r : xoá module
-s: đưa output vào syslog thay vì stdout
-t moduletype: thử tải các modules được tìm thấy trong moduletype cho đến khi 1 module được load thành công hoặc tất cả đã hết.
-v: set verbose mode

Ví dụ:
Cài module hệ thống msdos vào kernel đang chạy:
Code:
$ /sbin/modprobe msdos


Thử load tất cả các modules mạng có thể:
Code:
$ /sbin/modprobe -at net


Liệt kê tất cả các modules có thể được sử dụng:
Code:
$ /sbin/modprobe -l

Let's build on a great foundation!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|