自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TonyHo's NotePad

tonyiot.com 373466062ATqq.com

  • 博客(133)
  • 资源 (14)
  • 论坛 (2)
  • 收藏
  • 关注

原创 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 98

原创 Android BLE自动测试系统与框架

实际开发中,因为需要对不同的BLE设备进行测试。包括语音遥控器,OTA,模组,ble mesh等设备的不同功能进行兼容与稳定性测试,而使用人工测试非常的缓慢且消耗人力。因此开发了一个测试系统用来做自动测试。同时这个自动测试,可以和CI结合起来,完成DevOps的构建。而且本套系统可以非常好的扩展到嵌入式中的其他测试,也包括其他的IoT RF测试。同时还可以与IC测试结合起来。演示效果youku视频...

2018-07-10 16:50:25 1585 1

原创 imx6ul蓝牙语音识别项目之6:语音格式说明以及整合与实际效果演示

前面我们准备好了所有的软件硬件,现在是时候开始正在的业务逻辑功能的实现了。语音数据的格式语音遥控器走的是BLE, 对于Voice Over BLE有多种方案,不同的厂家和方案商都不同的实现。下面我们使用TI的来说明,其他的也是类似的。这里面主要是说明了各种格式,以及传递协议。 我们需要接受和decoder语音,那么就需要搞明白这些东西。具体而言,语音的Profile如下:交互过程如下:注意第一包语...

2018-07-02 16:48:34 735 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 726

原创 imx6ul蓝牙语音识别项目之4:构建ARM Linux语音识别环境

语音识别的选择前面我们准备好了BlueZ stack, 接下来就需要准备语音识别库了。对于语音识别,国内主要的提供商有:科大讯飞图灵机器人思必驰信息科技有限公司北京捷通华声科技股份有限公司百度语音北京云知声信息技术有限公司哦啦语音但是,我们是在ARM Cortex-A7单核上面跑,平台为ARM Linux,而且我们不准备跑python,而是使用C/C++, python脚本写代码会很快,但是效率较...

2018-07-02 16:34:40 1606 3

原创 imx6ul蓝牙语音识别项目之3:用户态蓝牙配置

stack的划分在前面的文章中,我们已经配置好了内核态对蓝牙的支持, 包括驱动以及内核态的stack。Linux蓝牙的stack为BlueZ, 参考前面的文章的图片,可以知道,内核态和用户态使用的是MGMT接口来通讯。底层主要负责和Controller数据的传输,而数据的传输接口一般为USB,SDIO以及串口。具体而言,功能如下:其中个人认为比较复杂的是SMP,内核态中对:控制数据这两类信息通过s...

2018-07-02 16:31:31 576

原创 imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持

蓝牙架构在Linux中蓝牙的stack分层如下:从总体上看分为两层, 一个在内核态,一个在用户态,内核态。在内核态中的部分暴露了一个特殊的Socket给用户态,然后用户态使用命令+参数的格式传递给内核态。而如果硬件有反馈信息,一般是事件,那么会有callback消息上来。硬件说明对于蓝牙,一般都是模组,例如有些是BT Wifi模组,即BT-Wifi为一体的模组。这种模组一般是通过UART,SDIO...

2018-07-02 16:28:38 722

原创 imx6ul蓝牙语音识别项目之1:硬件准备

硬件在一些时间的延误后,终于收到了顺丰过来的板子,本以为需要到年后了。听说板子的延误是因为发现了一个小问题。收到板子后打开看到的是盒子包装,看起来“高大上”的感觉:打开,里面有一张V3 软件的BSP, 网线, OTG USB 线,以及电源线:核心的板子看起来不错,至少做工和基本可见的布线很漂亮:但是板子的尺寸比我想象的小。软件在将关盘拷贝到电脑后,发现结构和以前IoT和Industry里面是类似的...

2018-07-02 16:25:20 980

原创 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 390

原创 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 9671

原创 跨系统的录音格式兼容性问题: 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 3598

原创 DragonBoard 410C中的Fastboot与调试串口注意事项

使用过的板子越来越多, 从FSL/NXP到三星, QualComm, Broadcom, Amlogic, MTK与海思, 还有NVIDIA Tegra.每一次使用板子做setup都需要去看一下Manual. 有些板子比较方便, 有些板子各种奇葩. 而记忆力又有限. 所以干脆以后每使用一个不同板子都记录一下.Fastboot mode这一次用到的板子是DragonBoard 410C, Q

2017-07-13 11:13:37 990

原创 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 5431 1

原创 Linux Qt程序打包成一个可执行文件

最近用Qt写了一个上位机, 而且是跨平台(Windows, Linux, ARM-Linux), 开发完成后需要对程序进行打包, windows的打包非常容易,选择非常多, 但是linux下面的选择就少了些.方案的选择Qt官方有页面专门说明Linux X11的deployment, 主要是两个:官方的QT Installer Framework第三方的AppImage前

2017-06-20 11:38:02 18107

原创 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 1705

原创 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 2122

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

说明有许多的机顶盒都是使用海思的SoC方案, 这些盒子一般都是用Android 4.4,或者5.0的系统. 然后都没有root权限. 有的是否我们需要做些更改, 例如修改servicemanager,那么就无法简单的root然后使用cp命令替换完成了, 因为servicemanager一直在运行, 就算kill掉也会自动重启, 因此无法在正常模式覆盖.如果可以进入到recovery

2017-04-22 10:46:48 6678 1

原创 结合Yocto Qemu与Eclipse单步调试开发Linux Kernel

使用说明在以前的博客中说明过使用Qemu + BuildRoot来构建一个虚拟的嵌入式开发平台, 还写过使用Yocto + Qemu来构建一个Cortex-A9的嵌入式开发调试平台. 同时在很久以前也写过使用Eclipse + JLINK来调试ARM9. 而在工作学习中,有时候, 对内核源码的研究中, 需要单步对linux内核跟踪调试, 且大部分是关注与内核中某些组件的实现, 例如MM,

2017-04-07 16:36:39 2445 1

原创 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 12834

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

源起现在很多企业的网络一般都比较快, 但是有的企业却会限速, 如果需要从github和google code上面git clone大的仓库的话, 那么需要耗费的时间是很客观的,  例如从github或者google code, 或者其他托管服务站点获取Android中需要的多个Kernel仓库, 一般一个kernel仓库都有几GB, 如果是100KB/S的话, 那么将需要很长的时间.与此同

2017-02-15 15:35:49 7927 1

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

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

2017-02-14 17:21:35 4469

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

说明多台计算机安装了不同的系统(Windows, Linux, MacOS), 因为种种因素不得不对系统重新安装, 每一次都是重新制作启动和维护移动存储设备, 为了节省时间, 考虑制作一个即可启动和维护Windows的也可以启动和安装Linux的多启动移动存储设备. 现代的电脑主板上面的固件(BIOS)可以支持Legacy BIOS启动也可以支持UEFI启动, 下面我们指的是Legacy BI

2017-02-13 18:46:03 12287

原创 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 4108

原创 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 1429

原创 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 615

原创 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 6332 1

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

中继器与AP的实现这里我们假定中继器完成下面这样的一个功能:Wired Network ---> Wireless Network ---> 上级无线路由器即从外部插入一个网线,通过imx6UL上面的无线网卡将数据转发到上级的路由器上面, 当然也可以完成下面这样的传送:Wireless Network(AP mode) --> Wireless Network(

2017-02-05 11:31:22 7905

原创 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 29377 1

原创 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 890

原创 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 466

原创 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 693

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

在前面编译完成后,就可以烧写测试启动了。 但是启动后发现了一些问题。本次我们说明一下如何使用OpenWrt中的wired LAN。网卡驱动问题本身板子有两个网口,其中一个没有变压器转换器,另外一个在Uboot中使用是没有问题的,可以正常的tftp下载kernel与dtb,但是在Linux,OpenWRT启动后,如果配置网络IP地址就会出现不停的up与down的情况udhcpc

2017-01-28 21:41:00 2919 2

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

选择OpenWRT在最近的时期分裂出了LEDE出来,因此这就涉及到了这两个的选择。前段时间,编译过LEDE用于树莓派3,于是想着直接使用以前的LEDE,这样子省去了下载,毕竟在国内下载很多source code可能需要很长的时间,如果没有proxy的话。于是想着省些事情就用起来了以前的LEDE来编译,但是编译过程中出现了很多错误, 因此最终我决定切回到OpenWRT,并且使用master上

2017-01-25 22:18:15 7365 1

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

这个是我拿到的第二块Emball的板子了,前面是AM335X的板子。这块板子也是工业板,做工确实扎实。硬件和以前的AM335X板子一样,做工和用料比较扎实,该有的都有,连插针都是镀金的。让人非常放心的感觉。软件资源

2017-01-23 23:28:22 3016 1

原创 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 404

原创 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 571

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

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

2017-01-19 15:44:20 540

原创 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 56474

原创 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 3230

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

问题因为解决方案USB UART consoleNetwork consoleSSHagatty的配置问题

2016-09-08 16:12:15 6712

LM317中文资料 注意不是1117 而是317

就是317的中文pdf 没有什么太大的用处 备份而已

2010-06-30

USBHID 讲解

USB HID描述符详细讲解文档,主要描述了USB HID的概念,还有一些例子,重点内容已经加红色标注了。

2017-10-13

grub2详解教程

Grub2的中文文档, 讲解了grub2如何编译, 配置, 安装, 加载主题, 如何使用grub2来启动系统等.

2017-02-13

grubfordos

用来加载和启动Windows PE,或者Windows 系统的bootloader

2017-02-13

Windows ARM Hex Converter V5.2

最新版的ARM 指令转换器,可以转换为Thumb与ARM指令

2016-08-02

ARM Thumb Instruction

Thumb指令集, 非常详细

2016-08-02

APCS ARM Procedure Call Standard

ARM调用规范

2016-08-02

AR9170 (支持TP Link WN821N ) Linux 固件 firmware

参考我的博客: 支持的设备如下: 3Com Dual Band 802.11n USB 0x0cf3 0x1010 Actiontec 802AIN Wireless N 0x1668 0x1200 Airlive X.USB 11a/b/g/n 0x1b75 0x9170 Arcadyan WN7512 0x083a 0xf522 Atheros 9170 0x0cf3 0x9170 Atheros TG121N 0x0cf3 0x1001 AVM FRITZ!WLAN USB Stick N 0x057c 0x8401 AVM FRITZ!WLAN USB Stick N 2.4 0x057c 0x8402 Cace Airpcap NX 0xcace 0x0300 D-Link DWA-130 D 0x07d1 0x3a0f D-Link DWA-160 A1 0x07d1 0x3c10 D-Link DWA-160 A2 0x07d1 0x3a09 H3C Dual Band 802.11n USB 0x0cf3 0x1011 IO-Data WNGDNUS2 0x04bb 0x093f NEC WL300NU-AG 0x0409 0x02b4 NEC WL300NU-G 0x0409 0x0249 Netgear WN111 v2 0x0846 0x9001 Netgear WNA1000 0x0846 0x9040 Netgear WNDA3100 (v1) 0x0846 0x9010 500mA Planex GWUS300 0x2019 0x5304 Proxim ORiNOCO 802.11n USB 0x1435 0x0804 Sphairon Homelink 1202 0x0cde 0x0027 TP-LINK TL-WN821N v2 0x0cf3 0x1002 500mA WNC Generic 11n USB Dongle 0x1435 0x0326 Z-Com UB81 BG 0x0cde 0x0023 Z-Com UB82 ABG 0x0cde 0x0026 Zydas ZD1221 0x0ace 0x1221 Zyxel NWD271N 0x0586 0x3417

2015-12-21

imx6 Yocto 内核补丁

参考博客:Yocto i.MX6 (TQIMX6) (01) : 3.14.28内核的适配

2015-12-19

Linux启动流程 initrd与initramfs的区别

Linux启动流程 initrd与initramfs的区别,以前做的一个组内交流活动ppt

2015-12-16

imx6 手动制作Android启动用SD卡脚本与fstab

我的博文中提到的脚本, 博文位置:http://blog.csdn.net/sy373466062/article/details/50208449

2015-12-10

Device Tree DTB视频教程Part1,分卷1

Device Tree DTB视频教程,是一个组内的分享。 因为csdn的size限制,Part1有三卷。

2015-10-22

51单片机完整课程设计上位机实时曲线状态机详细注解

详细内容: http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4375941&bbs_page_no=1&search_mode=3&search_text=QQ373466062&bbs_id=9999 对应上位机: http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4401766&bbs_page_no=1&search_mode=3&search_text=QQ373466062&bbs_id=9999

2011-05-01

交通灯 51单片机 四位数码管显示倒计时

没有完全写好 但是核心已经解决 大家可以修改一下即可

2009-12-16

TonyHo的留言板

发表于 2020-01-02 最后回复 2020-01-02

visual studio 2005 和 2010 中MFC程序的控件的name属性为何不能够更改

发表于 2010-10-31 最后回复 2010-11-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除