`
haoningabc
  • 浏览: 1478084 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

qemu以64位和32位的方式跑busybox

阅读更多
两种方式x86_64 和32位的i386方式


-----------x86_64-----------------------------------------
参考http://mgalgs.github.io/2015/05/16/how-to-build-a-custom-linux-kernel-for-qemu-2015-edition.html

下载busybox和linux内核

TOP=/var/www/mytest
wget http://distro.ibiblio.org/tinycorelinux/6.x/armv6/release/src/busybox/busybox-1.23.2.tar.bz2
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.3.tar.xz

cd $TOP/busybox-1.23.2

#这步骤很重要,busybox不生成动态库
mkdir -pv ../obj/busybox-x86
make O=../obj/busybox-x86 defconfig

make O=../obj/busybox-x86 menuconfig
-> Busybox Settings
  -> Build Options
[ ] Build BusyBox as a static binary (no shared libs)

Go to that location, select it, save, and exit.

$ cd ../obj/busybox-x86
$ make -j2
$ make install



把busybox编译好的文件生成 initramfs

$ 
mkdir -p $TOP/initramfs/x86-busybox
$ cd $TOP/initramfs/x86-busybox
$ mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin}}
$ cp -av $TOP/obj/busybox-x86/_install/* .


需要一个启动文件

vim init
-------------
#!/bin/sh
 
mount -t proc none /proc
mount -t sysfs none /sys
 
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
 
exec /bin/sh
--------------------

chmod +x init


find . -print0  | cpio --null -ov --format=newc  | gzip -9 > $TOP/obj/initramfs-busybox-x86.cpio.gz


★★★★编译内核★★★★★★★★
linux Kernel

$ 
cd $TOP/linux-4.0.3
$ make O=../obj/linux-x86-basic x86_64_defconfig

make O=../obj/linux-x86-basic kvmconfig
#支持kvm
 make O=../obj/linux-x86-basic -j2


$ cd $TOP
运行


qemu-system-x86_64 -kernel obj/linux-x86-basic/arch/x86_64/boot/bzImage -initrd obj/initramfs-busybox-x86.cpio.gz -nographic -append "console=ttyS0" -enable-kvm


------------------------------------------------------------
i386★★★★★★★★★★如果是在64为系统上编译32位,有点特殊
------------------------------------------------------------

这步骤很重要,busybox不生成动态库
cd $TOP/busybox-1.23.2


mkdir -pv ../obj/busybox-i386
make O=../obj/busybox-i386 defconfig

make O=../obj/busybox-i386 menuconfig
-> Busybox Settings
  -> Build Options
[ ] Build BusyBox as a static binary (no shared libs)

Go to that location, select it, save, and exit.

$ cd ../obj/busybox-i386


参考
http://blog.csdn.net/xsckernel/article/details/38045783
想编译32为的环境

将/usr/bin/gcc和/usr/bin/ld都改名为*.bin,就是改为: /usr/bin/gcc.bin和/usr/bin/ld.bin
然后写两个脚本:
/usr/bin/gcc:
---------------------
#!/bin/sh  
gcc.bin -m32 $@  
------------------------
/usr/bin/ld:
------------------
#!/bin/sh  
ld.bin -m elf_i386 $@  
---------------------

还需要

yum install glibc.i686 glibc-devel.i686  glibc-static.i686 glibc-utils.x86_64 -y
yum install libgcc.i686 -y


测试是否切换到i386
--------test.c--------
#include <stdio.h>  
#include <stdlib.h>  
int main()  
{  
    printf("sizeof long is %d\n", sizeof(long));  
    return 0;  
} 
-----------------
gcc test.c

file a.out
a.out: ELF 32-bit LSB executable, 


继续以32位的方式编译busybox
$ make  -j2
$ make install


生成initramfs:
$ mkdir -p $TOP/initramfs/i386-busybox
$ cd $TOP/initramfs/i386-busybox
$ mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin}}
$ cp -av $TOP/obj/busybox-i386/_install/* .

vim init
-------------
#!/bin/sh
 
mount -t proc none /proc
mount -t sysfs none /sys
 
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
 
exec /bin/sh
--------------------
chmod +x init

find . -print0  | cpio --null -ov --format=newc  | gzip -9 > $TOP/obj/initramfs-busybox-i386.cpio.gz



--------------------------
★★★★★★编译32位的内核比较简单,只需要加ARCH=i386
--------------------------
make O=../obj/linux-i386-basic i386_defconfig
make O=../obj/linux-i386-basic kvmconfig
make O=../obj/linux-i386-basic ARCH=i386 -j16

qemu-system-i386 -kernel obj/linux-i386-basic/arch/x86/boot/bzImage -initrd obj/initramfs-busybox-i386.cpio.gz -nographic -append "console=ttyS0" -enable-kvm


-----------------------------------------------------------------------------
系统切换回64位环境
[root@jslinux mytest]# cat gcc64.sh
#!/bin/sh 
 
mv -i /usr/bin/gcc /usr/bin/gcc.sh 
mv -i /usr/bin/ld  /usr/bin/ld.sh 
 
mv -i /usr/bin/gcc.bin /usr/bin/gcc 
mv -i /usr/bin/ld.bin  /usr/bin/ld 

系统切换回32位环境

[root@jslinux mytest]# cat gcc32.sh
#!/bin/sh 
 
mv -i /usr/bin/gcc /usr/bin/gcc.bin 
mv -i /usr/bin/ld  /usr/bin/ld.bin 
 
mv -i /usr/bin/gcc.sh /usr/bin/gcc 
mv -i /usr/bin/ld.sh  /usr/bin/ld

------------------------------------------------------------------------
分享到:
评论

相关推荐

    qemu启动x86操作系统busybox版

    通过这种方式,我们可以轻松地在本地环境中模拟和测试各种基于BusyBox的嵌入式系统,而无需实际硬件。这对于开发者来说是一个非常有价值的工具,可以快速验证代码、测试新功能以及优化系统性能。同时,这也是一种...

    qemu A9 模拟内核与文件系统(busybox)

    总结,QEMU 模拟 A9 内核与 BusyBox 文件系统提供了一个便捷的开发和测试环境,帮助开发者在本地系统上运行和调试针对 ARM 平台的应用程序和系统。通过不断的学习和实践,你可以深入了解嵌入式 Linux 系统的工作原理...

    QEMU虚拟机网卡及网络配置

    在四种通信模式中,TAP方式因为其灵活性和稳定性被广泛使用。下面是TAP方式的基本配置步骤: 1. **创建TAP设备**:使用`ip tuntap add dev tap0 mode tap`命令创建一个名为tap0的TAP设备。 2. **配置TAP设备**:为...

    qemu文件,做模拟测试的朋友

    qemu文件,做模拟测试的朋友,赶紧下载,这个版本是不错的 的

    busybox-1.33.1移植.rar

    BusyBox是一款轻量级的Linux工具集合,它将...总的来说,这个压缩包提供的资源是针对rk3568平台进行BusyBox移植的基础,通过这些资料,开发者可以学习和掌握如何在arm64架构设备上构建和部署这个强大的嵌入式工具集。

    qemu下u-boot+kernel+rootfs完整启动移植手册

    在嵌入式开发中,QEMU 是一个非常流行的虚拟开发平台,它允许开发者在本地机器上模拟各种硬件环境,如 ARM 架构。本篇文章主要讲述了如何在 QEMU 下完成 u-boot、Linux 内核以及 rootfs 的完整启动移植过程。 首先...

    qemu-5.0.0+u-boot+linux-5.4.95+gcc-linaro-6.5.0+busybox-1.32.1.zip

    qemu-5.0.0、u-boot 源码、linux-5.4.95内核、gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf交叉编译链、busybox-1.32.1 工具 文章 https://blog.csdn.net/leacock1991/article/details/113703897 使用资源

    基于Linux源代码及Busybox源代码制作精简可启动内核镜像

    本教程将引导你通过一系列步骤,利用Linux内核源代码和Busybox源代码来创建一个能在Bochs和Qemu模拟器上启动的简单Linux系统。 **一、准备工作** 1. **Linux内核源代码**:首先,你需要下载Linux内核的源代码,...

    linux 2.6 kernel移植到QEMU Mips的源代码文档。

    ### Linux 2.6 Kernel 移植到 QEMU MIPS 的源代码文档 #### 知识点一:Linux 2.6 内核移植至 QEMU MIPS 的准备工作与环境配置 在进行 Linux 2.6 内核移植到 QEMU MIPS 的过程中,首先需要准备合适的开发环境。根据...

    用qemu进行嵌入式系统开发

    综上所述,本文详细介绍了使用qemu进行嵌入式Linux系统开发的全流程,从环境搭建到内核配置、交叉编译、BusyBox集成、制作initramfs和根文件系统,再到Uboot的定制以及系统的测试。这些步骤不仅涵盖了开发中的技术...

    QEMU仿真Linux5.19内核(rootfs利用busybox)

    要用的同志直接私戳我即可,不用下载

    qemu内核调试环境文件系统

    BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux...

    linux 2.6 kernel移植到QEMU Mips的源代码文档. (更新版本)

    ### Linux 2.6 Kernel 移植到 QEMU Mips 的源代码文档 #### 概述 本文档详细介绍了如何将 Linux 2.6 内核移植到 QEMU MIPS 平台上,使得开发者可以在没有实际 MIPS 硬件的情况下进行内核的调试与研究。通过本文档...

    qemu仿integratorcp开发板(arm) .pdf

    由于实际硬件资源有限,无法为每位开发人员提供真实的开发板,因此采用QEMU作为替代方案,可以在不依赖物理设备的情况下进行软件开发和测试。 #### 二、开发环境搭建 1. **操作系统:** 使用Fedora 14 Live CD作为...

    qemux64 + ovmf.fd + busybox-img + fwts

    1. qemux64 2. ovmf.fd 3. busybox-img, 4. fwts-live-22.03.00-x86_64.img, 5. qemu 启动脚本(双击即可运行)

    该资源系qemu xen vexpress-a15 运行虚拟guest OS资料

    u-boot:vexpress-a15 u-boot镜像 xen-uImage:xen镜像 zImage:linux内核镜像 rootfs.img.gz:busybox文件系统镜像 vexpress-v2p-ca15_a7.dtb:设备树二进制文件

    teeny-linux:基于Mitch Galgs teeny-linux教程的,带有用于Qemu的initramfs的微型linux内核

    交叉编译Linux(可能是以x86_64为基础)。 在PowerPC上具有Firewire终端。 (这是另一个项目的一部分) 从构建的系统中编译和运行程序 少量的脚本可以构建和部分测试各种目标 网络支持(正在工作) 可选需要mac...

    QUMU的一些基本操作

    qemu 模拟 通过 busybox 制作 initramfs 镜像(rootfs)

Global site tag (gtag.js) - Google Analytics