[Çözüldü] Kernel Modül Programlama

Başlatan kernell, 20 Mayıs 2014 - 20:29:32

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

kernell

en son  yazılan kod dosyasıyla makefile dosyasını derlemek için

>>make komutunu giriyorum ve şu mesaj geliyor.
make: Nothing to be done for `all'.
makefile içeriğini değiştiriyorum baktığım kaynaklardan sonuç yine aynı kafa durdu.
----------derleme------------aşaması--------------

ubuntu@ubuntu:~/Modules$ ls
Hello.c  Hello.c~  Makefile  Makefile~
ubuntu@ubuntu:~/Modules$ make
make: Nothing to be done for `all'.
ubuntu@ubuntu:~/Modules$

--------------------------------------------------

-----Hello.c içeriği-------------------
------------------------
#include <linux/init.h>
#include <linux/module.h>

static int void hello_init(void)
{

printk(KERN_ALERT "TEST : MERHABA DÜNYA\n");

return 0;

}
static void hello_exit(void)
{

printk(KERN_ALERT "TEST : GÜLE GÜLE DÜNYA\n");

}
module_init(hello_init);
module_exit(hello_exit);

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

cagriemer

Eger bu soru Eudyptula Challenge[1] ile alakali ise, burada yanit aramaniz pek dogru degil. Yok degilse, Makefile dosyanizin formatinin yanlis oldugunu soyleyebilirim. Bir de hello_init fonksiyonunuz int mi dondurecek void mi sizce? Derleyici burada hata verecektir tahminimce.

[1] http://eudyptula-challenge.org/

heartsmagic

eudyptula-challenge da ilginçmiş, C bilenler için zevkli olabilir. Hile yaparsanız yakalarız demişler ama ona göre :) Kısacası @cagriemer'in önce onu dile getirmesi çok isabetli olmuş.
Ben de şunu ekleyeyim Makefile konusu için, baktığın kaynakların sana nasıl aksettirdiğine güvenme :) Bazı kaynaklar makefile içeriğini aktarırken kullandıkları web arayüzünün kurbanı oluyorlar.

Bu arada int/void meselesini hangi ara gördün @cagriemer :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

jayw

Konuyla ilgili uzmanlığım yok ancak araştırırken sizinle aynı sorunu yaşayan bir kişinin ulaştığı çözüm karşıma çıktı.

http://ubuntuforums.org/showthread.php?t=1795434

Çözümde şöyle diyor:
Alıntı YapInside a Makefile, the TAB character is critical. On the line after your "all:", with the "make", there must be a TAB before the "make". Without a TAB (for instance if you just used spaces) you will receive that error.

Açıklamaya göre sizin Makefile dosyanız şöyle olmalı (make -C ifadelerinden önce TAB ile boşluk bırakın).

obj-m += Hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


Bu hata bu şekilde çözülürse eğer muhtemelen derleyicinin diğer üreteceği hata da @cagriemer'in dediği sorundan olur. O satır da şöyle olabilir mesela (ya da sizin ihtiyacınız nasılsa ona göre düzeltebilirsiniz)

static int hello_init(void)

heartsmagic

@jayw, biz esasında yukarıdaki projeye katıldıysa arkadaş söylemeyelim demiştik :) Muhtemelen kendisi de aynı sonuca ulaşacaktı bir süre sonra.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

jayw

Desenize ben farkında olmadan ortalığı karıştırdım :)

heartsmagic

Çok sorun olmaz sanırım, zaten muhtemelen ilk soru budur projedeki :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

kernell

Cevaplar için  teşekkürler....
------------------------------------------
İnanılmaz  bir rahatlama var şuan bende. Çalışan doğru kodlar :D
-----------------------------------

#include <linux/module.h>
#include <linux/kernel.h>

static int hello_init(void)
{

printk(KERN_ALERT "TEST : MERHABA DÜNYA\n");

return 0;

}
static void hello_exit(void)
{

printk(KERN_ALERT "TEST : GÜLE GÜLE DÜNYA\n");

}
module_init(hello_init);
module_exit(hello_exit);

----------------
>>makefile dosyası<<

obj-m += Mrb.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

heartsmagic

O halde çözülen başlıklarımız için: cozuldukonusu
Bu arada, adı geçen projeye mi katıldın @kernell?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

kernell

Adı geçen projenin ne olduğunu çözemedim esasında.Beni aydınlatırsanız sevirim.Katılmak isterim:D

heartsmagic

Sitesinde yazdığı üzere Linux çekirdeği için geliştirme, programlama amaçlı bir proje. Katıldıktan sonra eposta üzerinden sana soruları, çözmen gereken problemleri gönderiyorlar ve yine eposta üzerinden geri cevapları alıyorlar. Aynen Linux'un geliştirilmesinde olduğu gibi. Ön şart temel düzeyde C bilmek, bonus ise Linux için geliştirme yapmış veya o konuda çalışmış olmak. Fakat bonus kısmı şart değil, muhtemelen işin eğlenceli kısmı da o. Sorular ve sorunlar arasında senin şu an yapmış olduğun "Hello World" modülünden tut da ileri seviyede Linux yamaları mevcutmuş.

Bu projedeki sorunları çözmek için kendi başına uğraşmanı istiyorlar senden. Forumlarda, IRC gibi ortamlarda sormayın denmiş. Ayrıca, hile yaparsanız yaptığınızı anlama yolları olduğundan bahsetmiş kendileri :) İşte bu nedenle @cagriemer o projeye katıldıysan soruyu cevaplamak uygun olmayabilir demişti.

Not: Eposta istemcimizin de postaları HTML olarak göndermemesini istemişler, aynen Linux eposta listesinde olduğu gibi.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.