2013-09-06 20 views
6

msr kayıtlarını okuyabilen basit bir uygulama yazmaya çalışıyorum ve bu uygulamayı kullanıcı alanından çalıştırıyorum.Kullanıcılardan okuma/dev/cpu/*/msr: harekata izin verilmiyor

msr modülünü yükledim ve/dev/cpu/*/msr için herkes için okuma izni verdim. Ancak yine de kullanıcı bu dosyalara erişemiyor ancak kök olabilir.

izinleri şu şekilde görünür:

crw-r--r-- 1 root root 202, 0 sep 6 17:55 /dev/cpu/0/msr 

crw-r--r-- 1 root root 202, 1 sep 6 17:55 /dev/cpu/1/msr 

crw-r--r-- 1 root root 202, 2 sep 6 17:55 /dev/cpu/2/msr 

crw-r--r-- 1 root root 202, 3 sep 6 17:55 /dev/cpu/3/msr 

ben userspace bu dosyaları okumak için çalışıyorum ama kök bunları erişmeye çalıştığında çalışıyor zaman "İşleme izin verilmedi" hata iletisi alıyorum. Neyi yanlış yapıyorum? Çekirdek sürümü 3.11.0 ile Ubuntu 13.04 üzerinde kulüpler.

+0

Programınızı sudo ile çalıştırdınız mı? – OneOfOne

cevap

6

Yaklaşık 3,7'den bu yana Linux çekirdeğindeki değişiklikler artık CAP_SYS_RAWIO'nun MSR aygıt dosyasını açmak için bir çalıştırılabilir olmasını gerektiriyor [2]. MSR çekirdek modülü yükleme ve msr cihaz dosyasını uygun dosya izinlerini ayarlama yanı sıra, bir aşağıda komutunu kullanarak, MSR sürücüsü erişmesi gerektiği herhangi bir kullanıcı yürütülebilir CAP_SYS_RAWIO yeteneği vermelisiniz: Artık

sudo setcap cap_sys_rawio=ep <user_executable> 
+0

Teşekkürler, CAP_SYS_RAWIO yeteneğini önerdiğiniz gibi çalıştırmaya çalıştım ve hala aynı sorunla karşı karşıya kaldım! – futureishere

+0

Çok teşekkür ederim. Bu benim için çalıştı. – Rakib

0

vfs_read:

ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) 
{ 
    ret = rw_verify_area(READ, file, pos, count); 
    if (ret >= 0) { 
     ... 
     if (file->f_op->read) // your driver read . 
      ret = file->f_op->read(file, buf, count, pos); 
     else 
      ret = do_sync_read(file, buf, count, pos); 
     .... 

    } 
    // here, if the ret is 13. your error will be occur. 
    return ret; 
}