Mục tiêu
Tôi đang cố gắng viết một trình điều khiển thiết bị đơn giản trên Ubuntu. Tôi muốn làm điều này bằng cách sử dụng Eclipse (hoặc một IDE tốt hơn phù hợp với lập trình trình điều khiển). Đây là mã:
#include <linux/module.h>
static int __init hello_world( void )
{
printk( "hello world!\n" );
return 0;
}
static void __exit goodbye_world( void )
{
printk( "goodbye world!\n" );
}
module_init( hello_world );
module_exit( goodbye_world );
Nỗ lực của tôi
Sau một số nghiên cứu, tôi quyết định sử dụng CTD Eclipse để phát triển trình điều khiển (trong khi tôi vẫn không chắc liệu nó có hỗ trợ các công cụ gỡ lỗi đa luồng không). Vì vậy, tôi:
- Đã cài đặt Ubuntu 11.04 máy tính để bàn x86 trên máy ảo VMWare,
- Đã cài đặt
eclipse-cdt
và linux-headers-2.6,38-8 bằng Trình quản lý gói Synaptic, - Tạo một mã
C Project
được đặt tênTestDriver1
và sao chép ở trên vào nó, - Đã thay đổi lệnh xây dựng mặc định
make
, thành lệnh xây dựng tùy chỉnh sau:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
Vấn đề
Tôi gặp lỗi khi tôi cố gắng xây dựng dự án này bằng nhật thực. Đây là nhật ký cho bản dựng:
**** Xây dựng cấu hình Gỡ lỗi cho dự án TestDriver1 ****
làm cho -C /lib/modules/2.6,38-8-generic / build M = / home / isaac / workspace / TestDriver1 tất cả
thực hiện: Nhập thư mục '/usr/src/linux-headers-2.6,38-8-generic'
thực hiện: *** Không có quy tắc để thực hiện mục tiêu
vmlinux', needed by
tất cả '. Dừng lại.thực hiện: Rời khỏi thư mục '/usr/src/linux-headers-2.6,38-8-generic'
Thật thú vị, tôi không gặp lỗi khi tôi sử dụng shell
thay vì eclipse
xây dựng dự án này. Để sử dụng shell
, tôi chỉ cần tạo một Makefile
chứa obj-m += TestDriver1.o
và sử dụng make
lệnh trên để xây dựng.
Vì vậy, một cái gì đó phải sai với nhật thực Makefile
. Có thể nó đang tìm kiếm vmlinux
kiến trúc (?) Hoặc một cái gì đó trong khi kiến trúc hiện tại là x86. Có lẽ đó là vì VMWare?
Theo tôi hiểu, việc eclipse
tạo các tệp tạo tệp tự động và sửa đổi thủ công sẽ gây ra lỗi trong tương lai HOẶC gây makefile
khó khăn cho việc quản lý .
Vì vậy, làm thế nào tôi có thể biên dịch dự án này trên nhật thực?
autotools
plugin sớm. Bạn có biết IDE nào tốt hơn để lập trình trình điều khiển không? Bạn có nghĩ rằng tôi (một người dùng VS lười biếng không có kinh nghiệm về linux) có thể quản lýmakefile
không? Làmakefile
thực sự quản lý trong các dự án lớn?