2014-11-07 47 views
15

/proc altında bir dizin oluşturmak için create_proc_entry() işlevini kullanmaya çalışıyorum. Kodu derlemeye çalıştığımda, aşağıdaki hatayı alıyorum: 'create_proc_entry' işlevinin örtük beyanı.'create_proc_entry' işlevi örtük bildirimi

#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/proc_fs.h> 
#include <linux/string.h> 
#include <linux/vmalloc.h> 
#include <linux/uaccess.h> 

Ben derlemek çalışıyorum makinede çekirdek sürümü olan:

Bunlar benim .c dosyasında dahil ettik başlık olduğu 3.10.33-g7954807-kirli

Bu yöntemi çağırmak için gereken herhangi bir başlık eksik mi? Yoksa çekirdeğimin sürümünde kullanım dışı bırakılan yöntem mi?

cevap

20

/proc dosya sistemi 3.10'da geri yüklenmiştir, aradığınız işlev kaldırılmıştır, tam özellikli proc_create işlev ailesini kullanmalısınız. İmzaların farklı olduğunu unutmayın.

3.10 sürümü: http://lxr.free-electrons.com/source/include/linux/proc_fs.h?v=3.10

3,9 sürümü: Kitabın Linux Aygıt Sürücüleri 4'te tam özellikli/proc işlevleri kullanarak daha fazla açıklama bulabilirsiniz

veya daha kısa çözüm istiyorsanız, struct file_operations'un nasıl kullanıldığını görebileceğiniz bu bağlantıyı (https://github.com/jesstess/ldd4/blob/master/scull/main.c) kontrol edin. Yapının tüm alanlarına kurulum yapmak zorunda değilsiniz.

+0

Proc_create'i kullanabilmek için bir struct file_operations dosyasının oluşturulması gerektiğini görüyorum. .write üyesi için bir geri arama yaratmanın isimlendirmesi nedir? – theNoobProgrammer

+0

@ TheNoobProgrammer Cevabı düzenledim, umarım yardımcı olur. –

+0

Bu bağlantıdaki yöntem amacım gereğinden fazla gibi görünüyor. Bunu yapmaya çalışıyorum: http://www.ibm.com/developerworks/linux/library/l-proc/index.html. Bunu ev sahibimden yönetebildim. Bir kez monte edilen oluşturulmuş dizin (/ proc/fortune) yazılabilir ve okunabilir. Ancak geliştirdiğim aygıtta create_proc_entry() bulunmuyor ama proc_create() var. File_operation structs ile çalışmak için linkten okuma/yazma geri aramalarını değiştirmeye çalışıyorum. Sıralı dosya okumaları ile dolu gitmem gerektiğini düşünmüyorum. – theNoobProgrammer