CM12.1在Nexus Player上面的安装与问题解决

Nexus Player到手后,需要将系统刷成CM12.1的系统方便调试。本以为和其他Nexus设备一样非常的容易与简单。结果还是遇到了不少问题。 启动后出现SystemUI Not response问题 不管是自己编译的CM12.1,还是使用XDA中其他人编译的或者是CM官方下载的,都有这个问题,这个问题来源于两个方面,一个是App的问题,另一个是Gapps的问题。 APP问题 如果始终出现SystemUI not response,那么可以考虑将TV相关的App都删除,除了那个ARemoteService,这个应该是用于Remote Control的,需要保留。其中正常的列表如下:

  GoogleApps的选择 有两种选择: OpenGapps Vs Stock Apps 这两种都尝试了,都有问题:

Continue reading »

Ubuntu中Mirror Android屏幕

Droid@screen 找了一圈,最后找到一个能用的,而且不需要配置的Droid@screen 主页位于:http://droid-at-screen.org/installation.html 虽然官方没有说可以用于Linux,但是看到使用的是java这个cross platform的language写的,同时还看到需要指定adb,可以才想得到用的是adb的screenshot来不停的截图做的。当然这样的话会很慢,不过能用再说。 使用 下载了jar包后,直接使用java -jar运行即可。 然后会弹出adb指定: 这个位置使用which命令即可得到。 然后是效果图 同时这个可以使用鼠标点击来模拟input。

Continue reading »

Android ADB始终为unautorized的解决

现象 启动后连接ADB,始终无法连接,adb devices显示为没有授权,但是Android端又始终没有出现Debug权限确认的Dialog,让人疑惑不解,尝试了将Android端的Debug 认证记录取消,依然没有解决。

如果使用adb shell查看,那么也是说需要在Android端的对话框中确定接受:

但是实际上,从来就没有出现过询问是否接受PC key和调试的窗口。从后来的解决看,这个提示就是一个坑,让人走到了不正确的方向上。 再三确认了udev rules里面有对应的VID和PID,也确认了Android端的Debug开关因素。在XDA与google上面找了许久也没解决。 解决方案 最后发现是PC端的ADB配置问题,ADB需要在~/.android中配置一把,这里面有key,最为重要的是,需要将VID放入到这个文件中,例如下面的18d1就是Nexus(ASUS)的设备VID:

同时可以看到这个目录中有key相关的东西,原来前面提示的unautorized需要Android端确认,可是确认之前,PC端得生成一个key,并将public key发给Android端,Android设备才会弹出询问是否接受和保存debug PC key的对话框。

Continue reading »

S5P4418 使用SD卡启动Android系统

S5P4418的启动方式 我的板子是g4418box,默认的从eMMC启动,如果插入了SD卡那么就从SD启动,具体的板子需要看HW设计。 SD卡的layout 在layout之前我们需要知道各个分区的大小,而编译出来的img是sparse的ext4,所以需要先convert到标准的ext4,然后再mount,mount之后可以看到对应的size:

  对SD卡分区 使用Gparted的分区后情况如下,注意size与extension分区: 分区后的情况如下:

  ramdisk的处理 我们可以按照以前的做法将ramdisk打包成cpio的gzip,但是这样的话如果要修改ramdisk里面的内容会比较麻烦,修改方法可以看我以前的博客。所以这里决定使用专门一个分区放ramdisk,同时也将uImage也放在这个boot分区 修改fstab 因为默认编译出来的是从eMMC中启动,而我们需要更改fstab,让vold知道如何mount我们的分区, 在修改之前我们需要确定分区的mmcblk number,这个可以直接启动ramdisk最小系统就行了,因为ramdisk启动完成后没有启动其他的service也是可以使用的。

我们我们需要确定哪个是eMMC哪个是SD卡,这个可以对比以前的fstab完成:

Continue reading »

使用Remix OS作为X86 Android系统开发OS

源起 在开发过程中,有需要X86上面的方案,因为Nexus Player还没有到,身边又没有其他Intel Android设备,想到PC就是X86(以及X86_64),为了赶时间,因此决定使用笔记本(MacBook Pro)来安装一个Android X86系统,用来开发。 根据记忆,下载了Remix OS并安装到了U盘,启动,发现确实可以正常使用蓝牙连接BLE Periphiral,因此决定就用这个系统。 squashfs的解压 这篇博客开始是使用X86_64,后面是X86版本的OS,这两者的squashfs的压缩方式不一样,32Bit的OS需要在官网切换到English之后才可以选择下载。 Ubuntu 14.04中的unsquashfs版本为4.2,而且支持的compression只有gzip等几种:

 

可以看到不支持lz4,lzma,所以需要自己去下载最新的来编译。可以参考: http://unix.stackexchange.com/questions/90323/how-to-use-unsquashfs-with-lzma 具体而言就是下载解压,然后修改Makefile将comment掉的各种support uncomment,然后安装对应的lib,例如:

Continue reading »

Android中使用”hacker”方式解决ServiceManager的权限限制问题(1)

缘由 有一个系统,需要我们的解决方案,但是却没有提供BSP的源码。 我们的方案有一个So文件,并在其中有注册service,但是启动后发现service并没有注册成功,查询log发现是:

看起来是我们不具备权限,然后确定了一下SElinux的状态,发现是没有开启的,而servicemanager对添加service的权限的检查是位于其代码中的。 关于ServiceManager是如何检查权限的可以参考一下stackoverflow中的答案,或者自己看看servicemanager的源码。 参考的链接为这个,从这里面我们可以得知权限的检查写死在了对应的source code中(Android 4.4),暂时没有配置文件,这个和SeLinux不一样。 判断逻辑 ServiceManager的判断逻辑为: 1. uid判断是否为system 2. 是否在可信任的表格中 如果两个都不是,那么就认为没有权限,然后打印出前面的话来。这个对应的代码为:

另外这个allowed的数组为:

从里面的注释可以看出,以后这个可能会变成使用通配符方式,或者是配置文件的方式,但是现在还是直接写死了。

Continue reading »

MacBook Pro安装系统指定版本的系统

默认的,如果从apple store中更新系统,那么为最新版,但开发和测试的时候可能需要一个特定的OS版本,此时需要自己下载安装了,具体步骤如下。 1. 首先下载需要的版本的系统 然后将这个dmg文件放到MacBook Pro中,然后然后将双击打开,将里面的Installer拖动到Application中 将这个放在Application中是因为Appstore默认就是将其下载到这里的 另外后面的DiskMaker X这个工具也会自动到这里读取文件,从而省去我们的指定与拷贝 2. 制作安装U盘(Bootable USB Media) 下载并安装DiskMaker X,其官网如下: Home 双击下载下来的dmg文件,mount之后,将其拖入到Application中完成安装 在LaunchPad中找到并运行这个Disk Maker 选择我们前面下载了的系统的版本,例如10.11

Continue reading »

【EVB-335X-II试用体验】 基于Yocto的嵌入式的敏捷项目开发:以电子相册为例

EVB 335X-II有一个800*480的屏幕,如果放在家里,那么我们可以做一个电子相册,在家里放着的时候,可以自动播放图片幻灯片。这篇博客,我们将使用开源方案以及Yocto来构建和完成这个小项目。 方案选择我们可以自己使用Qt/C++甚至Python,C来写一个直接操作Framebuffer,并针对不同size的图片进行适配和Zoom In/Out缩放处理,还需要对不同图片的加载进行判断,同时如果我们还希望在图片上面显示字的话,还需要一些叠加处理,然后我们还需要进行交互的API暴露,例如让user可以查看Next与Previous Picture; 网络支持;缩略图显示支持;网络图片支持;透明显示;放大缩小支持;EXIF信息解析与显示与叠加;只显示特定特征的图片;抗锯齿。 可以看到,本来想着是一个简单的电子相册,如果想去做好,并不容易。需要考虑的方面很多。 这里我们使用feh这个开源的方案。 feh有诸多的优点,feh使用imlib2并基于X11来显示,同时支持插件化配置,还支持网络。 其官方列出的features有: Various operation modes: Slideshow: Show all files in or below

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用:QT与触摸屏(3)

前面我们已经构建好了基本的Rootfs,并且可以启动起来的,但是我们也会发现这个roofs非常的小,相当于一个busybox搭建的一样,当然这个无法满足我们的需求,因此我们下面将开始扩展我们的rootfs,添加一些工具让我们可以方便的开发。 显示问题 使用前面的方法启动后,我们会发现在uboot阶段是有图片的,但是在linux之后却没有发现有boot logo,然后启动之后我们也没有发现有/dev/fb0这个设备,同时也没用在dmesg中找到fb相关的内容,而device driver中却已经配置好了驱动: 因此可以推断出我们的驱动并没有probe,那么就可能是我们的device没有和driver match,或者根本就没有加载这个驱动,然后我们注意到在内核中的启动参数中有一个lcd相关的参数: 当然也可以认为那个consoleblank=0也是相关的,关于这个consoleblank,其实是这样子的: 我们在内核中配置了使用console on framebuffer,那么过10分钟,就会自动关闭掉这个console,其实就相当于关闭掉了这个屏幕,所以这里将其设置为0是为了不让屏幕在10分钟之后关闭,变成黑屏。 因此我们改一下bootargs,重新启动: set ipaddr 192.168.1.111;set serverip 192.168.1.100 set bootargs ‘console=ttyO0,115200n8

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用(2)

在前面的文章中,我们已经使用Yocto构建出一个Rootfs,但是因为WatchDog的缘故,启动没有多久就重启了。下面我们来解决这个问题。 WatchDog的Disable 我们既可以在Rootfs启动后定期喂狗,也可以直接在kernel中disable Watchdog,在开发初期我们选择在内核中直接去掉比较快。 内核配置 使用make menuconfig来配置,结果出现了错误: 这个明显是因为确实Libary的问题,这个缺少的是libreadline,因此安装即可: sudo apt-get install libreadline5-dev 然后在menuconfig中,我们可以查到Watchdog的位置,因此我们找到disable即可: 然后重新编译,再次测试发现还是会重启。看起来是uboot中就开启了,然后内核中还是需要去关掉才行,或者直接在uboot中需要关闭。 然后将板子开启到uboot中,停留一会发现确实会自动重启,因此可以确定是uboot中的开启了watchdog。然后查看用户手册,可以看到其Watchdog电路如下: 因此我们只需要短接J3即可。 如果想在uboot中disable,那么可以将下面几个宏去掉: 然后重新编译烧写即可。 暂时我们就先这样子做,以后我们将会在Yocto中添加代码来对应此问题,对于如何喂狗可以参考官方给的代码,代码位于: test_code/watchdog/main.c

Continue reading »