How Linux Kernel Prints Text on Screen

Sdílet
Vložit
  • čas přidán 7. 07. 2024
  • In this video we will dive into a simple call to the printf function and see what happens in the kernel and how it gets eventually printed on screen.
    For more information about setting up an environment for kernel dev, checkout the welcome link on my channel.
    Docs used in video:
    - docs.kernel.org/dev-tools/gdb...
    - wiki.osdev.org/Text_UI
  • Věda a technologie

Komentáře • 179

  • @nirlichtman
    @nirlichtman  Před 20 dny +70

    - The display mechanism the kernel chooses depends on the setup, this is what it chose in the case of standard QEMU config & x86_64, but on other machines it may use something else for example a framebuffer. VGA mode 3 is a common x86/x64 choice, especially for older machines, but modern ones may not support it at all.
    - The reason it printed 3 "H" letters and not "Hel" is that I recycled the same command that I used to modify the first letter to red, and only changed the color so it brought over the same first letter each time.

    • @user-il3uq6cx4e
      @user-il3uq6cx4e Před 19 dny

      @@nirlichtman Pls Make Linux OS But With Debian-Based

    • @MrMassaraksh
      @MrMassaraksh Před 14 dny +1

      Thank you for explaining why H is printed 3 times, because it can be understood as you run over the same char, but in reality you just moved further in “array of letters”.

  • @FernandoMumbach
    @FernandoMumbach Před 21 dnem +383

    This video is a tutorial on:
    - How printf works in the kernel
    - How to the debug the kernel with GDB
    - An intro into how to to use GDB
    - A guide on how to look up kernel documentation
    And several things more. Condensed in 12 minutes. This is perfect!! I've never seen a video as good as this one explaining anything!

    • @Henrix1998
      @Henrix1998 Před 19 dny +4

      I have used GDB for about a year now every week and learned new commands

    • @thescroogemcduck
      @thescroogemcduck Před 17 dny +1

      This is more than an intro on how to use GDB lol, I thought I was decent with it but this is next level.

  • @Scoopta
    @Scoopta Před 21 dnem +154

    You're making one of the nerdiest linux videos I've seen on windows using MS edge...saying I'm confused is an understatement

    • @marsovac
      @marsovac Před 21 dnem +19

      What you use doesn't matter. It is how well you use it...
      On Windows at least he doesn't have to deal with Wayland issues :D
      What I was wondering the most is why didn't he turn off the search box in the taskbar :P

    • @Scoopta
      @Scoopta Před 21 dnem +15

      @@marsovac ...as someone who runs wayland without Xwayland or X11 compatibility at all...and as a developer of reasonably widely used wayland software...I take issue to that remark lol =D...that aside the search box is terrible.

    • @ddthegr8
      @ddthegr8 Před 20 dny +10

      He's under three VMs

    • @LordDoucheBags
      @LordDoucheBags Před 19 dny

      @@marsovac wayland on newest nvidia drivers works well right now. Fedora btw

    • @MrEdrftgyuji
      @MrEdrftgyuji Před 14 dny

      A lot of corporate environments demand you use Edge.

  • @ericlindell3777
    @ericlindell3777 Před 21 dnem +207

    ”we’re gonna have to dive in a little bit to the assembly”. What a madlad ❤

  • @maciej.opalinski
    @maciej.opalinski Před 16 dny +9

    no unnecessary talking, straight to the point, extremely well explained, this is why I pay for internet, thank you brother

  • @namanchhabra4136
    @namanchhabra4136 Před 21 dnem +89

    I always wanted to know kernel that deep 🙂

  • @katiagalkina4607
    @katiagalkina4607 Před 21 dnem +26

    The rabbit hole is much deeper than I was thinking!

  • @ismbks
    @ismbks Před 21 dnem +20

    this feels like i'm watching paid content for free

  • @OrangeDied
    @OrangeDied Před 21 dnem +74

    kys_write?? how rude...

    • @nyvyme
      @nyvyme Před 21 dnem +2

      oh

    • @nyvyme
      @nyvyme Před 21 dnem +5

      oh "kms" exist

    • @jackkendall6420
      @jackkendall6420 Před 21 dnem +43

      You should write text to the screen NOW!

    • @adama7752
      @adama7752 Před 21 dnem +6

      I agree, the side effects of this function are wild.

    • @kipchickensout
      @kipchickensout Před 21 dnem +1

      ​@@jackkendall6420 xD

  • @lukelee2075
    @lukelee2075 Před 18 dny +1

    The magic behind a standard library function-and the POSIX system calls-is what every CS student would have wondered about for once. Thank you for making this video. It brought back memories of being curious about how a computer works.

  • @nickdaria
    @nickdaria Před 21 dnem +9

    Excellent video as always. Love seeing well-made low level computing content that does deep dives into while keeping it just dense enough to watch in your free time.
    I feel like many videos on this topic are always either way too short/simplified or way too long and drawn out. You always hit it on the head.

  • @CornThatLefty
    @CornThatLefty Před 21 dnem +9

    This series of videos is awesome. Just explains and explores a low-level topic quickly and without any fluff.

  • @gustawitresh
    @gustawitresh Před 21 dnem +7

    WTF, bro just said. "I don't really like AT&T *assembly* syntax, so I'm going to intel *syntax*"
    This man is crazy

  • @timeimp
    @timeimp Před 19 dny +4

    This is like a whole subject at uni in less than 15 minutes. Subscribed!

  • @stevep5759
    @stevep5759 Před 14 dny +2

    Really fast paced and right to the point. New sub 🎉

  • @CookieGod24
    @CookieGod24 Před 21 dnem +7

    I don’t know why but the way you say ‘config’ sounds satisfying

  • @GrittyMaholmes
    @GrittyMaholmes Před 18 dny +2

    I love the confidence in your voice , i wana be this confidence when coding .

  • @patrickprucha5522
    @patrickprucha5522 Před 21 dnem +8

    I like the way you explain things. I also noticed that you are very good and very at ease with programming languages. I will look into more of your videos / media when i jump into c programming. thanks again

  • @KovalenkoYT
    @KovalenkoYT Před 19 dny +1

    I just discovered this channel today, and with two videos that I have seen I feel that in half an hour I have learned more than what I learned in many classes at the university. Subscribed!

  • @khazarhajiyev7710
    @khazarhajiyev7710 Před 21 dnem +2

    Have been looking for a channel like that for a long time, thank you!

  • @JohnnySacc
    @JohnnySacc Před 21 dnem

    That was awesome, I'd love a full series of this

  • @yonatanelizarov6747
    @yonatanelizarov6747 Před 20 dny +3

    Thanks man, really useful. Keep up the great work!

  • @eitantal726
    @eitantal726 Před 21 dnem +13

    What happens when you have a console window, rather than raw VGA as your tty? How does it "know" that stdout is mapped to VGA in this case? is it done during process creation?

    • @thebuggerdev
      @thebuggerdev Před 21 dnem +12

      When a process writes to stdout (file descriptor = 1) typically it is managed by a parent process. Parent process can catch this data (like for example console window process) or pass through to it's parent. Init is a special process, that starts all other proceses, so it's stdout is rendered by a kernel (also it can pass through data from a process, that is it's child)

    • @eitantal726
      @eitantal726 Před 21 dnem +3

      @@thebuggerdev So the is full process something like this? (let's say, XTerm) printf -> kernel -> parent process -> x11

    • @thebuggerdev
      @thebuggerdev Před 21 dnem +2

      @@eitantal726 yes, in this example XTerm is a parent process

    • @thebuggerdev
      @thebuggerdev Před 21 dnem +7

      @@eitantal726 and to be precise: communication of xterm with x11 is also done by kernel's functions

  • @waldmensch2010
    @waldmensch2010 Před 21 dnem +1

    these videos are so cool and nerdy and the best of it you learn so much

  • @orestissabethai830
    @orestissabethai830 Před 19 dny

    We are going to need some more of that gdb magic you are doing. Nice video!

  • @sanderbos4243
    @sanderbos4243 Před 20 dny

    This is such a good reference video for anyone wanting to dive into the kernel

  • @ciCCapROSTi
    @ciCCapROSTi Před 3 dny

    Came here to learn about the kernel, but instead got an intermediate GDB tutorial. I'm thankful, I'm a lot more interested in GDB than the Linux kernel, actually.
    As for the video mode, yeah, I remember programming assembly as a child, I know how that mode works. I produced several full screen vomits of blinking colors.

  • @Joker9586
    @Joker9586 Před 14 dny

    Very interesting insight! Great content, thank you sir

  • @MadMathMike
    @MadMathMike Před 21 dnem

    You're a freaking wizard, Nic. Great video! 👍😊

  • @atharvakamble5785
    @atharvakamble5785 Před 8 dny

    This video is insanely good, not many like these!

  • @AK-vx4dy
    @AK-vx4dy Před 20 dny

    Excellent job and crazy skills 🤯

  • @Akronymus_
    @Akronymus_ Před 20 dny

    Finally found this vid. I clicked on a different one when seeing this in the periphery and was searching for it ever since.

  • @MyWatermelonz
    @MyWatermelonz Před 21 dnem +1

    Dang breh aside from just screen printing, I learned some gdb and vim. Lots of good stuff.

  • @callummacleod2177
    @callummacleod2177 Před 16 dny

    Excellent information presentation 👌

  • @kaankarakoc7680
    @kaankarakoc7680 Před 21 dnem

    thanks for another great video!

  • @app3264
    @app3264 Před 20 dny

    Love your videos!

  • @YRBYD
    @YRBYD Před 20 dny +1

    Great video!

  • @Jonathan-ru9zl
    @Jonathan-ru9zl Před 21 dnem +2

    You back!

  • @pablote325
    @pablote325 Před 20 dny

    this is an insanely good video.... thanks

  • @yahiaghadiry9885
    @yahiaghadiry9885 Před 21 dnem +7

    Amazing video
    But I have a question, all those boot logs before printing the H, how are those printed.

    • @jameskuo2822
      @jameskuo2822 Před 21 dnem +1

      printk(); in kernel space, in (very, very) shorts. I do believe they use different ways to printf() to implement printk().

  • @MrMassaraksh
    @MrMassaraksh Před 14 dny

    Thank you!
    Good stuff

  • @muhammadmahad
    @muhammadmahad Před 18 dny

    Thanks for such an amazing video.

    • @muhammadmahad
      @muhammadmahad Před 18 dny

      Could you please share the tips to become good in low level things just like you?

    • @nirlichtman
      @nirlichtman  Před 17 dny +1

      Yes, there are a bunch of tips on my welcome page, link in the channel description

    • @muhammadmahad
      @muhammadmahad Před 17 dny

      @@nirlichtman Thank you Nir :)

  • @notyourfox
    @notyourfox Před 17 dny

    Thanks a lot! I'm trying to grasp system calls and standard library for my own OS. I am always shocked by the complexity of the code in Linux kernel and the amount of knowledge and talent it required to write.

  • @dovonun
    @dovonun Před 20 dny

    You are an absolute legend 🤯

  • @MO-fg2cm
    @MO-fg2cm Před 21 dnem

    Damn the knowledge I got through this video is amazing

  • @user-dv9dl2cl1p
    @user-dv9dl2cl1p Před dnem

    learns a lot, thanks!

  • @David-wh8zs
    @David-wh8zs Před 21 dnem

    This is such a good video

  • @abdelrahmanyasser5720
    @abdelrahmanyasser5720 Před 19 dny

    Great job, Thanks bro

  • @sezarstarscourge7368
    @sezarstarscourge7368 Před 19 dny

    wonderful explaination ,

  • @gustawitresh
    @gustawitresh Před 21 dnem

    idk why, but this is fun to watch.

  • @ecuasonic_7
    @ecuasonic_7 Před 22 hodinami

    This is so cool, thank you

  • @cyberbiosecurity
    @cyberbiosecurity Před 13 dny

    Awesome, thank you

  • @GreeneThumbs
    @GreeneThumbs Před 21 dnem

    This is fantastic

  • @whamer100
    @whamer100 Před 21 dnem

    wow i didnt expect displaying text to be so complicated, that's interesting

  • @LeandroCoutinho
    @LeandroCoutinho Před 21 dnem

    Amazing video!
    Linux kernel + gdb + qemu = ❤
    I hope you manage to build more videos like this. =D
    Hardware and software interaction would be great. 😃

  • @ricozhuang7625
    @ricozhuang7625 Před 19 dny

    That is deeper than I thought

  • @golarac6433
    @golarac6433 Před 20 dny +2

    I use gdb a lot but somehow didn't know about the 'advance' command, I would put a breakpoint when I wanted to advance forward (that I had to delete or disable later). So that's nice, thanks :)
    It might be worth adding that the vga text mode is a very legacy functionality. Qemu still supports it since its very easy to use from software but I'm not even sure if modern gpus support that. I think all modern gpus support only a normal linear pixel frame buffer where you'd have to blit your font characters manually.

    • @nirlichtman
      @nirlichtman  Před 20 dny +1

      That's a good point, added information about this in the pinned comment.

  • @cosmiclattemusic
    @cosmiclattemusic Před 18 dny

    this is why I love CZcams

  • @soleroks
    @soleroks Před 20 dny

    Well done.

  • @ElPikacupacabra
    @ElPikacupacabra Před 20 dny +2

    Why did it print 3 "H"? I tought it would continue with the other letters...

    • @nirlichtman
      @nirlichtman  Před 20 dny +4

      Reason it printed 3 "H"s is that when I changed to the other colors, I reused the command in which I modified the "H" to red, and only changed the color, so it kept the same character as before.

    • @ElPikacupacabra
      @ElPikacupacabra Před 20 dny +2

      @@nirlichtman Ah, right. You did not update just the top byte.

  • @theforeskinsnatcher373

    some cool gdb tricks I didn't know. But I think I'll use the tui/disassembly view instead of jumping to addresses

  • @iyar220
    @iyar220 Před 21 dnem +12

    Yayyy

  • @jayhanjaelee
    @jayhanjaelee Před 2 dny

    It’s so interesting👍

  • @valerys.219
    @valerys.219 Před 20 dny +1

    essential things, nicely done. But IMHO you missed one point, how vga works (logical level), ie what the kernel write to the vga memory in order to see an 'H' on the screen. Anyway thanks for sharing.

  • @chrisking1017
    @chrisking1017 Před 18 dny

    How does this change in a terminal app in a desktop environment?

  • @matematikaadit
    @matematikaadit Před 21 dnem

    I guess if you wanna keep the character value but only change the color, you do bitwise AND to the value, for example $r10w=$r10w & 0x2FF (for green color) right? Did GDB support this expression?

  • @leonardopohlmann2723
    @leonardopohlmann2723 Před 21 dnem +1

    Nice👌

  • @la.zanmal.
    @la.zanmal. Před 20 dny

    0:56 For the record: the `-j` flag stands for "jobs", and tells `make` how many actions it may run in parallel. It can generally make a complex build faster, up to the limit of the number of CPU cores you have. At least for me, the numeric argument isn't necessary and by just passing `-j`, "make will not limit the number of jobs that can run simultaneously".

  • @NimaqAlizadeh
    @NimaqAlizadeh Před 20 dny

    Nice 🎉

  • @justinnamilee
    @justinnamilee Před 21 dnem

    Oh damn, I'm coming in for another "Neat!"

  • @VaibhavSharma-zj4gk
    @VaibhavSharma-zj4gk Před 21 dnem

    Thats a knowledge packed video. I understood it in parts. Is there any past video i need to see to better inderstand this one?

    • @sanderbos4243
      @sanderbos4243 Před 20 dny

      Depends on which parts you were and weren't able to follow. Any GDB tutorial will be a good place to start

    • @nirlichtman
      @nirlichtman  Před 20 dny +1

      I would recommend checking out my videos about making a simple distro, Linux system calls explained, and generally my Linux playlists. Also, welcome to check out my welcome page for recommended resources, link on my channel

  • @guilherme5094
    @guilherme5094 Před 21 dnem

    👍👍Thanks!

  • @umikaliprivate
    @umikaliprivate Před 6 dny

    Could you make a video about how to make a simple wayland-based window manager?

  • @eliphazbouye
    @eliphazbouye Před 21 dnem +3

    Nir please I want to know what you way to learn efficiently ? can you give me our method ? some tips ? . Great video thanks

    • @nirlichtman
      @nirlichtman  Před 21 dnem +3

      Thanks! Check out my welcome page for more information and recommended resources (link on my channel)

    • @eliphazbouye
      @eliphazbouye Před 7 dny

      @@nirlichtman Very awesome thank you 🙏

  • @conandoyle1859
    @conandoyle1859 Před 10 dny

    great!

  • @ghostsdefeated4078
    @ghostsdefeated4078 Před 18 dny

    this channel is cracked

  • @user-fd4cy8je7m
    @user-fd4cy8je7m Před 20 dny

    شكرا لك

  • @user-sq9oj2zu2v
    @user-sq9oj2zu2v Před 20 dny

    Nice

  • @reddishradish7590
    @reddishradish7590 Před 8 dny

    I'm fairly new to linux.. Can someone tell me what he did on 9:17, to split the screen??

    • @nirlichtman
      @nirlichtman  Před 8 dny

      :term command on Vim, more info on my Vim tips playlist

  • @binux5592
    @binux5592 Před 18 dny

    Can yolu create 64 bit bootloader with c and asm

  • @palapapa0201
    @palapapa0201 Před 17 dny

    9:17 How did you do the "term" thing?

    • @nirlichtman
      @nirlichtman  Před 17 dny

      When inside of a terminal in Vim you can use CTRL+W and then ":" to run commands, in this case I ran the ":term" command to open a new terminal. more information about these kinds of stuff in my playlist "Vim Tips"

  • @nathanielthomas4437
    @nathanielthomas4437 Před 10 dny

    Driver devs can get a lot of hate sometimes, but if it weren't for them, we wouldn't get to see the hard work of printf()!

  • @Swampdragon102
    @Swampdragon102 Před 20 dny

    I still don't know why the random modified memory appears on the terminal, but I've learned the basics of GDB, so that's something

    • @nirlichtman
      @nirlichtman  Před 20 dny +2

      On VGA text mode 3 (the display mode the kernel decided to use in this case), the text on screen is manipulated through memory, so when writing to a specific memory address we can change the contents on the screen. (more info on the OSDev wiki article link in description)

    • @clonkex
      @clonkex Před 20 dny

      That memory was about to be printed anyway. It was H to start with because that was the beginning of Hello World. He just found where it was about to happen and changed the memory just before it did. Then because he kept using the same second byte and only changing the colour byte, it printed more H characters instead of the e and l it would have otherwise printed.

  • @doug9000
    @doug9000 Před 20 dny

    would be cool to show how graphical virtual terminals work in low level too.

  • @insert0name0here91
    @insert0name0here91 Před 14 dny

    How did you get the linux terminal on powershell?

    • @nirlichtman
      @nirlichtman  Před 12 dny

      using wsl command

    • @insert0name0here91
      @insert0name0here91 Před 12 dny

      @@nirlichtman after I used that I ran "make defconfig" and it gives me the error "make: *** No rule to make target 'defconfig'. Stop"

    • @nirlichtman
      @nirlichtman  Před 11 dny

      @@insert0name0here91 check out my video about making a simple distro (or the welcome link on my channel) for setup information

    • @insert0name0here91
      @insert0name0here91 Před 11 dny

      @@nirlichtman ok

  • @Trollox
    @Trollox Před 21 dnem

    How do you split view with the browser so easily?

    • @nirlichtman
      @nirlichtman  Před 20 dny +1

      I use LightWM, it's a tiling window manager for Windows I am working on (more info on the welcome link on my channel)

    • @clonkex
      @clonkex Před 20 dny

      Windows has some built in shortcuts if you don't want a custom window manager (win+left for instance) but it's not as good as what this guy has

  • @skylarmorknerbrown
    @skylarmorknerbrown Před 20 dny

    This man is making some of the most informative and interesting Linux videos on all of youtube... using Windows 10

  • @TSW3585
    @TSW3585 Před dnem

    Bro. Are you operative system developer ? how the hell can I learn that stuffs ?. This is a serius question. What books did you read about this ?

  • @Nop_Nop_0x90
    @Nop_Nop_0x90 Před 16 dny

    Can you start a series on deeo dive into Linux kernal ? (A real detailed one)

  • @mickolesmana5899
    @mickolesmana5899 Před 21 dnem +4

    Noob arch user : nooo you can't just run both windows and linux
    Chad Kernel dev : anyway I just opened Qemu on Linux from ssh windows

  • @chinchiang4345
    @chinchiang4345 Před 9 dny

    AMZ!!! love it !!! THX U
    U is very handsome!!!! ❤❤❤❤❤❤❤❤❤❤

  • @its_code
    @its_code Před 20 dny

    ❤❤❤😊

  • @MykolaTheVaultDweller
    @MykolaTheVaultDweller Před 21 dnem +8

    based

  • @w3w3w3
    @w3w3w3 Před 19 dny

    interesting

  • @codewizard58
    @codewizard58 Před 9 dny

    int(9, "hi there" )

  • @eitantal726
    @eitantal726 Před 21 dnem

    personally, I'm used to the convenience of a visual IDE and debugger

    • @thebuggerdev
      @thebuggerdev Před 21 dnem

      JetBrains C Lion can connect to GDB (including qemu) and it works great, but unless using beta version it's not free. Do you know any free visual debuggers that works with remote GDB?

    • @eitantal726
      @eitantal726 Před 21 dnem

      @@thebuggerdev I use IAR when I debug, but I imagine VScode can interface with gdb

    • @thebuggerdev
      @thebuggerdev Před 21 dnem

      @@eitantal726 I tested multiple VSCode plugins with no success

  • @evildragon1774
    @evildragon1774 Před 21 dnem +1

    i'm not judging you but, why are you using windows when you're very interested in linux?

  • @paechan
    @paechan Před 20 dny

    "more fun to read" this guy😂

  • @MissNorington
    @MissNorington Před 20 dny

    Why is Linux using VGA mode 3 in 2024?????

    • @nirlichtman
      @nirlichtman  Před 20 dny +1

      It still supports it, but what it uses depends in the end on your setup, check out the pinned comment.

  • @user-il3uq6cx4e
    @user-il3uq6cx4e Před 8 dny

    Please Make Linux With Based-Debian