2016-04-01 92 views
0

Sistem çağrıları ekleme hakkında bir sürü soru gördüm, ancak çalışan bir LKM kullanarak herhangi bir örnek bulamıyorum. Bu gibi kaynakları buldum: http://tldp.org/LDP/lkmpg/2.6/html/ Bu teoride çalışır, ancak derleme yapmaz. Herkes bana merhaba dünya sistem çağrısı veya bir şey eklemek için basit bir örneğe işaret edebilir. Böyle bir şey: https://tssurya.wordpress.com/2014/08/19/adding-a-hello-world-system-call-to-linux-kernel-3-16-0/ Benim çekirdeğimi yeniden derlememi gerektirmiyor mu?Çekirdek modülüyle sistem çağrısı ekleme (LKM)

cevap

1

Genel olarak, 'un tamamen yeni bir sistem çağrısı gerçekleştirmesi önerilmez.

Bunun yerine, yalnızca yeni bir ioctl ve muhtemelen yeni bazı blok veya karakter aygıtları uygulayın. o nasıl yapılacağı için

, daha önce başka bir soru/cevap var gibi görünüyor: Ne yapabilirim sanmıyorum How do I use ioctl() to manipulate my kernel module?

+0

Bu şeylerin nasıl kullanılacağına dair sezginiz olduğunu düşünmüyorum? Bir örnek buldum: http://www.tldp.org/LDP/lkmpg/2.6/html/x892.html ama ioctl'leri kullanmak için nasıl gideceğinizden emin değilim. Böylece aygıt sürücüsünü kontrol edebilir ve daha sonra onu okuyarak okuyabilirsiniz. Ioctl ile ne yaparsın? – BashOverride

+0

Sanırım sorumu yeniden tanımlamalıyım. Şu anda çalışan bir işlem hakkında veri döndürecek bir sistem çağrısı eklemek istiyorum. Bu yüzden bir pid'i geçecektim ve bu ebeveyn pidine, başlama saatine vb. Gibi şeyler dönecekti. Ioctl sadece bu bilgiyi bulabilen bir okumayı arar mı? Ya da ne? Bu kurulumun nasıl çalışacağını anlamakta zorlanıyorum. – BashOverride

0

bir modül ile o. Syscall tanımları, çalışma zamanında gerçekten değiştirilemeyen iki yere gider (bildiğim kadarıyla): syscall tablosu (her mimaride numara tayin eder) ve syscalls dosya içerir (çekirdeğin kendisi değil, modüllerle birlikte). (Veya en azından çalışma zamanında yeniden kod yazılmadan olmaz.)

Bu durumda çekirdeği her zaman yeniden derlemeniz gerekir. Ancak, hızlı bir güncelleme/deneme döngüsüne sahip olmak istiyorsanız, yüklendiyse, bir iletiyi doğru modüle ileten bir dizini uygulayabilirsiniz. Uygulamayı değiştirmenize izin veriyor, imzayı değil.