Tujuan
Saya mencoba menulis driver perangkat sederhana di Ubuntu. Saya ingin melakukan ini menggunakan Eclipse (atau IDE yang lebih baik yang cocok untuk pemrograman driver). Ini kodenya:
#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 );
Usaha saya
Setelah beberapa penelitian, saya memutuskan untuk menggunakan Eclipse CTD untuk mengembangkan driver (sementara saya masih tidak yakin apakah itu mendukung alat debugging multi-threading). Jadi saya:
- Menginstal Ubuntu 11.04 desktop x86 pada mesin virtual VMWare,
- Diinstal
eclipse-cdt
dan linux-header-2.6.38-8 menggunakan Synaptic Package Manager, - Membuat kode di atas yang
C Project
dinamaiTestDriver1
dan disalin untuk itu, - Mengubah perintah build default
make
,, ke perintah build kustom berikut:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
Masalah
Saya mendapatkan kesalahan saat mencoba membangun proyek ini menggunakan gerhana. Berikut ini adalah log untuk build:
**** Membangun konfigurasi Debug untuk proyek TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 semua
make: Memasuki direktori '/usr/src/linux-headers-2.6.38-8-generic'
make: *** Tidak ada aturan untuk menjadikan target
vmlinux', needed by
semua '. Berhenti.make: Meninggalkan direktori '/usr/src/linux-headers-2.6.38-8-generic'
Menariknya, saya tidak mendapatkan kesalahan ketika saya menggunakan shell
alih-alih eclipse
membangun proyek ini. Untuk menggunakan shell
, saya hanya membuat yang Makefile
mengandung obj-m += TestDriver1.o
dan menggunakan make
perintah di atas untuk membangun.
Jadi, pasti ada yang salah dengan gerhana Makefile
. Mungkin sedang mencari vmlinux
arsitektur (?) Atau sesuatu sementara arsitektur saat ini adalah x86. Mungkin karena VMWare?
Seperti yang saya pahami, eclipse
membuat makefile secara otomatis dan memodifikasinya secara manual akan menyebabkan kesalahan di masa depan ATAU membuat pengelolaan menjadi makefile
sulit.
Jadi, bagaimana saya bisa mengkompilasi proyek ini di eclipse?
sumber
autotools
segera memeriksa plugin. Apakah Anda tahu IDE yang lebih baik untuk pemrograman driver? Apakah Anda pikir saya (pengguna VS malas yang tidak memiliki pengalaman di linux) dapat mengelolamakefile
? Apakahmakefile
benar-benar dapat dikelola dalam proyek-proyek besar?Saya juga baru dalam pemrograman driver Linux, saya menemukan bahwa ada cara baru untuk menggunakan modul kernel (yang tidak ada dalam pohon Linux resmi) yang disebut DKMS. Modul akan diinstal sebagai sumber dan DKMS akan mengaturnya untuk setiap kernel. Ini berarti modul Makefile untuk akan ditulis secara manual dan sumbernya tidak akan disertakan untuk autotool.
http://linux.dell.com/dkms/
diperbarui ...
DKMS pindah ke http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx
Tutorial / pengantar cepat ini ke DKMS (tautan dari halaman proyek Dell): artikel Linux Journal , makalah Power Solutions , makalah Simposium Linux Ottawa
DKMS digunakan untuk pemasangan driver cepat. Misalnya modul kernel menggunakan DKMS di mesin Ubuntu saya:
Ini adalah kode yang saya tulis sebelumnya, Bisa bermanfaat sebagai DKMS Hello World. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
sumber
1> Anda dapat mencoba dengan perintah ini
"make" -> "/ usr / bin / make"
2> di direktori simpan kode halo Anda, buat nama file "Makefile"
sumber