Moduly KERNELu

Teodor

Moduly KERNELu
« kdy: 05. 07. 2016, 11:51:19 »
Zdravim,
potřebuju pomoct s rozšířením kernelu o modul.
Může mi tu někdo popsat princip/poslat link s jednoduchým příkladem jak na to?

Díky.


ByCzech

  • *****
  • 1 870
    • Zobrazit profil
    • E-mail
Re:Moduly KERNELu
« Odpověď #1 kdy: 05. 07. 2016, 13:20:08 »
Obávám se, že vytvářet moduly kernelu není úplně jednoduchá věc, jak si myslíte. Pokud to ale myslíte vážně, můžete začít např. tady:

http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

1. se učit
2. se učit
3. se učit

JmJ

  • ****
  • 333
    • Zobrazit profil
Re:Moduly KERNELu
« Odpověď #2 kdy: 05. 07. 2016, 14:12:36 »
Obávám se, že vytvářet moduly kernelu není úplně jednoduchá věc, jak si myslíte. Pokud to ale myslíte vážně, můžete začít např. tady:

http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

1. se učit
2. se učit
3. se učit
Nechce spis pan kolega jen pridat do kernelu uz existujici modul? Otazka je pravda trochu nejasna, ale ja bych na to programovani vlastniho modulu moc nevidel.

Takze moje odpoved je: https://www.google.cz/search?client=opera&q=kernel+insert+module&sourceid=opera&ie=UTF-8&oe=UTF-8

ByCzech

  • *****
  • 1 870
    • Zobrazit profil
    • E-mail
Re:Moduly KERNELu
« Odpověď #3 kdy: 05. 07. 2016, 14:25:31 »
Obávám se, že vytvářet moduly kernelu není úplně jednoduchá věc, jak si myslíte. Pokud to ale myslíte vážně, můžete začít např. tady:

http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

1. se učit
2. se učit
3. se učit
Nechce spis pan kolega jen pridat do kernelu uz existujici modul? Otazka je pravda trochu nejasna, ale ja bych na to programovani vlastniho modulu moc nevidel.

Takze moje odpoved je: https://www.google.cz/search?client=opera&q=kernel+insert+module&sourceid=opera&ie=UTF-8&oe=UTF-8

Abych řekl pravdu, tak jsem také váhal, jestli nechce jen loadnout modul, ale nakonec jsem to vyhodnotil takto. Každopádně v mnou odkazovaném dokumentu se dočte obojí :-)

Jenda

Re:Moduly KERNELu
« Odpověď #4 kdy: 05. 07. 2016, 14:45:22 »
Lukáš Jelínek: Jádro systému Linux by mohla být knížka k tématu.


Teodor

Re:Moduly KERNELu
« Odpověď #5 kdy: 05. 07. 2016, 14:46:24 »
Lukáš Jelínek: Jádro systému Linux by mohla být knížka k tématu.

Jj, po té jsem dnes už koukal, jenže je vyprodaná. takže snad antiky? :(

flack

Re:Moduly KERNELu
« Odpověď #6 kdy: 05. 07. 2016, 14:49:12 »
A nakoniec bude chciet len skompilovat modul, ktory nebol zakompilovany v jeho zostave :D
1. stiahnut zdrojaky a pripravit prostredie
2. rozbalit zdrojaky a editovat .config
3. skompilovat kernel
4. skompilovat moduly
5. nasypat to do systemu

Jasne exisuju rozne navody pre konkretne distribucie, ale tu autor neuvadza.

Teodor

Re:Moduly KERNELu
« Odpověď #7 kdy: 05. 07. 2016, 14:49:54 »
Obávám se, že vytvářet moduly kernelu není úplně jednoduchá věc, jak si myslíte. Pokud to ale myslíte vážně, můžete začít např. tady:

http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

1. se učit
2. se učit
3. se učit
Nechce spis pan kolega jen pridat do kernelu uz existujici modul? Otazka je pravda trochu nejasna, ale ja bych na to programovani vlastniho modulu moc nevidel.

Takze moje odpoved je: https://www.google.cz/search?client=opera&q=kernel+insert+module&sourceid=opera&ie=UTF-8&oe=UTF-8

Abych řekl pravdu, tak jsem také váhal, jestli nechce jen loadnout modul, ale nakonec jsem to vyhodnotil takto. Každopádně v mnou odkazovaném dokumentu se dočte obojí :-)

No, podle prvního příkladu mi gcc hlásí tuhle hlášku:

make: uname-r: Command not found
make -C /lib/modules//build M=/home/teodor/Plocha/pokus modules
make: *** /lib/modules//build: Adresář nebo soubor neexistuje.  Stop.
make: *** [all] Error 2


Kde dělám chybu?
Jinak ano, jde o to napsat si svuj vlastní modul pro HW komunikační převodník. Mne jde jen o to, pochopit princip na jednoduchém příkladu a vyvarovat se chyb...

Teodor

Re:Moduly KERNELu
« Odpověď #8 kdy: 05. 07. 2016, 14:51:49 »
A nakoniec bude chciet len skompilovat modul, ktory nebol zakompilovany v jeho zostave :D
1. stiahnut zdrojaky a pripravit prostredie
2. rozbalit zdrojaky a editovat .config
3. skompilovat kernel
4. skompilovat moduly
5. nasypat to do systemu

Jasne exisuju rozne navody pre konkretne distribucie, ale tu autor neuvadza.

Jo, jednalo se o binárky k HW komunikačnímu převodníku kde nebyl soubor config, celý to výrobce neskutečně sprasil. Takže tohle je jediná možnost. Jinak distro je linux Mint 17.3 Rossa a verze KERNELu je 3.19.0

ByCzech

  • *****
  • 1 870
    • Zobrazit profil
    • E-mail
Re:Moduly KERNELu
« Odpověď #9 kdy: 05. 07. 2016, 15:01:30 »
No, podle prvního příkladu mi gcc hlásí tuhle hlášku:

make: uname-r: Command not found

Pokud nerozumíte ani této hlášce (příkaz nenalezen), mám obavu, že se pouštíte do něčeho, na co nemáte.

make -C /lib/modules//build M=/home/teodor/Plocha/pokus modules
make: *** /lib/modules//build: Adresář nebo soubor neexistuje.  Stop.

Chybí vám hlavičkové soubory jádra popř. zdroják jádra. Logicky pokud chcete kompilovat, musíte mít zdrojáky/hlavičky. Tohle patří k základním znalostem.

make: *** [all] Error 2


Kde dělám chybu?

V tom, že neposloucháte rady... Dostal jste 3:

1. se učit
2. se učit
3. se učit

Ani jednu jste neposlechl :). Neumíte ani kompilovat, nevíte, že potřebujte dev balíčky, hlavičkové soubory ap. a už chcete dělat vlastní modul do jádra. Opravdu se vám to zdá dobrý nápad?

Jinak ano, jde o to napsat si svuj vlastní modul pro HW komunikační převodník. Mne jde jen o to, pochopit princip na jednoduchém příkladu a vyvarovat se chyb...

No moc se vám vyvarovat chyb nedaří. Nejdříve si nastudujte základní věci a pak se pouštějte do složitých věcí.

Jenda

Re:Moduly KERNELu
« Odpověď #10 kdy: 05. 07. 2016, 15:24:42 »
Chybí vám hlavičkové soubory jádra popř. zdroják jádra. Logicky pokud chcete kompilovat, musíte mít zdrojáky/hlavičky. Tohle patří k základním znalostem.

Ve skutečnosti blbě opsal Makefile (to člověk nezkopíruje? :)) a napsal uname-r místo uname -r. Ale souhlasím, že tohle půjde těžko. Doporučil bych se nejdřív naučit Linux používat, k tomu poslouží například prvních 600 stránek knihy Linux - Dokumentační projekt a potom spousta praxe. Ano, zní to asi hnusně, ale psát jaderné drivery fakt není triviální.

Jinak ano, jde o to napsat si svuj vlastní modul pro HW komunikační převodník. Mne jde jen o to, pochopit princip na jednoduchém příkladu a vyvarovat se chyb...

Nešlo by to udělat v userspace? Podle toho, co to používá za rozhraní, například přes libusb nebo nějaký podobný wrapper.

flack

Re:Moduly KERNELu
« Odpověď #11 kdy: 05. 07. 2016, 15:31:24 »
len tak pre info, neslo by sa dozvediet co za exoticky HW prevodnik to je?

Teodor

Re:Moduly KERNELu
« Odpověď #12 kdy: 05. 07. 2016, 17:51:33 »
len tak pre info, neslo by sa dozvediet co za exoticky HW prevodnik to je?

Moxa 5450.

Teodor

Re:Moduly KERNELu
« Odpověď #13 kdy: 05. 07. 2016, 17:55:26 »
Chybí vám hlavičkové soubory jádra popř. zdroják jádra. Logicky pokud chcete kompilovat, musíte mít zdrojáky/hlavičky. Tohle patří k základním znalostem.

Ve skutečnosti blbě opsal Makefile (to člověk nezkopíruje? :)) a napsal uname-r místo uname -r. Ale souhlasím, že tohle půjde těžko. Doporučil bych se nejdřív naučit Linux používat, k tomu poslouží například prvních 600 stránek knihy Linux - Dokumentační projekt a potom spousta praxe. Ano, zní to asi hnusně, ale psát jaderné drivery fakt není triviální.

Jinak ano, jde o to napsat si svuj vlastní modul pro HW komunikační převodník. Mne jde jen o to, pochopit princip na jednoduchém příkladu a vyvarovat se chyb...

Nešlo by to udělat v userspace? Podle toho, co to používá za rozhraní, například přes libusb nebo nějaký podobný wrapper.

Dobrý, už se to rozběhlo, chyba byla v uname -r. Nevšiml jsem si toho předtím. Mne se to stává často, že si nevšimnu těchto odsazení

Neviditelný

Re:Moduly KERNELu
« Odpověď #14 kdy: 05. 07. 2016, 17:55:47 »
testmodule.c
Kód: [Vybrat]
#include <linux/module.h>

MODULE_LICENSE("GPL");

static void __exit testmodule_exit(void)
{
printk(KERN_DEBUG "testmodule removed\n");
return;
}

static int __init testmodule_init(void)
{
printk(KERN_DEBUG "testmodule loaded\n");
return 0;
}

module_exit(testmodule_exit);
module_init(testmodule_init);

Makefile
Kód: [Vybrat]
ifneq ($(KERNELRELEASE),)
obj-m += testmodule.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KERNELDIR) M=$(PWD)

clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean

endif

Hodně štěstí. Hlavně ten modul piště v nějakém virtuálu, jinak to v životě pořádně neodladíte a můžete si kvůli tomu usmrtit produkční stroj. Mimochodem, fakt je nutné to řešit jadeným modulem a ne nějakým programem pro userspace?