🌿 E6: Chill OS dev gardening: Out of tree builds + build system 🌿
(detailed timestamps in comments)
Welcome! This is my chill Operating Systems development “gardening” project.
The “gardening philosophy” is to have fun, above everything else. This means taking baby steps and locking in small wins before building up for more ambitious projects. People also call this “hacking” on something.
My personal goal & vision is to build a minimal, high quality OS foundation which can be used for play, experimentation, and learning.
I’m personally not an expert systems programmer, although I’d like to be someday. Right now, but I’m just an intermediate one — I worked in infosec for 7 years, and music tech for 3 years. I’ve been exposed to the Linux kernel in both settings, but in highly constrained contexts, and mostly reading code, not writing it.
1:34: 🌱 Exploring kernel dependencies, specifically the init code, in the project.
12:36: 🧠 Understanding the process of converting kernel init code to an executable binary blob.
24:04: 🧠 Insights into minimal user space code triggering system calls and kernel behavior.
33:14: 🌿 Understanding the initialization process of an operating system kernel.
42:10: 🧠 Understanding how Linker automatically creates symbols for binary blobs in C code.
55:15: 💻 Discussion on optimizing build system for kernel development using makefile rules.
1:10:27: 🌿 Troubleshooting issues with build system configuration and out of tree builds
1:25:53: 🌿 Development struggles with makefiles, dependencies, and virtual machines.
1:40:57: 💻 Operating system development challenges with build system and out of tree builds
2:04:23: 🌿 Development progress on out-of-tree builds and build system enhancements.
2:13:28: 🌱 Exploration of OS development progress, user space initiation, and upcoming video uploads.
Recapped using Tammy AI
by offlinemark
linux foundation
1:34: 🌱 Exploring kernel dependencies, specifically the init code, in the project.
1:34: Focus on improving the build system by organizing directory structure.
2:21: Working on moving kernel objects to the build directory.
5:03: Investigating init code files and their purpose in user space.
8:07: Confusion regarding the init code functionality and its execution.
10:12: Attempting to understand the usage of init code through main.c file.
11:43: Analyzing the setup of segment descriptors and process state in init code.
12:12: Expressing confusion and lack of clarity on the external references in the code.
12:36: 🧠 Understanding the process of converting kernel init code to an executable binary blob.
12:36: Kernel init code is initially in assembly language
13:33: Init code contains functions like start, exit, and infiniteLoop
16:01: The process involves linking object files to create an executable
19:06: Object copy is used to transform the object file into a proper elf file
22:53: The final init code is a binary blob for direct execution
23:16: Init code serves as the first user space code executed by the kernel
24:04: 🧠 Insights into minimal user space code triggering system calls and kernel behavior.
24:04: Discussion on triggering system calls from user space vs. kernel internally
25:36: Observation of minimal user space code for triggering exec sis system call
27:41: Generation of machine code blob without dependencies for easy loading
28:52: Expectation of init system not returning post initialization
31:38: Testing of system behavior when exec system call fails or is not triggered
32:32: Kernel detection of user space and panic mechanism upon certain conditions
33:07: Kernel loading minimal user space code for specific functions
33:14: 🌿 Understanding the initialization process of an operating system kernel.
33:14: The kernel creates the first process, known as the init process, which triggers an exec system call.
34:24: The init process sticks around for the life of the system and executes the code needed.
36:52: Error handling code in the init process ensures proper handling if the exec system call fails.
38:33: The stream of learning OS development provides valuable insights and perspectives.
40:50: The init code gets linked into the kernel executable, but details on its exact function are unclear.
41:09: Exploring assembly syntax and symbols to understand the init code further.
42:10: 🧠 Understanding how Linker automatically creates symbols for binary blobs in C code.
42:10: Linker can create symbols for binary blobs in C code, allowing for easy access to embedded data
46:06: Kernel binary blob interacts with the rest of the kernel through implicit symbol creation by the Linker
54:15: Size of binary blob can be declared as an absolute address symbol for proper handling
55:15: 💻 Discussion on optimizing build system for kernel development using makefile rules.
55:15: Exploring binary object symbol start and size for kernel development.
56:59: Difficulty in finding information on binary input format files.
57:41: Importance of understanding codebase for working on the build system.
1:01:55: Special handling required for init code symbols in kernel development.
1:04:08: Utilizing specific build rules for compiling assembly code in the kernel.
1:06:54: Seeking advice on creating variables in makefile for easier code management.
1:09:04: Discussion on web hosting and penetration testing.
1:10:02: Challenges faced in string substitution for build system optimization.
1:10:27: 🌿 Troubleshooting issues with build system configuration and out of tree builds
1:10:27: Initial attempt to set up out of tree builds encountered errors
1:10:44: Discussion about personal background living in Germany and New York
1:11:21: Confusion and frustration with incorrect build directory configuration
1:14:30: Debugging recursive variable and multiple target patterns issues
1:20:10: Realization of an indentation error causing build problems
1:23:03: Successful build after resolving the configuration errors
1:25:20: Brief mention of interest in user space threading and fibers
1:25:34: Revisiting previous commit to correct mistakes and achieve successful build
1:25:53: 🌿 Development struggles with makefiles, dependencies, and virtual machines.
1:25:53: Struggles with makefiles and dependency paths
1:31:55: Using a virtual machine for development
1:32:33: Consideration of Docker for running Linux images
1:35:11: Building kernel dependencies and paths
1:39:01: Troubleshooting undefined references in linking
1:39:20: Social media break for Twitter interaction
1:40:07: Realization of potential solution from Wiki reference
1:40:57: 💻 Operating system development challenges with build system and out of tree builds
1:40:57: Linker creating symbols based on strings causing issues
1:41:33: Consider adjusting search path instead of adding prefixes
1:42:12: Audio volume feedback requested from chat for streaming
1:43:09: Need to CD into build directory before running commands
1:47:47: Difficulty in handling paths and files after moving them around
1:50:29: Exploring options in Linker script for handling binary blobs
1:54:02: Hacking the process by copying files and directories to resolve issues
1:55:04: Challenges in organizing and compiling kernel components
2:04:23: 🌿 Development progress on out-of-tree builds and build system enhancements.
2:04:23: Moved init code and entry other to separate build directory.
2:10:54: Resolved issues with building kernel and entry other components.
2:11:55: Successfully executed 'make all' command.
2:12:38: Acknowledged the need for an image file in the build process.
2:13:28: 🌱 Exploration of OS development progress, user space initiation, and upcoming video uploads.
2:13:28: Significant progress in out of tree build and understanding init code infrastructure
2:13:36: Learning about user space initiation in the OS
2:13:43: Adding a messy commit to the Builder
2:13:56: Acknowledgement and gratitude to viewers
2:14:03: Announcement of upcoming video uploads on Sundays
2:14:08: Informing about being away for three weeks
Recapped using Tammy AI