Lệnh Linux / Unix: insmod

Trình cài đặt lệnh Linux / Unix cài đặt mô-đun có thể tải trong hạt nhân đang chạy. insmod cố gắng liên kết một mô-đun vào hạt nhân đang chạy bằng cách giải quyết tất cả các ký hiệu từ bảng ký hiệu đã xuất của hạt nhân.

Nếu tên tập tin mô-đun được đưa ra mà không có thư mục hoặc phần mở rộng, insmod sẽ tìm kiếm module trong một số thư mục mặc định phổ biến. Biến môi trường MODPATH có thể được sử dụng để ghi đè lên mặc định này. Nếu một tệp cấu hình mô-đun như /etc/modules.conf tồn tại, nó sẽ ghi đè lên các đường dẫn được định nghĩa trong MODPATH .

Biến môi trường MODULECONF cũng có thể được sử dụng để chọn một tệp cấu hình khác với /etc/modules.conf mặc định (hoặc /etc/conf.modules (không được chấp nhận)). Biến môi trường này sẽ ghi đè tất cả các định nghĩa ở trên.

Khi biến môi trường UNAME_MACHINE được thiết lập, modutils sẽ sử dụng giá trị của nó thay vì trường máy từ uname () syscall. Điều này chủ yếu được sử dụng khi bạn đang biên dịch các mô-đun 64 bit trong không gian người dùng 32 bit hoặc ngược lại, đặt UNAME_MACHINE thành loại mô-đun. Các modut hiện tại không hỗ trợ chế độ xây dựng chéo đầy đủ cho các mô-đun, nó được giới hạn trong việc lựa chọn giữa các phiên bản 32 và 64 bit của kiến ​​trúc máy chủ.

Tùy chọn

-e persist_name , --persist = persist_name

Chỉ định nơi bất kỳ dữ liệu liên tục nào cho mô-đun được đọc từ khi tải và được ghi vào thời điểm diễn ra mô-đun này. Tùy chọn này được bỏ qua âm thầm nếu mô-đun không có dữ liệu liên tục. Dữ liệu liên tục chỉ được đọc bởi insmod nếu tùy chọn này có mặt, theo mặc định insmod không xử lý dữ liệu liên tục.

Như là một dạng viết tắt , -e "" (một chuỗi rỗng) được diễn dịch bằng insmod như giá trị của persistdir như được định nghĩa trong modules.conf , theo sau là tên tệp của mô-đun liên quan đến đường dẫn tìm kiếm mô-đun mà nó được tìm thấy, trừ đi bất kỳ theo sau ".gz", ".o" hoặc ".mod". Nếu modules.conf chỉ định " persistdir = " (tức là persistdir là một trường trống) thì biểu mẫu viết tắt này được bỏ qua âm thầm. (Xem modules.conf (5).)

-f , --force

Nỗ lực nạp mô-đun ngay cả khi phiên bản của hạt nhân đang chạy và phiên bản hạt nhân mà mô-đun được biên dịch không khớp. Điều này chỉ ghi đè kiểm tra phiên bản hạt nhân, nó không ảnh hưởng đến việc kiểm tra tên biểu tượng. Nếu tên biểu tượng trong mô-đun không khớp với hạt nhân thì không có cách nào để buộc insmod tải mô-đun.

-h , --help

Hiển thị tóm tắt các tùy chọn và thoát ngay lập tức.

-k , --autoclean

Đặt cờ tự động làm sạch trên mô-đun. Cờ này sẽ được kerneld (8) sử dụng để loại bỏ các mô-đun chưa được sử dụng trong một khoảng thời gian nào đó - thường là một phút.

-L , --lock

Sử dụng đàn (2) để ngăn tải đồng thời cùng một mô-đun.

-m , --map

Xuất ra một bản đồ tải trên stdout, làm cho nó dễ dàng hơn để gỡ lỗi các mô-đun trong trường hợp hoảng loạn hạt nhân.

-n , --noload

Chạy giả, làm mọi thứ ngoại trừ nạp module vào kernel. Nếu được yêu cầu bởi một -m hoặc -O , chạy sẽ tạo ra một tập tin bản đồ hoặc blob. Vì mô-đun không được tải, địa chỉ tải hạt nhân thật là không xác định nên tệp bản đồ và blob dựa trên địa chỉ tải tùy ý là 0x12340000.

-o module_name , --name = module_name

Đặt tên rõ ràng cho mô-đun, thay vì lấy tên từ tên cơ sở của tệp đối tượng nguồn.

-O blob_name , --blob = blob_name

Lưu đối tượng nhị phân trong blob_name . Kết quả là một blob nhị phân (không có tiêu đề ELF) hiển thị chính xác những gì được nạp vào hạt nhân sau khi thao tác phần và di chuyển. Tùy chọn -m được khuyến khích để có được một bản đồ của đối tượng.

-p , --probe

Thăm dò mô-đun để xem nó có thể được tải thành công hay không . Điều này bao gồm định vị tệp đối tượng trong đường dẫn mô-đun, kiểm tra số phiên bản và giải quyết các ký hiệu. Nó không kiểm tra việc di chuyển cũng không tạo ra một tập tin bản đồ hoặc blob.

Tiền tố -P , --prefix = tiền tố

Tùy chọn này có thể được sử dụng với các mô-đun được phiên bản cho một hạt nhân SMP hoặc bigmem, vì các mô-đun này có thêm một tiền tố được thêm vào trong tên biểu tượng của chúng. Nếu hạt nhân được xây dựng với các phiên bản ký hiệu thì insmod sẽ tự động trích xuất tiền tố từ định nghĩa "get_module_symbol" hoặc "inter_module_get", một trong số đó phải tồn tại trong bất kỳ hạt nhân nào hỗ trợ các mô-đun. Nếu hạt nhân không có phiên bản ký hiệu nhưng mô đun được xây dựng với các phiên bản ký hiệu thì người dùng phải cung cấp -P .

-q , --quiet

Không in danh sách bất kỳ ký hiệu chưa được giải quyết nào. Không phàn nàn về phiên bản không khớp. Vấn đề sẽ chỉ được phản ánh trong trạng thái thoát của insmod .

-r , - root

Một số người dùng biên dịch các mô-đun dưới một userid không phải root, sau đó cài đặt các mô-đun như là người chủ. Quá trình này có thể để lại các mô-đun thuộc sở hữu của userid không phải root, mặc dù thư mục modules được sở hữu bởi root. Nếu userid không root bị xâm nhập, kẻ xâm nhập có thể ghi đè lên các module hiện có thuộc sở hữu của userid đó và sử dụng phơi sáng này để bootstrap đến quyền truy cập root.

Theo mặc định, modutils sẽ từ chối các nỗ lực sử dụng một mô-đun không thuộc sở hữu của root. Chỉ định -r sẽ chuyển đổi kiểm tra và cho phép root tải các mô-đun không thuộc sở hữu của root. Lưu ý: giá trị mặc định cho kiểm tra root có thể được thay đổi khi modutils được cấu hình.

Sử dụng -r để vô hiệu hóa việc kiểm tra root hoặc thiết lập mặc định là "không kiểm tra root" tại thời điểm cấu hình là một tiếp xúc an toàn lớn và không được khuyến nghị.

-s , - syslog

Xuất tất cả mọi thứ vào syslog (3) thay vì thiết bị đầu cuối.

-S , --kallsyms

Buộc mô-đun được tải có dữ liệu kallsyms , ngay cả khi hạt nhân không hỗ trợ nó. Tùy chọn này là dành cho các hệ thống nhỏ nơi mà hạt nhân được nạp mà không có dữ liệu kallsyms nhưng các mô-đun được chọn cần kallsym để gỡ lỗi. Tùy chọn này là mặc định trên Red Hat Linux.

-v , --verbose

Hãy tiết tú.

-V , --version

Hiển thị phiên bản của insmod .

-X , --export ; -x , --noexport

Làm và không xuất khẩu tất cả các ký hiệu bên ngoài của mô-đun, tương ứng. Mặc định là cho các biểu tượng được xuất khẩu. Tùy chọn này chỉ có hiệu lực nếu mô-đun không xuất khẩu rõ ràng bảng biểu tượng được điều khiển của chính nó và do đó không còn được dùng nữa.

-Y , --ksymoops ; -y , --noksymoops

Làm và không thêm các ký tự ksymoops vào kymym. Các ký hiệu này được sử dụng bởi ksymoops để cung cấp gỡ lỗi tốt hơn nếu có một Oops trong mô-đun này. Mặc định là cho các ký hiệu ksymoops được xác định. Tùy chọn này độc lập với các tùy chọn -X / -x .

hiệu ksymoops thêm khoảng 260 byte cho mỗi mô-đun được nạp. Trừ khi bạn đang thực sự ngắn trên không gian hạt nhân và đang cố gắng để giảm ksyms đến kích thước tối thiểu của nó, hãy mặc định và nhận được Oops gỡ lỗi chính xác hơn. Biểu tượng ksymoops được yêu cầu để lưu dữ liệu mô-đun liên tục.

-N , - chỉ số

Chỉ kiểm tra phần số của phiên bản mô-đun đối với phiên bản hạt nhân, nghĩa là bỏ qua EXTRAVERSION khi quyết định xem một mô-đun có thuộc về hạt nhân hay không. Cờ này được tự động đặt cho kernel 2.5 trở đi, nó là tùy chọn cho các hạt nhân trước đó.

Tham số mô-đun

Một số mô-đun chấp nhận các tham số thời gian tải để tùy chỉnh hoạt động của chúng. Các tham số này thường là cổng I / O và số IRQ thay đổi từ máy này sang máy khác và không thể được xác định từ phần cứng.

Trong các mô-đun được tạo cho hạt nhân 2.0, bất kỳ ký tự số nguyên hoặc ký tự con trỏ nào cũng có thể được coi là tham số và được sửa đổi. Bắt đầu từ hạt nhân 2.1, ký hiệu được đánh dấu rõ ràng là tham số để chỉ có thể thay đổi giá trị cụ thể. Hơn nữa, loại thông tin được cung cấp để kiểm tra các giá trị được cung cấp tại thời gian tải.

Trong trường hợp các số nguyên, tất cả các giá trị có thể là số thập phân, bát phân hoặc thập lục phân a la C: 17, 021 hoặc 0x11. Các phần tử mảng được xác định trình tự được phân tách bằng dấu phẩy. Các yếu tố có thể được bỏ qua bằng cách bỏ qua giá trị.

Trong các mô-đun chuỗi 2.0, các giá trị không bắt đầu bằng một số được coi là chuỗi. Bắt đầu từ phiên bản 2.1, thông tin kiểu của thông số cho biết liệu có diễn giải giá trị dưới dạng chuỗi không. Nếu giá trị bắt đầu bằng dấu ngoặc kép ( " ), chuỗi được giải thích như trong C, chuỗi thoát và tất cả. Do lưu ý rằng từ dấu nhắc trình bao, các dấu ngoặc kép có thể cần phải được bảo vệ khỏi việc diễn giải trình bao.

Các mô-đun và biểu tượng được cấp phép GPL

Bắt đầu với hạt nhân 2.4.10, các mô-đun phải có chuỗi giấy phép, được định nghĩa bằng MODULE_LICENSE () . Một số chuỗi được công nhận là tương thích GPL; bất kỳ chuỗi giấy phép nào khác hoặc không có giấy phép nào có nghĩa là mô-đun được coi là độc quyền.

Nếu hạt nhân hỗ trợ cờ / proc / sys / kernel / tainted thì insmod sẽ HOẶC cờ bị nhiễm với '1' khi tải một mô-đun mà không có giấy phép GPL. Một cảnh báo được đưa ra nếu hạt nhân hỗ trợ tainting và một mô-đun được nạp mà không có giấy phép. Cảnh báo luôn được phát hành cho các mô-đun có MODULE_LICENSE () không tương thích với GPL, ngay cả trên các hạt nhân cũ không hỗ trợ việc tô màu. Điều này giảm thiểu cảnh báo khi một modutils mới được sử dụng trên hạt nhân cũ.

insmod -f (lực) chế độ sẽ HOẶC cờ bị nhiễm với '2' trên hạt nhân hỗ trợ tainting. Nó luôn luôn đưa ra cảnh báo.

Một số nhà phát triển hạt nhân yêu cầu các ký hiệu được xuất bởi mã của họ chỉ được sử dụng bởi các mô đun có giấy phép tương thích GPL. Các ký hiệu này được xuất bởi EXPORT_SYMBOL_GPL thay vì EXPORT_SYMBOL bình thường. Ký hiệu chỉ GPL được xuất bởi nhân và các mô-đun khác chỉ hiển thị với các mô-đun có giấy phép tương thích GPL, các ký hiệu này xuất hiện trong / proc / ksym với tiền tố là ' GPLONLY_ '. insmod bỏ qua tiền tố GPLONLY_ trên biểu tượng trong khi tải mô-đun được cấp phép GPL để mô-đun chỉ đề cập đến tên biểu tượng bình thường, không có tiền tố. Ký hiệu chỉ GPL không được cung cấp cho các mô-đun không có giấy phép tương thích GPL, điều này bao gồm các mô-đun không có giấy phép nào cả.

Hỗ trợ Ksymoops

Để hỗ trợ gỡ lỗi hạt nhân Rất tiếc khi sử dụng các mô-đun, mặc định các bản in mặc định thêm một số biểu tượng vào các từ ngữ, xem tùy chọn -Y . Các ký hiệu này bắt đầu bằng __insmod_modulename_ . Modulename là cần thiết để làm cho các biểu tượng độc đáo. Nó là hợp pháp để tải cùng một đối tượng nhiều hơn một lần dưới các tên module khác nhau. Hiện tại, các ký hiệu được xác định là:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile là tên của tệp mà đối tượng đã được tải từ đó. Điều này đảm bảo rằng ksymoops có thể khớp mã với đối tượng chính xác. mtime là dấu thời gian được sửa đổi lần cuối trên tệp đó trong hex, không nếu stat không thành công. phiên bảnphiên bản hạt nhân mà mô-đun được biên dịch cho, -1 nếu không có phiên bản nào. Biểu tượng _O có cùng địa chỉ xuất phát làm tiêu đề mô-đun.

__insmod_modulename_Ssectionname_Llength

Biểu tượng này xuất hiện ở đầu các phần ELF đã chọn, hiện tại .text, .rodata, .data, .bss và .sbss. Nó chỉ xuất hiện nếu phần có kích thước khác 0. sectionname là tên của phần ELF, chiều dài là độ dài của phần theo thập phân. Các ký hiệu này giúp ksymoops ánh xạ địa chỉ đến các phần khi không có biểu tượng nào.

__insmod_modulename_Ppersistent_filename

Chỉ được tạo bởi insmod nếu mô-đun có một hoặc nhiều tham số được đánh dấu là dữ liệu liên tục và tên tệp để lưu dữ liệu liên tục (xem -e , ở trên) khả dụng.

Các vấn đề khác với gỡ lỗi hạt nhân Rất tiếc trong mô-đun là nội dung của / proc / ksyms/ proc / modules có thể thay đổi giữa các Oops và khi bạn xử lý tệp nhật ký. Để giúp khắc phục vấn đề này, nếu thư mục / var / log / ksymoops tồn tại thì insmodrmmod sẽ tự động sao chép / proc / ksyms/ proc / modules vào / var / log / ksymoops với tiền tố `date +% Y% m % d% H% M% S`. Quản trị viên hệ thống có thể thông báo cho các ksymoops rằng các tệp ảnh chụp sẽ sử dụng khi gỡ lỗi một Oops. Không có nút chuyển để tắt bản sao tự động này. Nếu bạn không muốn nó xảy ra, không tạo / var / log / ksymoops . Nếu thư mục đó tồn tại, nó phải được sở hữu bởi root và là chế độ 644 hoặc 600 và bạn nên chạy kịch bản này mỗi ngày hoặc lâu hơn. Tập lệnh bên dưới được cài đặt dưới dạng insmod_ksymoops_clean .

Thông tin cơ bản cần biết

TÊN

insmod - cài đặt mô-đun hạt nhân tải được

TÓM TẮC

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P tiền tố ] mô-đun [ symbol = value ...]