安卓 运行 linux 桌面,安卓上运行原生Xorg和Linux桌面记录[完结]

在安卓之上运行原生的Xorg和Linux桌面有以下好处:

1. 比VNC:流畅。我的单核全志A10

1.0GHz的机器,基本上有我原来那个赛扬的老机器用Windows XP的流畅度了。

2.

比TF卡:方便。不用重启机器,按各种按钮,就能切换各种Linux桌面。

3.

比TF卡:方便。同上,玩完Linux,不用重启机器,就可以重新回到启动安卓。

4.

比TF卡:可以直接使用现成的驱动。

结语:在安卓上用framebuffer直接运行Xorg其实很简单,让xorg使用/dev/graphics/fb0并停掉安卓的服务就行了。由于驱动已经加载在内核中,设备本身的驱动不是问题。不过怎么使用驱动却是问题,比如触摸屏的使用,Xorg需要一个中间驱动层,tslib是单点触摸驱动、evdev多点触摸驱动,如果实在用不了,可以用触摸板的驱动代替,比如multitouch或mtrack。

详细过程及笔者所用的脚本和镜像,请参考我在ubuntu中文论坛的帖子:http://forum.ubuntu.org.cn/viewtopic.php?f=177&t=451917&sid=b6867f7f12fa4f29e7de2e208f017a47

有兴趣在安卓手机或平板上体验Linux桌面的,最简单的方法可以使用Linux Deploy软件。

2013-11-19 11:53

红米手机上使用Xorg :0 vt1

出错,无法打开virtual console 1

如果不加vt1,就是无法打开/dev/tty0,文件不存在。

Fatal server error:

(EE) xf86OpenConsole: Cannot open virtual console 1 (No such

file or directory)

(EE) xf86OpenConsole: Cannot open /dev/tty0 (No such file or

directory)

虚拟终端设备?

看来这个方法并不普遍啊。

2013-10-25 02:20

把安卓的驱动和内核提取出来,用到TF卡上启动,终于搞定触摸屏驱动了!

这样的话,从卡上启动的完整的Linux系统可以使用Android里面的所有驱动。

哎,无奈之举啊,触摸屏驱动不开源,网上找到的版本都不能用,所以只能把驱动模块直接拿来用了。

不过这种办法倒是可以解决所有的驱动问题,不管厂家是不是开源。

2013-10-24 14:42

直接在TF卡上运行的系统还是搞不定触摸驱动的问题。

gt82x.c里面的test_i2c_transfer那段由一个宏变量控制,注释掉那个宏就可以可以不编译这段。也就是不做i2c传输的测试,果然能在/dev/input/下创建一个event,但是会出错:

……

[  59.840000]  incomplete

xfer (0x20)

[  59.890000] incomplete xfer (0x20)

[  59.900000] Goodix-TS 2-005d: line:878,I2C

transfer error. Number:-70

i2c是一个啥子总线结构,看源码时说是要根据不同的平台进行修改。

不再搞代码编译,毕竟自己不是搞硬件驱动设计的。

2013-10-22 21:18

A10的这个编译的内核,触摸屏驱动模块反正就是一个检测没过,然后不干活了。又尝试找了其它平台的gt82x的驱动文件来折腾了一下,想加到A10的里面,不行,编译出错。

2013-10-22 15:25

dmesg可以看到错误,对应驱动里面的源码:

ret = goodix_i2c_test(client);

if(!ret){

pr_info("Warnning: I2C connection might be something

wrong!\n");

goto err_i2c_failed;

}

不知是什么错误。。。

2013-10-22 14:50

自己用github上ugers/linux-sunxi编译的内核和模块,其中的gt82x_ts就是我的触摸屏的驱动,这个驱动不知道怎么回事。没有被udev检测到,没有在/dev/input/下创建event。找了下,触摸设备在/sys/bus/i2c下面可以看到,2-005d目录就是,而在/sys/dev/char/里面没有这个设备,仅有的两个主编号为13的设备分别是电源、音量按键和鼠标。

这个驱动不行?

看到:

https://groups.google.com/forum/#!forum/zh-kernel

这是所有的input这个系统都不能生成event,但是我这个很扯淡的是鼠标键盘能生成event、但是G-sensor和触摸屏gt82x_ts不能生成event。

原因应该是在gt82_x这个驱动上?

2013-10-21 15:16

现在触摸屏用mtrack驱动,其实是拿touchscreen当touchpad用,并不是很舒服,也是当时自己开始不太想整mtrack或multitouch的原因之一。不过evdev用不了,也就只能当触摸板用用了。现在才注意到,evtest的结果里只有TRACKING_ID,

POSITION_X,

POSITION_Y和TOUCH_MSJOR四个量(前面都带ABS_MT),五个手指是支持的(TrackingID),但是只有这四个量的话,是不是功能不全呢?只是用来调试的么?

虚拟键盘:xvkbd鼠标一放上就打字。matchbox-keyboard有点小bug,最大化一个程序时,这个程序会成和它一样大小然后叠加到它上面。onboard更好看,没有这个bug,就是有点小,比xvkbd大点,但还是小。

2013-10-21 00:58

使用synergy,平板可以使用电脑的鼠标、触摸板和键盘。反过来用,平板的触摸屏可以用做电脑的无线鼠标,比android下的那些应用还好用。甚至还可以做为电脑的手写板,在gimp里面画图,哈哈,好玩,不过好像不怎么灵光。可能是因为只模拟了点击的事件,因为在平板上现在也还是只能点击不能选上然后拖动。这个可以通过在xorg.conf里面配置mtrack来实现。

原来一直用的那个屏幕键盘就是matchbox-keyboard,还以为是onboard呢。用着还可以,比xkvb那个小小的键盘可用性强点。

2013-10-20 18:00

终于搞定了触摸屏的问题。使用mtrack来驱动就好了。真是柳暗花明又一村啊,不能总是在一棵树上吊死!

原来一直卡在evdev上,因为它看起来最有希望:用evtest测试,内核的触摸事件报告完全正常,但用evdev作为Xorg的触摸屏输入驱动,Xorg的log文件显示没有任何问题,但是触摸就是没有任何反应(莫非要校准?10-evdev.conf里已经写上了。)。

剩下的事情就没那么重要了,一是搞定屏幕休眠,然后是电源电量,还有蓝牙的问题。

2013-10-20 11:14

之前试过安卓下的自动安装Linux的应用,但是体验很差,半天下不下来镜像文件,就没再用过。主要前几天玩的过程中看到Linux

Deploy为个应用支持安装Desktop的Linux,还能选择桌面环境是使用Xserver、VNC或是Framebuffer什么的。那么和我现在做的事就是一样样的,如果能更简单的做一件事,何乐而不为呢,所以现在就在尝试中。速度还可以。已经装完,但是选Framebuffer怎么光是黑了。。。没见界面啊。

2013-10-19 23:50

今天把之前的修理匠想法实现了一下:提取并替换安卓内核(安卓这个内核8.1M比Linux那个大了一倍),copy一份3.0.96+的版本然后更名为3.0.8,然后把module也替换为安卓的(只要安卓有的)。。。

结果是启动变慢,中间还以为没启动起来。本来我没有构建声音的模块,但启动后似乎有声音(LXDE面板上有音量插件了,没有测试),可见声卡驱动已经放在内核里了。意料之中,触摸屏还是用不了。

发现Linux东西的开发还用Linux下的工具靠谱,提取A10固件和相应的文件系统,内核什么的,请去这:

http://linux-sunxi.org/Boot_Android_from_SdCard

之前我的想法错了,原来不是全志固件的问题,安卓的boot分区就是那样的,先有段header然后是kernel接着是ramdisk。

总结一下就是:目前最好的情况是在安卓上chroot运行linaro的rootfs,这样触摸屏驱动肯定是好的,能用evtest测试,但是用evdev拿触摸屏作为输入设备却不可以。

2013-10-19 01:42

gt82到底是个什么玩意儿,为什么用的人这么少。哎,ft5x_ts多好,随便一加载驱动就能用了。

evdev可以用,但是为什么一到我这儿,这个gt82x的驱动就死活不能作为Xorg的输入呢?不能触摸,也不能当鼠标使,更别提多点触摸了。

想从安卓里面提取内核,全志的这个内核怎么都不对,无法挂载。记得上次用其它镜像从TF卡启动的时候似乎看到了uImage啊,现在怎么总是挂载不上了...

2013-10-18 19:54

搞定自己编译内核的流畅度问题!

发现自己原来在台式机上还存有config_3.0.36-t2这个配置文件,于是用它编译,中间出点小意外,最后避开了那个错误:

http://forum.ubuntu.org.cn/viewtopic.php?f=126&t=422855&p=3037428#p3037428

现在TF上运行自己编译的内核,和Linaro-armhf以及Android内核上运行的流畅度相当了,很好。

再用gparted来看nand闪存盘,果然是有问题,每个分区Gparted都独立标识出来了,而且是有错误的。真不知道Android是怎么启动起来的……

可以用gpart恢复数据,这个。。。分区表就没有对过,还是不整了。能用着就用着,不懂不瞎搞。

似乎这个驱动不行,没有把触摸屏驱动起来吧。

2013-10-18 15:44

fdisk太不靠谱了,分区表给恢复坏了。又得刷次安卓。。。

原来平板刷机的时候把/data分区调大到2G,但是那种调整方法似乎不太对,分区表可能出了点问题。android命令行下df看到/data分区只有1G,但是busybox

df -h看到是有2G,在android的设置--存储里面看到的也是2G。

所以分区表可能是有点问题的,从TF卡启动Linux,用fdisk

-l能看到nand各分区,大小确实是那么大,但是每个分区都提示invalid的分区表。于是用fdisk恢复,一进去就告诉我分区表有问题,于是就直接w写入新分区表。。。然后就坏了。

下次试试gparted,不行就直接用着。

现在知道用suxi的工具自己编译u-boot了,不过是使用现成的配置文件哦。。。嘻,用mk802ii的配置文件。硬件反正咱不懂。。。

似乎上次关机后没关好就拔了TF卡,上面有些错误所以启动不了卡让的Linux系统,但是重新写入u-boot就又可以启动了。

考虑直接使用安卓内核的话会怎么样呢?模块使用方式不太一样,那么把相应模块换一下呢?

(修理匠思想。。。功能替换)

2013-10-18 01:25

又回到自己编译的内核和linaro的rootfs的组合,从卡上启动。

A10采用u-boot,除了编译script.bin,还要生成u-boot启动的配置文件boot.scr.

自己编译的内核上运行确实各种不流畅啊。

哈,忘了在/etc/modules里面加驱动,直接modprobe 8192cu,可以用无线了;modprobe

gt82x,没有反应,udevd在运行着,但是没有在/dev/input/下建立eventx,cat

/proc/bus/input/devices也只看按键的id,触摸屏的驱动似乎还是没有带起来。。。

明天再试用linaro的内核编译参数吧。

从Linux内核启动进LXDE桌面太快了,上次说的有点保守,实际上3到5秒就能进桌面。

不明白,这个/dev/input/eventx是怎么建立的,我自己当然可以建一个,但是proc里都没有发现设备,是不是说我的编译的模块是失败的?

2013-10-17 17:xx

尝试不挂载/dev目录到chroot的系统中,这样,choot后/dev/input/下没有东西。把udevd打开,然后rmmod关掉内存中触摸屏驱动,再用insmod把驱动加载上,这时果然多了一个有了一个/dev/input/event2。不过这样加载的驱动也是一样的,evdev还是没有支持触摸屏。。。

哎,有单点的触摸就行嘛,用来模拟鼠标和敲字就完全行得通了,不然总是要连一套键鼠,不是很方便。

2013-10-17 10:53

昨晚睡觉前发现,只要触摸屏的校正参数不是“0 768 0 1024”就不会出现触发这个Bug。

但是改了其它校正参数,还是不能用触摸。也没法校正。

用evtest测试,内核报告触摸事件应该是正常的(10个参数),这说明android内核和触摸屏相应的驱动是匹配的。Xorg的日记文件显示没有错误了。但是不能触摸。。。

Linaro八月的rootfs镜像很有意思,有一个startlubuntu-nexus7,把LXDE改得稍微像平板。从ubuntu源里安装较新的gcc,4.7,编译的程序效率要比原来的高不少。

2013-10-17 00:35

用linaro比较新的rootfs:linaro-raring-alip-20130826-474.tar.gz。编译成功xf86-input-evdev。然后运行Xorg,仍然使用evdev驱动,不会崩溃了,不过那个bug的提示仍然在(evdev-ts是我对触摸屏起的名字):

(EE)

(EE) Backtrace:

(EE)

evdev-ts: Attempted to start touch without x/y (driver

bug)

(EE) BUG: triggered 'if (inSignalContext)'

(EE) BUG: ../../os/log.c:484 in LogVMessageVerb()

(EE) Warning: attempting to log data in a signal unsafe manner

while in signal context.

Please update to check inSignalContext and/or use

LogMessageVerbSigSafe() or ErrorFSigSafe().

The offending log format message is:

%s: Attempted to start touch without x/y (driver bug)

不错,有进展。是不是要提交一下这个bug呢?

2013-10-16 15:18

编译tslib时已经装了automake libtool。

编译xf86-input-xvdev,安装:xutils-dev

gettext pkg-config

./autogen.sh

……

checking for XORG... no

configure: error: Package requirements (xorg-server >= 1.10

xproto inputproto) were not met:

No package 'xorg-server' found

No package 'xproto' found

No package 'inputproto' found

Consider adjusting the PKG_CONFIG_PATH environment variable if

you

installed software in a non-standard prefix.

要编译整个Xorg?

不用,安装xserver-xorg-dev x11proto-core-dev

x11proto-input-dev。

当缺少某个包的时候,标准做法:apt-cache search,apt-get xxx-dev。

又提示缺少libudev,安装libudev-dev

接着提示libevdev,这个一搜,源里面没有。。。

看了下,似乎今年9月份才出来这个东西,这不关键问题,关键问题是编译它的过程中又出错了:

……

In file included from libevdev-uinput.c:36:0:

libevdev-int.h:96:30: error: 'ABS_MT_TOOL_Y' undeclared here

(not in a function)

libevdev-uinput.c: In function 'fetch_device_node':

libevdev-uinput.c:175:11: warning: ignoring return value of

'asprintf', declared with attribute warn_unused_result

[-Wunused-result]

make[3]: *** [libevdev-uinput.lo] Error 1

make[2]: *** [all] Error 2

make[1]: *** [all-recursive] Error 1

make: *** [all] Error 2

新东西,网上没有多少资料,暂时放弃。

突然想起可以直接用apt-get来自己编译包。我也不知道它得到的源码是不是最新的,那个bug是不是除掉了。反正不妨试试。

apt-get

build-dep xserver-xorg-input-evdev

apt-get source xserver-xorg-input-evdev

apt-get -b

source xserver-xorg-input-evdev

哈,生成的怎么有两个deb包,

xserver-xorg-input-evdev-dev_2.7.0-0ubuntu1.2_all.deb

xserver-xorg-input-evdev_2.7.0-0ubuntu1.2_armhf.deb

试了下,还真不是最新,这个bug还是没有修复。打补丁的事不会。还是先试试Ubuntu Touch吧。

刚好明天好像就要发布了。

2013-10-16 13:26

tslib果然是只支持单点的。

安卓内核里的驱动上报的事件里含有MT字样,就是MultiTouch的意思吧。

如果要继续用tslib这个单点触摸驱动,似乎既要改触摸驱动的源码,又要改tslib的驱动,最后得到的还是一个只支持单点的结果,只能模拟鼠标。

还是看evdev吧。

这个多点触摸比较炫哈:

2013-10-16 03:50

tslib编译了,它告诉我:

tslib: Selected device is not a touchscreen (must support

ABS_X and ABS_Y events)

用evtest看了下,触摸屏驱动返回的是

ABS_HAT0X

ABS_HAT1X

ABS_HAT2Y

ABS_HAT3X

ABS_DISTANCE

ABS_MT_TOUCH_MAJOR

ABS_MT_WIDTH_MAJOR

ABS_MT_POSITION_X

ABS_MT_POSITION_Y

ABS_MT_TRACKING_ID

咋回事?会不会是只支持单点?

怎么办?

不行只能再看evdev,它好像比tslib好一些,那个bug可能现在已经解决了。再试下multitouch吧。

又学了一招,cat

/dev/input/event*,触摸屏驱动好着的话,触摸它就会在shell里有显示。

哎,在这种时候,偏偏充电器坏掉,似乎没电,平板自己关了。睡觉。04:23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值