只有有了最基本的东西linux磁盘写满启动linux deepinlinux论坛,能够在此基础上起飞!
环境:ubuntu14x86_64cpu
过程很简单,打算linux磁盘写满启动,制做和运行
----------------------------------------
甲:打算
----------------------------------------
1.获取源码:a.kernelb.busybox
方式任意,这儿从略。目录如下:
~/misc/qemu$ls
busyboxlinux-3.13.0
2.源码编译:
cd~/misc/qemu/linux-3.13.0G
makedefconfig
make
成功编译出内核.
defconfig会按照当前系统构架,手动选择系统默认的配置文件,比如我的会找到先x86_64_defconfig
假如你晓得自己的机器是x86_64,等价于直接执行makex86_64_defconfig,结果生成.config文件
cd~/misc/qemu/busybox
makemenuconfig
选择静态编译:BusyboxSettings->Buildoptions->BuildBusyboxasastaticbinary
make
成功编译出busybox
----------------------------------------
乙:制做
----------------------------------------
a.内核文件打算
cd~/misc/qemu/linux-3.13.0
cparch/x86/boot/bzImage..
b根文件系统制做
cd~/misc/qemu
ddif=/dev/zeroof=rootfs.imgbs=1Mcount=10#创建大小为10M到根文件系统
mkfs.ext3rootfs.img#以ext3类型来低格
mkdirrootdir
sudomount-text3-olooprootfs.imgrootdir#将imgmount到loop设备上
cdrootdir
mkdirdevprocsys创建三个目录
#把busybox文件系统安装到根文件系统中
cd~/misc/qemu/busybox
sudomakeinstallCONFIG_PREFIX=~/misc/qemu/rootdir
cd~/misc/qemu
sudoumountrootdir
rmdirrootdir
制做完成后的目录:
~/misc/qemu$ls
busyboxbzImagelinux-3.13.0rootfs.img
----------------------------------------
丙:运行
----------------------------------------
cd~/misc/qemu
qemu-system-x86_64-kernelbzImage-hdarootfs.img-append"root=/dev/sdainit=/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指明根文件系统第一个运行的程序。
补充:升级了qemu版本后,执行上述命令有一个警告信息,看着不爽,
WARNING:Imageformatwasnotspecifiedfor'rootfs.img'andprobingguessedraw.
Automaticallydetectingtheformatisdangerousforrawimages,writeoperationsonblock0willberestricted.
Specifythe'raw'formatexplicitlytoremovetherestrictions.
我猜想着试了试去不掉这个WARNING,google,baidu大部份说不清楚,后来发觉下边的参数可以去除警告,来指明format=raw,
注意,多一个标点甚至空格都可能失败啊,qemu在这方面如何如此不友好呢?!
qemu-system-x86_64-kernelbzImage-driveformat=raw,file=rootfs.img,media=disk-append"root=/dev/sdainit=/bin/ash"
media=disk我是猜的,我原本想指定它是第一个c盘,但不晓得如何抒发,就这样吧,有空再研究!itworksnow!
qemu-system-x86_64-kernelbzImage-driveformat=raw,file=rootfs.img,media=disk-append"root=/dev/sdainit=/bin/ashconsole=ttyS0"-nographic
添加上-append"console=ttyS0"-nographic后,可以启动控制台输出,观察所有log.退出qemuCtrl+ax,
提示/#QEMU:Terminated
----------------------------------------
进阶篇:
----------------------------------------
1.调试内核
a.编译时加上-g选项
b.qemu-system-x86_64启动时加-S选项,使内核启动冻结
c.ctrl+alt+2可切换到qemo控制台,输入“gdbserver"
d.另起一个终端,
cd~/misc/qemu/linux-3.13.0
gdbvmlinux
targetremotelocalhost:1234
开始调试内核。
还可以使用ddd后端或vimgdb后端等,早已着陆了。
qemu-system-x86_64-kernelbzImage-driveformat=raw,file=rootfs.img,media=disk-append"root=/dev/sdainit=/bin/ash"