[Question] Manage/Query Kernel and Kernel Modules at Runtime |
12/11/2007 15:11:21 (+0700) | #1 | 97065 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
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:
: Các modules cho một vài thiết bị xác định: RAID, IDE
: Các modules driver cho thiết bị CD-ROM nonstandard
: Các drivers thiết bị cho file hệ thống như MSDOS
: Các modules drivers cho giao thức mạng
: Các modules driver cho điều khiển SCSI
: 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! |
|
|
|
[Question] Re: Manage/Query Kernel and Kernel Modules at Runtime |
13/11/2007 01:33:54 (+0700) | #2 | 97113 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
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:
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:
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:
Thử load tất cả các modules mạng có thể:
Code:
Liệt kê tất cả các modules có thể được sử dụng:
Code:
|
|
Let's build on a great foundation! |
|
|
|
|
|
|
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|
|
|