Noobzhang

  • 首页

  • 标签

  • 分类

  • 归档

Linux select pselect poll epoll用法

发表于 2017-04-19 | 更新于 2019-03-08 | 分类于 Linux

select & pselect

#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

void FD_CLR(int fd, fd_set *set);
int  FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
监控fd状态(timeout 是到期前剩余时间)

int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);
除了监测fd状态,pselect精度更准,且监测signal(另外pselect的timeout参数是const的)

monitor multiple file descriptors, waiting until one or more of the file descriptors become “ready” for some class of I/O operation

阅读全文 »

Linux inotify机制

发表于 2017-04-19 | 更新于 2019-03-08 | 分类于 Linux

Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。
使用 inotify 很简单:创建一个文件描述符fd,附加一个或多个监视器(一个监视器 是一个路径和一组事件,对应一个描述符wd),然后使用 read() 方法从描述符fd获取事件信息。

inotify,linux内核版本 >= 2.6.13

阅读全文 »

Markdown&MarkdownPad编辑器

发表于 2017-04-13 | 更新于 2019-03-08 | 分类于 Others

MarkdownPad编辑器添加表格的扩展

开启表格特性支持: 工具 ==> 选项 ==> Markdown ==> Markdown处理器 改为 "Markdown(扩展)"or"GitHub风格Markdown"即可。

表格语法:
00_Table.png

:---- 左对齐,默认左对齐
:---: 居中
----: 右对齐
每列的宽度是根据对应列里最长的文本来决定

在设置的过程中要注册markdownpad2

邮箱: Soar360@live.com

授权秘钥:
GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2
M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6
Y2wZ0q74f47fzsZo45JE2hfQBFi2O9Jldjp1mW8HUpTtLA2a5/sQytXJUQl/QKO0jUQY4pa5C
Cx20sV1ClOTZtAGngSOJtIOFXK599sBr5aIEFyH0K7H4BoNMiiDMnxt1rD8Vb/ikJdhGMMQr
0R4B+L3nWU97eaVPTRKfWGDE8/eAgKzpGwrQQoDh+nzX1xoVQ8NAuH+s4UcSeQ==

Markdown编辑器快捷键

· 加粗 Ctrl + B
· 斜体 Ctrl + I
· 引用 Ctrl + Q
· 插入链接 Ctrl + L
· 插入代码 Ctrl + K
· 插入图片 Ctrl + G
· 提升标题 Ctrl + H
· 有序列表 Ctrl + O
· 无序列表 Ctrl + U
· 横线 Ctrl + R
· 撤销 Ctrl + Z
· 重做 Ctrl + Y
阅读全文 »

杂项

发表于 2017-04-13 | 更新于 2019-03-08 | 分类于 Others

Google Host文件

https://raw.githubusercontent.com/racaljk/hosts/master/hosts

Ubuntu x64系统安装32位系统兼容库

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

sudo apt-get install gawk
sudo apt-get install libstdc++6
sudo apt-get install lib32stdc++6

or sudo apt-get install libc6-i386

利用已有的Doxyfile来生成文档

doxygen Doxyfile

护眼色

R/B/G:CBE7CE 203 231 206
色调84 饱和度88 亮度204

移植开源程序到Android中

发表于 2017-04-13 | 更新于 2019-03-08 | 分类于 Android
  1. 安装独立的交叉编译链:
    下载ndk 包, 解压
    cd build/tools
    ./make-standalone-toolchain.sh –install-dir=/opt/ndk-standalone-10-arm –platform=android-22 –toolchain=arm-linux-androideabi-4.8

    注1 老的ndk才需要使用–ndk-dir=../../, ndk10使用 –platform=android-L, ndk13使用 –platform=android-22
    注2:需要将/opt/ndk-standalone-10-arm/bin 添加到PATH 路径中

  2. 编译libusb-1.0.so库
    需要略微添加下timeval 等结构体 等

    #define TIMESPEC_TO_TIMEVAL(tv, ts) \
    { \

    (tv)->tv_sec = (ts)->tv_sec;            \
    (tv)->tv_usec = (ts)->tv_nsec / 1000;   \
    

    } while (0)

方法1 使用原始编译框架,交叉编译
    ./configure --build=x86_64-linux-gnu  --host=arm-linux-androideabi --target=arm-linux-androideabi --prefix=/opt/libusb-1.0.9/
    make
    注:--prefix 编译生成库的路径,也叫安装路径,使用绝对路径
方法2 使用Android ndk ndk-build进行编译(需要编译Application.mk Android.mk 等文件)    【推荐】
    ndk-build clean 
    ndk-build 
方法3 copy  ti-sdk-am335x-evm-08.00.00.00 中的libusb-1.0.so 库
  1. 编译libssl.so libcrypto.so 库 (Android集成的openssl)
    方式1: 使用Android 中openssl 编译 【推荐】

    需要配置openssl.config和openssl.trusty.config  去掉no-dtls1 宏,否则将不支持DTLS特性  (即通过 arm-linux-androideabi-            
        nm ../../out/target/product/rk3368_box/obj/SHARED_LIBRARIES/libssl_intermediates/LINKED/libssl.so | grep DTLSv1_server_method 查询不到函数符号)
    ./import_openssl.sh import <path-to-openssl-1.0.1j.tar.gz>     //重新按照该openssl.config生成编译配置文件
    mm -B
    

    方式2: (下载开源openssl源码编译, 参见openssl-1.1.0c/Configurations/10-main.conf 介绍,此方法用户编译原生openssl库)

    export ANDROID_NDK=/opt/android-ndk-r13b
    export CROSS_SYSROOT=/opt/android-ndk-r13b/platforms/android-22/arch-arm
    export CROSS_COMPILE=arm-linux-androideabi-                   //等同于选项--cross-compile-prefix
    
    ./Configure android-armeabi  --openssldir=/opt/openssl-1.1.0c/out/config --prefix=/opt/openssl-1.1.0c/out
    make install
    
    make clean && make distclean
    export ANDROID_NDK=/opt/android-ndk-r10b
    export CROSS_SYSROOT=$ANDROID_NDK/platforms/android-L/arch-arm
    export CROSS_COMPILE=arm-linux-androideabi-
    export OPENSSL_HOME=/work2/mygo/src/bitbucket.org/portus/smartgateway/NodePro/Zwave/lib/openssl
    ./Configure android-armeabi no-threads --openssldir=$OPENSSL_HOME/out/config --prefix=$OPENSSL_HOME/out
    make
    make install
    
  1. bridge-utils (主要是需要brctl工具)
    ./configure –build=x86_64-linux-gnu –host=arm-linux-androideabi –target=arm-linux-androideabi –prefix=/opt/bridge-utils-1.4/out/
    make clean
    make
    make install

  2. 编译zipgateway (基于arm Android目标运行环境)
    ./configure –build=x86_64-linux-gnu –host=arm-linux-androideabi –target=arm-linux-androideabi
    make CC=/opt/ndk-standalone-10-arm/bin/arm-linux-androideabi-gcc beaglebone
    或者 make CROSS=”arm-linux-androideabi-“ beaglebone 【推荐】

其他

android ndk编译开源linux软件方法
NDK=/opt/android-ndk-r10b
SYSROOT=$NDK/platforms/android-L/arch-arm
CC=”$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc –sysroot=$SYSROOT”
$CC –version

cmake -DOPENSSL_ROOT_DIR=/work/project/geekbox/Lollipop/external/openssl/include -DOPENSSL_LIBRARIES=/work/project/geekbox/Lollipop/out/target/product/rk3368_box/system/lib
./configure

Android支持库(转)

发表于 2017-04-13 | 更新于 2019-03-08 | 分类于 Android

随着 Android 5.0 Lollipop 的发布,Android 又为我们提供了更多的支持包,但是我相信大部分开发者都同我之前一样不知道这些包里究竟有些什么东西,我们应该在什么时候使用它。现在,我们就来逐个看看每一个版本的 Support 包中所拥有的东西,让用到他的时候不再迷茫。

首先,你需要了解每一个 Support 包版本后缀 vX 所代表的含义。当然我相信来看博客的诸位都一定知道 Android 对于每一个版本都有一个版本号,例如2.1是7,4.0是14,5.0是21。而这里,v 之后的数字,就代表着他能够被使用的最低版本等级,之所以无法在更低版本进行使用的原因,是因为随着版本的升级,在新版本中有很多之前不支持的特性或者 API,因此如果你在老版本中使用了这些支持包,就可能会导致应用崩溃。

阅读全文 »

Android device.mk

发表于 2017-04-12 | 更新于 2019-03-08 | 分类于 Android

PRODUCT_COPY_FILES

通过android提供的PRODUCT_COPY_FILES这个变量来自动拷贝,只需要给此变量赋值。 //这里需要注意一点, PRODUCT_COPY_FILES 不能在 Android.mk 中使用 添加新的Copy 项!

Android编译系统——完整编译过程分析

发表于 2017-04-12 | 更新于 2019-03-08 | 分类于 Android

###编译命令
make //整体编译Android
mm
mmm
get_build_var TARGET_PRODUCT //获取指定变量的当前值

待续...
阅读全文 »

Android Framework层 Sensor 框架

发表于 2017-04-12 | 更新于 2019-03-08 | 分类于 Android

待续…
http://processors.wiki.ti.com/index.php/Android_Sensor_PortingGuide

阅读全文 »

Android APP加密和签名

发表于 2017-04-12 | 更新于 2019-03-08 | 分类于 Android
  1. 基本概念
    公钥加密、私钥解密是密送,保证消息即使公开也只有私钥持有者能读懂。
    私钥加密、公钥解密是签名,保证消息来源是私钥持有者。

  2. 签名的作用
    Android系统不会安装没有进行签名的应用程序
    给apk签名可以带来以下好处:

    1. 应用程序升级
    2. 应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行
    3. 代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以
       相同证书签名的应用程序公开自己的功能。
    
  3. Android标准签名
    build/target/product/security目录中有四组默认签名供Android.mk在编译APK使用:
    1、testkey/releasekey:普通APK,默认情况下使用。
    2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的 UID为system。
    3、shared:该APK需要和home/contacts进程共享数据。
    4、media:该APK是media/download系统中的一环。

生成platform media 等签名文件
/work/aurora/development/tools/make_key:
sh make_key releasekey ‘/C=CN/ST=HuBei/L=WuHan/O=Company/OU=Department/CN=YourName/emailAddress=YourE-mailAddress’

  1. 第三方生成签名
    使用/work/sign下的工具生成系统签名jks文件:(供AS 或者 eclipse 使用)
    ./keytool-importkeypair -k lt_system_me.jks -p liantong -pk8 platform.pk8 -cert platform.x509.pem -alias lt_system

单独给APK签名:
out/host/linux-x86/framework/signapk.jar
build/target/product/security/*
也可以从网上下载。使用方法,以platform为例:
java -jar ./signapk.jar platform.x509.pem platform.pk8 input.apk output.apk
(platform.x509.pem私钥 platform.pk8公钥 在build/target/product/security获取)

  1. APP中签名后生成文件
    APP中META-INF/CERT.RSA 文件数字签名以及一个数字证书
    机构密钥标识符AuthorityKeyIdentifier
    基本限制BasicConstraints
    主体密钥标识符SubjectKeyIdentifier

Owner: CN=ZhaoXin, OU=ZhaoXin, O=ZhaoXin, L=Shanghai, ST=Shanghai, C=CN
Issuer: CN=ZhaoXin, OU=ZhaoXin, O=ZhaoXin, L=Shanghai, ST=Shanghai, C=CN
Serial number: 8e8825ec8c2efe44
Valid from: Tue Apr 22 16:58:39 CST 2014 until: Sat Sep 07 16:58:39 CST 2041
Certificate fingerprints:
MD5: 55:16:F4:38:BD:49:BE:38:47:03:9B:B6:CA:AE:33:AD
SHA1: 43:E0:FE:6E:76:BF:53:62:84:15:1B:BD:17:03:67:F1:56:E0:BB:18
SHA256: 0B:6D:62:97:01:A8:5A:63:27:50:D1:EC:AD:47:59:B9:83:3E:0D:92:A5:E8:FE:95:9D:F0:7E:F2:DC:30:75:05
Signature algorithm name: SHA1withRSA
Version: 3

Extensions:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: CF FF A6 88 A3 A8 ED 04 C1 60 2F FD 96 EC BC E9 ………`/…..
0010: D3 B4 5F AD .._.
]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]

#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: CF FF A6 88 A3 A8 ED 04 C1 60 2F FD 96 EC BC E9 ………`/…..
0010: D3 B4 5F AD .._.
]
]

  1. 查看签名
    查看签名
    keytool -printcert -file META-INF/CERT.RSA

查看keystone信息:
keytool -list -keystore debug.keystore

  1. 其他
    反编译
    ./apktool d[ecode] xxx.apk -o

  2. AndroidStudio中签名配置
    ???
    app 未知源检测原理(不同系统不一样吗,不同应用市场是不是也不一样?)
    Y:\aurora\development\samples\Home sample-Launcher
    系统Launcher启动流程分析

signingConfigs {
    release {
        keyAlias 'lt_system'
        keyPassword 'liantong'
        storeFile file('D:/25264/Android/Project/SGTest/signedAPK/lt_system.jks')
        storePassword 'liantong'
    }
    release2 {
        keyAlias 'lt_system'
        keyPassword 'liantong'
        storeFile file('D:/25264/Android/Project/SGTest/signedAPK/lt_system_me.jks')
        storePassword 'liantong'
    }
}

SeeAlso

《APK 反编译及签名工具》

123…8

Jin

77 日志
9 分类
113 标签
© 2019 Jin
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Mist v7.0.0