加载中…
请输入标题
暂无内容
个人资料
BigSam78
BigSam78
  • 博客等级:
  • 博客积分:0
  • 博客访问:659,811
  • 关注人气:177
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
访客
加载中…
好友
加载中…
评论
加载中…
留言
加载中…
博文
标签:

socket

local_socket

分类: linux
作者: Sam (甄峰)  sam_code@hotmail.com

Linux下进程间通讯,常见的有管道(PIPE), 内存映射(mapped memeory), 共享内存( shared memory), 信号量(semaphore), 信号(signal)等。

但Sam最常用的,还是Socket. 之前总使用TCP或UDP来进行本地进程间通讯。但实际上也知道有个Local Socket更合适。这次就在Linux和Android Native模式下分别使用之。

1. 创建Local Endpoint:
1.1:AF_UNIX/AF_LOCAL socket协议族
这个协议族用来在同一台设备上高效的进行进程间通讯。Local Socket Endpoint可以是无名的,抽象命名方式或者绑定于一个文件系统中的pathname. 
想要看这个协议族具体内容,可以: man 7 unix

1.2: Type:
Socket type,可以是SOCK_STREAM, SOCK_DGRAM, 也可以是SOCK_SEQPACKET.

1.3: UNIX  domain sokcet address:
struct so
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

getsockopt

socket

linux

分类: linux
作者: Sam (甄峰)  sam_code@hotmail.com

socket在发送和接收时,根据不同的协议族和Type,会有不同类型的缓冲区。现研究如下。

1. TCP socket的接收和发送缓冲区
socket(AF_INET, SOCK_STREAM, 0);
每个TCP Socket在内核中都有一个发送缓冲区和一个接收缓冲区, TCP的全双工工作模式以及TCP的滑动窗口就是依赖这两个独立的buufer以及Buffer的填充状态。
对端发送过来数据,内核把数据缓存入接收缓冲区,应用程序一直没有调用read()读取的话,此数据会一直缓存在相应的socket的接收缓冲区。 若应用程序调用read(),会把接收缓冲区的数据读取用应用程序层的buffer.

应用程序调用write()或send()时,仅仅是把buffer中的数据copy到socket的发送缓冲区中。write()或send()返回时,data并不一定已经发送到对端了。

如果应用
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-10-26 09:35)
标签:

opencv

cmake

分类: linux
作者: Sam (甄峰)  sam_code@hotmail.com

又尝试完整编译OpenCV4Android (3.1), 因为开发平台(FC26-64bit), CMake(3.9.1), Android SDK 版本,NDK(ndk R14B)等都有变化,会遇到一些版本匹配问题。现记录如下。

编译方法,与之前的blog(http://blog.sina.com.cn/s/blog_602f87700102vdnw.html)一样。

A:先建立配置脚本:
32bit: 
export ANDROID_NDK=/opt/android-ndk-r14b/
export ANDROID_SDK=/home/sam/Android/Sdk
export ANDROID_ABI=armeabi-v7a

export ANT_HOME=/usr/share/ant
export PATH=${PATH}:${ANT_HOME}/bin

B:开始配置:
$source setenv_32bit
$cd platforms
$sh scripts/cmake_android_arm.sh

C: 开始编译:
$cd build_android_arm
$make 
或为了能看到更多编译细节,而使用:
$make 
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-10-24 17:16)
标签:

cmake

分类: linux
作者: Sam (甄峰)  sam_code@hotmail.com

最近尝试再次编译OpenCV4Android。因为Android SDK, NDK, Cmake版本问题,意料之中的遇到N多问题。分析和解决问题大都需要修改CMake file. 现记录一些信息如下。

0. CMake基本语法记录: 
0.1. CMake中的赋值:
  1. set(variable value1 value2 value3 ... valueN)
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

aarch-64

clang

gcc

分类: Android
作者: Sam (甄峰)  sam_code@hotmail.com

从2012年最初接触NDK到现在已经5年过去了,从最初的NDK R7到现在已经到达NDK R14.  它本身也发生了很多变化。 例如对C++支持程度。对64bit ARM的支持等。现有必要把这些新特性研究一下。

1. 32bit/64bit ARM平台支持:
在NDK R10的某个版本中,开始支持64bit ARM平台。那时它还是将64bit和32bit NDK分开提供的。
当前Google支持下载的NDK中,最低版本是NDK R10e. 这个版本之后,64bit和32bit采用同一套NDK,只使用编译选项的不同来支持目标代码编译为何种平台。


Instruction Set(s) Notes
armeabi ARMV5TE and later
Thumb-1
No hard float.
armeabi-v7a armeabi
Thumb-2
VFPv3-D16
other optional
Hard float when specified as armeabi-v7a-hard.
Incompatible with ARMv5, v6 devices.
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

androidstudio

分类: Android
作者: Sam (甄峰)  sam_code@hotmail.com

在Android系统发布早期,Android APP官方IDE是Eclipse+ADT(Android Developer Tools). 但因为这个方案有兼容性和稳定性等各种问题。2014年,Google基于IntelliJ IDEA制作了Android Studio。并将其作为官方唯一提供全面支持的Android IDE。 它由Google开发并免费提供给Android 开发社区。 Eclipse+ADT不再进行开发。

1. 安装JDK:
要使用Android Studio IDE, 需要安装JDK。 JDK7和JDK8均可用于Android Studio。在Linux和Windows系统,安装后还需要设置环境变量。

例如:
export JAVA_HOME=/usr/java/jdk1.7.0_09/
export JAVA_BIN=/usr/java/jdk1.7.0_09/bin
export PATH=$JAVA_HOME
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
作者: Sam (甄峰)  sam_code@hotmail.com

因为众所周知的原因,Android APP开发环境在国内安装很麻烦。 幸好有无数热心人提供了很多办法解决这个问题。现记录如下。

0. 不同形式的Android 开发环境。
首先介绍不同的Android 开发环境。
0.1. Eclipse + ADT  Plugin.
ADT plugin:eclipse里的一个插件,负责将eclipse与android sdk链接到一起,让eclipse可以调用adk的类库,虚拟机等功能
早期Google把Eclipse作为开发APP的IDE。它自己仅提供ADT  Plugin. 让Eclipse与Android SDK等联结在一起。Sam早期就这么做。
 但Eclipse在不断升级中, 不同版本ADT Plugin与之有兼容性问题。所以后期又推出其它解决方案。

0.2 . ADT bundle
为了解决ATD Plugin与Eclipse兼容性问题,Google推出了ADT Bundle.
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-09-26 15:08)
标签:

i2c

分类: linux
作者: Sam (甄峰) sam_code@hotmail.com

最近又需要研究I2C Driver。在测试连线时,需要I2C工具。于是下载编译了I2C_Tools. 记录之。

1. download and Make:
$git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git
$make

可以看到,库文件被放在i2c-tools/lib, 可执行文件被放在i2c-tools/tools。

2. 使用:
2.1:察看I2C总线:
查看I2C Busses(I2C总线)
# ./i2cdetect -l                                         
i2c-0   i2c             Tegra I2C adapter                       I2C adapter
i2c-1   i2c             Tegra I2C adapter &nb
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

nkd

makefile

cmake

分类: Android

作者: Sam (甄峰)  sam_code@hotmail.com

 

0. 基础介绍:

Android推出NDK,是为了可以编译JNI和Native程序。它提供了一系列脚本:ndk-build, ndk-stack, ndk-dbg, ndk-which.  用来帮助用户编译,调试程序。

 

有了这些脚本,尤其是ndk-build, 它和Android.mk,  Application.mk结合,可以快速的产生需要的库或可执行程序。但他们也隐藏了很多信息。例如:编译器用的是哪个,使用什么编译选项,什么链接选项等。头文件使用哪些,库文件使用哪些。无从得知。

 

如果我们不想利用ndk-build系列脚本,而是想直接使用编译器,添加相关编译选项,理论上完全可以编译出Native库和可执行程序。 

 

但这样做,有什么意义呢?Sam工作中会遇到这样的需求:有些第三方库,采用Makefile或CMake编译。若要使用NDK脚本编译,需要重新了解编译思路,哪些源码生成那些库,哪些可执行程序依赖哪些库,然后根据这个写Android.mk.   这样做比较麻烦,尤其对比较庞大复杂的第

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

ros

vision_opencv

分类: 机器人-ROS
作者: Sam  (甄峰)  sam_code@hotmail.com

0.vision_opencv简介:
这个stack是ROS的OpenCV Interface。这个stack包含两个Package。cv_bridge, image_geometry.
主要用来将sensor::Image (ROS)和cv::Mat(OpenCV)之间数据转换。


cv_bridge: ROS Message和OpenCV之间的桥接。
image_geometry: Collection of methods for dealing with image and pixel geometry

为了在ROS中使用OpenCV,主要使用cv_bridge Package. 



在Indigo和Jade,OpenCV2 作为官方版本存在。要使用它,必须增加dependency on opencv2并使用find_package() 在CMakeLists.txt. 


阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有