安卓Linux与Linux有什么不同

最近想把以前在Linux下用C写的程序移植到安卓盒子上,照理安卓就是Linux,移植起来应该没有什么困难,到实际做的时候,才发现部分类库安卓用的和我们以前用的不一样(比如说共享内存),具体体现在:

下面内容出自:http://buaadallas.blog.51cto.com/399160/376296

1. Ashmem – Anonymous shared memory subsystem (匿名共享内存子系统)
– mm/ashmem.c
– 允许进程共享命名的内存block
– 内核在其不使用时可以对其回收
– 更加适合小内存设备
– 使用open /dev/ashmem打开该设备,用mmap()之后,可以使用以下iocts:
. ASHMEM_SET_NAME
. ASHMEM_GET_NAME
. ASHMEM_SET_SIZE
. ASHMEM_GET_SIZE
. ASHMEM_SET_PROT_MASK
. ASHMEM_GET_PROT_MASK
. ASHMEM_PIN
. ASHMEM_UNPIN
. ASHMEM_GET_PIN_STATUS
. ASHMEM_PURGE_ALL_CACHES
2. Pmem – Process Memory Allocator
– drivers/misc/pmem.c
– pmem是用来管理用户空间和内核驱动之间(dsp, gpu, etc)较大块的连续共享物理内存(1-16+MB)
3. Binder IPC – 类似corba的IPC
– drivers/staging/android/binder.c
– 用以替代System-V IPC进行进程间通讯
– 减少进程间通信开销,解决安全漏洞问题
– 进程/线程池间通讯
– 面向系统的组件结构
– 提供面向对象的操作系统环境
4. Logger – 日志功能 (kernel support for ‘logcat’ command)
– drivers/staging/android/logger.c
. 提供给用户进程读写系统日志信息
– drivers/staging/android/ram_console.c
. 在RAM buffer中存储内核日志
– 如果发生kernel panic,下次启动后,可以通过/proc/last_kmsg查看内核信息
4. Low Memory Killer
– drivers/staging/android/lowmemorykiller.c
– 扫描所有运行的进程然后杀死其中的一个进程
5. Yaffs2
– Yet another flash file system 2nd edition
– fs/yaffs2/*
– 专门针对NAND flash特性设计的文件系统
– Yaffs2具有以下特点:
. 日志系统:Yaffs2是一个日志型文件系统,因此具有掉电保护功能。它需要一定的额外RAM空间来存储日志
. 垃圾回收:Yaffs2具有高度优化和可预测的垃圾回收策略,因此该文件系统具有高性能以及deterministic。当可用的内存太少时,Yaffs2会执行垃圾回收。一个有dirty page和good page的block将会被选择,Yaffs会把好的页面考到另外的block,然后把当前的block标记为dirty,并且擦出,使之能够再次被使用。
. 较少的额外内存需求:它比其他的大部分文件系统都需要更少的额外内存,因此具有更高的扩展性
. 灵活性,可移植性,健壮性。
6. Frame Buffer
– 需要double buffering aka panning 功能
– 分配实际frame大小两倍的内存
– Pan 功能选择实际输出到屏幕的buffer
7. Power Management
– 基于linux的电源管理
– More aggressive 的策略- “没有说要用,就关掉“
– 使用wakelock(唤醒锁)来管理电源
8. Bionic
– Andriod 版的Libc
– glibc 和 uclibc 都是基于LGPL版权
– 为了避免版权的纠纷,Android自己开发了仅有200k的BSD版权的bionic,除此之外,bionic更加适合小型移动设备
– Bionic不支持c++异常
– Bionic不与glibc或者uclibc兼容
– Bionic有意不提供System-V IPCs机制(semget(), shmget(), msgget()等)
– 不支持System-V IPC 的原因是“they lead to global kernel resource leakage” (会导致全局资源泄漏)

3D扫描应用

3D技术已经发展很多年了,但是一直无法大众化,最近找到一个国外的网站https://sketchfab.com。这个网站可以让用户上传自己的3D模型数据,然后用户可以从web浏览器直接访问/观看这些3D模型图像,目前已经支持30多种3D数据格式上传。网站主要用到的3D展示技术,如:webGL,HTML5。而3D模型如何得到,有的是通过3D扫描,有的是通过3D设计软件创建出来。

大概浏览了一下网站的3D模型,其中扫描生成的大部分是一些工艺品,比如:首饰,小的展示品,新产品展示。所以也不难看出,在3D扫描领域中似乎也只有这些需要产品展示的行业会经常用到。

其实3D扫描不同技术/硬件,精度和效率/效果方面有很大不同,比如:扫描汽车,用手持设备得满满扫,整个外部轮廓扫下来一天半天的很正常。再比如一些复杂的工艺品(主要指内部结构),一般的扫描仪只能扫到外部轮廓,不能调整,这种应用就用不了。而近几年比较火的Kinect,精度最多到1mm,无法满足高精度的要求。

几个三维重建应用软件

3D builder

微软推出的基于windows 8.1的应用,可以从windows store免费下载/安装,支持使用kinect扫描

Reconstructme

一家奥地利公司开发的软件,基于openni,Microsoft kinect SDK,感应器支持ASUS Xtion Family or PrimeSense Carmine Family or Microsoft Kinect family

http://www.structure.io/

其实就是PrimeSense,被苹果收购以后换了个马甲,开发了一款用于ipad的附件(相对于把kinect套在了ipad上)。

整理一下这三家之间的关系:kinect 1.0用的是PrimeSense的方案,后来PrimeSense被苹果收购,于是kinect 2.0使用了自己的方案(据说)。Reconstructme无所谓,反正是做上层应用的,只要给驱动支持就行。作为开发者我更关心买谁的sensor,用谁家的SDK。简单来说,如果买了kinect 1.0,那么openni和kinect windows sdk都可以用;如果是kinect 2.0,kinect windows sdk肯定是没有问题的,openni现在还不知道;如果买了其他PrimeSense OEM的产品,我估计用openni应该也是没有问题的。

其他几家基本都是基于openni+kinect/Xtion的方案

http://www.artec3d.com

http://www.kscan3d.com

http://www.fablitec.com

http://skanect.occipital.com

淘客新开放的API(续)

新API到底怎么用?

首先,要使用到的是taobao.tbk.items.get 淘宝客推广商品查询,可以输入关键字和类目,返回如下字段:num_iid,seller_id,nick,title,volume,pic_url,item_url,shop_url。可以看到这里没有转化为推广码的推广链接(在旧版的API中有click_url),如果想引导用户点击的话,只能通过淘点金了。

然后,按照一般用户的习惯,对某一商品感兴趣会查看详情,这里使用taobao.tbk.item.info.get 淘宝客商品详情(简版),输入num_iid(可从上面的API获取到),返回如下字段:num_iid,title,pict_url,small_images,reserve_price,zk_final_price,user_type,provcity,item_url

最后说一下taobao.tbk.item.get 淘宝客商品查询,这个接口和第一个接口的作用是一样的,返回的字段和第二个接口一样,不同的是第一个接口可以查到seller_id。蛋疼吧,如果不关心seller_id的话一个taobao.tbk.item.get就可以搞定所有功能。

淘客新开放的API

淘宝客API产品2.0升级公告

支持如下API,可以实现商品搜索功能,如果要转化为导购链接的话,还得配合淘点金才行。

•淘宝客基础API
taobao.tbk.item.get 淘宝客商品查询
taobao.tbk.item.info.get 淘宝客商品详情(简版)
taobao.tbk.item.recommend.get 淘宝客关联商品查询
taobao.tbk.shop.recommend.get 淘宝客关联店铺查询