Sutra's profile江山易得,知己难求PhotosBlogListsMore Tools Help

Blog


    经过一个星期的日夜兼程地编译,终于升级好了

    由于将操作系统从 FreeBSD 6.2 RELEASE make world 到 FreeBSD 7.0 Beta1 遭遇了下面的问题 Fatal error 'Cannot allocate red zone for initial thread' at line 382 in file /usr/src/lib/libthr/thread/thr_init.c (errno = 12) ,根据网友的提示说要重新编译所有安装的 ports,就花了近一个星期把安装了的1000多个 ports (由于我安装了太多的桌面管理器所以 ports 比较多,我安装了 gnome,kde,xfce,blackbox,wmaker,当然还有其相关的一堆应用软件)都重新编译了一下,原来安装的软件都基本能用了,特别是 gnome,而且更新到了新版本,外观也比之前漂亮了。
    安装 eclipse 时遇到了一个 eclipse 无法启动的问题 ,后来在maillist里查到原因是port: java/diablo-jdk15 没有在 FreeBSD 7.0 上做过完整的测试导致的,用port: java/jdk15 替代就能解决问题。
    在使用 qemu 时遇到了新的问题,由于 FreeBSD 7.0 “ The bridge(4) driver has been removed from the tree. Its functionality has been completely replaced by if_bridge(4). ”所以原来的在 FreeBSD(作为宿主机) 上运行 Qemu 的网络部分已不能正常工作,经过2个晚上的苦苦查询,终于找到了资料,在maillist(freebsd-question)里if_bridge, if_tap and wireless NICs 看到了Qemu with tap networking on FreeBSD Current 的链接,根据文中所述配置后,网络工作正常了。host 和 guest 之间又能正常通信了。
    至于 FreeBSD 7.0 的新特性我还没有仔细去看。

    在 FreeBSD(作为宿主机) 上运行 Qemu

    原文:Running Qemu on FreeBSD, as host
    作者:Nakata Maho (http://people.freebsd.org/~maho/ )
    翻译:Sutra Zhou (http://zhoushuqun.com/ )

    Qemu 是一个由 Fabrice Bellard 开发的非常快速的通用的开源处理器(CPU)模拟器。它可以运行 Windows 2000,XP和GNU/Linux(RedHat,Debian)等。这里我们为 FreeBSD 6.0 描述了各种知识。

    如何安装

    虽然 Qemu 相当快,但我们需要 KQemu 加速器,否则它慢得多。另外,IDE 总线 DMA 支持也是非常重要的。
    编译 QEMU :

    # cd /usr/ports/emulator/qemu
    # make -DWITH_KQEMU -DWITH_HACKS
    # kldloaded aio

    kldload aio 是必须的!因为 KQemu 是作为内核模块安装的,请添加下面一行到 /boot/loader.conf 这样内核模块将在开机启动时被加载。

    kqemu_load="YES"

    注意:继续使用已有的 Windows 2000/XP 磁盘映像是不可能的,因为其已改由活动的 IDE 总线 DMA 支持。

    网络

    默认情况下,网络由模拟器内部配置;从外部是不可见的。这非常不方便!也有不同的配置方法:你必须是 root 并且你的 qemu 虚拟机在外部可见。假设你知道你的网络接口的名称。我这里是 fxp0。你可以通过下面的方法来检查:

    % dmesg | grep Ethernet

    首先,以 root 执行,

    # kldload bridge.ko
    # sysctl net.link.ether.bridge_cfg=fxp0,tap0
    net.link.ether.bridge_cfg: -> fxp0,tap0
    # sysctl net.link.ether.bridge.enable=1
    net.link.ether.bridge.enable: 0 -> 1

    创建脚本 /etc/qemu-ifup,内容如下:

    #!/bin/sh
    ifconfig ${1} 0.0.0.0

    并且让脚本可执行:

    # chmod 755 /etc/qemu-ifup

    为了让每次开机的时候都能执行这些,把下面的内容写到 /etc/sysctl.conf:

    net.link.ether.bridge_cfg=fxp0,tap0
    net.link.ether.bridge.enable=1

    并在 /boot/loader.conf 添加:

    bridge_load="YES"

    通过下面的方法启动 qemu:

    # qemu -net nic -net tap

    参考了 freebsd vde helpp

    Qemu 作为 VNC 服务器

    QEMU 中显示非常慢,因此将 qemu 作为 vnc 服务器运行非常有用。

    % qemu -hda /work/qemu/win2000ja/win2000.img -localtime -m 384 -vnc :1 -usbdevice tablet

    运行 vncviewer 像这样(你可以通过 ports/net/tightvnc 安装):

    % vncviewer :1

    你应该等待 Windows 启动好了再连接。

    全屏模式(慢)

    Qemu 使用 SDL 来输出到屏幕。现代的视频卡支持 VESA 2.0,因此你可以通过 VESA 2.0 来使用 SDL。当你使用 SDL 时你需要额外的设置。首先,重新配置内核:

    include GENERIC

    ident MAHO

    device atapicam
    options VESA

    保存为 /usr/src/sys/i386/conf/MAHO 或其它类似的名字。然后,

    # cd /sys/i386/compile/MAHO
    # made cleandepend ; make depend ; make ; make install

    你需要做如下额外设置:

    # setenv SDL_VIDEODRIVER vgl

    然后你可以通过控制台来运行全屏模式。当然,你仍然必须是 root 用户。据我测试,

    # kldload vesa

    不工作(在我这里)。不幸的,这非常慢,比 X11 模式慢……

    总结(我的设置和命令行)

    作为总结,我的设置是针对 qemu 0.8.0 的。

    qemu -localtime -hda /work/qemu/win2000ja/win2000.img -m 256 -net nic -net tap

    /boot/loader.conf

    kqemu_load="YES"
    bridge_load="YES"
    snd_driver_load="YES"
    snd_pcm_load="YES"

    /etc/sysctl.conf

    net.link.ether.bridge_cfg=fxp0,tap0
    net.link.ether.bridge.enable=1

    /etc/qemu-ifup (chmod 755 /etc/qemu-ifup)

    #!/bin/sh
    ifconfig ${1} 0.0.0.0

    用下面的配置文件重新配置内核

    include GENERIC

    ident MAHO

    device atapicam
    options VESA

    和额外的环境变量:

    # setenv SDL_VIDEODRIVER vgl

    我不想成为 root 用户

    • 网桥
    • 全屏模式

    链接

    Contributors

    • Vlad GURDIGA

    拆光驱

    国庆7天假期又结束了,所谓长假并没有觉得有多长。给这个逝去的假期留点痕迹吧。
    昨天把一台托盘不能弹出的光驱给拆开来了,经过研究发现是那个负责托盘伸缩的电动机坏了。不过整个光驱已经被我拆得七零八散,30个左右的螺丝钉,我已经没有能力和兴趣再把它装回去了。直接把它丢弃在垃圾桶里,把它们投入大自然去轮回了。
    一个小小的光驱,其结构对我来说已经够复杂了,真是里三层外三层地,最后才封装成一个完整的光驱,还不谈其集成电路板。
    看两张照片,第一张是被我拆开的七零八散的零件,还有2个螺丝刀,就靠这两个家伙把光驱给肢解了,虽然有些螺丝不匹配。第二张则是光驱上用到的螺丝,单看螺丝就觉得够复杂了。