qemu+linux+x86+64,qemu以64位跟32位的方式跑busybox

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

#include

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

------------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 esp32 + lvgl8.0 的小电视

一个有趣的作品,转给需要的小伙伴。详情可阅读:https://gitee.com/wangpeng25/the-little-bili-tv输入图片说明支持功能微信配网(完成)时间显示(完成)三日天气显示(完成)温湿度显示&…

Android中常见的MVC/MVP/MVVM模式

Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出。 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Reenskaug在跟一些人的讨论中,逐渐剥离出一系列的概念&#xf…

同步滚动两个DataGrid

拿到这个首先想到的就是重写Scroll方法,可是想想工作量有些大,所以想在Form级别上做做手脚,看看DataGrid的成员列表可以看到这样两个保护性的方法:GridHScrolled Listens for the horizontal scrollbars scroll even…

RISC-V踩坑记----__builtin_clz((x)库函数的应用

RISC-V的确是个好东西,可是,免费的东西往往需要付出代价才能得到了,最近遇到了一个算法中的问题,追了好久,最终追到了这个库函数中,没想到,这个库函数居然还隐藏着一些猫腻。值得记下来啊。 首先…

整蛊偷快递的家伙!不愧是 NASA 工程师

分享个有意思的新闻给大家,一笑之余,也可以学习下文中主角的理工科思维。不知道你有木有过。。快递包裹被别人偷走的经历??包裹历经波折终于到了家门口,结果。。却被人给顺走了!!报警&#xff1…

dns 320 linux,linux 下 dns服务器(三 配置篇)

如何设置一个caching only域名服务器1 设置所谓caching only域名服务器是指一个服务器运行有n a m e d进程,但是并不对任何域(区)的域名信息具有授权,也就是并不向外提供本域的域名匹配信息,不负责I n t e r n e t上对本组织域名解析的应答&…

图解Cisco Packet Tracert之利用TFTP来升级路由器的IOS

对于我们这些学生来说,如果是自学的朋友来说,想摸到真机那实在是太难了,说去买一台呢?买来又没有多大作用,利用dynamips来模拟呢,他本来就是加载的IOS,在flash里面又没有IOS,这时候那…

终于用上gcc-4.1编译的系统了

终于用上gcc-4.1编译的系统了 把PHP、APACHE2、MYSQL又配好了。数据还是原来的数据。posted on 2006-05-19 07:35 浙林龙哥 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/huqingyu/archive/2006/05/19/403972.html

Android中的动画有哪几类?各自的特点和区别是什么?

在 android.view.animation包中有四种基本的动画 ,透明/伸缩/移动/旋转。动画类型Android的animation由四种类型组成XML中alpha渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转…

不指导,一起学习

不敢说指导,只能说以自己的观点来说下这个事情。年前的时候,我一个朋友的朋友也想学电子方面的技术,他毕业后做汽修工作,但是没做多久没离职了,之后在工厂上班一段时间,最近两年帮亲戚一起打理一些生意上的…

linux按键检测结束,关于Linux下按键的检测

写这篇博客是因为自己想做一个fc模拟器,核心代码(6502和ppu的模拟代码)用的原子开发板的代码,人家是从pc向单片机移植,我是反过来了,不过因为写的不错,用函数指针代替了switch方法可以学习一下,so就用了它的…

(翻译)Tricks of the windows game programming Gurus(Windows游戏大师之路) --- 前言(作者:ANDRE LAMOTHE 1999)...

前言:在一篇零编程学习游戏编程的文章文章中提及此书,而且书评很不错,在当时反响很剧烈。因此下了个PDF版的慢慢学习。虽然接触游戏编程很久,玩的五花八门的游戏也有很多,但真正完成的游戏只有一个扫雷游戏。文章中建议…

C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置

先看几个概念: 1、bss是英文block started by symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户应…

如何阅读3,500万个博客?

博客至今已经出现5年了,目前这股热潮正在愈演愈烈。博客又叫网络日志,现在已经非常普及;跟踪3,500多万个博客的Technorati Inc.称,博客的总数量每6个月就增加一倍。这就带来了一个问题:如何从浩如烟海的信息中找到想要…

u-boot与bootloader及其区别

Bootloader比Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道,windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那么bootloader就相当于手机的bios,它在手机启动的时候根据基带初始化硬件,然后…

assets目录与res/raw目录下文件的区别

assets目录与res/raw目录下文件的区别 assets目录下的文件不会被编译成二进制,直接被打包到apk中。 assets目录中的文件不会在R.Java中建立索引。 assets目录下的文件需借助AssetManager访问。 assets目录下可以建立自己的子目录。 res/raw目录下的文件会被编译成二…

linux gdb 忽略信号,linux gdb调试基本命令

近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。linux gdb调试基本命令1.启动调试前置条件:编译生成执行码时带上 -g,如果使用Makefile&#x…

Adobe Dreamweaver 添加库、标签和属性

您可以在 Dreamweaver 中使用标签库编辑器添加标签库,并将标签和属性添加到标签库中。 添加一个标签库在标签库编辑器(“编辑”>“标签库”)中,单击加号 () 按钮,然后选择“新建标签库”。在“库名称”框中&#xf…

白话debounce和throttle

遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件,如果不进行性能的优化,就可能会出现页面卡顿的现象,比如: 鼠标事件:mousemove(拖曳)/mouseover(划过)/mouseWheel(滚屏)键盘事件:keypress(基于…

Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)

Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案) Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案) 目前网上找到的Subversion的配置说明中,关于用户权限控制…