Skip to content

This repo explain how to run linux kernel form Qemu emulator☄️

Notifications You must be signed in to change notification settings

LinuxKernelContent/LinuxQemu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 

Repository files navigation

Tracing the Linux kernel functions

Tracing the Linux kernel functions can be useful for debugging and performance analysis. There are various tools available in Linux for tracing kernel functions. Here are some popular methods:

ftrace: ftrace is a built-in Linux kernel tracing framework that allows tracing function calls and other events. It can be used to trace function calls, context switches, system calls, and many other events. To use ftrace, you need to enable it in the kernel configuration and use the provided command-line tools, such as trace-cmd, to configure and view the trace data.

SystemTap: SystemTap is a dynamic tracing tool that allows tracing and analyzing various system events, including kernel function calls. It uses a high-level scripting language to define tracing probes and actions, which can then be compiled and loaded into the kernel to trace specific events.

Perf: Perf is a performance analysis tool that provides a variety of profiling and tracing features, including kernel function tracing. It uses hardware performance counters and kernel tracepoints to collect profiling data and can be used to analyze CPU utilization, memory usage, and other performance metrics.

LTTng: LTTng (Linux Trace Toolkit Next Generation) is a tracing framework that provides high-performance kernel and application tracing. It supports various tracing events, including function calls, system calls, and interrupt handlers. It provides both command-line and graphical tools for configuring and visualizing trace data.

These are just a few of the many tracing tools available in Linux. The choice of tool depends on the specific use case and requirements. Perf is a powerful performance analysis tool that can be used to profile and trace various system events, including kernel function calls, hardware performance counters, and system calls. Here are the basic steps to use perf:

Check whether perf is installed: Run the command perf --version in a terminal to check whether perf is installed on your system. If it is not installed, install it using your system's package manager.

Choose an event to trace: Use the perf list command to view the available events that perf can trace. You can choose a specific event or a combination of events to trace.

Choose a command to profile: Choose the command or program you want to profile using perf. For example, you can profile the ls command by running perf record ls.

Analyze the trace data: After running the profiling command, perf generates a binary trace file. You can analyze the trace data using various commands, such as perf report, perf annotate, and perf stat.

Interpret the results: The perf output provides various metrics and statistics that can be used to interpret the performance of the profiled command. For example, you can analyze the CPU utilization, cache misses, and instruction counts.

Here are some examples of using perf:

  • To trace the number of CPU cycles for the ls command: perf stat ls
  • To trace the number of CPU cycles and cache misses for the ls command: perf stat -e cycles,cache-misses ls
  • To trace the kernel function calls for the ls command: perf record -e syscalls ls
  • To analyze the trace data for the ls command: perf report or perf annotate

Tracing while traffic is received

  • sudo perf record --call-graph fp -g -- sleep 5
  • sudo perf record -ag sleep 10
  • sudo perf report --sort=cpu > guy_perf.txt

Create fs.img <uname -r> == linux-6.1.11

mkinitramfs -k linux-6.1.11 -o fs.img

Run qemu with the compiled linux kernel

qemu-system-x86_64 -kernel ~/linux-6.1.11/arch/x86_64/boot/bzImage -initrd initrd.img

Here are the steps to create a ramfs.img file in WSL (Windows Subsystem for Linux) to run the Linux kernel in QEMU (Quick EMUlator):

Install QEMU in WSL:

sudo apt-get update
sudo apt-get install qemu-system-x86 qemu-utils

Create a directory for the ramfs image:

mkdir ~/ramfs

Populate the directory with the files you want to include in the ramfs image:

cd ~/ramfs

Create any necessary directories

mkdir -p bin etc dev lib proc sys tmp

Copy files to the directories as needed

##Create the ramfs.img file:

cd ~
dd if=/dev/zero of=ramfs.img bs=1M count=64
mkfs.ext2 ramfs.img

Mount the ramfs.img file to the ramfs directory:

sudo mount -o loop ramfs.img ~/ramfs

Copy the contents of the ramfs directory to the ramfs.img file:

sudo cp -r ~/ramfs/* /mnt

Unmount the ramfs.img file:

sudo umount ~/ramfs

Run the Linux kernel in QEMU with the ramfs.img file as the root file system:

qemu-system-x86_64 -kernel /path/to/linux-kernel -initrd ramfs.img -append "root=/dev/ram rw"

Create a virtual disk image: You can create a virtual disk image using the qemu-img command, for example:

qemu-img create -f qcow2 rootfs.img 2G
 QEMU command to specify the virtual disk image created in step 1 as the virtual hard disk of the virtual machine, for example:
qemu-system-x86_64 -hda rootfs.img -cdrom /path/to/os-installation-image.iso
In this command, the -cdrom option is used to specify the ISO image of the operating system installation image.
 

Perform the operating system installation: Once the virtual machine is running, you can perform the operating system installation in the usual way, using the ISO image as the installation source.

Boot the virtual machine using the virtual disk image: After the installation is complete, you can shut down the virtual machine and then boot it again using the 

virtual disk image as the root file system, for example:

qemu-system-x86_64 -hda rootfs.img

About

This repo explain how to run linux kernel form Qemu emulator☄️

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published