How Linux Kernel Prints Text on Screen

แชร์
ฝัง
  • เผยแพร่เมื่อ 12 ม.ค. 2025

ความคิดเห็น • 230

  • @nirlichtman
    @nirlichtman  6 หลายเดือนก่อน +127

    - 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.

    • @MustiSapoo
      @MustiSapoo 6 หลายเดือนก่อน

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

    • @MrMassaraksh
      @MrMassaraksh 6 หลายเดือนก่อน +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 6 หลายเดือนก่อน +544

    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 6 หลายเดือนก่อน +6

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

    • @thescroogemcduck
      @thescroogemcduck 6 หลายเดือนก่อน +6

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

  • @bagfleet
    @bagfleet 6 หลายเดือนก่อน +292

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

  • @Scoopta
    @Scoopta 6 หลายเดือนก่อน +268

    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 6 หลายเดือนก่อน +37

      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 6 หลายเดือนก่อน +21

      @@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 6 หลายเดือนก่อน +20

      He's under three VMs

    • @LordDoucheBags
      @LordDoucheBags 6 หลายเดือนก่อน

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

    • @MrEdrftgyuji
      @MrEdrftgyuji 6 หลายเดือนก่อน +1

      A lot of corporate environments demand you use Edge.

  • @katiagalkina4607
    @katiagalkina4607 6 หลายเดือนก่อน +47

    The rabbit hole is much deeper than I was thinking!

  • @matthias7534
    @matthias7534 6 หลายเดือนก่อน +33

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

  • @lately-late
    @lately-late 6 หลายเดือนก่อน +8

    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.

  • @namanchhabra4136
    @namanchhabra4136 6 หลายเดือนก่อน +116

    I always wanted to know kernel that deep 🙂

    • @MrLarossi
      @MrLarossi 6 หลายเดือนก่อน +5

      we all like it deeper

  • @nickdaria
    @nickdaria 6 หลายเดือนก่อน +12

    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.

  • @timeimp
    @timeimp 6 หลายเดือนก่อน +7

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

  • @CornThatLefty
    @CornThatLefty 6 หลายเดือนก่อน +9

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

  • @KovalenkoYT
    @KovalenkoYT 6 หลายเดือนก่อน +2

    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!

  • @patrickprucha5522
    @patrickprucha5522 6 หลายเดือนก่อน +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

  • @CookieGod24
    @CookieGod24 6 หลายเดือนก่อน +8

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

  • @GrittyMaholmes
    @GrittyMaholmes 6 หลายเดือนก่อน +3

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

  • @raf.nogueira
    @raf.nogueira 2 หลายเดือนก่อน

    Thisis incredible, I always wanted to understand a little bit on how these deep system call used to work

  • @stevep5759
    @stevep5759 6 หลายเดือนก่อน +2

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

  • @sanderbos4243
    @sanderbos4243 6 หลายเดือนก่อน +1

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

  • @yonatanelizarov6747
    @yonatanelizarov6747 6 หลายเดือนก่อน +4

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

  • @shahriarmorabi8945
    @shahriarmorabi8945 5 หลายเดือนก่อน +2

    i have longed for this exact video for years. Thank you.

  • @khazarhajiyev7710
    @khazarhajiyev7710 6 หลายเดือนก่อน +3

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

  • @waldmensch2010
    @waldmensch2010 6 หลายเดือนก่อน +2

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

  • @someone5781
    @someone5781 4 หลายเดือนก่อน +1

    This was super dope! Loved this technical deep dive! I learned a ton!

  • @hobbesip1
    @hobbesip1 4 หลายเดือนก่อน

    This is a fire hose of awesome knowledge. Keep up this great work! And I'll spend the next week understanding and absorbing what you have demonstrated.

  • @DracoIgnem
    @DracoIgnem 2 หลายเดือนก่อน

    Good Content related to low-level programming and also I got a motivation now to learn proper debugging in linux. Gained a new sub and keep making this sweet contents.

  • @BorderKeeper
    @BorderKeeper 5 หลายเดือนก่อน +2

    Programmer of 10 years here. This is straight up black magic.

  • @piano_arts_2007
    @piano_arts_2007 4 หลายเดือนก่อน

    I didn't know untill now that there's a lot of stuff under the hood just to print something on the screen but with all of this it really makes sense on why is this.
    Really cool video btw.

  • @autistadolinux5336
    @autistadolinux5336 4 หลายเดือนก่อน +3

    clicked for the kernel, stayed for the gdb tutorial

  • @notyourfox
    @notyourfox 6 หลายเดือนก่อน

    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.

  • @r4co351
    @r4co351 4 หลายเดือนก่อน +1

    Just found out about your channel and I'm already hooked with it!
    שמח לראות שאתה מישראל 😊.
    Keep up the great work!

    • @nirlichtman
      @nirlichtman  4 หลายเดือนก่อน

      תודה! :)

  • @galisma
    @galisma 2 หลายเดือนก่อน

    Your content is great, I'm glad I found this channel :D

  • @vojtech_richter
    @vojtech_richter 4 หลายเดือนก่อน

    This is so cool. Thank you very much Nir for these linux deepdives!

  • @orestissabethai830
    @orestissabethai830 6 หลายเดือนก่อน

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

  • @MyWatermelonz
    @MyWatermelonz 6 หลายเดือนก่อน +1

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

  • @OrangeDied
    @OrangeDied 6 หลายเดือนก่อน +94

    kys_write?? how rude...

    • @nyvyme
      @nyvyme 6 หลายเดือนก่อน +4

      oh

    • @nyvyme
      @nyvyme 6 หลายเดือนก่อน +7

      oh "kms" exist

    • @jackkendall6420
      @jackkendall6420 6 หลายเดือนก่อน +50

      You should write text to the screen NOW!

    • @adama7752
      @adama7752 6 หลายเดือนก่อน +8

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

    • @kipchickensout
      @kipchickensout 6 หลายเดือนก่อน +1

      ​@@jackkendall6420 xD

  • @eitantal726
    @eitantal726 6 หลายเดือนก่อน +17

    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 6 หลายเดือนก่อน +17

      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 6 หลายเดือนก่อน +5

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

    • @thebuggerdev
      @thebuggerdev 6 หลายเดือนก่อน +3

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

    • @thebuggerdev
      @thebuggerdev 6 หลายเดือนก่อน +8

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

  • @JohnnySacc
    @JohnnySacc 6 หลายเดือนก่อน

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

  • @la.zanmal.
    @la.zanmal. 6 หลายเดือนก่อน +1

    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".

  • @Akronymus_
    @Akronymus_ 6 หลายเดือนก่อน

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

  • @ciCCapROSTi
    @ciCCapROSTi 5 หลายเดือนก่อน

    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.

  • @atharvakamble5785
    @atharvakamble5785 5 หลายเดือนก่อน

    This video is insanely good, not many like these!

  • @h3ssan
    @h3ssan 4 หลายเดือนก่อน

    Delicious content! Need more of this, Thank You!

  • @yahiaghadiry9885
    @yahiaghadiry9885 6 หลายเดือนก่อน +7

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

    • @jameskuo2822
      @jameskuo2822 6 หลายเดือนก่อน +1

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

  • @golarac6433
    @golarac6433 6 หลายเดือนก่อน +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  6 หลายเดือนก่อน +1

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

  • @cocogus
    @cocogus 4 หลายเดือนก่อน

    Short and descriptive. Great video.

  • @LeandroCoutinho
    @LeandroCoutinho 6 หลายเดือนก่อน +1

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

  • @whamer100
    @whamer100 6 หลายเดือนก่อน

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

  • @MadMathMike
    @MadMathMike 6 หลายเดือนก่อน

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

  • @AK-vx4dy
    @AK-vx4dy 6 หลายเดือนก่อน +1

    Excellent job and crazy skills 🤯

  • @Samstercraft77
    @Samstercraft77 5 หลายเดือนก่อน

    Now THIS is top quality content

  • @Joker9586
    @Joker9586 6 หลายเดือนก่อน

    Very interesting insight! Great content, thank you sir

  • @callummacleod2177
    @callummacleod2177 6 หลายเดือนก่อน +1

    Excellent information presentation 👌

  • @pablote325
    @pablote325 6 หลายเดือนก่อน +1

    this is an insanely good video.... thanks

  • @VaibhavSharma-zj4gk
    @VaibhavSharma-zj4gk 6 หลายเดือนก่อน +1

    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 6 หลายเดือนก่อน

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

    • @nirlichtman
      @nirlichtman  6 หลายเดือนก่อน +3

      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

  • @Swampdragon102
    @Swampdragon102 6 หลายเดือนก่อน +1

    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  6 หลายเดือนก่อน +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 6 หลายเดือนก่อน +1

      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.

  • @MO-fg2cm
    @MO-fg2cm 6 หลายเดือนก่อน

    Damn the knowledge I got through this video is amazing

  • @valerys.219
    @valerys.219 6 หลายเดือนก่อน +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.

  • @ricozhuang7625
    @ricozhuang7625 6 หลายเดือนก่อน

    That is deeper than I thought

  • @theforeskinsnatcher373
    @theforeskinsnatcher373 6 หลายเดือนก่อน

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

  • @cosmiclattemusic
    @cosmiclattemusic 6 หลายเดือนก่อน +1

    this is why I love TH-cam

  • @reddishradish7590
    @reddishradish7590 5 หลายเดือนก่อน +1

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

    • @nirlichtman
      @nirlichtman  5 หลายเดือนก่อน

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

  • @coshvjicujmlqef6047
    @coshvjicujmlqef6047 5 หลายเดือนก่อน +1

    how does kernel printk work? i do not want to use format string but just write

  • @saurabhrajguru1636
    @saurabhrajguru1636 4 หลายเดือนก่อน

    beautifully broken down. thanks!

  • @ElPikacupacabra
    @ElPikacupacabra 6 หลายเดือนก่อน +3

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

    • @nirlichtman
      @nirlichtman  6 หลายเดือนก่อน +6

      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 6 หลายเดือนก่อน +2

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

  • @eliphazbouye
    @eliphazbouye 6 หลายเดือนก่อน +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  6 หลายเดือนก่อน +3

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

    • @eliphazbouye
      @eliphazbouye 5 หลายเดือนก่อน

      @@nirlichtman Very awesome thank you 🙏

  • @iwikiwikymw
    @iwikiwikymw 5 หลายเดือนก่อน

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

  • @Samstercraft77
    @Samstercraft77 5 หลายเดือนก่อน

    THE HELLO WORLD TYPING SPEED IS CRAZY

  • @skylarmorknerbrown
    @skylarmorknerbrown 6 หลายเดือนก่อน +1

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

  • @gustawitresh
    @gustawitresh 6 หลายเดือนก่อน

    idk why, but this is fun to watch.

  • @pal-v3d
    @pal-v3d 5 หลายเดือนก่อน

    Hoping more videos like this. ❤

  • @mzg147
    @mzg147 5 หลายเดือนก่อน

    Why does it print "H" 3 times? At 12:15 you hit continue execution, so it should go to the next letter, "e" right? I would expect red "H" and green "e".

    • @TildaAzrisk
      @TildaAzrisk 4 หลายเดือนก่อน

      It would have been an e, but in modifiying the byte for the color, the byte for the character was overwritten as well.
      At 12:32, The original value of 0x765 (Light Gray 'e') was changed to be 0x248 (Green 'H').
      For Green 'e', the value would of have had to have been set to 0x265. 0x2 being the color Green, and 0x65 being the ASCII code for 'e'.

  • @muhammadmahad
    @muhammadmahad 6 หลายเดือนก่อน

    Thanks for such an amazing video.

    • @muhammadmahad
      @muhammadmahad 6 หลายเดือนก่อน

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

    • @nirlichtman
      @nirlichtman  6 หลายเดือนก่อน +1

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

    • @muhammadmahad
      @muhammadmahad 6 หลายเดือนก่อน

      @@nirlichtman Thank you Nir :)

  • @joshjackson3471
    @joshjackson3471 5 หลายเดือนก่อน

    Amazingly informative video, I was always interested in the deeper workings of printing text but I don't have the Linux knowledge yet to pursue it myselfSomething I noticed while watching, I think the reason why you couldn't modify the tc value in gdb was because it's a string or struct pointer; that's usually where I see the lvalue error in my own programming at least. Could probably dereference it and then set the value

  • @iflux8821
    @iflux8821 5 หลายเดือนก่อน

    This is great! Thank you very much!

  • @Jonathan-ru9zl
    @Jonathan-ru9zl 6 หลายเดือนก่อน +2

    You back!

  • @dovonun
    @dovonun 6 หลายเดือนก่อน

    You are an absolute legend 🤯

  • @ghostsdefeated4078
    @ghostsdefeated4078 6 หลายเดือนก่อน +1

    this channel is cracked

  • @sierra991
    @sierra991 5 หลายเดือนก่อน +1

    i feel like i am linus torvalds after watching this video

  • @YRBYD
    @YRBYD 6 หลายเดือนก่อน +1

    Great video!

  • @kaankarakoc7680
    @kaankarakoc7680 6 หลายเดือนก่อน

    thanks for another great video!

  • @app3264
    @app3264 6 หลายเดือนก่อน

    Love your videos!

  • @matematikaadit
    @matematikaadit 6 หลายเดือนก่อน

    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?

  • @doug9000
    @doug9000 6 หลายเดือนก่อน

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

  • @palapapa0201
    @palapapa0201 6 หลายเดือนก่อน

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

    • @nirlichtman
      @nirlichtman  6 หลายเดือนก่อน

      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"

  • @mimovk
    @mimovk 4 หลายเดือนก่อน

    How did u acquire all of this knowledge? Any courses or routes you recommend? Thanks

    • @nirlichtman
      @nirlichtman  4 หลายเดือนก่อน

      Check out the welcome link on my channel for recommended resources

  • @BudgiePanic
    @BudgiePanic 5 หลายเดือนก่อน

    Very cool. How do you get so comfortable with CLI tools? It's like you don't even need a mouse.

    • @nirlichtman
      @nirlichtman  5 หลายเดือนก่อน

      Check the welcome link on my channel for recommended learning resources and additional information, I indeed prefer using the keyboard over mouse control in a lot of cases, but I wouldn't say a mouse is completely unneeded, for example for graphical stuff it is very useful.

  • @为民程
    @为民程 5 หลายเดือนก่อน

    learns a lot, thanks!

  • @ecuas_7
    @ecuas_7 5 หลายเดือนก่อน

    This is so cool, thank you

  • @iyar220
    @iyar220 6 หลายเดือนก่อน +13

    Yayyy

  • @David-wh8zs
    @David-wh8zs 6 หลายเดือนก่อน

    This is such a good video

  • @Nop_Nop_0x90
    @Nop_Nop_0x90 6 หลายเดือนก่อน

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

    • @nirlichtman
      @nirlichtman  6 หลายเดือนก่อน

      More kernel videos are planned :)

  • @farpurple
    @farpurple 3 หลายเดือนก่อน

    You just went deeper and deeper, and when you met the floor, you just got smaller, and went even deeper between atoms, between quarks, between folds of reality...

  • @sezarstarscourge7368
    @sezarstarscourge7368 6 หลายเดือนก่อน

    wonderful explaination ,

  • @phyzix_phyzix
    @phyzix_phyzix 5 หลายเดือนก่อน

    How does echo init give the file as input to the cpio command?

    • @nirlichtman
      @nirlichtman  5 หลายเดือนก่อน

      via stdin, its how you tell cpio which files to archive

  • @abdelrahmanyasser5720
    @abdelrahmanyasser5720 6 หลายเดือนก่อน

    Great job, Thanks bro

  • @binux5592
    @binux5592 6 หลายเดือนก่อน

    Can yolu create 64 bit bootloader with c and asm

  • @MrMassaraksh
    @MrMassaraksh 6 หลายเดือนก่อน

    Thank you!
    Good stuff

  • @ethical-not-evil
    @ethical-not-evil 5 หลายเดือนก่อน

    pls do videos about v8 engine debug or idk things like that

  • @justinnamilee
    @justinnamilee 6 หลายเดือนก่อน

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

  • @insert0name0here91
    @insert0name0here91 6 หลายเดือนก่อน

    How did you get the linux terminal on powershell?

    • @nirlichtman
      @nirlichtman  6 หลายเดือนก่อน

      using wsl command

    • @insert0name0here91
      @insert0name0here91 5 หลายเดือนก่อน

      @@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  5 หลายเดือนก่อน

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

    • @insert0name0here91
      @insert0name0here91 5 หลายเดือนก่อน

      @@nirlichtman ok