How to build a Linux loadable kernel module that Rickrolls people

Поділитися
Вставка
  • Опубліковано 25 лис 2024

КОМЕНТАРІ •

  • @scootergirl3662
    @scootergirl3662 4 місяці тому +1

    Despite being a great meme, also ironically one of the best Linux kernel development videos out there

  • @garryvee
    @garryvee 2 роки тому +23

    As a retired software engineer, starting with IBM 370 systems, I find your videos to be remarkably interesting and educational. Very much appreciated.

    • @iii02
      @iii02 2 місяці тому

      getting into low level? it'll be crazy if you reply to a 2yr old comment

  • @AubyAutumn
    @AubyAutumn 5 років тому +130

    1:43 "Kernel Space Program" my favorite video game... Oh wait, it's Kerbal Space Program? Crap

    • @ChristopherGray00
      @ChristopherGray00 4 роки тому +6

      That would be interesting, the system crashing along with your ship.

  • @stephenjames5745
    @stephenjames5745 5 років тому +150

    Awesome introduction to kernel module development! Show me more! 😁

    • @pavel9652
      @pavel9652 4 роки тому +6

      You probably don't need it, but for future generations ;) There is a free book on Linux drivers development on LWN, which involves writing kernel modules. It is fairly old, as had been written for kernel 2.6, but these things didn't change much. Linux Device Drivers, Third Edition: lwn.net/Kernel/LDD3/

    • @Nunya58294
      @Nunya58294 2 роки тому

      Linux drivers are pretty easy to compile and write as long as you have a basic understanding of what your doing

  • @spicy_wizard
    @spicy_wizard 5 років тому +72

    Hope you can do more on Operating System Programming as compared to web dev/machine learning, the resources on OS is scarce ! And you did great job on teaching it!!

    • @tissuepaper9962
      @tissuepaper9962 3 роки тому +2

      There's a book (somewhat outdated now) called just "Linux Kernel Development" by O'Reilly. Also "Linux Device Drivers" by someone else, can't remember.
      Really creative names, I know.

  • @Askaholic907
    @Askaholic907 4 роки тому +10

    Correctly me if I’m wrong, but I’m pretty sure you will have a buffer overflow if the user only supplies a small buffer.
    Always check the length of your destination buffers people!

  • @DeejjaY
    @DeejjaY 3 роки тому +7

    For anyone running into the module license error, insert this under the header for your .c file:
    MODULE_LICENSE("Dual BSD/GPL");

    • @Chris-no9tn
      @Chris-no9tn Рік тому

      Thanks! Solved the problem for me.

  • @ancbi
    @ancbi 4 роки тому +22

    Me yesterday: researching kernel module & device file.
    Me today: Listening to rickroll in medieval style.
    UA-cam algorithm today:

  • @batlin
    @batlin 3 роки тому +8

    Recent versions of the kernel won't build the module if it's missing the MODULE_LICENSE tag. You can do that by adding it after calling the module_init/exit registration functions:
    MODULE_LICENSE("GPL");

  • @vtrandal
    @vtrandal Рік тому

    I'm glad I found my way back here over a year later. Very cool stuff.

  • @milostean8615
    @milostean8615 5 років тому +18

    Just the right amount of detail in your videos brother : ]

  • @kallikantzaros
    @kallikantzaros 4 роки тому +1

    Reading LPIC-1 book and got to the part with modules and this video taught me a lot of things on how this works. Thanks

  • @treyquattro
    @treyquattro 3 роки тому +3

    good video. I anticipated you'd access the module via cat /dev/rickroll, but I expected that just registering the module would have automatically created the entry in /dev

    • @d1rtyharry378
      @d1rtyharry378 3 роки тому +2

      I thought the same thing. Registering shows the new device in /proc/devices. But when I do ls -l /dev it doesn't show up. My guess is the device is created but the directory entry that points to this device is not created. Mknod helps to create that directory/file which is managed by the device we created and registered

  • @umairgillani699
    @umairgillani699 5 років тому +34

    just by seeing word "Linux" in title, liked the video and now watching.. more Linux videos please!

  • @inqmusician2
    @inqmusician2 4 роки тому +16

    You can make a virus, that opens Never Gonna Give You Up, as soon as browser is closed.

  • @CyborgElf
    @CyborgElf 5 років тому +10

    Nice video :) kernel is always difficult to explain, you did it perfectly

  • @thomasburke7995
    @thomasburke7995 2 роки тому

    I have been unable to comprehend what you did.. but I know what that rickroll can be used for.. brilliant..

  • @nischalbhandari9964
    @nischalbhandari9964 4 роки тому

    I could not understand this thing by reading a book for four days but your video made it very clear. Thanks dude.

  • @unh0lys0da16
    @unh0lys0da16 3 роки тому +1

    This is so valuable, there is way too little material on LKM's

  • @williamdurocher207
    @williamdurocher207 5 років тому +1

    Great video, I struggled with creating a kernel module before. Wish the video had been there then !

  • @theburntcrumpet8371
    @theburntcrumpet8371 5 років тому +28

    This was extremely informative. Thank you

  • @RonnyMandal75
    @RonnyMandal75 3 роки тому

    Great! Instead of "Sorry, rickroll is real only" it should say "You know the rules and so do I!"

  • @8v2000
    @8v2000 5 років тому +14

    Brb installing linux

  • @MinhPhamGators
    @MinhPhamGators 4 роки тому +1

    "...🎶 never gonna let you down...🎶 ... never gonna panick ...🎶 unless you create a buffer overflow...🎶"

  • @katout75
    @katout75 5 років тому +1

    Thanks, what a great video to quickly explain how to start writing kernel modules.

  • @pcfreak1992
    @pcfreak1992 5 років тому +2

    I didn't know that making kernel modules was this simple. Nonetheless, I learned something new today and enjoyed it 👍

  • @JosephDAndrea0121
    @JosephDAndrea0121 4 роки тому

    Studying for linux+ I keep a running notebook in evernote. I linked to this video as an example of creating and managing modules. I'm going to provide my notebook stack internally for the other guys who want to study for the linux+ exam. Though you might like to know that future generations of linux admins learned kernel modules by rickrolling their buddies

  • @Karrq
    @Karrq 5 років тому +5

    More Linux dev stuff pls! It was awesome

  • @marcbeatove7149
    @marcbeatove7149 5 років тому

    message_len should be size_t as it contains a length. Of course this shouldn't cause any problem as strlen() never returns a value lower than 0 and any further operation is done with the variable, but still, it's nice to get the beginners used to use the correct data types. Great video btw :D

  • @Skyler9604
    @Skyler9604 4 роки тому +5

    Came for the meme, stayed for the knowledge

  • @ericgorder1
    @ericgorder1 5 місяців тому

    Thank you so much. I was able to get this working on Raspberry Pi 3 b VM under Qemu! This is so cool!

  • @magicrectangleEnt
    @magicrectangleEnt 3 роки тому

    Yo this video is amazing dude. Finally understand how these modules work! And with a choice example too 👍👍

  • @N0AGI
    @N0AGI 3 роки тому

    Thank you for sharing this knowledge; Very helpful. I am hoping to learning kernel module programming - never had the prior opportunity to; Your video will motivate me in that direction. Thanks again. God Bless.

  • @guyfromconcordia
    @guyfromconcordia 3 роки тому +1

    maybe you should compose a , say, main.c program, to show how to call the character-device through syscall, like read, write, and then to demonstrate the relationship between kernel module and user space process.

  • @felipekenzoshiraishi3746
    @felipekenzoshiraishi3746 4 роки тому +1

    Awsome introduction! Thanks a lot!

  • @ivmaxxim100
    @ivmaxxim100 2 роки тому

    Really high quality video. Thanks!

  • @Ncky
    @Ncky 5 років тому +7

    How to make it to write only once and then close it self? Call dev_release inside dev_read?

    • @paulstelian97
      @paulstelian97 4 роки тому

      You can't normally close the file, but you can use the *offset field to ensure it looks like a normal file. Closing should be handled by the kernel based on the system call itself. Take a look into the source code of the close() system call to see what exactly it does if you do want to close the file yourself.

  • @adaminsanoff
    @adaminsanoff 4 роки тому

    Great introduction into kernel modules.

  • @jtc1947
    @jtc1947 3 роки тому

    I wish that A: I was as smart as this guy & B: Wish that I could type as fast and well!!

  • @AmeenAltajer
    @AmeenAltajer 2 роки тому

    Love your work, keep these videos coming! Haha!

  • @CurrentlyObsessively
    @CurrentlyObsessively 4 роки тому

    Well. Linus always says don't break userspace. Your rickroll can be exited with Ctrl - C, so you're good.

  • @rajinkhan7611
    @rajinkhan7611 5 років тому

    Everyone commenting this video is a boss...almost Everything he says are going over my head..cant understand anything as a noob

  • @yourneighbour5738
    @yourneighbour5738 5 років тому +101

    Big Chungus OS

  • @richardbenes9
    @richardbenes9 3 роки тому +1

    Great explanation, thanks! Btw. would it be a good idea to register the device at the time of loading of the module?

  • @HasanAmmori
    @HasanAmmori 3 роки тому

    This video deserves way more views

  • @carlesg0n
    @carlesg0n 5 років тому

    Nice video man, really interesting! Keep doing these

  • @michaelt126
    @michaelt126 3 роки тому

    this is what computers were created to do

  • @ramesherrabolu1590
    @ramesherrabolu1590 4 роки тому

    Thanks for a short and clear presentation. Do you have one on DKMS

  • @perpirisgg
    @perpirisgg 5 років тому

    We need engineer man cap merch

    • @EngineerMan
      @EngineerMan  5 років тому

      Here you go :)www.amazon.com/Falari-Classic-Baseball-Cotton-Adjustable/dp/B010RDCIM2/ref=sr_1_2

  • @alecthenice8115
    @alecthenice8115 5 років тому

    Thx for helping me with custom boot.img creation

  • @coldhardwick
    @coldhardwick 5 років тому +1

    Could you also use psuedo devices to create a com port to replace tty to ease serial communication from a device to program running on WINE? Very informative video, even though I'd never build that lol

  • @___etc8291
    @___etc8291 4 роки тому +1

    KERN_LOG undeclared

  • @paulwirkus4182
    @paulwirkus4182 4 роки тому

    That video is kinda wholesome.

  • @ZeeLegend
    @ZeeLegend 5 років тому +3

    Awesome video!

  • @spyingpro4563
    @spyingpro4563 4 роки тому

    I have no idea what I’m watching but I like it

  • @crmafra
    @crmafra 5 років тому

    Awesome! You made it look really simple, thank you!

  • @pwlegolas3
    @pwlegolas3 4 роки тому

    This is simply amazing.. Thanks Eng. Man !!!

  • @lyghters
    @lyghters 5 років тому

    Dude, i can't get over of how you look exactly like one of Half-Life 2 civilian/resistance NPCs.
    And.. take that as a compliment, i guess

    • @joegatton4138
      @joegatton4138 5 років тому

      Lol, now I'm going to be reminded of this for every video.

  • @chHJChang
    @chHJChang Рік тому

    This video helps me a lot, thx!

  • @r.savage1283
    @r.savage1283 5 років тому +1

    Love your content. Just subscribed. I just found atom . Any chance of an overview of it?

  • @ianlang6058
    @ianlang6058 3 роки тому

    Nicely presented video

  • @yoyonel1808
    @yoyonel1808 5 років тому +2

    Thx for the video.
    Your link to github repo not pointed to the correct subdirectory (subproject).

    • @EngineerMan
      @EngineerMan  5 років тому +2

      Thanks for pointing that out. I just corrected it.

    • @yoyonel1808
      @yoyonel1808 5 років тому

      @@EngineerMan You're welcome :)

  • @rainfallen1064
    @rainfallen1064 2 роки тому

    Strange, how come when I run "cat rickroll", it doesn't trigger the "dev_open" method UNTIL I hit control-c. Any idea?

  • @inputignhere
    @inputignhere 5 років тому

    very useful, ill be sure to use it in the future

  • @chrissmith6028
    @chrissmith6028 6 місяців тому

    I had just learned that the '&&' only executes cmd2 IF cmd1 succeeds. So I have been doing "make clean && make". Is there a problem with that ? My thought would be that it is going to make sure dir is cleaned before running "make". p.s. Trying to follow the video leaves out the '"%d", major ' so I was having a lot of problems until I viewed the repo.

  • @santoshjackman
    @santoshjackman 5 років тому +14

    Do you age..?

  • @OscarCortesV
    @OscarCortesV 4 роки тому

    Thank you very much, this is exactly what I was looking for, clear information, I will subscribe and like... but I have a doubt, how can you know which kernel module goes to which device in /dev?

  • @هاشميالحجاز
    @هاشميالحجاز 5 років тому +1

    Thanks for the quality content !!!
    Can you make a video on removing rootkits using rootkit hunter and how to remove the false positive warnings

  • @kamilsuhak3847
    @kamilsuhak3847 4 роки тому

    *We gotta learn about what is a rickroll

  • @rolandsz8831
    @rolandsz8831 4 роки тому +3

    I suspect that this code can overflow the userspace buffer, in case len < message_len. Do I miss something here?

    • @tissuepaper9962
      @tissuepaper9962 3 роки тому

      I don't actually know, but I suspect that the function used to copy into the userspace buffer checks for this and would reflect such an error in its return value

  • @0xssff
    @0xssff 4 роки тому

    Amazing content, thanks a lot!

  • @anupraj762
    @anupraj762 5 років тому

    Thanks for sharing knowledge

  • @clementyves6154
    @clementyves6154 5 років тому

    Thanks dude ! this is again a very good lesson !

  • @emils.o
    @emils.o 5 років тому +10

    oooh so KERN_LOG should be switched to KERN_INFO u didnt mention that ;)

    • @lsh3rd
      @lsh3rd 5 років тому +1

      Notice how that changed magically mid-video!

  • @zinsy23
    @zinsy23 5 років тому

    Did you paste multiple things sequentially one at a time? It didn't look like the video was cut at 3:08 and 3:14 when I noticed this. If so, how do you do this in Linux? I've done this before with Autohotkey in Windows by writing to a text file and pasting one line at a time. I'm curious to see how you did this in Linux if you did.

  • @0vivekeviv0
    @0vivekeviv0 3 роки тому

    7:44 Copy in it is shamocha

  • @faozi1000
    @faozi1000 3 роки тому

    Hi Engineers! I have a doubt if anyone could help me... I am trying to get to know how LKM's Work. I Successfully completed an installation with the insmod command, but when I reboot i do not find my module loaded. ( tried to add the name of the module installed into /etc/modules and got an error while loading the raspberry where it is installed . Any hint ?
    Best regards to everybody!

  • @BroscutaGaming
    @BroscutaGaming 5 років тому

    Hey man! What font are you using on the terminal?

  • @AtomkeySinclair
    @AtomkeySinclair 5 років тому +2

    Mad scientist laugh...

  • @kevinalexander4959
    @kevinalexander4959 4 роки тому

    Would love to see you do the same project on an un-rooted Android device running newer OS. I was having error: "insmod: failed to load test.ko: Exec format error", loaded just fine on Ubuntu -- I'm guessing this example is not for Android.

  • @cantanzim6215
    @cantanzim6215 4 роки тому

    grate video really.... grate informations... amazing thanks

  • @PauxloE
    @PauxloE 4 роки тому +5

    9:08 Shouldn't you only copy min(len, message_len) characters? Otherwise you might write over the bounds of the buffer.
    10:35 I guess it's more effective if the device is not named "rickroll". And can you do the equivalent of this mknod call also from your init function, so it stays over restarts of the system?

  • @MebiusProject
    @MebiusProject 4 роки тому

    Hey Engineer Man, do you have any info on how to install the module from kernel 5.4 ? 'insmod' return 'Operation not permitted', apparently due to the new lockdown feature...

    • @SheIITear
      @SheIITear 4 роки тому +2

      Use sudo. Works fine on 5.6.

  • @JeffSmith-vc9ii
    @JeffSmith-vc9ii 5 років тому +3

    Does this work on Windows 10 Linux subsystem with Wine?
    I use Arch btw.

    • @vladimirtatarsky9928
      @vladimirtatarsky9928 5 років тому +9

      What you are referring to as Linux, is in fact, GNU/‘Windows Subsystem for Linux’, or as I've recently taken to calling it, GNU plus Windows. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system.

    • @AshesOfEther
      @AshesOfEther 5 років тому +4

      No. The Windows Subsystem for Linux doesn't use the Linux kernel, but rather it converts kernel calls to Win32 calls.

    • @AshesOfEther
      @AshesOfEther 5 років тому +2

      Lorem Ipsum If you read my comment properly, I said “the Linux kernel”, indicating that I’m talking about Linux itself, not GNU/Linux.

    • @AshesOfEther
      @AshesOfEther 5 років тому +1

      Lorem Ipsum Did you even read my reply?

    • @RandyFortier
      @RandyFortier 5 років тому +1

      @Lorem Ipsum I read your reply, and @Tobias SN is correct. He was talking about two things:
      Windows Subsystem for Linux - the official name Microsoft/Ubuntu use for this component of Windows, and
      Linux - the kernel, specifically (not the operating system frequently called "Linux" incorrectly, as you have pointed out)
      Neither correction you made was appropriate, in this case. People do make that mistake, but that isn't what happened here. Then, you just copied and pasted the same reply again, making it clear you didn't real his reply (or, at least not carefully enough). In fact, I'm not even certain you aren't a bot. I guess we'll find out if you reply.

  • @ramsaiachanta5553
    @ramsaiachanta5553 Рік тому

    bro how to rectify the error if the compiler differs from the one used in the kernal,since my program is not working as like you
    plz someone explain how to get out of this
    my compiler showing gcc 11.3 and kernal showing gcc 11.2

  • @echoptic775
    @echoptic775 3 роки тому

    Im having a problem im missing linux/init.h file but have all others

  • @AshesOfEther
    @AshesOfEther 5 років тому +1

    I have no reason to do this.
    I don't need a reason to do this.

  • @MrGeekGamer
    @MrGeekGamer 5 років тому

    Link in the description points to the code for 048.

    • @EngineerMan
      @EngineerMan  5 років тому

      Thanks for pointing that out. I just corrected it.

  • @adameverett3414
    @adameverett3414 5 років тому

    Hey, great vid. Could you please make a tutorial of running an ssh server on Linux?

    • @MrArondc
      @MrArondc 5 років тому

      what distro are you running?

  • @GlennHamblin
    @GlennHamblin 5 років тому

    Very cool. Thanks.

  • @user-tr8kr1jd2o
    @user-tr8kr1jd2o 4 роки тому

    x86_64 processors have negative access rings fyi

  • @FaizKhan-fm6kg
    @FaizKhan-fm6kg 5 років тому

    whats your github handle? And do you have the source code of your videos on github?

  • @drwal_fosforyczny
    @drwal_fosforyczny 2 роки тому +1

    This ring diagram is not correct, drivers run in ring 0. Rings 1 and 2 are not used by Linux.

  • @franchufranchu119
    @franchufranchu119 3 роки тому

    You could make it stream the video, so that you can play it with mplayer or other similar app

  • @nicnuyster18AS
    @nicnuyster18AS 4 роки тому

    actually, I just curious and click randomly
    edit: it's 3am

  • @xiaochris7467
    @xiaochris7467 4 роки тому

    register_chrdev is an outdated function in Linux kernel module programming.

  • @MrWarcism
    @MrWarcism 4 роки тому +2

    10:40 When you're making the node with mknod, why aren't you using the c version after a successfull call to init, and removing on unload?

  • @MrEklipze
    @MrEklipze 2 роки тому

    I think some code is missing, the code in the tutorial does not print the major number shown at min 9:59

  • @patrickmullen2914
    @patrickmullen2914 Рік тому

    Great video

  • @BrianClem
    @BrianClem 5 років тому

    Awesome!
    because.... Linux