2016-03-26 18 views
0

Linux için bir çekirdek modülü yazarken, module_param ve değişkenleri bir dizeyi bir modül parametresi olarak alabilir ve bu dize için gerekli olan bellek alanı, herhangi bir şey yapmak zorunda kalmadan sahnelerin arkasına ayrılır. Sorum şu, bu bellek parçasını nasıl ele almalısın? Artık ihtiyacın yoksa, onu açıkça serbest bırakmak zorunda mısın? Dizeyi modülün içinden değiştirmek isterseniz ne yapmalısınız? dize (charp tipi) argümanı için module_param tarafından tahsisBir Linux çekirdek modülü yazarken, module_param tarafından elde edilen bellek nasıl kullanılır?

cevap

0

Bellek kernel/params.c tanımlanan param_set_charp, param_get_charp ve param_free_charp fonksiyonları, bu parametrenin türü için geri aramaları tarafından korunur.

  1. böyle param ile çalışır en kolay yolu olarak ilan etmektir Sadece okuyun ve sadece için modülden erişirken okuyun. Bu durumda, erişimin kilitlenmesi veya serbest bırakılması parametresinin değerini zahmet etmemeye gerek yoktur. Eğer sadece parametreyi oku için modülünden yazma istiyorsanız

  2. şunlar gereklidir: param_free_charp yoluyla parametrenin

    1) Ücretsiz eski değerini.

    2) Parametre için yeni değer atayın. Eğer bu değer tahsis edilirse, module_exit numaranızda veya bir sonraki parametrede yazarak elle ayırmanız gerekir.

    Her iki eylem de tek kritik bölüm kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE) içinde gerçekleştirilmelidir, bu nedenle, kullanıcı alanından gelen parametre değerlerinin okunması, değeri tam olarak başlatılmış olarak bulunacaktır. Sonra modülü içinde okuma sen yazılabilir olarak parametreyi bildirirseniz

  3. , kritik bölüm kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE) gerektirir.

  4. parametre yazılabilir için yeni değer başka bir yerdekayıtlı tutulduğu izin verilir Yazma, bu yüzden parametre kullanıcı uzaydan yeniden yazılır eğer, önceki değer bulunabilir ve gerekirse kurtardı. Modül içinde bu tür bir parametrenin yazılması ve okunması, duruma göre 2 ve 3 vakalar gibi aynı istekleri takip etmelidir.

İlgili konular