- 博客(133)
- 资源 (14)
- 收藏
- 关注
原创 SonarQube 静态代码检查的安装
缘起时隔多年,又开始搭建Git Server 和 CI(以前的文章:用gitlabCI快速搭建一个GitServer与CI)。 现在的Gitlab已经不再是2015年那个时候的Gitlab了。这次,是需要添加SonarQube用于代码检查。安装下载解压到官网下载即可cd /opt; wget https://binaries.sonarsource.com/Distribution...
2019-11-22 15:04:37
621
原创 Android BLE自动测试系统与框架
实际开发中,因为需要对不同的BLE设备进行测试。包括语音遥控器,OTA,模组,ble mesh等设备的不同功能进行兼容与稳定性测试,而使用人工测试非常的缓慢且消耗人力。因此开发了一个测试系统用来做自动测试。同时这个自动测试,可以和CI结合起来,完成DevOps的构建。而且本套系统可以非常好的扩展到嵌入式中的其他测试,也包括其他的IoT RF测试。同时还可以与IC测试结合起来。演示效果youku视频...
2018-07-10 16:50:25
2473
2
原创 imx6ul蓝牙语音识别项目之6:语音格式说明以及整合与实际效果演示
前面我们准备好了所有的软件硬件,现在是时候开始正在的业务逻辑功能的实现了。语音数据的格式语音遥控器走的是BLE, 对于Voice Over BLE有多种方案,不同的厂家和方案商都不同的实现。下面我们使用TI的来说明,其他的也是类似的。这里面主要是说明了各种格式,以及传递协议。 我们需要接受和decoder语音,那么就需要搞明白这些东西。具体而言,语音的Profile如下:交互过程如下:注意第一包语...
2018-07-02 16:48:34
1733
1
原创 imx6ul蓝牙语音识别项目之5:BLE基础与imx6ul上的BLE外设的使用
前面我们准备好了下面这些软件:BlueZ 5.49及其运行需要的组建百度语音识别及其运行需要的依赖库Controller的驱动并编译好了测试代码。 那么接下来,我们就需要和语音遥控器连接了,但是在此之前需要对BLE有所了解。BLE VS Wifi VS ZigBeeBLE属于Personal network, 工作距离近, 一般在10m内。BLE协议架构Core Specification 与 a...
2018-07-02 16:37:59
1497
原创 imx6ul蓝牙语音识别项目之4:构建ARM Linux语音识别环境
语音识别的选择前面我们准备好了BlueZ stack, 接下来就需要准备语音识别库了。对于语音识别,国内主要的提供商有:科大讯飞图灵机器人思必驰信息科技有限公司北京捷通华声科技股份有限公司百度语音北京云知声信息技术有限公司哦啦语音但是,我们是在ARM Cortex-A7单核上面跑,平台为ARM Linux,而且我们不准备跑python,而是使用C/C++, python脚本写代码会很快,但是效率较...
2018-07-02 16:34:40
3364
3
原创 imx6ul蓝牙语音识别项目之3:用户态蓝牙配置
stack的划分在前面的文章中,我们已经配置好了内核态对蓝牙的支持, 包括驱动以及内核态的stack。Linux蓝牙的stack为BlueZ, 参考前面的文章的图片,可以知道,内核态和用户态使用的是MGMT接口来通讯。底层主要负责和Controller数据的传输,而数据的传输接口一般为USB,SDIO以及串口。具体而言,功能如下:其中个人认为比较复杂的是SMP,内核态中对:控制数据这两类信息通过s...
2018-07-02 16:31:31
1109
原创 imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持
蓝牙架构在Linux中蓝牙的stack分层如下:从总体上看分为两层, 一个在内核态,一个在用户态,内核态。在内核态中的部分暴露了一个特殊的Socket给用户态,然后用户态使用命令+参数的格式传递给内核态。而如果硬件有反馈信息,一般是事件,那么会有callback消息上来。硬件说明对于蓝牙,一般都是模组,例如有些是BT Wifi模组,即BT-Wifi为一体的模组。这种模组一般是通过UART,SDIO...
2018-07-02 16:28:38
1234
原创 imx6ul蓝牙语音识别项目之1:硬件准备
硬件在一些时间的延误后,终于收到了顺丰过来的板子,本以为需要到年后了。听说板子的延误是因为发现了一个小问题。收到板子后打开看到的是盒子包装,看起来“高大上”的感觉:打开,里面有一张V3 软件的BSP, 网线, OTG USB 线,以及电源线:核心的板子看起来不错,至少做工和基本可见的布线很漂亮:但是板子的尺寸比我想象的小。软件在将关盘拷贝到电脑后,发现结构和以前IoT和Industry里面是类似的...
2018-07-02 16:25:20
1972
原创 USB Basic and its Packets
Update 2017 10-15For chinese, see this page as a reference.To get started with the USB quickly, I summary the following steps from my experience.Get the materialsUSB SpecificationThe USB 2
2017-10-17 11:54:17
662
原创 USB与BT HID reports描述符实践与抓包分析
文章内容提示这篇文章主要说明如何获取与查看USB和BLE HoGP HID设备报告描述符,如何根据获取的描述符读懂report。然后说明了可以使用hidrd-convert工具,来如何根据hex报告描述符转化得到C语言格式的描述符,这对于我们编码是有意义的。 其中,还截取了USB 逻辑分析仪,Wireshark等工具来查看input report。如何看懂HID report de
2017-10-13 11:05:07
17080
1
原创 跨系统的录音格式兼容性问题: iOS Android
iOS/ OS X支持的可播放的Audio Format与Android支持的有些不一样。因此可能出现在Android设备上面使用MediaRecorder录制出来的音频文件在iOS上面不可用。当然也可能iOS上面录制的audio file在Android上面无法playback。如果在iOS和Android上面开发类似微信这样的待遇语音交流的软件,那么就需要考虑iOS和Android上面录制
2017-10-11 14:42:13
7463
原创 DragonBoard 410C中的Fastboot与调试串口注意事项
使用过的板子越来越多, 从FSL/NXP到三星, QualComm, Broadcom, Amlogic, MTK与海思, 还有NVIDIA Tegra.每一次使用板子做setup都需要去看一下Manual. 有些板子比较方便, 有些板子各种奇葩. 而记忆力又有限. 所以干脆以后每使用一个不同板子都记录一下.Fastboot mode这一次用到的板子是DragonBoard 410C, Q
2017-07-13 11:13:37
3952
原创 amlogic S905X udpate imge的压缩和解压
我这边使用的板子是khadas VIMamlogic的升级和烧写有多种方式, 常见的是USB烧写和SD卡烧写. USB烧写的流程其实是解压update.img中的文件,然后push到RAM中运行. 然后再push文件到ram中烧写. 这个和Freescale的MFGTools类似.update.img的生成生成update.img的命令如下,可以看到不同文件在update.im
2017-06-20 11:41:04
8244
1
原创 Linux Qt程序打包成一个可执行文件
最近用Qt写了一个上位机, 而且是跨平台(Windows, Linux, ARM-Linux), 开发完成后需要对程序进行打包, windows的打包非常容易,选择非常多, 但是linux下面的选择就少了些.方案的选择Qt官方有页面专门说明Linux X11的deployment, 主要是两个:官方的QT Installer Framework第三方的AppImage前
2017-06-20 11:38:02
22901
3
原创 Ubuntu 14.04与16.04(Linux Mint或者Debain)内核与模块编译
编译Ubuntu的内核, 如果按照官方的说明, 那么一般是编译出deb包, 然后安装,但是如果我们改了驱动, 或者内核那么我们很可能只想编译bzImage而不是重新生成deb包.一般的编译步骤参考Ubuntu 的wiki:Kernel CompileBuildYourOwnKernel基本步骤如下安装需要的软件包, 或者kernel source:a
2017-05-03 16:03:29
2079
原创 Android中Native ELF的反汇编与破解的一些经验
工具选择与使用一般Android运行的HW有:32Bit的ARM64Bit的ARM64X86X64对于Intel/AMD的X86/X64, 可选的工具比较多, 因为ELF运行的Host是Android, 使用静态反汇编工具Hopper Disassemble与IDA是比较好的选择.对于32位ARM的ARM, IDA与Hopper Disassemble都可以完成, 但是
2017-04-22 12:00:10
3001
原创 海思系类机顶盒STB的Hacker记录
说明有许多的机顶盒都是使用海思的SoC方案, 这些盒子一般都是用Android 4.4,或者5.0的系统. 然后都没有root权限. 有的是否我们需要做些更改, 例如修改servicemanager,那么就无法简单的root然后使用cp命令替换完成了, 因为servicemanager一直在运行, 就算kill掉也会自动重启, 因此无法在正常模式覆盖.如果可以进入到recovery
2017-04-22 10:46:48
10851
1
原创 结合Yocto Qemu与Eclipse单步调试开发Linux Kernel
使用说明在以前的博客中说明过使用Qemu + BuildRoot来构建一个虚拟的嵌入式开发平台, 还写过使用Yocto + Qemu来构建一个Cortex-A9的嵌入式开发调试平台. 同时在很久以前也写过使用Eclipse + JLINK来调试ARM9. 而在工作学习中,有时候, 对内核源码的研究中, 需要单步对linux内核跟踪调试, 且大部分是关注与内核中某些组件的实现, 例如MM,
2017-04-07 16:36:39
3279
原创 LineageOS 14.1(CM14.1)的快速下载与编译
代码的快速下载Cyanogenmod OS或者说后来的Lineage OS的代码都是分为两个部分:cm团队自己或者社区开发的代码: 主要是适配设备, 例如vendor相关,放在github上面aosp代码: google的AOSP代码, 作为base因为本地有一份AOSP的Mirror,所以这部分AOSP代码就不需要再从google去下载了, 直接从本地获取即可. lo
2017-03-10 11:09:45
16632
原创 repo详解与如何更改manifest快速获取和复用AOSP代码
源起现在很多企业的网络一般都比较快, 但是有的企业却会限速, 如果需要从github和google code上面git clone大的仓库的话, 那么需要耗费的时间是很客观的, 例如从github或者google code, 或者其他托管服务站点获取Android中需要的多个Kernel仓库, 一般一个kernel仓库都有几GB, 如果是100KB/S的话, 那么将需要很长的时间.与此同
2017-02-15 15:35:49
13627
1
原创 使用本地AOSP镜像快速获取Android代码
说明一次次的从AOSP mirror站点获取代码特别慢, 尤其是如果使用的还是google的AOSP Mirror而不是国内的. 因此如果在开发中需要经常性的切换Android branch/Tag, 对不同的Android版本进行开发验证与编译的话, 最好在本地建立一个次级的AOSP Mirror. 这样所有的Android版本都有了, 即节省了流量也节省了时间.建立本地AOSP
2017-02-14 17:21:35
5777
原创 程序员修电脑必备: 使用Grub2制作一个多系统(WinPE与Linux, Android X86)启动的维护移动硬盘和U盘
说明多台计算机安装了不同的系统(Windows, Linux, MacOS), 因为种种因素不得不对系统重新安装, 每一次都是重新制作启动和维护移动存储设备, 为了节省时间, 考虑制作一个即可启动和维护Windows的也可以启动和安装Linux的多启动移动存储设备. 现代的电脑主板上面的固件(BIOS)可以支持Legacy BIOS启动也可以支持UEFI启动, 下面我们指的是Legacy BI
2017-02-13 18:46:03
14975
原创 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相关配置等等.下面结合代码和配置文件一起来说明分析.配置文件说明配置文件分为运行时
2017-02-10 18:05:30
7086
原创 Android BlueDroid分析: OSI中的Thread的实现与使用分析
说明thread封装了pthread, 完成的功能是, 使用fixed_queue作为workquque, 将需要被执行的thread function放入其中(enqueue), 使用thread_post来enqueue,enqueue完成后semophore发送信号给dequeue, 然后使用reactor中的epoll_wait监控到dequeue semaphore变更, 就读出qu
2017-02-06 16:23:35
2207
原创 Android BlueDroid分析: OSI中的FixeQueue的实现与使用分析
说明构成结构体的组成typedef struct fixed_queue_t { list_t *list; //用List来保存数据,相当于"queue" semaphore_t *enqueue_sem; // enqueue的信号量,用来通知和监控 semaphore_t *dequeue_sem; //dequeue的信号量,作为reactor(即epoll_wai
2017-02-06 10:43:54
954
原创 OpenWRT中使用mpd作为音频Server及其使用
说明MPD可以播放音乐与streaming Radio,可以用于娱乐用。其官网的说法为:Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music. Through plugins and libraries it can play a variety of
2017-02-05 22:14:28
9530
1
原创 OpenWRT中使用无线网卡做中继器与AP热点
中继器与AP的实现这里我们假定中继器完成下面这样的一个功能:Wired Network ---> Wireless Network ---> 上级无线路由器即从外部插入一个网线,通过imx6UL上面的无线网卡将数据转发到上级的路由器上面, 当然也可以完成下面这样的传送:Wireless Network(AP mode) --> Wireless Network(
2017-02-05 11:31:22
14674
原创 OpenWRT添加无线USB网卡
要完成网线网卡的驱动需要在内核中添加驱动,同时还需要将固件放入rootfs中正确的位置,如果需要固件的话。内核驱动添加Firmware添加启动确认启动后,我们需要等待rootfs完成后再插入, 这样子可以比较容易看到log, 对于TPLink的其中一款,对应的log如下:[ 1015.718981] usb 1-1.2.4: new high-speed USB
2017-02-04 22:20:53
49234
原创 Android BlueDroid分析: OSI中的reactor的实现与使用分析
说明actor相当于内核中的worker, 用于监控与执行任务. reactor可以认为是: re+actor.监控使用的是epoll, 而执行任务使用的是对应的epoll_wait返回后的event type, 然后调用相关的read或者write函数来完成对应event type的处理.而epoll_wait对某个fd是监控和执行一次还是多次是使用eventfd来进行控制.epol
2017-02-04 15:15:15
1257
原创 Android BlueDroid分析: OSI中的HashMap的实现
说明hash map在C语言标准库中并没有封装, 不像其他语言那么方便, 例如python中有Dictionary, 而hashmap又非常有用, 因此Bluedroid自己封装了一套.封装实现的文件列表如下:osi/src/hash_functions.c osi/src/hash_map.cosi/include/hash_functions.hosi/include/hash
2017-02-03 18:49:19
679
原创 Android BlueDroid分析: OSI中的List与alloctor的实现分析
alloctoralloctor是一对函数,因此先要定义来个函数Pointer 类型。typedef void *(*alloc_fn)(size_t size);typedef void (*free_fn)(void *ptr);可以看到,这个和libc中的malloc与free arguments与return type都是一样的,因此可以认为是OSI为了抽象分隔不同的“
2017-02-03 11:34:48
1051
原创 【IMX6UL开发板试用体验】OpenWRT有线网络的配置
在前面编译完成后,就可以烧写测试启动了。 但是启动后发现了一些问题。本次我们说明一下如何使用OpenWrt中的wired LAN。网卡驱动问题本身板子有两个网口,其中一个没有变压器转换器,另外一个在Uboot中使用是没有问题的,可以正常的tftp下载kernel与dtb,但是在Linux,OpenWRT启动后,如果配置网络IP地址就会出现不停的up与down的情况udhcpc
2017-01-28 21:41:00
6137
原创 【IMX6UL开发板试用体验】OpenWRT在iMX6UL上面的移植与编译
选择OpenWRT在最近的时期分裂出了LEDE出来,因此这就涉及到了这两个的选择。前段时间,编译过LEDE用于树莓派3,于是想着直接使用以前的LEDE,这样子省去了下载,毕竟在国内下载很多source code可能需要很长的时间,如果没有proxy的话。于是想着省些事情就用起来了以前的LEDE来编译,但是编译过程中出现了很多错误, 因此最终我决定切回到OpenWRT,并且使用master上
2017-01-25 22:18:15
11190
原创 【IMX6UL开发板试用体验】上手试用与资源使用
这个是我拿到的第二块Emball的板子了,前面是AM335X的板子。这块板子也是工业板,做工确实扎实。硬件和以前的AM335X板子一样,做工和用料比较扎实,该有的都有,连插针都是镀金的。让人非常放心的感觉。软件资源
2017-01-23 23:28:22
5461
原创 Andorid BlueDroid分析: Semophore的实现分析
实现在BlueDroid的OSI/src目录下存放的是Operating System Interface相关的封装与实现, 其中semophore.c实现了父子进程间的Semophore, 可以用来对父子进程间执行顺序的控制,完成Notify与Wait的功能.而这个semophore的实现依赖于Linux的eventfd, 同时使用了glibc的event_read与event_wr
2017-01-19 20:30:00
610
原创 Android BlueDroid分析: Linux中的Eventfd
来源Linux专有的同步机制, 需要内核高于2.6.22, 下面是引用 >这本书中的说明:从man手册中有如下的描述: eventfd() creates an "eventfd object" that can be used as an event wait/notify mechanism by user-space applications, and by the
2017-01-19 19:56:20
859
原创 如何减少Android源码size并打包与切割上传共享
源码很大的原因repo sync下Android的代码, 然后编译后,一般size都在60GB左右, 主要是因为代码中包含了out编译结果产物目录, 以及版本相关的.git与.repo目录, 如果不打包这两个目录, 那么常规的Android 6.0代码压缩后大概为6GB左右. 打包可以使用类似下面的命令来排除非必须代码和目录以及压缩Android source co
2017-01-19 15:44:20
926
原创 Ubuntu下面包依赖损坏的解决unmet dependencies
出现dependencies的原因在新版的Ubuntu下,例如Ubuntu 14.04或者16.04一般是不会出现broken dependencies,或者出现unmet dependencies, 但是如果我们使用dpkg强制安装了某些deb包,或者在build-dep的是否手动更改了某些Packages的文件和版本时, 那么在再次使用apt-get install或者build-dep来
2017-01-03 10:30:21
77017
原创 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. Docume
2016-09-09 11:24:51
6082
原创 树莓派3的调试串口问题的不完美解决:让蓝牙与调试共存
问题因为解决方案USB UART consoleNetwork consoleSSHagatty的配置问题
2016-09-08 16:12:15
10069
AR9170 (支持TP Link WN821N ) Linux 固件 firmware
2015-12-21
imx6 手动制作Android启动用SD卡脚本与fstab
2015-12-10
51单片机完整课程设计上位机实时曲线状态机详细注解
2011-05-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人