文件名称:增加链接库文件-实用红外光谱解析
文件大小:68KB
文件格式:PDF
更新时间:2024-06-22 12:06:47
Java虚拟机 ARM_Linux 移植
4.5 增加链接库文件 JamVM 在启动时需要读入两个 zip 文件 , 这需要 zlib 库文件 的支持。找到宿主机上交叉编译工具链所在的目录 , 进入到库文 件所在的目录: /opt/host/armv4l/armv4l- unknown- linux/lib。把两个链接库文件 libz.so 和 libz.so.1 复制到/jamvm/lib/classpath/下。 经过以上五步 , /jamvm 下的所有目录和文件就是要移植的虚 拟机 , 只要把/jamvm 移植到目标平台上 , 对环境变量进行相应的 设置就可以使用 jamvm 来执行 java 字节码 (.class 文件), 但是这 个.class 文件必须是在宿主机上用 jikes 来编译生成的。编译的时 候应指明加载包名。即用如下命令来编译.java 文件: Jikes - bootclasspath /jamvm/share/jamvm/classes.zip:/jamvm/share/classpath/glibj.zip *.java 5 移植到目标平台 ARM- Linux 上 要使 JamVM 在 ARM 板上的 linux 系统下运行 Java 字节码文 件 , 应对 linux 系统进行环境变量设置 : (1)指定类路径。即 : export BOOTCLASSPATH= /jamvm/share/ jamvm/classes.zip: /jamvm/share/classpath/glibj.zip (2) 指 定 LD_LIBARY_PATH 环 境 变 量 到 /jamvm/lib/classpath 下 , 那里有许多 *.so 文件 , 这些都是 java 核心类库 API 的 C 程序 链接。即: export LD_LIBRARY_PATH=/jamvm/lib/classpath (3)在目标板上的/lib 下建立链接 : ln - s /jamvm/lib/classpath/libz.so.1 /lib/libz.so.1 ln - s /jamvm/lib/classpath/libz.so /lib/libz.so (4)添加环境变量 PATH: export PATH=$PATH:/jamvm/bin 经过以上步骤完成环境变量设置后 , 接下来应该考虑把裁减 编译好的 JamVM(即 指 /jamvm 下 的 所 有 子 目 录 和 文 件)移 植 到 目 标平台 ARM- Linux 系统时应该放在哪里? 下面提出了三种移植的方案 : 第一种方案 : 把 JamVM 放在 U 盘里。 将编译好的的 java 虚拟机 , 即/jamvm 下的所有目录和文件复 制到一个 U 盘上 , 在启动 ARM 板上的 linux 系统后 , 使用命令 mount /dev/sda /mnt 把 U 盘挂载到目标板上。然后进行环境变量的 配置, 完成上文提到的 4 步, 为了快速方便可以先写一个脚本文件 config 放在 U 盘里, 保存以后用命令 chmod +x config 来付于其可 执行权限。这样挂载后直接运行文件 config 来配置环境变量。 该方案把 Java 虚拟机 JamVM 放在 U 盘里 , 使虚拟机具有了 便携、可移动的特性 , 符合嵌入式的思想。在使用时可以直接插拔 到具有 ARM- Linux 平台的目标板上 , 不占用 flash 空间。而且实现 比较简单 , 不需要重新对内核与文件系统做任何改动。 第二种方案 : 把 JamVM 放到 RAMDISK。 RAMDISK 是使用磁盘文件系统的压宿镜像存放在 Flash 中 , 在系统初始化时 , 解压缩到 SDRAM 并挂载为根文件系统。该移植 方案要先在宿主机上用 gunzip 把要烧写到 Flash 里的 ramdisk.im- age.gz 解压 , 建一个挂载目录/ramdisk,然后 mount–o loop ramdisk. image/ramdisk 这时把/jamvm 目录全部复制/ramdisk 下 , 再修改启 动脚本 init.d 文件来初始化 Java 虚拟机的运行环境 , 让 linux 系统 启动后就可直接运行 JamVM。最后 umount/ramdisk 把文件系统镜 像文件再压缩 , 然后烧写到 Flash 里面。这样就把 JamVM 移植到 目标板上了。使用该方案时 RAMDISK 离不开内核的支持 , 这就要 求在移植和编译 linux 内核时对 RAMDISK 的支持做相应的参数 设置。将 JamVM 放在 RAMDISK 的特点是速度快 , 因为它是在 RAM 中运行的。缺点是每次系统掉电后 , 前面创建的文件就会丢 失。当需要向 JamVM 里另外添加包( 如对串口支持的 RXTXcomm. jar) 时要修改 ramdisk.image.gz, 还要重新烧写 Flash, 很不方便。 第三种方案 : 使用 JSSF2 文件系统 对于 JFFS2, 则不要解压原有的 jffs2.img, 而是直接往原来的 目录里面添加即可。JFFS2 支持在扇区上直接执行闪存擦除/写/读 操作 , 而且系统掉电后在 JFFS2 里创建的 文 件 也 不 会 丢 失 。 将 Flash 存储空间分为四个区 , 分别用来存放:Bootloader、Linux 内核 压缩文件、Ramdisk 压缩文件、JFFS2 文件系统。做一个 JFFS2 的 映像文件 Jffs2.img, 把/jamvm 复制到里面 , 根据对 Flash 分区的设 定 , 把 Jffs2.img 烧写到 Flash 中的正确位置 , 为了使系统启动时能 够自动挂载 JFFS2 文件系统 , 在 Ramdisk.image.gz 的启动脚本文 件里加入挂载命令。这样就可以像访问其他文件系统一样方便地 访问 JFFS2 分区。 该方案实现了 JamVM 与根文件系统 RAMDISK 的分离。而且 可以动态地向 JamVM 里添加或删除 Java 包 , 缺点是 JSSF2 需要 像内核一样专门移植 , 增加了移植的工作量。 6 结束语 本 文 针 对 Java 虚 拟 机 JamVM 在 ARM- Linux 平 台 下 如 何 移 植做了详细论述 , 介绍了交叉编译的方法 , 在目标平台上构建了 一个 Java 程序的运行环境。由于项目的需要 , 没有对图形库进行 移植 , 使 JamVM 无法运行带图形界面的应用程序 , 还有让 JamVM 可实现对串口操作 , 这些问题都有待进一步深入研究解决。 参考文献: [1]孙天泽, 袁文菊. 嵌 入 式 设 计 及 Linux 驱 动 开 发 指 南—基 于 ARM9 处理器[M]. 北京:电子工业出版社,2007.1. [2]Tim Lindholm,Frank Yellin(美)著, 玄伟剑, 等译. Java 虚拟 机规范[M]. 北京:北京大学出版社,1997.8. [3]曹晓钢, 蒋靖, 译. 深入 Java 虚拟机 ( 原书第 2 版 ) [M]. 北 京: 机械工业出版社,2003. [4]JamVM 官方网站: http://jamvm.sourceforge.net. [5]GNU 开源组织网站: http://www.gnu.org. 1375