·¢²©ÎÄ
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º1243035
  • ²©ÎÄÊýÁ¿£º422
  • ²©¿Í»ý·Ö£º10102
  • ²©¿ÍµÈ¼¶£ºÉϽ«
  • ¹Ø×¢ÈËÆø£º 1
  • ×¢²áʱ¼ä£º2005-07-04 20:28:15
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
·ÖÀࣺ ǶÈëʽ¿ª·¢

qemuÄܹ»×öÁ½ÖÖÄ£Ä⣬һÖÖÊÇÍêÕûϵͳģÄâ(System emulator£¬ÔÚi386ÏÂÒ²³ÉΪPCϵͳģÄâ)£»»¹ÓÐÒ»ÖÖÊÇUser Mode Emulation£¬ÕâÖÖÀàËÆwine£¬¿ÉÒÔÈÃÆäËûƽ̨µÄ³ÌÐòÓëÄãµÄϵͳ³ÌÐòÔÚͬһ¸ö»·¾³ÏÂÖ´ÐС£

ÕâÀï½éÉܵÄWaltz Chroot£¬¾ÍÊÇÀûÓÃqemuµÄUser Mode Emulation£¨ºó¼ò³ÆUME£©½øÐÐÒ»´Î»ªÃÀµÄ½»²æÆ½Ì¨µÄchroot¡£µ±È»£¬Ê×ÏÈҪ˵Ã÷µÄÊÇ£¬Õâ½ö½öʹÓÃÀ´ÓéÀÖһϣ¬qemuµÄUME»¹²»Ö§³ÖºÃ¶àϵͳµ÷Óã¬ËùÒԺܶà³ÌÐòÈÔÈ»²»ÄÜ˳³©µÄÅÜ¡£

½»²æÆ½Ì¨ÒÔarmΪÀý×Ó£¬È·±£ÄãÓÐÍêÕûµÄarm-linux-*¹¤¾ßÁ´¡£

Ê×ÏÈ£¬±àÒ뾲̬°æ±¾µÄqemu£¨±ØÐëÊǾ²Ì¬£¬ÒòΪҪ·ÅÔÚchroot»·¾³Ï£¬³ý·ÇÄãÏëÔÙ±àÒë¸öglibcµÈ£©£¬ÎÒÑ¡ÓõÄÊÇ0.8.2µÄqemu£¬²¢´òÉÏÁËÒ»¸öÖ§³ÖARMƽ̨µÄNPTLËùÐèϵͳµ÷ÓõÄÒ»¸ö²¹¶¡£¬±àÒë¹ý³Ì¼û´Ërpm spec:

# For FC >= 6 we have gcc 3.4, for FC <= 5 we have gcc 3.2
%if %{!?fedora:6}%{?fedora} >= 6
%define gccver 34
%else
%define gccver 32
%endif

Summary: QEMU is a FAST! processor emulator
Name: qemu-static
Version: 0.8.2
Release: 6%{?dist}
License: GPL/LGPL
Group: Development/Tools
URL: http://www.qemu.org/
Source0: http://www.qemu.org/qemu-%{version}.tar.gz
Patch0: qemu-0.7.0-build.patch
Patch1: qemu-0.8.0-sdata.patch
Patch2: qemu-0.8.2-kernheaders.patch
Patch3: qemu-0.8.2-target-sparc.patch
Patch4: qemu-0.8.2-mb-nops.diff
Patch10: qemu-0.8.2_nptl.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: compat-gcc-%{gccver} zlib-devel which
ExclusiveArch: %{ix86} x86_64 ppc alpha sparc armv4l

%description
QEMU is a generic and open source processor emulator which achieves a good
emulation speed by using dynamic translation. QEMU has two operating modes:

* Full system emulation. In this mode, QEMU emulates a full system (for
example a PC), including a processor and various peripherials. It can be
used to launch different Operating Systems without rebooting the PC or
to debug system code.
* User mode emulation. In this mode, QEMU can launch Linux processes compiled
for one CPU on another CPU.

As QEMU requires no host kernel patches to run, it is safe and easy to use.

%prep
%setup -q -n qemu-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch10 -p1

%build
./configure \
--static \
--prefix=%{_prefix} \
--interp-prefix=%{_prefix}/qemu-%%M \
--cc=gcc%{gccver} \
--disable-gfx-check \
--disable-sdl \
--disable-alsa
make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT

make prefix="${RPM_BUILD_ROOT}%{_prefix}" \
bindir="${RPM_BUILD_ROOT}%{_bindir}" \
sharedir="${RPM_BUILD_ROOT}%{_prefix}/share/qemu" \
mandir="${RPM_BUILD_ROOT}%{_mandir}" \
docdir="${RPM_BUILD_ROOT}%{_docdir}/%{name}-%{version}" \
datadir="${RPM_BUILD_ROOT}%{_prefix}/share/qemu" install
rm -rf $RPM_BUILD_ROOT/%{_datadir}
rm -rf $RPM_BUILD_ROOT/%{_mandir}

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%{_bindir}/qemu*

%changelog
* Fri Apr 6 2007 ZC Miao <hellwolf.misty@gmail.com> - 0.8.2-6
- Fork a static version, for waltz chroot

ºóÃæµÄchangelogÊ¡ÂÔ²¿·Ö¡£
²¹¶¡£¬Äã¿ÉÒÔµ½FCµÄcvsÉÏÈ¥ÕÒ£¬ÄǸönptlµÄpatch£¬ÓÃgoogleËÑË÷"qemu nptl patch arm"Ó¦¸ÃÒ²ÄܳöÀ´¡£

Èç¹ûÄãµÄarm-linux-*¹¤¾ßÁ´ÄܱàÒ뾲̬°æ±¾µÄ³ÌÐò£¬ÄÇÄã¿ÉÒÔÊÔÊÔд¸ö¼òµ¥C hello wolrd³ÌÐò£¬±àÒëΪ¾²Ì¬°æ±¾ºó£¬ÓøղűàÒë³öÀ´µÄ¾²Ì¬qemu-armÅÜÒ»ÏÂÊÔÊÔ¡£

ºÃ£¬ÏÖÔÚ£¬×¼±¸ºÃÄãµÄarm°æ±¾µÄsysroot£¬°Ñ¾²Ì¬°æ±¾µÄqemu-arm¿½±´µ½$sysroot/Ï¡£È»ºó¿½±´Ò»ÏÂÏÂÃæÕâ¸öWaltz Chroot½Å±¾£º
#!/bin/bash

[ "$UID" != 0 ] && echo Be root, s.v.p. && exit 1

usage(){
cat <<EOF
Usage: waltz_chroot cputype sysrootdir
EOF
}

[ "$#" != 2 ] && usage && exit 2

CPU=$1
SYSROOT=$2

[ ! -d "$SYSROOT" ] && echo No such direcotry $SYSROOT && exit 3

case "$CPU" in
arm)
echo ":qemu-arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff\xff:/qemu-arm:" > /proc/sys/fs/binfmt_misc/register
;;
ppc)
echo ":qemu-ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff\xff:/qemu-ppc:" > /proc/sys/fs/binfmt_misc/register
;;
*)
echo Unsupported cpu $CPU
exit 1
;;
esac

mount -t proc none $SYSROOT/proc
mount -t sysfs none $SYSROOT/sys
mount -o bind /dev $SYSROOT/dev

for i in resolv.conf hosts;do
cp /etc/$i $SYSROOT/etc/
done
echo Waltz Chroot to $SYSROOT ...
/usr/sbin/chroot $SYSROOT /bin/sh

umount $SYSROOT/dev
umount $SYSROOT/sys
umount $SYSROOT/proc

echo -1 > /proc/sys/fs/binfmt_misc/qemu-$CPU

ʹÓÃÀý×Ó£º
hellwolf@cocteau#pts/10%J0S2:tmp$uname -m
i686
hellwolf@cocteau#pts/10%J0S2:tmp$sudo ~/mydoc/prog/embed/arm/ycross/sysroot/waltz_chroot arm mipkg
Waltz Chroot to mipkg ...


BusyBox v1.4.2 (2007-04-06 22:08:06 CST) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ # uname -m
armv5tel
/ #

˵¹ýÁË£¬ºÃ¶àϵͳµ÷Óò¢²»Ö§³Ö£¬ÎÒÊÔ¹ýÅÜX£¬gtkÖ®ÀàµÄ£¬¶¼Ê§°ÜÁË¡£

²©¿ÍÍÆ¼öÎÄÕÂ
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ