• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 问一下android的文件系统的问题 复制链接 | 浏览器收藏 | 打印
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
楼主  发表于: 2011-03-21 09:47

 问一下android的文件系统的问题

         启动时的commands指向的是linuxrc,原来这个是个软连接,现在是个可执行文件。请问触摸屏校准程序的调用是在这个文件里面么?这个文件最后是不是跳到system/core/init/init.c的main函数执行的?
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
1楼  发表于: 2011-03-21 10:53
里面除了调用触摸屏校准程序外还执行么什么么?
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
2楼  发表于: 2011-03-21 11:32
我甚至在android里面连标准的tslib库都没有找到!
qt下面还有,android里面就没有了么,
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
贡献值: 0 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
3楼  发表于: 2011-03-21 12:59
Android 2.3之前对要求触摸屏driver提供的数据是校准过的, 不能是未校准的raw数据, 所以QT与Android是不一样的
另一方面, Android的C库不是glibc, 因此估计在Android中就采用了静态链接的方式
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
4楼  发表于: 2011-03-21 13:31

 回 3楼(911gt3) 的帖子

哪请问linuxrc这个文件是怎么生成的?里面执行了什么操作?android的linuxrc不是软连接了而是一个可执行程序,这个程序是不是执行的触摸屏校准?如果不是触摸屏校准是在解析init.rc之前哪做的呀?我现在毫无头绪,难道是lcd底板里面固化了触摸屏校准程序?应该没这么牛逼吧
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
5楼  发表于: 2011-03-21 13:36

 回 4楼(xiexiedajia) 的帖子

知道了,谢谢了。
android 的坐标转换处理:
This implementation is a linear transformation using 7 parameters
(a, b, c, d, e, f and s) to transform the device coordinates (Xd, Yd)
into screen coordinates (Xs, Ys) using the following equations:

s*Xs = a*Xd + b*Yd + c
s*Ys = d*Xd + e*Yd + f

Xs,Ys:LCD坐标
Xd,Yd:触摸屏坐标

在编译好了的ANDROID根文件系统的system/etc/pointercal这个文件内,存放着7个数,
这7个数就是对应上面公式的a,b,c,d,e,f,s
+----+-----+--------+------+--+--------+----+
| a  |  b  |  c     | d    |e |   f    | s  |
+----+-----+--------+------+--+--------+----+
|-411|37818|-3636780|-51325|39|47065584|6553|
+----+-----+--------+------+--+--------+----+

2.处理说明:
“system/etc/pointercal”这个文件是被java程序读取使用的,文件目录:
f rameworks/base/services/java/com/android/server/InputDevice.java
---注:我用的是koolu的源码(http://git.koolu.org/),官方的源码请自行搜索。
该文件的第32行定义了:static final String CALIBRATION_FILE = "/system/etc/pointercal";
这个CALIBRATION_FILE变量在第237行被使用于打开该文件:
FileInputStream is = new FileInputStream(CALIBRATION_FILE);
后面的代码就是从这个文件里读取那7个数据,用于上层函数的坐标转换。
所以只要根据该公式通过手工计算出那7个值,就可以准确的进行触摸操作了。

3.计算
计算前需要取得4个触摸屏的坐标,我们取LCD 4个对角的坐标,因为只有这4个坐标知道确切的LCD坐标。
要取坐标必须打开内核中触摸屏的调试代码,启动后在console上使用dmesg命令来跟踪取得。
我是在一个角上用笔点一下,再用dmesg调出记录,然后记录下来。如下是我的320x240屏记录的结果:
坐标轴里小括号()里面的是调试信息给的触摸屏坐标,中括号[]里的是对应的LCD坐标。

x坐标
/|\
|(X:870, Y:140)   (X:870, Y:890)
|  [320,0]          [320,240]
|
|
|
+-------------------------------> y坐标
(X:120, Y:140)    (X:120, Y:890)
     [0,0]             [0,240]

*LCD 分辨率:320 x 240 ,也是LCD坐标的最大值
             x     y

设定s=65536
将那4个坐标代入那个公式,可以得出8个方程组

        0 = a*120 + b*140 + c
        0 = d*120 + e*140 + f
        0 = a*120 + b*890 + c
65536*240 = d*120 + e*890 + f
65536*320 = a*870 + b*140 + c
        0 = d*870 + e*140 + f
65536*320 = a*870 + b*890 + c
65536*240 = d*870 + e*890 + f
解方程组后就可得:
a = 0
b = 20971
c = -2935940
d = 27962
e = 0
f = -3355440
s = 65535
然后用工具打开andriod的“system/etc/pointercal”文件,把这几个数输进去,用空格分开,
转载地址:http://xxw8393.blog.163.com/blog/static/3725683420097275349501/
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
6楼  发表于: 2011-03-21 13:54
我看友善并不是手动创建那几个值,还是用触摸校准创建的那个pointercal,请问那个触摸校准程序在哪里?
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
7楼  发表于: 2011-03-21 13:57

 回 6楼(xiexiedajia) 的帖子

或者我手动创建那个文件,然后设置启动参数为init代替linuxrc可不可以?
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
8楼  发表于: 2011-03-21 14:07
触摸校正程序已经集成到init中了,难得你注意到这么细节的东西。其他厂家都是采用的很笨的方式(手工方式)创建这个参数的,所以不同尺寸的屏,无法统一固件。
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 圣骑士
UID: 9690
精华: 0
发帖: 369
金钱: 1955 两
威望: 415 点
贡献值: 0 点
综合积分: 738 分
注册时间: 2009-10-10
最后登录: 2017-11-21
9楼  发表于: 2011-03-21 14:13

 回 8楼(mindee) 的帖子

那linuxrc执行了什么东西,我能不能直接把command line里面的参数设为init=init?
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go