personal-website/posts/kernel-for-newbies/index.html

58 lines
31 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en dir=ltr class=scroll-smooth data-default-appearance=dark data-auto-appearance=true><head><meta charset=utf-8><meta http-equiv=content-language content="en"><meta name=viewport content="width=device-width,initial-scale=1"><meta name=theme-color content="rgb(255,255,255)"><meta http-equiv=x-ua-compatible content="ie=edge"><title>Kernel For Newbies &#183; baalajimaestro</title><meta name=title content="Kernel For Newbies &#183; baalajimaestro"><meta name=description content="Lets gear up with the necessary things. You would usually need a minimum of a dual core PC, some odd 4GB ram, and atleast 10GB disk free space. If you dont match the specs, dont worry, we can workaround it. And then, you need Linux installed, doesnt matter any distro, just grab up probably the latest ubuntu/openSUSE/fedora/Arch or whatever that suits you. Kernels can be compiled on literally any distro. They dont need much of dependencies."><link rel=canonical href=https://baalajimaestro.me/posts/kernel-for-newbies/><link type=text/css rel=stylesheet href=/css/main.bundle.min.a6debbb9c2752cfaaf987cbf5014fd1df44fb95b3494591ae67b7f8b99579a03.css integrity="sha256-pt67ucJ1LPqvmHy/UBT9HfRPuVs0lFka5nt/i5lXmgM="><script type=text/javascript src=/js/appearance.min.022d0ebc3b46a335eb1c7ef79b7f2de143d7cd5156d433638592ef1ce5f8554e.js integrity="sha256-Ai0OvDtGozXrHH73m38t4UPXzVFW1DNjhZLvHOX4VU4="></script>
<link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=manifest href=/site.webmanifest><meta property="og:title" content="Kernel For Newbies"><meta property="og:description" content="Lets gear up with the necessary things. You would usually need a minimum of a dual core PC, some odd 4GB ram, and atleast 10GB disk free space. If you dont match the specs, dont worry, we can workaround it. And then, you need Linux installed, doesnt matter any distro, just grab up probably the latest ubuntu/openSUSE/fedora/Arch or whatever that suits you. Kernels can be compiled on literally any distro. They dont need much of dependencies."><meta property="og:type" content="article"><meta property="og:url" content="https://baalajimaestro.me/posts/kernel-for-newbies/"><meta property="article:section" content="posts"><meta property="article:published_time" content="2020-07-07T12:29:41+08:00"><meta property="article:modified_time" content="2020-07-07T12:29:41+08:00"><meta name=twitter:card content="summary"><meta name=twitter:title content="Kernel For Newbies"><meta name=twitter:description content="Lets gear up with the necessary things. You would usually need a minimum of a dual core PC, some odd 4GB ram, and atleast 10GB disk free space. If you dont match the specs, dont worry, we can workaround it. And then, you need Linux installed, doesnt matter any distro, just grab up probably the latest ubuntu/openSUSE/fedora/Arch or whatever that suits you. Kernels can be compiled on literally any distro. They dont need much of dependencies."><script type=application/ld+json>[{"@context":"https://schema.org","@type":"Article","articleSection":"Blog","name":"Kernel For Newbies","headline":"Kernel For Newbies","abstract":"Lets gear up with the necessary things. You would usually need a minimum of a dual core PC, some odd 4GB ram, and atleast 10GB disk free space. If you dont match the specs, dont worry, we can workaround it. And then, you need Linux installed, doesnt matter any distro, just grab up probably the latest ubuntu\/openSUSE\/fedora\/Arch or whatever that suits you. Kernels can be compiled on literally any distro. They dont need much of dependencies.","inLanguage":"en","url":"https:\/\/baalajimaestro.me\/posts\/kernel-for-newbies\/","author":{"@type":"Person","name":"baalajimaestro"},"copyrightYear":"2020","dateCreated":"2020-07-07T12:29:41\u002b08:00","datePublished":"2020-07-07T12:29:41\u002b08:00","dateModified":"2020-07-07T12:29:41\u002b08:00","mainEntityOfPage":"true","wordCount":"1328"}]</script><meta name=author content="baalajimaestro"><script>var _paq=window._paq=window._paq||[];_paq.push(["trackPageView"]),_paq.push(["enableLinkTracking"]),function(){e="https://counter.baalajimaestro.me/",_paq.push(["setTrackerUrl",e+"86eff12f2496"]),_paq.push(["setSiteId","1"]);var e,n=document,t=n.createElement("script"),s=n.getElementsByTagName("script")[0];t.async=!0,t.src=e+"dd168412e25a.js",s.parentNode.insertBefore(t,s)}()</script><script>window.location.hostname!=="baalajimaestro.me"&&window.location.hostname!=="www.baalajimaestro.me"&&window.location.replace("https://baalajimaestro.me"+window.location.pathname)</script></head><body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"><div id=the-top class="absolute flex self-center"><a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600" href=#main-content><span class="font-bold pe-2 text-primary-600 dark:text-primary-400">&darr;</span>Skip to main content</a></div><header class="py-6 font-semibold text-neutral-900 dark:text-neutral print:hidden sm:py-10"><nav class="flex items-start justify-between sm:items-center"><div class="flex flex-row items-center"><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" rel=me href=/>baalajimaestro</a></div><ul class="flex list-none flex-col ltr:text-right rtl:text-left sm:flex-row"><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/about/ title="About Me"><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">About</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/posts/ title=Blog><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">Blog</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/contact/ title="Contact Me"><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">Contact</span></a></li></ul></nav></header><div class="relative flex flex-col grow"><main id=main-content class=grow><article><header class=max-w-prose><ol class="text-sm text-neutral-500 dark:text-neutral-400 print:hidden"><li class="inline hidden"><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/>baalajimaestro</a><span class="px-1 text-primary-500">/</span></li><li class=inline><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/posts/>Blog</a><span class="px-1 text-primary-500">/</span></li><li class="inline hidden"><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/posts/kernel-for-newbies/>Kernel For Newbies</a><span class="px-1 text-primary-500">/</span></li></ol><h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">Kernel For Newbies</h1><div class="mt-8 mb-12 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><div class="flex flex-row flex-wrap items-center"><time datetime="2020-07-07 12:29:41 +0800 +0800">7 July 2020</time><span class="px-2 text-primary-500">&#183;</span><span title="Reading time">7 mins</span></div></div></header><section class="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row"><div class="min-w-0 min-h-0 max-w-prose grow"><p>Lets gear up with the necessary things.
You would usually need a minimum of a dual core PC, some odd 4GB ram, and atleast 10GB disk free space.
If you dont match the specs, dont worry, we can workaround it.
And then, you need Linux installed, doesnt matter any distro, just grab up probably the latest ubuntu/openSUSE/fedora/Arch or whatever that suits you. Kernels can be compiled on literally any distro. They dont need much of dependencies. For deps, just check out akhilnarang/scripts</p><p>Lets jump into the what it is to compile a kernel. So, you have seen a developer sending fancy kernel zips for you, you wanna make your own kernel, with your name stamped on it? Well, thats too easy than you think.</p><p>A bit of terminologies………</p><p>Since we arent compiling a phone kernel inside a phone, you need a cross-compiler.</p><p><strong>What is cross compiler now?</strong>
A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is running. For example, a compiler that runs on a Linux amd64 but generates code that runs on Android smartphone (aarch64) is a cross compiler.</p><p><strong>What is aarch64?</strong></p><p>Thats the common architecture for all android smartphones today. Well, there is an aarch32 but, thats too old to be considered in current age.</p><p><strong>So, where do I get a damn cross-compiler, I googled, I cant find it.</strong></p><p><a href=https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads target=_blank rel="noreferrer noopener">https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads</a></p><p>Go to this link, and grab the toolchain AArch64 GNU/Linux target and is x86_64 host.
Just use some common sense, they are right there visible on that site. They are updated regularly, so be sure to check them out once in a while.</p><p>Ok, I have the toolchains, what more?
Can I compile?</p><p>Oh yes, you can almost compile now, did you clone the sources?
Probably look at your OEM code or someones code you wanna compile. Clone the sources fully with git.</p><p>Next steps, just few path changes, and finally we can hit the compile</p><blockquote><p><strong>A toolchain prefix is what all files on that dir start with. Like <code>aarch64-linux-gnu-***</code> The first part will remain almost constant. Remember the hyphen. You need to add it.</strong></p></blockquote><p>Cd to the directory where you have the cross-compiler, and then run this.</p><p><code>export CROSS_COMPILE=$(pwd)/bin/&lt;toolchain_prefix>-</code></p><p>Since you arent building a kernel for your PC, tell that to the kernel buildsystem
export ARCH=arm64 && export SUBARCH=arm64
This tells that you are building for arm64 architecture.</p><p>Find the defconfig to build.</p><blockquote><p><strong>The defconfig is, in simple terms, a file containing a lot of switches and configurations that your kernel build will read and work out the binary. If you donno anything, better dont mess with it.</strong></p></blockquote><p>All the defconfigs are located at arch/arm64/configs/xxxxx_defconfig
You need to find which defconfig your OEM/the other person used. Use your common sense again.</p><p>Next:
The glorious make.</p><p><code>make O=out &lt;defconfig_name></code></p><p>and then
<code>make O=out -j$(nproc)</code></p><p>Wait for a while, it takes around 1min-1hr depending on your system specs.
If those commands succeed, you will have an Image, Image-dtb, Image.gz, or Image.gz-dtb file at the end. They will be usually at <code>out/arch/arm64/boot/Image.gz-dtb</code> or accordingly.</p><p>Assuming you were able to compile the kernel successfully, you now need to flash it!</p><p>How do I make a dtb into zip? Rename?
No! Thats not how you do it.
Add this dtb file to the root dir of the cloned anykernel3
<a href=https://github.com/osm0sis/anykernel3 target=_blank rel="noreferrer noopener">https://github.com/osm0sis/anykernel3</a>
Get to the anykernel.sh and use a bit of common sense. Thats all. Your flashable zip must be ready.</p><p>Whats next:</p><p><strong>Upstreaming CAF:</strong></p><p>If your device has a qualcomm snapdragon processor, then sure it has CAF support. CAF is known for improving performance and other stuff with their patches.</p><p><strong>What all can you grab?</strong></p><p>Generally people grab QCACLD-3.0 and Techpack. You may also merge their own kernel repos. It contains a bit more latest patches than what your OEM would have shipped.</p><p><strong>How should I merge?</strong>
Merging CAF requires tags. They arent normal repos with branches. They are tagged so that you can fetch a specific tag at any point.
Lets say your processor is Snapdragon 660. Look up for its codename(google), its sdm660.
If you wanna know the latest tag for your processor checkout this link: <a href=https://t.me/CAFReleases target=_blank rel="noreferrer noopener">https://t.me/CAFReleases</a>
Just use telegrams search button and search for your processor.</p><p>Mind it these are all tagged with android versions. If you use a kernel thats Pie and merge a CAF tag of android 10, you might be ending with 420 conflicts, not kidding.</p><ul><li>You need to get some patience looking for your tag, as usual</li><li>Get here, <a href=https://source.codeaurora.org/quic/la/ target=_blank rel="noreferrer noopener">https://source.codeaurora.org/quic/la/</a></li><li>You will find kernel/msm-4.4, 4.9, 4.14 and a bunch others</li><li>According to whats yours, copy that link</li><li>Then its a usual git merge!</li><li>git pull <a href=https://source.codeaurora.org/quic/la/kernel/msm-4.4/ target=_blank rel="noreferrer noopener">https://source.codeaurora.org/quic/la/kernel/msm-4.4/</a> {YOUR TAG}</li><li>And boom! Again conflicts! Again resolution!</li></ul><p><strong>QCACLD Upstreaming</strong></p><p>Just look out which android is your OEM/other developer using it on. Because Pie tags can work on 10 while the other way round wont.
You found the tag name, so get to your terminal and follow a few steps.</p><p>From LKN chat in telegram,
Initial merge:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>git remote add qcacld-3.0 https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0
</span></span><span class=line><span class=cl>git fetch qcacld-3.0 &lt;TAG&gt;
</span></span><span class=line><span class=cl>git merge -s ours --no-commit --allow-unrelated-histories FETCH_HEAD
</span></span><span class=line><span class=cl>git read-tree --prefix<span class=o>=</span>drivers/staging/qcacld-3.0 -u FETCH_HEAD
</span></span><span class=line><span class=cl>git commit
</span></span></code></pre></div><p><strong>Updating to a newer tag</strong>:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>git fetch qcacld-3.0 &lt;TAG&gt;
</span></span><span class=line><span class=cl>git merge -X <span class=nv>subtree</span><span class=o>=</span>drivers/staging/qcacld-3.0 FETCH_HEAD
</span></span><span class=line><span class=cl>Repeat the above <span class=k>for</span>
</span></span><span class=line><span class=cl>qca-wifi-host-cmn and fw-api as well.
</span></span><span class=line><span class=cl>qcacld-3.0 source: https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0
</span></span><span class=line><span class=cl>fw-api source: https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/fw-api
</span></span><span class=line><span class=cl>qca-wifi-host-cmn source: https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qca-wifi-host-cmn
</span></span></code></pre></div><p>If you happen to have some merge conflicts, just understand its some bunch of C code, you can understand the logic and figure it out.</p><p>Well, techpack of 4.14 too follows similar scheme as you did for the qcacld.
The repos you need to lookout for are audio-kernel and data-kernel</p><p><strong>Linux Upstream</strong></p><p><strong>Why upstream?</strong>:</p><p>Upstreaming Linux helps you patch some critical vulnerabilities that might have been spotted after the kernel was released.
The point releases like 4.14.170, 171, indicate some vulnerability or performance or maybe even some driver fixes.
They dont usually add major changes.</p><p><strong>How to upstream?</strong>:
Linux upstream can be done from three different places as of now.
<a href=https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git target=_blank rel="noreferrer noopener">https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git</a>
<a href=https://android.googlesource.com/kernel/common/+refs target=_blank rel="noreferrer noopener">https://android.googlesource.com/kernel/common/+refs</a>
<a href=https://github.com/android-linux-stable/ target=_blank rel="noreferrer noopener">https://github.com/android-linux-stable/</a></p><p><strong>What is the diff?</strong>
Kernel/common is done by the same person who deals with merges on kernel.org git.
Its adapted for android, if you want the bleeding edge patches working perfectly on android you need to head right here.</p><p><strong>Android-Linux-Stable:</strong></p><p>This has both CAF patches and Linux stable merged. Its a sweet spot for laziness. Go checkout their readme for more: <a href=https://github.com/android-linux-stable/notes/tree/master/trees target=_blank rel="noreferrer noopener">https://github.com/android-linux-stable/notes/tree/master/trees</a></p><p>Merging any of these is bound to introduce a git conflict. Have fun resolving them.</p><p><strong>Upstreaming your kernel with ASB:</strong></p><p>What&rsquo;s android security patch doing in kernels?</p><ul><li><p>Well, Google releases security patches every month, and we know that, there&rsquo;s nothing new about it.
But they also fix some vulnerabilities they found on their Pixel Kernel. You can merge them up, showing off to your users that
security is maxxed (Bootloader unlocked, so nothing is safe)</p></li><li><p>So lets get started.</p></li><li><p>Go to Google kernel/common, if you forgot/donno what it is. Its here <a href=https://android.googlesource.com/kernel/common/ target=_blank rel="noreferrer noopener">https://android.googlesource.com/kernel/common/</a></p></li><li><p>Browse its tags, not branches!</p></li><li><p>Look for the ASB-2020-01-05-{kernel-version}-{android-version}</p></li><li><p>By android version, it means your kernel&rsquo;s base android version.</p></li><li><p>Dont randomly pick an android q patch over android p kernel base. Thats not gonna work!</p></li><li><p>Now for merging the tag!</p></li><li><p>git pull <a href=https://android.googlesource.com/kernel/common/ target=_blank rel="noreferrer noopener">https://android.googlesource.com/kernel/common/</a> {your tag you discovered}</p></li><li><p>Its gonna throw a real bunch of conflicts, use some C knowledge and common sense to resolve them.</p></li></ul><p><strong>Building with Clang:</strong></p><p>Clang is an LLVM C/C++/Objective-C compiler, which means, its basically just another C compiler. But whats so special about clang? Its faster!
When you compile 1million files, a bump of few ms on each file, bumps the whole process by minutes.</p><p><strong>Can every kernel build on clang?</strong>
Yes, as long as your kernel is above 3.18
Do I need to do something to make it support?
Grab a clang-patchset from <a href=https://github.com/nathanchance/android-kernel-clang target=_blank rel="noreferrer noopener">https://github.com/nathanchance/android-kernel-clang</a>
Checkout the branches and decide which one you need.</p><p>4.14 and above natively support clang. You dont need to mess with your source.</p><p>Have fun hacking!</p></div></section><footer class="pt-8 max-w-prose print:hidden"><div class=flex><img class="!mb-0 !mt-0 me-4 h-24 w-24 rounded-full" width=96 height=96 alt=baalajimaestro src=/logo_hud38acf383e8b0ec59a144c7188a6b106_63924_192x192_fill_q75_h2_box_center_2.webp loading=lazy><div class=place-self-center><div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400">Author</div><div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">baalajimaestro</div><div class="text-2xl sm:text-lg"></div></div></div><section class="flex flex-row flex-wrap justify-center pt-4 text-xl"><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://www.facebook.com/sharer/sharer.php?u=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;quote=Kernel%20For%20Newbies" title="Share on Facebook" aria-label="Share on Facebook" target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentcolor" d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14.0 55.52 4.84 55.52 4.84v61h-31.28c-30.8.0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://twitter.com/intent/tweet/?url=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;text=Kernel%20For%20Newbies" title="Tweet on Twitter" aria-label="Tweet on Twitter" target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentcolor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-298.558 298.558-59.452.0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055.0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421.0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391.0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04.0-57.828 46.782-104.934 104.934-104.934 30.213.0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://reddit.com/submit/?url=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;resubmit=true&amp;title=Kernel%20For%20Newbies" title="Submit to Reddit" aria-label="Submit to Reddit" target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentcolor" d="M201.5 305.5c-13.8.0-24.9-11.1-24.9-24.6.0-13.8 11.1-24.9 24.9-24.9 13.6.0 24.6 11.1 24.6 24.9.0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4.0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8.0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7.0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9.0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5.0 52.6 59.2 95.2 132 95.2 73.1.0 132.3-42.6 132.3-95.2.0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6.0-2.2-2.2-6.1-2.2-8.3.0-2.5 2.5-2.5 6.4.0 8.6 22.8 22.8 87.3 22.8 110.2.0 2.5-2.2 2.5-6.1.0-8.6-2.2-2.2-6.1-2.2-8.3.0zm7.7-75c-13.6.0-24.6 11.1-24.6 24.9.0 13.6 11.1 24.6 24.6 24.6 13.8.0 24.9-11.1 24.9-24.6.0-13.8-11-24.9-24.9-24.9z"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;title=Kernel%20For%20Newbies" title="Share on LinkedIn" aria-label="Share on LinkedIn" target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentcolor" d="M416 32H31.9C14.3 32 0 46.5.0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6.0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3.0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2.0 38.5 17.3 38.5 38.5.0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6.0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2.0 79.7 44.3 79.7 101.9V416z"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="mailto:?body=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;subject=Kernel%20For%20Newbies" title="Send via email" aria-label="Send via email" target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentcolor" d="M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1-27.64 140.9 68.65 266.2 199.1 285.1 19.01 2.888 36.17-12.26 36.17-31.49l1e-4-.6631c0-15.74-11.44-28.88-26.84-31.24-84.35-12.98-149.2-86.13-149.2-174.2.0-102.9 88.61-185.5 193.4-175.4 91.54 8.869 158.6 91.25 158.6 183.2v16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98.0036c-7.299.0-13.2 4.992-15.12 11.68-24.85-12.15-54.24-16.38-86.06-5.106-38.75 13.73-68.12 48.91-73.72 89.64-9.483 69.01 43.81 128 110.9 128 26.44.0 50.43-9.544 69.59-24.88 24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3c0-149.2-133.9-265.632-287.3-235.57zM239.1 304.3c-26.47.0-48-21.56-48-48.05s21.53-48.05 48-48.05 48 21.56 48 48.05-20.6 48.05-48 48.05z"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://telegram.me/share/url?url=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;text=Kernel%20For%20Newbies" title aria-label target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://news.ycombinator.com/submitlink?u=https://baalajimaestro.me/posts/kernel-for-newbies/&amp;t=Kernel%20For%20Newbies" title aria-label target=_blank rel="noopener noreferrer"><span class="relative inline-block align-text-bottom px-1 icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentcolor" stroke="none"><path d="M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z"/></svg></span></a></section><div class=pt-8><hr class="border-dotted border-neutral-300 dark:border-neutral-600"><div class="flex justify-between pt-3"><span><a class="group flex" href=/posts/extract-vendor/><span class="me-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">&larr;</span><span class="ltr:hidden rtl:inline">&rarr;</span></span>
<span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">Vendor Blob Extraction</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2019-10-10 21:24:00 +0530 +0530">10 October 2019</time></span></span></a></span>
<span><a class="group flex text-right" href=/posts/android-community/><span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">Android and its hostile community</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2021-06-22 12:29:41 +0530 +0530">22 June 2021</time></span></span>
<span class="ms-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">&rarr;</span><span class="ltr:hidden rtl:inline">&larr;</span></span></a></span></div></div></footer></article><div class="pointer-events-none absolute bottom-0 end-0 top-[100vh] w-12"><a href=#the-top class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 backdrop-blur hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400" aria-label="Scroll to top" title="Scroll to top">&uarr;</a></div></main><footer class="py-10 print:hidden"><nav class="pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400"><ul class="flex list-none flex-col sm:flex-row"><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=https://git.baalajimaestro.me/baalajimaestro/personal-website/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">Source Code</span></a></li><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=https://links.baalajimaestro.me title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">Socials/Portfolio</span></a></li><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=https://paypal.me/baalajimaestro title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">Donate Me</span></a></li><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=/posts/index.xml title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">RSS</span></a></li></ul></nav><div class="flex items-center justify-between"><div><p class="text-sm text-neutral-500 dark:text-neutral-400">© 2023 Maestro Creativescape.</p><p class="text-xs text-neutral-500 dark:text-neutral-400">Powered by <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://gohugo.io/ target=_blank rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://git.io/hugo-congo target=_blank rel="noopener noreferrer">Congo</a></p></div></div></footer></div></body></html>