移植KVM到arm-linux(1) http://tech.jayya.com/2007/11/28/porting-kvm-to-armlinux.html

本文介绍了KVM在嵌入式平台上的移植过程,包括搭建交叉编译环境、配置及编译KVM,以及如何在目标板上运行KVM并进行基本测试。

上午kvm能正常在板子上运行了,并且还解决了preverify的问题(感谢一下陶老师的帮助和提醒),今天一并完整的写出来整个过程吧

  1. 建立交叉编译环境:
    • 下载xscale-arm-linux-toolchain.tgz,tar zxfv xscale-arm-linux-toolchain.tgz,将解压后的文件在/usr/local/arm-linux下,将他击入当前的路径下,比如修改你的.bash_profile,PATH=$PATH:/usr/local/arm-linux/bin,退出,在登陆使之生效,输入arm-linux-gcc -v可以查看gcc的版本;
    • 很抱歉,写得时候漏写了一个重要的设置步骤,多谢雨里来的提醒,现补充如下:我们还需要安装交叉编译环境的标准C函数库,进入系统的/usr/目录并解压库函数软件包 [user@host]# cd /usr [user@host]# tar zvxf /root/gnupro-bin-glibc2.2.4.tgz 上述命令会在系统目录/usr/cygnus/xscale-020726/H-i686-pc-linux-gnulibc2.4/目录下建立一系列的子目录和文件,它们是交叉编译时需要的标准C函数库和各种工具。
  2. 下载sun的cldc的src 解压,里面包含有相关的源码。我这里使用了j2me_cldc-1_0_4-src-winunix.zip,j2me_cldc-1_1-fcs-src-winunix.zip这两个都可以在sun的网站下载,不过推荐大家抓紧时间下载,因为今天去下载midp2.0就已经不能下载了(sun阿,令人失望!)。
  3. 安装jdk并设置后相关路径 这里不推荐使用jdk1.5,因为他对中文的支持有问题,使用1.4或者更低的都可以(希望可以在sun的官方找到)我使用的是1.4.2_01。修改.bash_profile或者/etc/profile添加PATH或者CLASSPATH。这里说一些为什么要用到jdk,主要是要编译api里面的java文件,当然我们只一致kvm就不需要这个了,详细地大家可以看看解开的文件cldc文件夹里面的make文件
  4. 修改make文件 进入j2me_cldc/kvm/VmUnix/build/,vi修改Makefile,主要修改将原来使用的x86的编译器GCC改为我们的arm-linux-gcc,这样才能得到我们的所需,我主要是修改下面的句子:ifeq ($(GCC), true) CC =arm-linux-gcc,另外我又在文件的开始指定export PLATFORM=linux,当然你也可以在make的时候家参数PLATFORM=linux。
  5. 编译 先编译preverify,进入tools/preverfiyer/build/linux下,make,这里没有必要对这个makefile进行修改,况且你的编译平台是x86,应该不能进行修改,否则编译出来的preverify是不运行的,那么kvm的编译也将会不能通过。编译kvm,进入kvm/VmUnix/build,make,就可以得到kvm,注意这个是在kvm的build目录下生成的,file kvm会的到以下信息:kvm: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.18, dynamically linked (uses shared libs), not stripped
  6. 在板子上运行并进行相应的测试 将得到的kvm,烧到板子上,x86下kvm运行所需文件: libm.so.6 => /lib/tls/libm.so.6 (0xb75c0000) libnsl.so.1 => /lib/libnsl.so.1 (0xb75ab000) libc.so.6 => /lib/tls/libc.so.6 (0xb7473000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000) 大家可以参考以下,以便能使板子环境符合要求.更改属性为a+x,运行kvm,没有任何参数的情况下将会出现以下信息:ALERT: Must provide class name Usage: kvm < -options> Options: -version -classpath -heapsize (e.g. 65536 or 128k or 1M)
  7. 运行helloworld并正确使用preverify 这一步准确来说不是移植要做的事情,因为这是j2me开发者要注意的事情.我们先来看看kvm的执行.class 文件的机制: portingVerifiera.gif 如图示:我们javac编译完的生成的.class文件必须经过preverify预验证后才能被kvm正确的执行,否则会出现java/class/Verifyerror,为什么要采用预验证机制,是因为sun考虑到嵌入式设备资源有限,所以将jvm的庞大字节码验证机制进行严重的"缩水",也就用了一个轻量级机制来保证安全.说了这么多,讲讲具体怎么使用(这个流程开发j2me程序的人应该都知道点,虽然大家都不常用这个来开发). 1编译javac -classpath kvm/classes hello.java 这里kvm/classes指你编译生成的classes文件夹 2预验证preverify -classpath kvm/classes -d . mydir preverify有几个参数: -classpath 同上 -d 输出验证后的class文件,默认的是当前目录下的output文件夹下,还有检测是否使用了 finalizers ,float,native methods等将检验后的classs文件放到板子上,就可以执行了!

Tags: arm-linux, J2ME, kvm, 虚拟机移植

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)内容概要:本文围绕“独立储能的现货电能量与调频辅助服务市场出清协调机制”展开,提出了一种基于Matlab代码实现的优化模型,旨在协调独立储能系统在电力现货市场与调频辅助服务市场中的联合出清问题。文中结合鲁棒优化、大M法和C&CG算法处理不确定性因素,构建了多市场耦合的双层或两阶段优化框架,实现了储能资源在能量市场和辅助服务市场间的最优分配。研究涵盖了市场出清机制设计、储能运行策略建模、不确定性建模及求解算法实现,并通过Matlab仿真验证了所提方法的有效性和经济性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事电力市场、储能调度相关工作的工程技术人员。; 使用场景及目标:①用于研究独立储能在多电力市场环境下的协同优化运行机制;②支撑电力市场机制设计、储能参与市场的竞价策略分析及政策仿真;③为学术论文复现、课题研究和技术开发提供可运行的代码参考。; 阅读建议:建议读者结合文档中提供的Matlab代码与算法原理同步学习,重点关注模型构建逻辑、不确定性处理方式及C&CG算法的具体实现步骤,宜在掌握基础优化理论的前提下进行深入研读与仿真调试。
(IHAOAVOABPvsAOBPvsAVOABPvsPSOBP)非洲秃鹫融合天鹰优化BP天鹰优化BP非州秃鹫BP粒子群(Matlab代码实现)内容概要:本文档是一份关于多种智能优化算法及其在不同工程领域中应用的综合性技术资源集合,重点介绍了非洲秃鹫算法(AVOA)、天鹰优化算法(AO)、粒子群优化(PSO)等智能算法融合优化BP神经网络的Matlab代码实现,并涵盖了六种最新智能算法(如CPO、GTO等)优化BP神经网络的技术细节。同时,文档还涉及克里金模型与多目标粒子群算法结合、路径规划、电力系统调度、信号处理、机器学习等多个前沿科研方向,提供了大量Matlab/Simulink仿真实例和代码资源链接,适用于复杂优化问题的研究与复现。; 适合人群:具备一定编程基础和科研能力的研究生、科研人员及从事智能优化、电力系统、信号处理、路径规划等相关领域的工程技术人员,尤其适合有Matlab仿真经验、希望借助智能算法提升研究效率的1-5年工作经验者。; 使用场景及目标:①用于智能优化算法(如AVOA、AO、PSO等)的学习与比较研究;②应用于BP神经网络参数优化以提升预测精度;③支撑科研项目中的仿真复现、算法对比与工程优化设计,特别是在电力系统调度、路径规划、负荷预测等领域。; 阅读建议:建议按目录顺序系统浏览,优先下载并运行提供的Matlab代码以加深理解,重点关注算法实现逻辑与实际应用场景的结合,同时配合YALMIP等工具包提升建模效率,注重理论分析与仿真实践相结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值