16 Aralık 2013 Pazartesi

Ubuntu'da Grafik Kartı Bilgilerini Terminalde Gösteren Proc Uygulaması

      Bu yazımda Ubuntu işletim sisteminde grafik kartı bilgilerini terminalde gösteren bir proc uygulamasının nasıl yazıldığını aşama aşama anlatacağım.

Fazla uzatmadan başlayayım:


1)      Gerekli güncelleştirmeleri ve paketleri kurduktan sonra ilk olarak proc uygulamamız için terminalden C kod dosyasının (prc.c) ve Makefile dosyasının bulunacağı, Ev dizininde sistem adlı bir klasör oluşturduk.



2)      Daha sonra sistem dizimizde C kod dosyası ve Makefile dosyalarımızı yazıp koyuyoruz.

Bu işlemden sonra proc uygulamamızı oluşturmak için dosyaları derlemek gerekiyor.

Bunuda terminalden o dizinde olduğumuzdan emin olarak  #makekomutu ile yapıyoruz. Aşağıdaki ekran çıktısında da görüldüğü üzere dosyalarımız başarılı bir şekilde derlendi. Bu aşamada başarılı bir derleme sonucunda dosyalarımızın bulunduğu dizinde İşletim Sisteminin yeni dosyalar oluşturduğunuda görebiliriz.




3)      Bu derlemeden sonra #sudo insmod komutu ile root moda geçiyor ve proc uygulamasını yüklüyoruz. Burada init_module çalışarak proc umuzu oluşturur.



 

4)      C kodundan görülebileceği gibi ‘procekrankarti’ isminde proc dizini içinde proc uygulamamız oluştu. Aynı zamanda #ls komutu ile oluşup oluşmadığını da görebiliriz.

5)      Tüm proc dizinini görüntülüyerek de oluşan ‘procekrankarti’ isimli uygulamamızı görebiliriz.

6)      Bu noktadan sonra yapmamız gereken proc uygulamamızı #cat komutuyla çalıştırarak okumamızdır ve bu uygulamayı #cat komutu ile çalıştırdığımızda terminale bilgisayarımız ekran kartı bilgilerini doğru olarak yazmaktadır.

7)      ‘procekranti’ adlı proc umuzun doğru bir şekilde çalıştığını gördük.

En son olarak #rmmod komutu ile ‘procekrankarti’ uygulamamızı siliyoruz.

Bu komut ile cleanup_module çalışarak proc u siler.



8)      Proc uygulamamızı sildikten sonra da proc dizininde #ls komutu ile tüm procları listelediğimizde ‘procekranti’ isimli proc umuzun olmadığı görülecektir.





-          prc.c  Dosyası Kodları:

     
#include
#include
#include                                                                
#include                                     Kütüphaneleri include ettik
#include


#define  max_ length       4096     

int read_info( char *page, char **start, off_t off,int count, int *eof, void *data );

ssize_t write_info( struct file *filp, const char __user *buff,unsigned long len, void *data );

-          Sabit bir uzunluk ve okuma yazma fonksiyonlarının protatype’ini tanımladık.

static struct proc_dir_entry *proc_entry;
static char *info;
static int write_index;
static int read_index;

-          Yine gerekli değişkenleri ,pointer ve yapıları tanımladık.

int init_module( void )
{
    int ret = 0;
    info = (char *)vmalloc(max_ length);
    memset( info, 0, max_ length);
    proc_entry = create_proc_entry( "procekrankarti”, 0644, NULL );

-          Make komutu init_module fonksiyonunu çalıştıracak.Burada procekrankarti ismini,0644 dosya açılma biçimini,null ise oluşturduğumuz dosyanın  root olduğunu göstermektedir.Böylece Init_module fonksiyonu içinde, ‘create_proc_entry’ fonksiyonuyla ‘procekrankarti’ isimli yeni bir proc yaratmış olduk. 

    if (proc_entry == NULL)
    {
        ret = -1;
        vfree(info);
        printk(KERN_INFO "procekrankarti olusturulamadi\n");
    }
    else    {
        write_index = 0;
        read_index = 0;
        proc_entry->read_proc = read_info;
        proc_entry->write_proc = write_info;
        printk(KERN_INFO "procekrankarti olusturuldu.\n");
    }
    return ret;
}

-          Procekrankarti oluşması ve oluşturulamaması durumlarında gerekli olan bilgilendirmenin yapılmasını sağladık.

-          remove için yazılan rmmod komutu ile derlenmesi sağlanan fonksiyon :

void cleanup_module( void )   
{
    remove_proc_entry("procekrankarti", proc_entry);
    printk(KERN_INFO "procekrankarti kaldirildi.\n");
    vfree(info);
}
-          Full proc uygulamasında olması gereken  open,close kısımlarını tamamladık,şimdide gerekli olan read ve write fonksiyonlarını yine pointerlar yardımıyla yazıyoruz.

-          ‘read_info’ ve ‘write_info’ fonksiyonları, proc dosyasının okunması ve yazılması sırasında kullanılır.

-          write_info’ fonksiyonun içinde, eğer buffer içine yazabilecek alan varsa, ‘copy_from_user’ fonksiyonu  kullanıcı alanında bulunan String’i,kernel modülünün ayrılmış bellek bufferına kopyalamak için kullanılır.

ssize_t write_info( struct file *filp, const char __user *buff, unsigned long len, void *data )

{
    int capacity = (max_ length-write_index)+1;
 
    if (len > capacity)
    {
        printk(KERN_INFO "procekrankarti icinde space kullanmayin!\n");
        return -1;
    }
    if (copy_from_user( &info[write_index], buff, len ))
    {
        return -2;
    }
    write_index += len;
    info[write_index-1] = 0;
    return len;
}
-           ‘read_info’ fonksiyonu, bufferda mevcut bulunan bilgiyi kullanıcı alanına geri gönderir.

int read_info( char *page, char **start, off_t off, int count, int *eof, void *data )

{
    int len;
    if (off > 0)
    {
       *eof = 1;
        return 0;
    }
    if (read_index >= write_index)
    read_index = 0;
    len = sprintf(page, "%s\n", &info[read_index]);
    read_index += len;
    return len;
}
  extern const struct seq_operations procekrankarti_ac;
   static int procekrankarti_open(struct inode *inode, struct file *file)
   {
           return seq_open(file, &cpuinfo_ac);
 

 static const struct file_operations proc_procekrankarti_operations = {
          .open           = procekrankarti_open,
          .read           = seq_read,
          .llseek         = seq_lseek,
          .release        = seq_release,
  };
   module_init(proc_procekrankarti_init);
-          Bu fonksiyon ise yarattığımız procekrankarti dosyasını okumamızı ve böylece ekran kartı bilgilerini cat ile konsola yazdırmamızı sağlar.
 
-          Makefile Dosyası Kodları:

obj-m += prc.o
all:
        sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
        sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

-          Make file dosyası genelde aynı kodlardan oluşmaktadır.All derlemeyi, clean derleme sonrası gereksiz dosyaların temizlenmesini sağlar.


8 Ağustos 2013 Perşembe

Google Chrome OS - Windows Rekabeti Devam Ediyor



Google Ürün Yönetimi Başkan Yardımcısı Sundar Pichai ve Mühendislik Birimi Direktörü Linus Upson’un resmi blog sitelerinden duyurdukları “Google Chrome İşletim Sistemi” haberi bu yazımızın konusu.

Google Chrome OS’in Linux kernel üzerinde çalışan açık kaynak kodlu hafif ve hızlı bir işletim sistemi olacağını söyleyen yöneticiler, ilk adımda genel olarak netbook pazarının hedeflendiğini ve ürünün ilk versiyonunun 214 yılının birinci yarısında hazır hale geleceğini belirttiler.

İşletim sistemi arayüzünün Google Chrome tarayıcısı gibi minimal bir tasarıma sahip olacağı belirtilen açıklamada, bilgisayarın hızla açılıp kullanıcıya en çabuk şekilde İnternet deneyiminin sunulmasının ana amaç olduğu belirtilmiş. İnternet tarayıcılarının üzerinde çalıştığı işletim sistemlerinin geliştirildiği çağda daha İnternet’in doğmadığı gerçeğinden yola çıkılarak, İnternet’e bağlanmak ve web tabanlı eğlence ve verimlilik uygulamaları çalıştırmak için en iyi platformun Google Chrome OS olacağı iddia ediliyor. Öte yandan son kullanıcıların virüsler, güvenlik açıkları gibi sıkıntılar ile uğraşmaması için de mimari olarak ciddi çalışmalar yapıldığından bahsedilmiş.

Bilindiği gibi Google’ın cep telefonları ve İnternet cihazları için üretilen Android isimli bir projesi daha bulunuyor. Bu durumda iki işletim sisteminin çakıştığı bazı alanlar olacağı da açık.

Google’ın bu hamlesine Microsoft’tan da cevap gecikmedi. Bill Gates CNET NEWS’e verdiği bir röportajda “İnsanların neden yeni bir işletim sistemi geliyormuş gibi davrandıklarını anlayamıyorum, sonuçta birçok Linux türevi var ve bu da yeni bir Linux türevi” yorumunu yaptı. Chrome OS hakkında Google’ın çok az bilgi vermesi sebebi ile bir yorum yapmasının zor olduğunu belirten Gates, “Ancak elinizde netbook’lara kurulabilen bir Android de var” şeklinde konuştu.

New Orleans’ta Microsoft İş Ortakları Konferansı’nda konuşan Steve Ballmer ise Microsoft’un son kullanıcılar için Windows 95, kurumsal müşteriler için ise Windows NT olarak iki farklı işletim sistemi sunduğu günleri hatırlattı. “İki farklı işletim sistemimiz olan günleri hatırlıyorum, bu çok da pozitif bir şey olmayabilir” diye konuşan Ballmer, Google için de bu durumun sorunlar doğuracağını öngörüyor.

Windows 8 işletim sisteminin geçen yıl sonbaharda kullanıma hazır hale gelmesinin ardından, Google Chrome işletim sisteminin de piyasaya sürülmesinin bu alandaki rekabeti daha da kızıştıracağı açık. Bakalım sonuçta kazanan üreticiler mi son kullanıcılar mı olacak? Bunu zaman gösterecek.