Android BlueDroid分析: OSI中的HashMap的实现

说明 hash map在C语言标准库中并没有封装, 不像其他语言那么方便, 例如python中有Dictionary, 而hashmap又非常有用, 因此Bluedroid自己封装了一套.封装实现的文件列表如下:

其中hash_functions.c中是对几个特殊类型的hashmap封装. 因此我们先说明hash map, 然后再看hash functions. HashMap概念与术语 首先如果要实现hashmap,那么需要做什么呢? 下面是引用StackOverFlow中的回答:

简单来说就是: A1. 创建:

Continue reading »

【IMX6UL开发板试用体验】OpenWRT有线网络的配置

在前面编译完成后,就可以烧写测试启动了。 但是启动后发现了一些问题。本次我们说明一下如何使用OpenWrt中的wired LAN。 网卡驱动问题 本身板子有两个网口,其中一个没有变压器转换器,另外一个在Uboot中使用是没有问题的,可以正常的tftp下载kernel与dtb,但是在Linux,OpenWRT启动后,如果配置网络IP地址就会出现不停的up与down的情况 udhcpc (v1.20.2) started fec 2188000.ethernet eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=2188000.ethernet:00, irq=-1) IPv6:

Continue reading »

【IMX6UL开发板试用体验】OpenWRT在iMX6UL上面的移植与编译

选择 OpenWRT在最近的时期分裂出了LEDE出来,因此这就涉及到了这两个的选择。 前段时间,编译过LEDE用于树莓派3,于是想着直接使用以前的LEDE,这样子省去了下载,毕竟在国内下载很多source code可能需要很长的时间,如果没有proxy的话。于是想着省些事情就用起来了以前的LEDE来编译,但是编译过程中出现了很多错误, 因此最终我决定切回到OpenWRT,并且使用master上面新的代码来移植编译。 代码仓库: https://github.com/tonyho/OpenWRT_iMX6UL OpenWRT配置 本身LEDE与OpenWRT里面已经有一个imx6 Cortex-A9的arch支持,因此直接选择这个为base来做Porting与Compile较为合适。配置如下: Compile Tuning 因为imx6ul是Cortex-A7,所以我们需要更改一下 选择好Target之后,我们需要做移植工作。 Target移植 内核移植 移植需要将内核更改一把,这个位于: $ ls target/linux/imx6/ base-files

Continue reading »

【IMX6UL开发板试用体验】上手试用与资源使用

缘起 这个是我拿到的第二块工控板了,前面是AM335X的板子。这块板子也是工业板。相比一些“开发板”而言还是有一些区别的。 硬件 和以前的AM335X板子一样,做工和用料比较扎实,该有的都有,连插针都是镀金的。让人非常放心的感觉。不愧是工业板。 快递的包装也很好,Top与Bottom都有一层泡沫,板子都有静电膜保护。 外设的配件也齐全,尤其是电源绝非普通的10多块钱的廉价货色,下面是一些图片 包装: 因为iMX6UL支持8个串口,因此厂家直接发了两个串口接头,Good,网线什么的都有了,无需自己再去找 Debug串口线与电源 下面这个是开机后的显示,自带的Qt example 看控件样子可以猜到是Qt4而不是Qt5,当然对于工业控制Qt4有着很深的现存基础。 软件资源 硬件不错,看看软件。软件主要分为: 1. binary image + Rootfs,因为板子有多种启动与Storage形式,因此有用在nand上的UBI的。 2.

Continue reading »

如何减少Android源码size并打包与切割上传共享

源码很大的原因 repo sync下Android的代码, 然后编译后,一般size都在60GB左右, 主要是因为代码中包含了out编译结果产物目录, 以及版本相关的.git与.repo目录, 如果不打包这两个目录, 那么常规的Android 6.0代码压缩后大概为6GB左右. 打包 可以使用类似下面的命令来排除非必须代码和目录以及压缩Android source code, 假设Android源码位于/home/dev/android目录, 那么可以这样子做:     cd /home/dev     tar

Continue reading »

Andorid BlueDroid分析: Semophore的实现分析

实现 在BlueDroid的OSI/src目录下存放的是Operating System Interface相关的封装与实现, 其中semophore.c实现了父子进程间的Semophore, 可以用来对父子进程间执行顺序的控制,完成Notify与Wait的功能. 而这个semophore的实现依赖于Linux的eventfd, 同时使用了glibc的event_read与event_write, 因为BlueDroid主要使用在Android中(其他Linux OS中也有使用的情况), 所以很显然Android的bonic也实现了eventfd_read与eventfd_write. 所以如果想移植BlueDroid到其他非LinuxOS系统中,那么就需要实现这个eventfd. 函数 这个文件的Overview 共有六个函数, new与free, wait与try_wait, post与get_fd. 结构体 对fd用struct包装了一下:

Continue reading »

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 »