Not: Bugünkü gibi bir sorunum varsa, bu sorunu listeliyorum. (), uygulamanın değiştirilmesini (örneğin, sınıfın oluşturulmasını ortak bir alana taşıma) tersine çevirir. Sadece nasıl yapılacağından emin değilim. : Son NotLinux'ta, device_create'i mevcut bir sınıfta nasıl kullanıyorsunuz?
İki linux çekirdek modülüm var ve bunlar için/sys girdilerini güncellemeye çalışıyorum. google ve diğer kaynaklardan etrafında arama, ben çizgisinde çok fazla kod gördüm:
static dev_t MyDev;
static struct class *c1;
static int __init start_func(void)
{
...
MyDev = MKDEV(nMajor, MINOR_VERSION);
register_chrdev_region(MyDev, 1, MODULE_NAME);
c1 = class_create(THIS_MODULE, "chardrv");
device_create(c1, NULL, MyDev, NULL, MODULE_NAME);
....
Ve bu kod çalışır benim ilk modülü için doğrulanmış ettik ve doğru bir oluşturur:
/sys/class/chardrv/<MODULE_NAME>
girişi. Bilmek istediğim, mevcut bir sınıfta nasıl bir cihaz oluşturuyorsunuzdur. Başka bir deyişle, modüllerimden biri bu yeni chardrv sınıfını yarattı, şimdi diğer modülümün aynı sınıftaki cihazlarını da kaydetmesini istiyorum.
o "chardrv" sınıfı zaten var çünkü
yüzden görmek için bir kontrolü çalıştırabilirsiniz ..., (ikinci modülde) tekrar class_create() çağrı yapamazsınız eğer/sys/class/chardrv var ve bu, class_create() 'ı çağırmam gerekip gerekmediğine karar vermeme yardımcı olabilir, bu sorun değil. Benim sınıf zaten var ve sadece ikinci modülde itibaren buna içine benim yeni cihaz eklemek istiyorsanız
if (path "/sys/class/chardrv" does not exist)
new_class = class_create("chardrv")
else
new_class = some how get class "chardrv" handle, or properties, or whatever
device_create(new_class, ...)
Yani bu örnekte göre, İhtiyacım varsayalım: netleştirmek için buraya biraz sözde kodu koymak sağlar Bir sınıf yapısı oluşturmak ve bir şekilde doğru "chardrv sınıfı" öznitelikleriyle doldurmak ve sonra device_create'i önceki gibi çağırmak, ancak bunu nasıl yapacağımı bilmiyorum.
Burada yapmaya çalıştığım zaman açık olduğun konusunda emin değilim ... en azından bu hata sorumu akla getirmiyor. Örneğin bir "chardrv" sınıfı oluşturmak istiyorum, daha sonra bir çekirdek modülüne bir cihaz kaydettirmek istiyorum. "Device1" deyin. Daha sonra ikinci bir çekirdek modülü aynı cihaza "device2" içine ikinci bir cihaz kaydedecektir. Yani şimdi/sys/class/chardrv üzerinde bir liste komutu çalıştırarak her iki cihazı da gösterecektir. Linux'ta bunu yapmanın bir yolu olmadığını mı söylüyorsunuz? Bana doğru görünmüyor ... – Mike