Ubuntu下面包依赖损坏的解决unmet dependencies

2017-1-4 更新 在原来的文章中提到过使用gzip压缩changelog得到changelog.debian.gz,然后覆盖掉原来的,从而达到欺骗系统认为的软件包的版本问题, 但是这样的话需要自己手动定位找到并且压缩, 像pulseaudio这样的软件有很多个changelog,还需要一个个找, 找个一个最简单的方法: 1. 使用apt-get download下载对应版本的deb包 2. 使用gdebi-gtk图形化或者ark解压,直接提取里面的gz文件覆盖即可. ——————————————————– 以下为原内容 ——————————————————– 出现dependencies的原因 在新版的Ubuntu下,例如Ubuntu 14.04或者16.04一般是不会出现broken dependencies,或者出现unmet dependencies, 但是如果我们使用dpkg强制安装了某些deb包,或者在build-dep的是否手动更改了某些Packages的文件和版本时,

Continue reading »

DBus入门实践(1): 基本概念

基本概念 可以参考下面链接.或者是官方的教程.  1. linux,dbus示例 Knowing some basic things by example, 推荐: http://laokaddk.blog.51cto.com/368606/943133         http://laokaddk.blog.51cto.com/368606/943148/   2. Documents Reference    D-Bus Specification

Continue reading »

树莓派3的调试串口问题的不完美解决:让蓝牙与调试共存

问题 因为RaspberryPi3的BT与Debug串口共用,导致同一时间只能有一个可以使用,尽管也可以使用软的UART1来控制BT,但是这样子的话需要将CPU的频率固定.  而我们在实际开发中,在mount rootfs之前. 是需要用debug串口来查看kernel启动情况,是否有mount rootfs 解决方案 发现可以使用下面这两种方式来解决 USB UART console Network console 但是最终觉得还是使用USB UART console比较方便. 代价是需要买两根USB转串口线. 使用方法 硬件 直接将两根USB

Continue reading »

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 »