# Initial ram disk

This repository contains a book-in-progress about the Linux kernel and its insides.

The goal of this project is simple – to share knowledge about the Linux kernel internals and related low-level topics. If you’re curious about what’s under the hood, see the [Table of Contents](https://github.com/0xAX/linux-insides/blob/master/SUMMARY.md).

## Chapter status (kernel v6.19.0)

> \[!IMPORTANT] I started writing this series when the latest version of the kernel was `3.18`. A lot has changed since then, and I am in progress of updating the content to reflect modern kernels (v6.18+). I’ll continue revising the posts as the kernel evolves.

* [x] Booting (updated for v6.19.0)
* [ ] Initialization (pending v6.18.0 review)
* [ ] Interrupts (pending v6.18.0 review)
* [ ] System calls (pending v6.18.0 review)
* [ ] Timers and time management (pending v6.18.0 review)
* [ ] Synchronization primitives (pending v6.18.0 review)
* [ ] Memory management (pending v6.18.0 review)
* [ ] Cgroups (pending v6.18.0 review)
* [ ] SMP (pending v6.18.0 review)
* [ ] Concepts (pending v6.18.0 review)
* [ ] Data Structures in the Linux Kernel (pending v6.18.0 review)
* [ ] Theory (pending v6.18.0 review)
* [ ] Initial ram disk (pending v6.18.0 review)
* [ ] Misc (pending v6.18.0 review)
* [ ] KernelStructures (pending v6.18.0 review)

## Requirements

* Prior knowledge about the [Assembly language](https://en.wikipedia.org/wiki/Assembly_language)
* Proficiency with the [C programming language](https://en.wikipedia.org/wiki/C_\(programming_language\))
* Additionally, you can find lots of useful information about x86\_64 processors in [Intel Software Developer Manuals](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)

> \[!TIP] You can get started with Assembler with my other series of posts about the [Assembly programming](https://github.com/0xAX/asm).

## Translations

Thanks to the volunteers, the posts about Linux are translated into different languages.

> \[!NOTE] The translations may diverge from the original content.

* [Brazilian Portuguese](https://github.com/mauri870/linux-insides)
* [Chinese](https://github.com/hust-open-atom-club/linux-insides-zh)
* [Japanese](https://github.com/tkmru/linux-insides-ja)
* [Korean](https://github.com/junsooo/linux-insides-ko)
* [Russian](https://github.com/proninyaroslav/linux-insides-ru)
* [Spanish](https://github.com/leolas95/linux-insides)
* [Turkish](https://github.com/ayyucedemirbas/linux-insides_Turkish)

## Contribution

Read the [Contribution guide](https://github.com/0xAX/linux-insides/blob/master/CONTRIBUTING.md) to learn how to contribute to the project. When contributing, make sure to follow the [Code of Conduct](https://github.com/0xAX/linux-insides/blob/master/CODE_OF_CONDUCT.md).

If you have any questions or suggestions, feel free to ping me at Twitter [@0xAX](https://twitter.com/0xAX), add an [issue](https://github.com/0xAX/linux-insides/issues/new), or drop me an [email](mailto:anotherworldofworld@gmail.com).

## Mailing list

There is a Google group mailing list (`kernelhacking@googlegroups.com`) for learning the kernel source code.

To join the group, send an email to `kernelhacking+subscribe@googlegroups.com`. You will receive a confirmation email. After replying to it, you will be added to the mailing list.

> \[!TIP] If you have a Google account, you can simply open the [archive page](https://groups.google.com/forum/#!forum/kernelhacking) and click **Apply to join group**. You will be approved automatically.

## License

This project is licensed under the [BY-NC-SA Creative Commons](http://creativecommons.org/licenses/by-nc-sa/4.0/).

## Author

The technical content is written by [@0xAX](https://x.com/0xAX).

Additional big thanks to [@klaudiagrz](https://github.com/klaudiagrz) for text improvements.
