2016-04-13 40 views
2

'a geçtikten sonra nasıl çalışır? QEMU üzerinde OP-TEE'yi başarıyla çalıştırıyorum ve programlayıcının nasıl çalıştığını anlamak istiyorum. Güvenli Dünya'ya girmeden ve Normal Dünya'ya dönmeden önce jiffies değişkenini almak için kaynak kodunu değiştirdim. İşte bir kod parçası.OP-TEE'nin Linux zamanlayıcısı, Secure world

i=jiffies; 
tee_smc_call(&param); 
j=jiffies 

İşte tee_smc_callSMC çağrıyı veren asm fonksiyonudur. Zamanlayıcı kesmesi, SW'den çıkmayla sonuçlanırsa, j l i'dan daha büyük olacaktır. Bence zamanlayıcı kesmesi bir yere taşınmış demektir. Eğer kesinti doğru değilse lütfen beni düzeltin.

https://lists.linaro.org/pipermail/tee-dev/2015-August/000160.html ve https://github.com/OP-TEE/optee_os/issues/332 numaralı bağlantılara gidiyorum. OP-TEE geliştiricisi, zamanlayıcı kesintisinin NW'ye geri döndüğü anda NW tarafından servis edileceğini söylüyor.
SW'nin IRQ işleyicisinin kaynak kodunu okudum. SW işleyicisinin NW'nin VBAR'ını bulacağını ve dönüş adresini NW işleyicisine değiştireceğini düşündüm. Ancak böyle bir kod bulunamadı.
Bu sitede bazı yayınları okudum TrustZone: Scheduling processes from the two worlds ve ARM TrustZone - Behaviour of the scheduler in Secure and Non-Secure OS. İkincisi benimkine benzer, fakat cevap OP-TEE uygulamasında ne olduğunu söylemez.

Bu yüzden, SW'de bir kez hizmet verildiğinden, zamanlayıcı kesintisinin NW'ye döndükten sonra tekrar işlenmesini sağlayan sihrin ne olduğunu merak ediyorum.

OP-TEE'ye aşina değilim. Ve bu benim ilk sorum. Açık veya aptal değilse lütfen beni affet. Teşekkürler.

+1

Sorunuz için bir çözüm buldunuz, eğer paylaşabilseydiniz? – shunty

cevap

0

Kimse soruyu bir yıl boyunca cevaplamadığı için kendi açıklamamı vermeye çalışacağım.

Sadece kendi anlayışım olduğunu unutmayın. Ben böyle bir konuda uzman değilim.

  1. Zamanlayıcı kesmesi oluşturulur ve GIC durumu etkin olmayandan beklemede olarak değiştirir.
  2. GIC, kesme isteğini işlemciye Güvenli durumda iletir. Bu SecureOS için yabancı bir IRQ.
  3. SecureOS'taki IRQ işleyicisi, Forward IRQ from secure world to normal world olarak çalışır. Thread_irq_handler'ın kaynak koduna bakıyorum ve Interrupt Acknowledge Register için okuyamıyorum.
  4. İşlemci Normal Dünya'ya geri döner. Zamanlayıcı kesintisinin durumu hala Interrupt handling state machine in GIC architecture specification'a göre beklemede.
  5. GIC, kesilme isteğini uygun zamanda CPU'ya bildirir.
  6. Kesme, Normal Dünyada hizmet verilir. Akıl yürütme zincirim şunun gibidir:

Interrupt Acknowledge Register, Güvenli İşletim Sisteminin IRQ işleyicisinde okunmaz.

-> Kesme durumu hala beklemede.

-> GIC, kesme isteğini CPU'ya bildirir.