最近忙各类事情,blog写的不系统,见谅。
这几天搞到了前不久被媒体宣传过的只有U盘大小的Android 4.0小PC。他的样子如下,使用HDMI接口连接显示器再外接一个usb键盘鼠标就能作为PC用了。
托朋友买了台,试用了下果然还不错,虽然是Mali 400MP + Cortex-A8 的配置,不过感觉播放1080p媒体很流畅,3D渲染没怎么测试,不过依照我以前接触mali 400的经验看,不会差到哪里,但也好不到哪里。
硬件上他使用了全智(Allwinner)的A10 CPU,实际为Cortex-A8 + Mali400 MP GPU。1G DDR以及集成的usb WIFI和一个usb host以及一个usb OTG。仅支持HDMI输出音视频。一些内部照片贴在这:
如果就想把它当作一台小pc来用,那么就应该到此收手,安心的用了。但相信也有不少朋友和我一样,不满足于这些功能,想完全发挥出这么小巧的arm主板的性能,那还需要做几件事情
1. 拿到kernel source以及相关的driver code。业内称为BSP(board support package)
2. 获得串口调试信息
第一件事情我们已经不用操心了,网上已经有针对A10的kernel code,且可以用于MK802的机器。对于第二件事情,我之前并没在网上看到有人说明如何在MK802上引出串口,但其实看了内部PCB也不难发现办法。在介绍前,我先和不明白引出串口信号的朋友介绍下这样做的目的:
一般做linux kenrel(其实是所有kernel层次)的开发,没有VC IDE debugger这种好用的工具,就连gdb server很多时候都不管用。最常见的办法就是通过printf把日志从串口打印出来调试。(当然如果正在开发串口驱动,那只好通过点亮几个LED灯来调试了,这听上去很疯狂,但这是事实)。虽然也有ICE/JTAG这类硬件调试器,但对于linux kernel这类OS的调试,硬件调试器就显得很不直观,而且很多time critical的逻辑无法通过下断点复现。因此,一般做硬件/kernel/驱动层次开发,有一个用于打印printk信息的串口是非常必要的。
估计又有人问,这和现在有什么关系?我们只是使用MK802,又不是做开发。呵呵,这里我们就是希望做一些“开发”。比如从简单的控制MK802上几个IO(就像arduino那样)到修改usb驱动、优化GPU驱动等等,都是hacker喜欢做的事情。那么,有个串口供调试就是非常必要的。
不扯开了,其实串口信号很好引出,具体见下图:
PCB上其实有对应的测试点,但是没有丝印标出信号含义,但其实很容易猜到:右起第二个肉眼就能看出是GND。最右侧通过万用表测量横定是3V3。那自然是VCC。左边2个自然有很大嫌疑是TXD和RXD的TTL电平的串口信号。那么怎么确定那个是TX哪个是RX? 注意左起第二个有一个上拉电阻。一般输入信号才要上拉/下拉。那很可能就是RX。用示波器看了下,果然最左侧有信号发出。果断焊上线路,启动putty,看到了熟悉的uboot画面和kernel dmesg。可惜厂家把tty给禁用了,没法登陆console。但没关系,反正有kernel source,自己编一个即可。从dmesg中也可看出,厂家对系统的优化基本没做,很多内部调试log都还在:-P
Uboot和Kernel启动log
使用putty连接usb串口
将引出的串口信号连接usb转串口适配器
用热熔胶保护,防止短路
最后提醒看的手痒的朋友一声:焊盘间距比较小,小心短路。
附上从开机到启动完毕的log: