summaryrefslogblamecommitdiffstats
path: root/md/writeup/qemu_usage.md
blob: 3280cd2f9ebf6537351a37ad056c7a71f4066915 (plain) (tree)
1
                 
















                                                               
       

      
 

                           
       




                         
       





                          







                                                           






























                                                                        
 
                                                  







































                                                                                                                                                                 

                                                                                                                                                     
                                                                                                                                                                    
title: QEMU usage
# QEMU

## Create image

```bash
qemu-img create -f raw image_file 4G
```

Run iso with image

```bash
qemu-system-i386 -cdrom _iso_image_ -boot order=d _qemu_image_ 
```


### Setting up memory

```bash
-m 512
```

### Setting up network card

```bash
-net nic
```

### Setting up tun device

```bash
brctl addbr tun0
iw dev wlp3s0 set 4addr on
brctl addif tun0 wlp3s0

```

### Lunching image 

If everything installed then image could be runed just with

```bash
qemu-system-i386 _options_ _disk_image_
```

## Lunching self compiled kernel

Let compile kernel and prepare initramfs to lunch it. Create file init.c
```c
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  printf("Hello world!\n");
  sleep(999999999);
}
```

compile 

```bash
gcc init.c -o init -static
```

and create image to lunch

```bash
echo init | cpio -o -H newc | gzip > test.cpio.gz
```

And now we have luncuble stuff to test if kernel loads fine

```bash
qemu-system-x86_64 -m 512 -kernel ./bzImage -initrd test.cpio.gz
```

If everything whent fine we will see "Hello world"

## Compile qemu

To get qemu you can download file or just clone git repo here is page to 
download files [http://wiki.qemu.org/Download](http://wiki.qemu.org/Download)
and git repo located at

```bash
git clone git://git.qemu-project.org/qemu.git
```

To see avaliable targets run 
```bash
./configure --help
```
there alos many different options and targets just choose one that you need 
most  

Configure targets:

```bash
./configure --target-list=arm-softmmu,arm-linux-user
```

or could be choosen to compile all targets

```bash
./configure --enable-system
```

Compile

```bash
make
```

## Reference

1. [https://wiki.archlinux.org/index.php/QEMU](https://wiki.archlinux.org/index.php/QEMU)
2. [http://www.cnx-software.com/2012/03/08/how-to-build-qemu-system-arm-in-linux/](http://www.cnx-software.com/2012/03/08/how-to-build-qemu-system-arm-in-linux/)
3. [https://wiki.linaro.org/PeterMaydell/KVM/HowTo/BuildQEMU](https://wiki.linaro.org/PeterMaydell/KVM/HowTo/BuildQEMU)
4. [http://www.cs.rochester.edu/~sandhya/csc256/assignments/qemu_linux.html](http://www.cs.rochester.edu/~sandhya/csc256/assignments/qemu_linux.html)
5. [https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt](https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt)