海思系类机顶盒STB的Hacker记录

说明 有许多的机顶盒都是使用海思的SoC方案, 这些盒子一般都是用Android 4.4,或者5.0的系统. 然后都没有root权限. 有的是否我们需要做些更改, 例如修改servicemanager,那么就无法简单的root然后使用cp命令替换完成了, 因为servicemanager一直在运行, 就算kill掉也会自动重启, 因此无法在正常模式覆盖. 如果可以进入到recovery模式,那么也可以解决. 更为简单的方式是可以直接将system分区dd出来,然后更改后dd回去. 获取console 如果机顶盒有四线/3线的TTL串口,那么第一步就是连接串口, 获取Root权限. 查看分区 然后查看mmc/emmc的layout:

在操作之前,我们最好备份一下, 直接将各个重要分区dd出来即可.例如对于system:

Continue reading »

LineageOS 14.1(CM14.1)的快速下载与编译

代码的快速下载 Cyanogenmod OS或者说后来的Lineage OS的代码都是分为两个部分: cm团队自己或者社区开发的代码: 主要是适配设备, 例如vendor相关,放在github上面 aosp代码: google的AOSP代码, 作为base 因为本地有一份AOSP的Mirror,所以这部分AOSP代码就不需要再从google去下载了, 直接从本地获取即可.  local mirror的建立可以参考AOSP的repo 与get source相关文档. 关于repo与如何快速使用本地代码可以参考前面的博客: 使用本地AOSP镜像快速获取Android代码 repo详解与如何更改manifest快速获取和复用AOSP代码 修改步骤

Continue reading »

repo详解与如何更改manifest快速获取和复用AOSP代码

源起 现在很多企业的网络一般都比较快, 但是有的企业却会限速, 如果需要从github和google code上面git clone大的仓库的话, 那么需要耗费的时间是很客观的,  例如从github或者google code, 或者其他托管服务站点获取Android中需要的多个Kernel仓库, 一般一个kernel仓库都有几GB, 如果是100KB/S的话, 那么将需要很长的时间. 与此同时, 不同的Android 版本(AOSP)代码, 他们一般都会依赖许多相同的组件, 甚至获取相同的仓库代码, 仅仅只是branch或者tag不同而已, 例如对于Nexus

Continue reading »

使用本地AOSP镜像快速获取Android代码

说明 一次次的从AOSP mirror站点获取代码特别慢, 尤其是如果使用的还是google的AOSP Mirror而不是国内的. 因此如果在开发中需要经常性的切换Android branch/Tag, 对不同的Android版本进行开发验证与编译的话, 最好在本地建立一个次级的AOSP Mirror. 这样所有的Android版本都有了, 即节省了流量也节省了时间. 建立本地AOSP镜像 建立本地次级AOSP Mirror直接使用google提供的命令即可, 在repo init的命令后面加上–mirror即可, 例如下面是从TsingHua University的AOSP mirror获取本地一个Mirror.

Continue reading »

程序员修电脑必备: 使用Grub2制作一个多系统(WinPE与Linux, Android X86)启动的维护移动硬盘和U盘

说明 多台计算机安装了不同的系统(Windows, Linux, MacOS), 如果要对系统进行重装或者维护, 每一次都是重新制作启动和维护移动存储设备, 为了节省时间, 考虑制作一个即可启动和维护Windows的也可以启动和安装Linux的多启动移动存储设备. 现代的电脑主板上面的固件(BIOS)可以支持Legacy BIOS启动也可以支持UEFI启动, 下面我们指的是Legacy BIOS, 当然最后也说明了一下制作UEFI启动盘. 这里面使用移动U盘和移动硬盘都测试实践没有问题. 以下是过程. 如果你想制作一个和我这个一样的多系统启动维护移动设备,那么可以看最后的总结部分, 通过几个步骤完成, 所有的文件我都会上传.  作用 多系统启动的移动存储设备可以完成但是不限于下面这些功能

Continue reading »

Android BlueDroid分析: 配置文件(bt_stack.conf bt_vendor.conf )的加载与分析

说明 在Android BlueDroid启动,即stack启动的时候,回去加载好几个配置文件, 然后BlueDroid Stack根据这几个配置文件会进行调整, 例如Device ID(did), Log相关的Trace Level, COD(即Class of Device), BT snoop log相关配置等等.下面结合代码和配置文件一起来说明分析. 配置文件说明 配置文件分为运行时动态加载和编译的时候直接解析使用的.主要有下面三个, 冒号后面是简要的作用说明. 编译完成后,这些配置文件都是位于: /system/etc/bluetooth/

Continue reading »

Android BlueDroid分析: OSI中的Thread的实现与使用分析

说明 thread封装了pthread, 完成的功能是, 使用fixed_queue作为workquque, 将需要被执行的thread function放入其中(enqueue), 使用thread_post来enqueue,enqueue完成后semophore发送信号给dequeue, 然后使用reactor中的epoll_wait监控到dequeue semaphore变更, 就读出queue中的数据, 而queue中的item是thread function与args, 于是运行这个function, 完成任务执行功能.  结构体

  函数分析 创建thread以及reactor

Continue reading »

OpenWRT中使用无线网卡做中继器与AP热点

中继器与AP的实现 这里我们假定中继器完成下面这样的一个功能: Wired Network —> Wireless Network —> 上级无线路由器 即从外部插入一个网线,通过imx6UL上面的无线网卡将数据转发到上级的路由器上面, 当然也可以完成下面这样的传送: Wireless Network(AP mode) –> Wireless Network(Client) –> 上级无线路由器 即设立一个AP热点,相当于一个路由器,然后再将这个AP的数据通过另外一个无线网卡转发到上一级的路由器或者WLAN上面。

Continue reading »

OpenWRT中使用mpd作为音频Server及其使用

说明 MPD可以播放音乐与streaming Radio,可以用于娱乐用。其官网的说法为:

即MPD是CS架构的Daemon端。 接下来我们将在iMX6UL上面使用MPD, 并在手机与Ubuntu等上面使用其Client来控制与播放音乐。 ALSA验证声卡发声 要完成音乐的播放,首先iMX6UL需要可以播放声音。 iMX6UL使用的Codec是WM8960, 这个和TQE9使用的是一样的。 在播放之前,我们先查看声卡是哪个:

首先需要确定ALSA识别了哪些声卡,然后再确定声卡的设备Index, 例如这里面WM8960不是Card0,所以如果直接默认使用aplay来播放,那么就会出错。 当然启动的时候也有:

确定设备Index后,我们需要一个WAV文件来播放。 直接使用MP3来convert一个: 然后我们使用wavinfo查看一下wav文件的属性:

Continue reading »

Android BlueDroid分析: OSI中的FixeQueue的实现与使用分析

说明 fixed_queue使用List来存储数据, 同时使用semophore来控制enqueue与dequeue. 在HCI等地方都有用到. 结构体的组成

  函数 fixed_queue_register_dequeue 完成在dequeue取出数据后, 对数据进行处理. 重点在于:

  enqueue与dequeue 在enqueue后,会发送信号, 这样dequeue等待的epoll_wait, 即reactor中的run_reactor就会返回, 然后执行对应的read_ready callback,

Continue reading »