用qemu搭建linux环境的最简单步骤(硬盘启动)

来源:互联网 发布:淘宝网店海报设计技巧 编辑:程序博客网 时间:2024/06/05 19:34
只有有了最基本的东西,才能在此基础上起飞!
环境: ubuntu14 x86_64 cpu
过程很简单,准备,制作和运行
----------------------------------------
甲: 准备
----------------------------------------
1. 获取源码: a. kernel  b. busybox
    方法任意,这里从略。目录如下:

    ~/misc/qemu$ ls
    busybox  linux-3.13.0  


2. 源码编译:
    cd ~/misc/qemu/linux-3.13.0G
    make defconfig
    make
    成功编译出内核.

    cd ~/misc/qemu/busybox
    make menuconfig
        选择静态编译: BusyboxSettings->Build options->Build Busybox as a static binary
    make
    成功编译出busybox


----------------------------------------
乙: 制作
----------------------------------------
    a. 内核文件准备
    cd ~/misc/qemu/linux-3.13.0
    cp arch/x86/boot/bzImage ..

    b 根文件系统制作
    cd ~/misc/qemu
    dd if=/dev/zero of=rootfs.img bs=1M count=10 #创建大小为10M到根文件系统
    mkfs.ext3 rootfs.img #以ext3类型来格式化
    mkdir rootdisk
    sudo mount -t ext3 -o loop rootfs.img rootdisk #将img mount 到 loop设备上
    cd rootdisk
    mkdir dev proc sys  创建三个目录

    #把busybox文件系统安装到根文件系统中
    cd ~/misc/qemu/busybox
    sudo make install CONFIG_PREFIX=~/misc/qemu/rootdisk

    cd ~/misc/qemu
    sudo umount rootdisk
    rmdir rootdisk

    制作完成后的目录:
    ~/misc/qemu$ ls
    busybox  bzImage  linux-3.13.0  rootfs.img

----------------------------------------
丙: 运行
----------------------------------------
    cd ~/misc/qemu
    qemu-system-x86_64  -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash"
    内核启动, 熟悉的linux 环境出来了,ls, cat, .....

    ctrl-alt 释放qemu 鼠标。

其他:

   使用 -hda, 指明硬盘镜像, qemu-system 能够仿真硬盘, -cdrom 还可以仿真CD-ROM -boot 选项指定启动设备

默认为硬盘: d 从 CD-ROM 引导, a 从软盘引导,c 从硬盘引导(默认),而n 从网络引导


 -append 是内核启动参数, root=/dev/XXX, root 是根文件系统之意,这个启动参数/dev 与 dev设备没有关系。只是约定名称

    init=XXX, init 指明根文件系统第一个运行的程序。




----------------------------------------
进阶篇:
----------------------------------------
    1. 调试内核
    a. 编译时加上-g 选项
    b.  qemu-system-x86_64 启动时加-S 选项, 使内核启动冻结
    c. ctrl+alt+2 可切换到qemo控制台,输入“gdbserver"
    d. 另起一个终端,    
        cd ~/misc/qemu/linux-3.13.0
        gdb vmlinux
        target remote localhost:1234

    开始调试内核。
    还可以使用ddd 前端或 vimgdb 前端等, 已经着陆了。

0 0
原创粉丝点击