Linux操作系统分析 Outline 编译Linux在QEMU模拟器上运行 制作带grub启动的磁盘映像 利用qemu+gdb来调试linux 口◆4日14三+1色,生QC
. . . . . . Linux操作系统分析 Outline 编译Linux在QEMU模拟器上运行 制作带grub启动的磁盘映像 利用qemu+gdb来调试linux
Linux操作系统分析 L偏证Linux在QEMU模敖器上运行 编译Linux.在QEMU模拟器上运行 qemu+linux-2.6.26 1.准备模拟器 2.编译Linux内核 3.准备根文件系统 4口◆4回4三·1=,生)QC
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 编译Linux在QEMU模拟器上运行 I qemu+linux-2.6.26 1. 准备模拟器 2. 编译Linux内核 3. 准备根文件系统
Linux操作系统分析 L偏Linux在QEMU敖器上运行 1、准备模拟器qemu 1.sudo apt-get install qemu 2.有的源中不常qemu,则需要自己编译 获得qemu源代码qemu-0.12.3.tar.gz,并解压缩 ,配置、编译,并安装到指定的目录下 /configure -prefix=PATH_TO_YOUR_QEMU_INSTALL_DIR -target-list=i386-softmmu make su-c“make install'" 编译安装完成之后,如何使用qemu? ~可以通过指定路径的方式使用qemu·此时qemu在安装目录下 的bin目录中 ·可以将安装目录/bin加入到PATH环境变量中,此时可以在任 何目录下直接使用qemu 4口卡4t4元·1,生月Q0
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 1、准备模拟器qemu 1. sudo apt-get install qemu 2. 有的源中不带qemu,则需要自己编译 I 获得qemu源代码qemu-0.12.3.tar.gz,并解压缩 I 配置、编译,并安装到指定的目录下 I ./configure –prefix=PATH TO YOUR QEMU INSTALL DIR –target-list=i386-softmmu I make I su -c “make install” I 编译安装完成之后,如何使用qemu? I 可以通过指定路径的方式使用qemu,此时qemu在安装目录下 的bin目录中 I 可以将安装目录/bin加入到PATH环境变量中,此时可以在任 何目录下直接使用qemu
Linux操作系统分析 L偏证Linux在QEMU核敖器上运行 编译Linux内核I 获得1inux-2.6.26.tar.gz,解压缩得到目录linux-2.6.26,不妨 称之为Liux源代码根目录(以下简称源码根目录) tar -zvxf linux-2.6.26.tar.gz 。进入源代码根目录 ~可以使用make help得到一些编译内核的帮助信息 ■我们采用i386的缺省编译 make i386_defconfig make ·可以观察一下编译过程中的输出信息,特别是编译最后阶段 的输出信息。 4口404在·1,生QG
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 编译Linux内核 I I 获得linux-2.6.26.tar.gz,解压缩得到目录linux-2.6.26,不妨 称之为Linux源代码根目录(以下简称源码根目录) I tar -zvxf linux-2.6.26.tar.gz I 进入源代码根目录 I 可以使用make help得到一些编译内核的帮助信息 I 我们采用i386的缺省编译 I make i386 defconfig I make I 可以观察一下编译过程中的输出信息,特别是编译最后阶段 的输出信息
Linux操作系统分析 L偏证Linux在QEMU模敖器上运行 准备好一个简单的根目录和应用程序」 准备一个应用程序 例如一个helloworld.输出循环,使用静态链接的方法编译成 一个可执行文件,命名为init gcc -static -o init xxx.c 一建立目标根目录映像 dd if=/dev/zero of=myinitrd4M.img bs=4096 count=1024 mke2fs myinitrd4M.img mkdir rootfs sudo mount -o loop myinitrd4M.img rootfs 。将init拷贝到目标根目录下 (Iiux启动后期会在根目录中寻找一个应用程序来运行,在 根目录下提供init是一种可选方案)》 4口404在·1,生QG
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 准备好一个简单的根目录和应用程序 I I 准备一个应用程序 例如一个helloworld输出循环,使用静态链接的方法编译成 一个可执行文件,命名为init I gcc -static -o init xxx.c I 建立目标根目录映像 I dd if=/dev/zero of=myinitrd4M.img bs=4096 count=1024 I mke2fs myinitrd4M.img I mkdir rootfs I sudo mount -o loop myinitrd4M.img rootfs I 将init拷贝到目标根目录下 (linux启动后期会在根目录中寻找一个应用程序来运行,在 根目录下提供init是一种可选方案)
Linux操作系统分析 L偏Linux在QEMU模敖器上运行 准备好一个简单的根目录和应用程序川 cp init rootfs/ ·准备dev目录 sudo mkdir rootfs/dev ~linux启动过程中会启用console设备 sudo mknod rootfs/dev/console c 5 1 另外需要提供一个linux根设备,我们使用ram sudo mknod rootfs/dev/ram b 1 0 sudo umount rootfs ,至此,一个包含简单应用程序的根目录映 像myinitrd4M.img就准备好了 4口卡4日4三·1色生)QC
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 准备好一个简单的根目录和应用程序 II I cp init rootfs/ I 准备dev目录 I sudo mkdir rootfs/dev I linux启动过程中会启用console设备 I sudo mknod rootfs/dev/console c 5 1 I 另外需要提供一个linux根设备,我们使用ram I sudo mknod rootfs/dev/ram b 1 0 I sudo umount rootfs I 至此,一个包含简单应用程序的根目录映 像myinitrd4M.img就准备好了
Linux操作系统分析 L偏证Linux在QEMU模敖器上运行 运行 qemu -kernel PATH_TO_linux-2.6.26/arch/x86/boot/bzlmage -initrd myinitrd4M.img-append "root=/dev/ram init=/init 可以看到系统能够启动,并且在启动后看到iit的输出结果 口◆4日14三+1色,生QC
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 运行 I qemu -kernel PATH TO linux-2.6.26/arch/x86/boot/bzImage -initrd myinitrd4M.img -append “root=/dev/ram init=/init” I 可以看到系统能够启动,并且在启动后看到init的输出结果
Linux操作系统分析 L偏Linux在QEMU模敖器上运行 也可以利用busybox建立根文件系统I ·下载busyboxt的源代码,解压缩 make help可以得到一些编译busybox的帮助信息 ■我们在缺省编译的基础上,稍作修改 make defconfig ~make menuconfig修改如下配置: enable busybox settings->build options->build busybox as a static binary (no share libs) enable busybox settings -installation options->dont use /usr make ~准备根目录映像,并安装busybox到根目录映像中 ,我们使用前面生成的myinitrd4M.img sudo mount -o loop myinitrd4M.img rootfs 卡+日4三1色,生QC
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 也可以利用busybox建立根文件系统 I I 下载busybox的源代码,解压缩 I make help可以得到一些编译busybox的帮助信息 I 我们在缺省编译的基础上,稍作修改 I make defconfig I make menuconfig修改如下配置: I enable:busybox settings –> build options –> build busybox as a static binary(no share libs) I enable:busybox settings –> installation options –> dont use /usr I make I 准备根目录映像,并安装busybox到根目录映像中 I 我们使用前面生成的myinitrd4M.img I sudo mount -o loop myinitrd4M.img rootfs
Linux操作系统分析 L偏证Linux在QEMU模钛器上运行 也可以利用busybox建立根文件系统川 ~在busybox目录下 sudo make CONFIG_PREFIX=PATH_TO_rootfs/install sudo umount rootfs 运行 qemu-kernel PATH_TO_linux-2.6.26/arch/x86/boot/bzlmage -initrd myinitrd4M.img -append "root=/dev/ram init=/bin/ash" ~此时可以进入busybox:提供的shell环境 口◆4日14三+1色,生QC
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 也可以利用busybox建立根文件系统 II I 在busybox目录下 sudo make CONFIG PREFIX=PATH TO rootfs/ install I sudo umount rootfs I 运行 I qemu -kernel PATH TO linux-2.6.26/arch/x86/boot/bzImage -initrd myinitrd4M.img -append “root=/dev/ram init=/bin/ash” I 此时可以进入busybox提供的shell环境
Linux操作系统分析 L偏语Linux在QEMU模器上运行 在ousybox的shell中运行helloworld 提供一个helloworld程序,静态编译成hello gcc -static -o hello xxx.c sudo mount -o loop myinitrd4M.img rootfs sudo cp hello rootfs sudo umount rootfs ·运行 qemu -kernel PATH_TO_linux-2.6.26/arch/x86/boot/bzlmage -initrd myinitrd4M.img -append "root=/dev/ram init=/bin/ash" ·进入shell.后,运行 ./hello 口卡+日4三1色,生QC
. . . . . . Linux操作系统分析 编译Linux在QEMU模拟器上运行 在busybox的shell中运行helloworld I 提供一个helloworld程序,静态编译成hello I gcc -static -o hello xxx.c I sudo mount -o loop myinitrd4M.img rootfs I sudo cp hello rootfs I sudo umount rootfs I 运行 I qemu -kernel PATH TO linux-2.6.26/arch/x86/boot/bzImage -initrd myinitrd4M.img -append “root=/dev/ram init=/bin/ash” I 进入shell后,运行 I ./hello