Pisanje kernel modula - Linux Kernel Module Programming - Printable Version +- DIY Electronic projects (https://forum.yu3ma.net) +-- Forum: Programiranje (https://forum.yu3ma.net/forumdisplay.php?fid=58) +--- Forum: Embedded (https://forum.yu3ma.net/forumdisplay.php?fid=73) +--- Thread: Pisanje kernel modula - Linux Kernel Module Programming (/showthread.php?tid=981) |
Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 06-14-2015 Ovih dana sam experimentisao malo sa pisanjem Linux kernel modula (device driver) i dostavljam ovde jedan prost primer kao osnovu - skeleton. Ovde pokazujem jedan primer za "Character Device" (suprotno od "Block Device") driver, parce dinamickog programa koji se ucitava u kernel i koji operise sa tkz seriskim tipovima uredjaja, npr raznim komunikacioni portovi poput RS232, I2C, USB i slicno. Primetice te da nije uradjena fizicka komunikacija vec je ceo drajver napravljen kao "fake", tj moze u njega da se upisuje i posle da se iscitavaju podaci, kao da imamo prikacenu neku serisku memoriju od 100 bajtova ("virtual_device"). Razvojno okruzenje je Linux Debian 8 sa potrebnim paketima (gcc, make, linux-headers …) hello.c C++ source code (zanemarite PHP, iskorisceno za forum samo za highligh sintakse) PHP Code: /********************************************************** Makefile (skripta za utomatsko kompajliranje) PHP Code: obj-m := hello.o U ovom Makefile vidite da se poziva hederi za trenutni OS na kome radite ali ako tu explicitno navedete neku drugu verziju hedera, recimo specificnu za RPi, moze bez problema da se iskompalira i za druge procesore. Koga ovo bude interesovalo neka slobodno postavi pitanja Sve ovo je opisano u odlicnom YT tutorialu (8 delova): https://www.youtube.com/watch?v=-O6GsrmOUgY Nakon uspesnog kompajliranja (poziva se "make"), treba da dobijete hello.ko fajl koji predstavlja sam driver. Drajver se ucitava u kernel sa komandom "insmod hello.ko"; Tokom ucitavanja sam drajver ce ispisati nekoliko poruka i te poruke mogu da se vide u syslog (dmesg); Iskljucivanje / deaktivacija drajvera se radi komandom "rmmod hello". RE: Pisanje kernel modula - Linux Kernel Module Programming - enaB - 06-15-2015 Za RPi posto je ARM mora da se koristi cross-compiler ako se radi sa PC-a, ne moze samo ovako. Ne znam koji ima za RPi, za BeagleBone (Cortex-A8) ima recimo Linaro pa se za make navodi jos CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm inace ce da ga kompajlira za host arhitekturu koja god verzija headera da je. Interesantna tema u svakom slucaju, pridruzujem se diskusiji ako i ja mogu nekako da pomognem RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 06-16-2015 Ja sam (cross) kompaliranje kernela za RPi radio sa buildroot + busybox pod Debian. To je minimalisticko okruzenje, root FS je negde oko 40MB. Sa tim se dobije kompletan image koji se ucita na SD karticu. Iskompalirao sam neku verziju ali nisam jos stigao da probam (kompajlirao jedno 4-5 sati). RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 06-16-2015 (06-16-2015, 11:40 AM)mikikg Wrote: Ja sam (cross) kompaliranje kernela za RPi radio sa buildroot + busybox pod Debian. To je minimalisticko okruzenje, root FS je negde oko 40MB. Obavezno odgledajte ovaj video vezano za Buildroot https://www.youtube.com/watch?v=0LJHx09RF80&feature=youtu.be RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 12-27-2015 Pojavio se jedan vrlo zanimljiv modul koji vredi pogledati. U pitanju je vrlo "mocan" mini racunar koji ima 18 procesorskih jezgra, 2 ARM A9 jezgra i 16 RISC komprocesora + 28k FPGA celija za dodatne funkcije! Cena je vrlo vrlo pristupacna za takvu spravu! https://www.parallella.org/board/ Quote:The Parallella Board Kako li ce na ovome da radi neki kernel module? BTW: Da li znate da je "zabranjeno" da se koristi Floating-point matematika u kernelu? https://www.youtube.com/watch?v=RHTZ3CLOlqw https://www.youtube.com/watch?v=BHZCCUEzK0s RE: Pisanje kernel modula - Linux Kernel Module Programming - npejcic - 12-27-2015 Miki, ovo izgleda veoma, veoma ozbiljno. Prisustvo FPGA otvara neverovatno puno prostora za namene koje su do sada bile teško izvodljive. Inače, iz posrednog iskustva znam da je pod standardnim Linuxom, veoma teško dobiti real-time rad. Potrebno je dosta promena, ubacivanje "pred kernel" sistema koji bi presretao signale itd. Zato se kod RPy veoma često sreće neki MCU dodatak koji radi vremenski zahtevne stvari, a RPy sve ostalo. Ovaj FPGA bi taj problem prilično rešio, a da ne pričamo o brzini signala koje može FPGA da "sažvaće". RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 12-28-2015 Da svi ti linux bazirani sistemi koji nisu hard-real-time imaju malo problema sa nestabilnim tajmingom i relativno losim response-time. Ti klasicni linuxi spadaju u soft-realtime sto znaci "nista lose se nece desiti ako nesto malo zakasni" dok je hard-realtime vrlo striktno orijentisan za precizne vremenske dogadjaje i vrlo brzim response/latencom i ako nesto kojim slucajem zakasni "desice se lose stvari" (mehanicki kvar masine i slicno). Ovaj spomenuti Parallela racunar je zgodan prvo sto ima dodatna RISC jezgra gde mogu da se pokrenu delovi programa koji se bave tim striktnim vremenskim pojavama i to bi bilo neko ekvivaletno ponasanje klasicnim PIC/AVR procesorima. Kod njih se recimo meri vreme latancije (odgov na spoljnje promene/dogadjaje) u stotinama nano sekundi. Kome je i ovih par stotina nano sekundi sporno onda se ide na neprikosnovene FPGA celije gde se radni clock krece u rangu oko 500MHz za spomenut Parallela racunar i latenciju u desetinama nano sekundi. Gledao sam neke video prezentacije i radili su testove sa racunom za pronalazenje prostih brojeva (prime numbers) i krajnji rezultat je bio da je Parallela bila u klasi CISC procesora ranga Intel Core2Duo!!! Bez koriscenja RISC jezgra rezultat je bio nesto 1000x losiji/sporiji. E sad koliko kosta CISC racunar i koliko struje trosi (samo C2D trosi minimum 50W, gde je memorija i ostalo) a ovo cudo od Parallele citavih 5W. U najavi im je za sledecu godinu i model sa 64 RISC jezgra i vecim brojem FPGA celija! Novi RPi 3B+ - ognjan - 03-16-2018 Pojavio se novi RPi 3B+ https://www.elektormagazine.com/news/today-is-day-meet-the-raspberry-pi-3b RE: Pisanje kernel modula - Linux Kernel Module Programming - npejcic - 03-16-2018 Joj što će ljudi biti razočarani kada vide ponovo ovo: "Gigabit Ethernet over USB 2.0" Nije mi jasno zašto konačno ne krenu da koriste MII ili RII za povezivanje Eth PHY-na... RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 03-18-2018 Ako niste probali do sad evo jedna fina biblioteka za C++/C11/C14, Boost http://www.boost.org Nesto mi je trebalo da uvezem sa Amazon AWS-SDK C++ i uz pomoc Cmake to moze vrlo fino da radi ... https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/welcome.html RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 03-18-2018 Ovde ima kompletan spisak biblioteka, ima recimo i RESTful servis za mikroktrolere i svasta jos: A list of open source C++ libraries http://en.cppreference.com/w/cpp/links/libs RE: Pisanje kernel modula - Linux Kernel Module Programming - mikikg - 03-26-2018 Write your own Operating System in 1 hour (x86) https://www.youtube.com/watch?v=1rnA6wpF0o4 Kad se ovo malo "savlada" onda se uzme Raspberry Pi ili BeagleBone Black i sednete da programirateeeee bare-metal, ihaaa sta tu sve ima, sigurno vam nece biti dosadno : ) Nije to ali je vrlo slicno, to je kao kada bi sada pisali UEFI aplikacije za PC racunare, dakle nivo pre operativnog sistema ali i dalje sa svim dostupnim stvarima samo nema OS-a da smeta nego direktno se prica sa HW, sve je tu, i gigabajti rama, i graficka kartica, i storage ... U cirka par stotina KB UEFI aplikaciju moze da se ucita ceo mali graficki interfejs i da u pozadini radi PLC operacije kao i spomenute Pilulice, bez operativnog sistema : ) |