找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 14731|回复: 13

在unbuntu下使用QEMU编译mldonkey mips版方法,成功编译3.01最终版

[复制链接]
发表于 2010-3-11 23:01 | 显示全部楼层 |阅读模式
本帖最后由 jczuo 于 2010-3-12 07:29 编辑

在unbuntu下使用QEMU编译mldonkey mips版(参照原作http://wsycqyz.org.ru/2010/02/04/mips-mldonkey-compile/,经过实践,修改其中很多错误)

mldonkey是用OCmal语言写的,需要用OCmal编译器编译。由于无法交叉编译OCaml本身,所以只有在普通Linux机器上运行的MIPS虚拟机进行Ocaml和mldonkey的编译。
1.安装MIPS虚拟机
sudo apt-get install qemu-kvm-extras    #安装qemu 0.11.0
2.在http://people.debian.org/~aurel32/qemu/根据CPU是mips还是mipsel选择下载事先做好的Debain的操作系统qemu映像,这样就不用在虚拟机上安装操作系统了。
注意:
    下载镜像时要根据自己的CPU来选择正确的文件,mipsel和mips是字节顺序不同,mipsel 是little edian,mips是big edian否则编译好的文件在路由器上运行会出现类似:./mlnet: line 1: syntax error: unexpected "(" 这样的错误。
    我的wrt600n CPU是BCM 4785(mips),因些选择debian_etch_mipsel_small.qcow2,vmlinux-2.6.18-6-qemu两个文件,注意不要下载5.0版本的lenny的两个文件,可以正常编译mldonkey,但在wrt600n里启动时,会提示内核版本太旧无法运行。

3.启动虚拟机:
qemu-system-mipsel -M malta -kernel vmlinux-2.6.26-1-4kc-malta -hda debian_lenny_mipsel_small.qcow2 -append "root=/dev/hda1 console=ttyS0" -nographic

出现“qemu: Warning, could not load MIPS bios 'mips_bios.bin”这个出错提示不管它,官网有说明
用户名和密码都是root      
4.建立虚拟机编译环境和mldonkey依赖库
apt-get update
apt-get install gcc g++ make libc6-dev libgd2-noxpm-dev libmagic-dev zlib1g-dev bzip2
5. 编译mldonkey
下载代码:wget http://downloads.sourceforge.net ... onkey-3.0.1.tar.bz2
解开mlonkey的压缩包,
bunzip2 mldonkey-3.0.1.tar.bz2
tar xvf mldonkey-3.0.1.tar
然后进入mlonkey目录:
添加utf8编码支持

vi src/utils/lib/charsetstubs.c

if (!str)
raise_error ();
str="UTF-8"; //新增這行 ,大约在1378行左右
return (copy_string ((char*) str));
}

./configure --disable-multinet --enable-bittorrennt --enable-filetp –enable-batch(这个根据自己的需要选择)
编译程序会自动下载ocaml并进行编译(时间较长)
make mlnet.byte.static(时间较长)
6 在无线路由器上运行mldonkey
使用scp请把刚编译出来的mlnet.byte.static复制到路由器
scp mlnet.byte.static root@192.168.1.1:/jffs/opt/bin 如果复制到host主机IP改为10.0.2.2
同样把虚拟机里的如下文件拷贝出来到路由器的/opt/lib内
ld.so.1, libnss_dns.so.2, libresolve.so.2 libc.so.6, libnss_files.so.2
如果放在其他路径在无线路由器上先把上述几个lib文件放置的地方加入LD_LIBRARY_PATH环境变量的。
关于如果使用mldonkey请参考本站以前的文章
如果需要编译好的其它版本,可以到下列地址下载
http://code.google.com/p/debian-bcm47xx/downloads/list

编译好的版本下载参见:https://www.right.com.cn/forum/viewthread.php?tid=34202

评分

参与人数 4恩山币 +4 收起 理由
mysy + 1 神马都是浮云!
wfhwfh + 1 精品文章
codeblue + 1 精品文章
baboon + 1 精品文章

查看全部评分

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
发表于 2010-3-11 23:27 | 显示全部楼层
支持个
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-3-12 07:04 | 显示全部楼层
BCM6358是选MIPS还是mipsel?
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2010-3-12 07:26 | 显示全部楼层
BCM6358是选MIPS还是mipsel?
shukai2008 发表于 2010-3-12 07:04

是big edian 应该选mips
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-3-12 13:53 | 显示全部楼层
好像这个方法比较好
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-3-12 14:22 | 显示全部楼层
赞,

不过我还是喜欢现成的二进制。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-3-12 15:22 | 显示全部楼层
本帖最后由 ccbcfan 于 2010-3-12 15:31 编辑

安装QEMUmanager6.0完全版,可以直接在XP下启用qemu_debin_mips系统进行编译!

apt-get install gcc g++ make libc6-dev libgd2-noxpm-dev libmagic-dev zlib1g-dev bzip2
有没有报错?我在编译时报错了!

这样编译出来的mlent在6358-openwrt下运行出错了!
root@Openwrt:/mnt/sda1/opt/bin# /opt/bin/mlnet.byte.static

FPU emulator disabled, make sure your toolchainwas compiled with software floating point support (soft-float)

看来与openwrt的编译有关!
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2010-3-12 16:24 | 显示全部楼层
安装QEMUmanager6.0完全版,可以直接在XP下启用qemu_debin_mips系统进行编译!

apt-get install gcc g++ make libc6-dev libgd2-noxpm-dev libmagic-dev zlib1g-dev bzip2
有没有报错?我在编译时报错了!

这 ...
ccbcfan 发表于 2010-3-12 15:22


apt-get update 后,这些包都可以正常安装,看您的错误提示应该是和浮点模拟器有关,应该不是编译的问题,是不是路由上有的库没有装上?
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-3-12 17:26 | 显示全部楼层
FPU emulator disabled

应该是mldonkey与openwrt编译时,toolchain的software floating point support 选项开关不一致造成的!
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-3-14 10:21 | 显示全部楼层
本帖最后由 openwrtcn 于 2010-3-14 10:28 编辑

ccbcfan:

你不妨在make kernel_menuconfig里把内核的FPU模拟打开试试,重新编译1个openwrt固件,然后再把你编译好的mldonkey弄到6358猫里跑跑

google一下MIPS架构下linux软浮点研究
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2010-5-13 14:22 | 显示全部楼层
你好,我根据你的步骤到编译ocaml工具,到编译汇编gcc -c -DSYS_linux_elf -o i386.o i386.S 时出错了
在我的PC机上是可以编译成功的,在QEMU下编译出错,只编译gcc -c  -o i386.o i386.S

debian-mipsel:/mine/mldonkey/mldonkey-3.0.1/patches/ocaml-3.11.1/asmrun#
debian-mipsel:/mine/mldonkey/mldonkey-3.0.1/patches/ocaml-3.11.1/asmrun#
-o i386.o i386.Sne/mldonkey/mldonkey-3.0.1/patches/ocaml-3.11.1/asmrun# gcc -c  -o i386.o i386.S
i386.S: Assembler messages:
i386.S:94: Error: unrecognized opcode `movl 0(%esp),%eax'
i386.S:95: Error: unrecognized opcode `movl %eax,_caml_last_return_address'
i386.S:96: Error: unrecognized opcode `leal 4(%esp),%eax'
i386.S:97: Error: unrecognized opcode `movl %eax,_caml_bottom_of_stack'
i386.S:100: Error: unrecognized opcode `pushl %ebp'
i386.S:101: Error: unrecognized opcode `pushl %edi'
i386.S:102: Error: unrecognized opcode `pushl %esi'
i386.S:103: Error: unrecognized opcode `pushl %edx'
i386.S:104: Error: unrecognized opcode `pushl %ecx'
i386.S:105: Error: unrecognized opcode `pushl %ebx'
i386.S:106: Error: unrecognized opcode `pushl %eax'
i386.S:107: Error: unrecognized opcode `movl %esp,_caml_gc_regs'
i386.S:110: Error: unrecognized opcode `call _caml_garbage_collection'
i386.S:112: Error: unrecognized opcode `popl %eax'
i386.S:113: Error: unrecognized opcode `popl %ebx'
i386.S:114: Error: unrecognized opcode `popl %ecx'
i386.S:115: Error: unrecognized opcode `popl %edx'
i386.S:116: Error: unrecognized opcode `popl %esi'
i386.S:117: Error: unrecognized opcode `popl %edi'
i386.S:118: Error: unrecognized opcode `popl %ebp'
i386.S:120: Error: unrecognized opcode `ret'
i386.S:125: Error: unrecognized opcode `movl _caml_young_ptr,%eax'
i386.S:126: Error: unrecognized opcode `subl $8,%eax'
i386.S:127: Error: unrecognized opcode `movl %eax,_caml_young_ptr'
i386.S:128: Error: unrecognized opcode `cmpl _caml_young_limit,%eax'
i386.S:129: Error: unrecognized opcode `jb L100'
i386.S:130: Error: unrecognized opcode `ret'
i386.S:132: Error: unrecognized opcode `movl 0(%esp),%eax'
i386.S:133: Error: unrecognized opcode `movl %eax,_caml_last_return_address'
i386.S:134: Error: unrecognized opcode `leal 4(%esp),%eax'
i386.S:135: Error: unrecognized opcode `movl %eax,_caml_bottom_of_stack'
i386.S:137: Error: unrecognized opcode `call L105'
i386.S:139: Error: unrecognized opcode `jmp _caml_alloc1'
i386.S:144: Error: unrecognized opcode `movl _caml_young_ptr,%eax'
i386.S:145: Error: unrecognized opcode `subl $12,%eax'
i386.S:146: Error: unrecognized opcode `movl %eax,_caml_young_ptr'
i386.S:147: Error: unrecognized opcode `cmpl _caml_young_limit,%eax'
i386.S:148: Error: unrecognized opcode `jb L101'
i386.S:149: Error: unrecognized opcode `ret'
i386.S:151: Error: unrecognized opcode `movl 0(%esp),%eax'
i386.S:152: Error: unrecognized opcode `movl %eax,_caml_last_return_address'
i386.S:153: Error: unrecognized opcode `leal 4(%esp),%eax'
i386.S:154: Error: unrecognized opcode `movl %eax,_caml_bottom_of_stack'
i386.S:156: Error: unrecognized opcode `call L105'
i386.S:158: Error: unrecognized opcode `jmp _caml_alloc2'
i386.S:163: Error: unrecognized opcode `movl _caml_young_ptr,%eax'
i386.S:164: Error: unrecognized opcode `subl $16,%eax'
i386.S:165: Error: unrecognized opcode `movl %eax,_caml_young_ptr'
i386.S:166: Error: unrecognized opcode `cmpl _caml_young_limit,%eax'
i386.S:167: Error: unrecognized opcode `jb L102'
i386.S:168: Error: unrecognized opcode `ret'
i386.S:170: Error: unrecognized opcode `movl 0(%esp),%eax'
i386.S:171: Error: unrecognized opcode `movl %eax,_caml_last_return_address'
i386.S:172: Error: unrecognized opcode `leal 4(%esp),%eax'
i386.S:173: Error: unrecognized opcode `movl %eax,_caml_bottom_of_stack'
i386.S:175: Error: unrecognized opcode `call L105'
i386.S:177: Error: unrecognized opcode `jmp _caml_alloc3'
i386.S:182: Error: unrecognized opcode `subl _caml_young_ptr,%eax'
i386.S:183: Error: unrecognized opcode `negl %eax'
i386.S:184: Error: unrecognized opcode `cmpl _caml_young_limit,%eax'
i386.S:185: Error: unrecognized opcode `jb L103'
i386.S:186: Error: unrecognized opcode `movl %eax,_caml_young_ptr'
i386.S:187: Error: unrecognized opcode `ret'
i386.S:189: Error: unrecognized opcode `subl _caml_young_ptr,%eax'
i386.S:190: Error: unrecognized opcode `negl %eax'
i386.S:191: Error: unrecognized opcode `pushl %eax'
i386.S:192: Error: unrecognized opcode `subl %eax,_caml_young_ptr'
i386.S:193: Error: unrecognized opcode `movl 4(%esp),%eax'
i386.S:194: Error: unrecognized opcode `movl %eax,_caml_last_return_address'
i386.S:195: Error: unrecognized opcode `leal 8(%esp),%eax'
i386.S:196: Error: unrecognized opcode `movl %eax,_caml_bottom_of_stack'
i386.S:198: Error: unrecognized opcode `call L105'
i386.S:200: Error: unrecognized opcode `popl %eax'
i386.S:201: Error: unrecognized opcode `jmp _caml_allocN'
i386.S:210: Error: unrecognized opcode `movl (%esp),%edx'
i386.S:211: Error: unrecognized opcode `movl %edx,_caml_last_return_address'
i386.S:212: Error: unrecognized opcode `leal 4(%esp),%edx'
i386.S:213: Error: unrecognized opcode `movl %edx,_caml_bottom_of_stack'
i386.S:215: Error: unrecognized opcode `jmp *%eax'
i386.S:224: Error: unrecognized opcode `pushl %ebx'
i386.S:225: Error: unrecognized opcode `pushl %esi'
i386.S:226: Error: unrecognized opcode `pushl %edi'
i386.S:227: Error: unrecognized opcode `pushl %ebp'
i386.S:397: Error: unrecognized opcode `call _caml_array_bound_error'
debian-mipsel:/mine/mldonkey/mldonkey-3.0.1/patches/ocaml-3.11.1/asmrun#

好像是不识别命令,gcc缺什么东西么,还是mipsel不识别相关的汇编啊?
你们没有遇到这种情况么?我现在编译mldonkey卡在这里了,希望你们帮我解决啊,万分感谢!
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2011-4-26 16:22 | 显示全部楼层
mips平台上编译i386,不出错才怪了。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2012-2-12 21:31 | 显示全部楼层
支持一下!
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2012-5-2 10:31 | 显示全部楼层
收藏!
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /2 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2026-8-23 20:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 电话:13506125623

快速回复 返回顶部 返回列表