用qemu搭建linux环境的最简单步骤(硬盘启动)
2015-07-06 09:13
302 查看
只有有了最基本的东西,才能在此基础上起飞!
环境: 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 选项指定启动设备
默认为硬盘:
-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 前端等, 已经着陆了。
环境: 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 前端等, 已经着陆了。
相关文章推荐
- Linux环境变量
- [转载] 一些非常好的 linux 基础工具
- linux高级技巧:rsync同步(一个)
- Linux中Tee命令实现日志输出
- Linux系统下的作业控制(Job Control)
- Linux实现who
- Linux实现who
- Linux实现who
- Linux实现who
- Android Framework应用框架层和HAL硬件抽象层以及Linux Kernel底层之间的关系
- FlashFXP连接虚拟机中centos
- Linux学习路线(转载)
- Linux安装jdk8以及环境变量配置
- Linux 修改系统变量错误大致基础命令不能使用问题修复!
- linux wget 命令用法详解(附实例说明)
- BeagleBone Black教程之BeagleBone Black使用到的Linux基础
- Linux内核Crash分析
- linux中进入mysql时报错Access denied for user 'root'@'localhost' (using password: YES)解决方案
- Linux下自定义开机启动程序
- 将Windows文件挂在到Linux上