Örnek Linux çekirdeğim modülünün birinde, tüm işlevlerin dışında Device_Open
statik olarak bildirilmiş bir değişkenim var ve numaralı bir işlev içinde bildirilen bir statik değişken counter
var. device_open
içinde, hem Device_Open
hem de counter
değerini artırıyorum. Modül, herhangi bir hata olmadan çekirdeğe eklenir ve modülüm/dev/chardev için bir cihaz dosyası oluşturdum.Statik global değişken ve sürücü işlevinde statik yerel değişken
cat /dev/chardev
yapıyorum. Görebildiğim, 'un her bir cat /dev/chardev
çağrısı için artırılmasıdır, ancak Device_Open
her zaman 0'dır. Değişkenlerin değerini artırma ile ilgili davranış farklılıklarının nedeni nedir?
Aşağıda ben "Device_Open" araması ve karşılık gelen cihaz salınımını bulundu anlayış
static int Device_Open = 0;
static int device_open(struct inode *inode, struct file *file)
{
static int counter = 0;
printk(KERN_INFO "Device_Open = %d", Device_Open);
printk(KERN_INFO "counter = %d", counter);
if (Device_Open)
return -EBUSY;
Device_Open++;
counter++;
try_module_get(THIS_MODULE);
return SUCCESS;
}
Aygıtı kapatırken Device_Open öğesini azaltmadığınızdan emin misiniz (device_close() öğesini çağırırken)? – Antti
@Thanks Antti ... Eksik bağlantı var. –
Lütfen soru sormadan önce kendi kodunuzu okuyarak daha fazla zaman geçirin. Posterin zihnini okumak için – moorray