Làm thế nào để tôi xây dựng một mô-đun hạt nhân trong cây?


37

Nguồn linux -... có một mô-đun bị vô hiệu hóa trong cấu hình /boot/config-3.4-trunk-686-pae để nó không phải là một phần của linux-image -... (Đây là trên Debian, nhưng giải pháp nên giống với Ubuntu, hoặc?), vd

# CONFIG_CAN_PEAK_USB is not set

Làm thế nào một biên dịch chỉ mô-đun hạt nhân đó, để nó có thể được sử dụng với hạt nhân phân tán?

Gói linux-source -... tương ứng đã được cài đặt, không nén và được liên kết với / usr / src / linux. /boot/config-3.4-trunk-686-pae được sao chép vào /usr/src/linux/.config và được sửa đổi bằng

CONFIG_CAN_PEAK_USB=m

Với

make
make modules

có thể biên dịch kernel và tất cả các mô-đun. Nhưng làm thế nào người ta chỉ biên dịch mô-đun đơn cụ thể đó?

(Lưu ý: cũng là kernel cần được biên dịch trước, nếu không bạn sẽ gặp lỗi sau no symbol version for module_layout:)


vui lòng đóng dưới dạng trùng lặp 14627. câu trả lời của người dùng 'Radu C' trả lời câu hỏi.
mab

Bạn đã thử depmod -atrước đây modbrobe?
Nadia

1
cũng xem xét bài viết sau: stackoverflow.com/questions/8744087/ từ
Oleg Kokorin

Câu trả lời:


38

Tôi đã từng gặp vấn đề tương tự. Tôi giả sử rằng bạn không chỉ cần sao chép .config mà còn cả Module.symvers

các bước của tôi để biên dịch mô-đun ft1000 (chạy Debian Wheeze 7.1.0; kernel 3.2.0-4-686-pae):

aptitude install linux-headers-3.2.0-4-686-pae
aptitude install linux-source-3.2
cd /usr/src/
tar xjf linux-source-3.2.tar.bz2
cd /usr/src/linux-source-3.2
cp ../linux-headers-3.2.0-4-686-pae/Module.symvers .
make oldconfig # it copies .config to ./
vi .config # enable ft1000 module: CONFIG_FT1000=m
make prepare # setup FT1000 as module
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
cp drivers/staging/ft1000/ft1000-usb/ft1000.ko /lib/modules/3.2.0-4-686-pae/kernel
/drivers/staging/
depmod
modprobe ft1000

4
Tôi không chắc chắn nếu SUBDIRS vẫn đúng. Nó đã bị bỏ qua cho tôi. Sau khi đọc kernel.org/doc/Documentation/kbuild/modules.txt tôi đã thử sử dụng make M=/path/to/moduledường như hoạt động.
hại

Tôi đang cố gắng sửa đổi một mô-đun khác (chỉ thêm một ID USB vào mô-đun tồn tại) khi tôi biên dịch nó, tôi không gặp lỗi nhưng khi tôi chèn nó, tôi nhận được định dạng mô-đun không hợp lệ tại sao?!
Zibri

14

Từ trong thư mục nguồn cấp cao nhất, chỉ cần đưa ra đường dẫn đến tên mô-đun hoặc thư mục mô-đun, ví dụ:

make drivers/net/can/usb/peak_usb/

hoặc cho một ví dụ đơn giản hơn (trình điều khiển Ethernet Intel e1000):

make drivers/net/ethernet/intel/e1000/e1000.ko

Chỉ cần làm: make drivers/net/can/usb/peak_usb/pcan_usb.kođã chỉ xây dựng pcan_usb.o. Làm make drivers/net/can/usb/peak_usb/ && make drivers/net/can/usb/peak_usb/pcan_usb.kobiên dịch nó, nhưng insmod phàn nàn Error: could not insert module drivers/net/can/usb/peak_usb/peak_usb.ko: Invalid module format. dmesg:peak_usb: no symbol version for module_layout
mab

Bạn có đang chạy kernel cụ thể đó không, và bạn đã biên dịch kernel một lần chưa? Hãy thử với modprobecũng.
ish

Tôi đang chạy kernel đóng gói. Biên dịch các kernel hoàn thành công việc. nhưng tôi đang cố gắng không biên dịch kernel hoàn chỉnh, chỉ là mô-đun kernel cụ thể. Có một mục tiêu nào đó là 'chuẩn bị' một phần tổng hợp mô-đun không? modprobe cho thấy lỗi tương tự.
mab

6
Theo stackoverflow bạn chỉ có thể sử dụng make modules SUBDIRS=drivers/net/can/usb/peak_usbhoặc bất kỳ thư mục con nào khác. Nó hoạt động tốt ở đây.
Treviño

0

Đơn giản như: (ví dụ này minh họa trình điều khiển ft1000, việc này sẽ chỉ mất vài phút nếu không phải là nội dung)

cd /usr/src/kernel-sources
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
# Enable the ft1000 module: CONFIG_FT1000=m  on the config with 
make xconfig # or "make menuconfig" then save
make prepare
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules_install

Sau đó bạn có thể tải các mô-đun với modprobesaudepmod

Lưu ý: tùy thuộc vào phụ thuộc mô-đun, bạn có thể cần phải xây dựng lại toàn bộ kernel

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.