Passing Data to a kernel module – module_param

A kernel module is loaded into kernel space. In case any specific value needs to be sent to the Kernel module during initialization or  dynamically at run-time, a method needs to be provided which will achieve the same. One such method to achieve the above requirement is the “module_param” macro. The “module_param” macro takes in […]

The Next Step in writing a device driver for Linux

Having understood on how to create a simple Kernel module here – <Writing a Simple Kernel Module>, we shall try and look at how Linux characterizes the different Kernel driver types. The most commonly seen device drivers are Character device drivers Block device drivers Network device drivers We shall look at platform drivers, miscellaneous drivers […]

How to look at corefiles using gdb – Part 2

The interested reader can refer part 1 of the current article here – <How to look at corefiles using gdb – Part 1>. Having looked at setting the core file path for Linux in the previous article, let us run the sample program to obtain a Linux corefile. We shall create a sample program which […]

How to look at corefiles using gdb – Part 1

The Linux Operating System dumps the exception generated in a program as a core-file. Before we run the sample program to analyze the dump generated by the linux system – we need to check whether the Linux system settings for core files is set properly. On Ubuntu – Core file size is set to Zero. […]

How to debug a Program with gdb – Part 2

The Previous article <How to debug a Program with gdb> described the use of running gdb on a sample program. In this article, we shall understand how to print variables, access memory and run a few gdb commands to access stack gdb has a lot many commands and the interested reader can access the different […]

How to debug a program with GDB – Part 1

This article describes how to run gdb with a simple program example. gdb expands to GNU Project Debugger. It is a very powerful tool to debug programs and to investigate Core dumps generated by different programs. The Article tries to setup a reader to start experimenting with gdb via a sample program. Sample Program compile […]

Writing A Simple Linux Kernel Module

The first example that is always depicted in understanding any coding language (or kernel programming in our case) is to write the hello world example. Let us write a simple kernel program which outputs ‘hello’ and ‘goodbye’.  Below is the sample code for the driver – it has comments placed to explain what each line […]

Monolithic Linux Kernel

One would have read this statement in many books/internet sites or heard from different people – “Linux is a Monolithic Kernel”. What this means is that the entire operating system (which includes the device drivers, file system, IPC) are running in the kernel space. In a Micro-kernel architecture most of the OS services are running […]

An understanding of memory layout in C – Part 2

The interested reader can peruse the first part of this series here – <An understanding of memory layout in C – Part 1> From the previous article it was seen how the different layers of memory are aligned for a C program that runs on a system. A “C” Program is  provided below which progressively […]

An understanding of memory layout in C – Part 1

This article tries to discuss the basics of memory layouts in C.  When a C file is preprocessed, compiled, assembled and linked – a memory layout of the code/data/stack/heap area is generated. The C program memory layout is depicted below FIG COURTESY: The different sections are .text segment – code section – the C code […]