Tôi đã viết một trình điều khiển cho một thiết bị trong Linux. Làm cách nào tôi có thể tạo (sử dụng gcc
) một .ko
tệp để tôi có thể chèn nó vào kernel?
Tôi đã viết một trình điều khiển cho một thiết bị trong Linux. Làm cách nào tôi có thể tạo (sử dụng gcc
) một .ko
tệp để tôi có thể chèn nó vào kernel?
Câu trả lời:
Tạo một Makefile
như thế này.
ifneq ($(KERNELRELEASE),)
obj-m := mymodule.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
install:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules_install
%:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) $@
endif
Giả sử nguồn của mô-đun của bạn mymodule.c
đang hoạt động, việc chạy make
sẽ tạo mymodule.ko
.
.ko
tạo ra có thể thay đổi từ phát hành kernel sang phát hành kernel và cách duy nhất để đảm bảo bạn làm việc với kernel là sử dụng Makefiles của kernel.
Câu trả lời ngắn gọn: bạn không thể. Tệp .ko không chỉ là phiên bản được biên dịch của nguồn trình điều khiển của bạn. Hệ thống xây dựng kernel bao gồm một số thông tin bổ sung chẳng hạn (phiên bản trình biên dịch, phụ thuộc mô-đun, ...).
Bạn có thể có thể đào qua hệ thống xây dựng kernel để tìm tất cả các hoạt động cần thiết, nhưng bạn không nên. Nó gần như chắc chắn sẽ phá vỡ với bản phát hành kernel tiếp theo, hoặc cái sau đó. Bạn nên sử dụng ephemient makefile được cung cấp.