红联Linux门户
Linux帮助

Android内核开发 Linux Java编程调用内核模块设备驱动

发布时间:2016-10-06 11:49:21来源:blog.csdn.net/leytton作者:Leytton
本文目的为Linux系统环境下:
1、编写内核模块程序并编译
2、加载内核模块
3、编写Java程序调用内核模块
 
功能为向内核模块虚拟设备写字符串,再从内核模块虚拟设备读出字符串长度。
 
1、编译加载内核模块
见另文《 Android内核开发 Linux C编程调用内核模块设备驱动》:http://www.linuxdiyf.com/linux/24792.html
 
2、WordCount.java文件
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
public class WordCount {  
/** 
* @param args 
*/  
public static void main(String[] args) {  
if (args.length > 0) {  
if (writeStringToDev(args[0])) {  
System.out.println("写入成功");  
} else {  
System.out.println("写入失败");
return;  
}  
int result = readWordCountFromDev();  
if (result > -1) {  
System.out.println("字符串长度为:" + result);  
} else {  
System.out.println("读取失败");  
return;  
}  
} else {  
System.out.println("Usage .eg:java WordCount \"hello\"");  
}  
}  
// 向/dev/wordcount设备文件中写入字符串  
private static boolean writeStringToDev(String str) {  
try {  
// 打开/dev/word_count设备文件  
FileOutputStream fos = new FileOutputStream("/dev/word_count");  
// 写入字符串  
fos.write(str.getBytes("iso-8859-1"));  
fos.close();  
} catch (Exception e) {  
System.out.println("Error:" + e.getMessage());  
return false;  
}  
return true;  
}  
// 读取/dev/wordcount设备文件中的字符串长度  
private static int readWordCountFromDev() {  
int word_count = -1;  
byte[] buffer = new byte[4];  
try {  
// 打开/dev/wordcount设备文件  
FileInputStream fis = new FileInputStream("/dev/word_count");  
word_count = fis.read();  
fis.close();  
} catch (Exception e) {  
System.out.println("Error:" + e.getMessage());  
return -1;  
}  
return word_count;  
}  
}
 
3、Linux中编译并运行
[hadoop@localhost drivers01]$ javac -encoding gbk WordCount.java   
[hadoop@localhost drivers01]$ sudo java WordCount "I love you"  
写入成功  
字符串长度为:10  
[hadoop@localhost drivers01]$  
 
4、参考文章
《使用Android NDK和Java测试Linux驱动》(http://www.linuxdiyf.com/linux/24794.html)
 
本文永久更新地址:http://www.linuxdiyf.com/linux/24795.html