Author Archives: xiapan

开发板-文件系统打包过程,利用rsync 进行同步到虚拟机

第一步:在虚拟机根目录下,mkdir fs;

第二步:在root 下执行:rsync -avx root@192.168.8.240:/ fs,ip为开发板的ip,执行该指令后就能将 开发板的文件系统同步到主机上。

第三步:进行fs文件夹,压缩fs 文件夹: tar -cjf fs.tar.bz2 ./*

rsync 命令参照 rsync移值

QT 远程布置的方法 利用rsyns 复制二进制方式 | 开放技术博客 (iotot.com)

E32 433模块 配置

工作模式:当M0与M1 都为低电平时,模块工作在正常模式。

当M0与M1 都为高电平时,模块工作在配置模式

设置参数:c0 01 01 1a 17 c4

参数说明:C0 掉电保存,01 01 为当前模块地址;1a 默认,17 为信道 ,C4 发送时,以发送数据前3个字节做为发送地址,此为定向传模式,此值为44时,模块不会考虑前3个字节此为透传模式。

QT 远程布置的方法 利用rsyns 复制二进制方式

第一步:下载源码:https://download.samba.org/pub/rsync 找到3.1.2的版本

第二步:解压后,建立gcc 环境 :source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

第三步:设置configure :./configure –prefix=/home/alientek/rc/install –host=arm-poky-linux-gnueabi

第四步:make

第五步:make install

第六步:复制rsync 到开发板

第七步:可能还少一个库,去开发板gcc编译器里找 libattr.so.1 复制到/usr/lib 下

第八步:设置 Qt

ip 地址和登陆名

第九步:部署公钥

第十步:test 测试一下,OK;

Android – 文件系统与Android11 分区存储

认识Android文件系统
*了解分区存储
*分区存储的适配

一、Android文件系统

Android文件系统分为 内部存储(internal storage)外部存储(external storage)

1.1 用一个表格来直观对比一下两者:

1.2 应用的私有路径

应用在安装之后,系统会自动在内部存储和外部存储,分别建立应用的私有存储区域。

内部存储 : data/user/0/packageName
外部存储 : storage/emulated/0/android/data/packageName

当应用卸载或者清除数据后,该区域文件会被删除。

1.3 内外部存储图解

storage2.png

二、 了解分区存储

Android 10版本中,Google推出 分区存储(scoped storage)的功能。

背景
分区存储功能是针对内置的外部存储来说的,很多应用喜欢在外部存储的根目录创建自己的文件夹,比如:storage/emulated/0/***

这样做的好处:1. 当不断向该目录存储时,应用自己的容量不会变化; 2. 当应用卸载时,该目录下文件不会被删除,可用于保存一些可持久性的文件。

但是也有坏处: 1. 对用户来说,会有很多垃圾文件存在于手机中;2. 只要获取到Read 和 Write权限,就可以随意访问外部存储的任何目录,信息安全存在隐患。

分区存储

  1. 每个应用向自己的私有目录读写文件,不需要读写权限。私有文件目录具体路径: storage/emulated/0/android/data/packageName/ ,获取方法: Context#getExternalFilesDir()
  2. 应用即使获取了读写权限,也无法访问其他应用的私有目录。
  3. 当应用需要获取媒体文件时,通过 MediaStore API 向公共存储目录DCIM、Music或者Movie获取。同样写媒体文件也是如此。并且读写自己的文件时不需要申请权限。 只有读其他应用的媒体文件时才会需要申请READ_EXTERNAL_STORAGE权限。
    (更新:Android11为目标平台时,可以使用文件直接路径去访问媒体,这是在Android10上没有的,应用的性能会略有下降,还是推荐使用MediaStore )
  4. 当应用需要获取其他非媒体文件时,比如doc、pdf文件,需要使用 系统的文件选择器SAF 来进行访问。
  5. 所以WRITE_EXTERNAL_STORAGE权限,在未来的Android11版本里,会被废弃。 (写文件不需要权限,只能在私有目录和公共目录写文件)

三、分区存储适配

旧版存储位置迁移

除了应用的私有目录和公共目录,其他位置都称为 旧版存储位置,我们需要将旧版存储位置的数据迁移到能兼容分区存储的位置。

  1. 如果以Android 11为目标平台的应用,需要在manifest清单中标记preserveLegacyExternalStorage 为true,这样在Android11的机器上覆盖安装时,才能访问旧版存储位置,卸载重装会失效。
  2. 如果以Android10为目标平台,覆盖安装可以访问旧版存储,且将manifest清单中标记requestLegacyExternalStorage 为true,在Android10机器上重新安装也能访问旧版存储位置。在Android11的机器上两种安装方式都会失效,需要加上preserveLegacyExternalStorage = true,且覆盖安装才能访问旧版存储位置。卸载重装会失效。
  3. 如果以Android 9及以下为目标平台时,就能正常的进行文件移动。将应用在外部存储器根目录的保存的数据中,如果能接受随应用的卸载而删除的文件,迁移至storage/emulated/0/android/data/packageName/目录下。需要和其他应用共享的媒体文件,迁移至媒体存储位置。
正确使用读写API
  1. 只在外部存储的应用私有目录下,用直接路径读写文件
  2. 访问或者共享媒体文件,使用MediaStore在公共目录下读写文件
  3. 访问或者共享非媒体文件,使用系统的文件选择器SAF在公共目录Download下读写文件

作者:xlq
链接:https://www.jianshu.com/p/87d4d4071255
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里插入图片描述

imx6UL 开发板 设置程序自启动

第一步,创建开启脚本 apprun ,目录:touch /etc/init.d/apprun

#!/bin/sh
#
# start/stop app daemon.

### BEGIN INIT INFO
# Provides:          app
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     S 2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: app daemon
# Description:       app is a daemon used to enable NFC features
### END INIT INFO

chmod 755 /home/root/ftp/app

#设置app 所在目录
DAEMON=/home/root/ftp/app   
PIDFILE=/var/run/app.pid
DESC="Linux app daemon for firets"

if [ -f /etc/default/app ] ; then
        . /etc/default/app
fi

set -e

do_start() {
       $DAEMON > /tmp/app.log 2>&1 &
}

do_stop() {
        start-stop-daemon --stop --name app --quiet
}

case "$1" in
  start)
        echo "Starting $DESC"
        do_start
        ;;
  stop)
        echo "Stopping $DESC"
        do_stop
        ;;
  restart|force-reload)
        echo "Restarting $DESC"
        do_stop
        sleep 1
        do_start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

第二步:查看当前运行级别:sudo runlevel ,比如 N 5 就是5级别。 建立软链接:

ln -s /etc/init.d/apprun /etc/rc5.d/S50appgo