作者:Jay

使用VS2017 开发Linux C应用

在工程添加了路径添加了.h 文件,尽管在include 时候VS2017已经能够自动补全,但是编译的时候还是提示找不到.h文件。

在编译机器发现对应的.h 并没有直接拷贝过来。

原来同以前的直接include 搜索不一样,.h 同样需要加入工程里面,不然VS不知道拷贝那些文件。

13:46 2018/6/29

对于系统/usr/include 路径下*.h 文件,VS2017 不知道是什么时候拷贝到到Windows的,每次添加新机器后会报错。

C:\Users\Mdp-Jay\AppData\Local\Microsoft\Linux\Header Cache\1.0 路径下文件夹为空。

测试发现原来此过程发生在选项->跨平台->连接管理器->远程标头 IntelliSense 管理器,会自动打包Linux 编译机器上面的/usr/include然后到Windows 解压。

动态链接库

属性页->链接->所有选项->库链接项

确定了Linux GDBServer版本

大概明白了流程,暂时地,VS2017 还不支持arm64架构,通过ssh获取调试的架构的(uname -m)时候得到aarch64显示Unkown。VSli...

logrotate

  • man logrotate

如上强制logrotate ,执行以下步骤。

  • 重命名当前日志

  • 压缩文件

默认的文件已经不在了。

systemd

systemd 是linux操作系统的系统和服务管理器,作为boot启动后的第一个进程(PID=1),systemd扮演初始化系统,以及启动和维护用户空间服务。

为了兼容SysV,如果systemd初始化被调用并且进程id不是1,它将执行telinit,并且将同步参数到该应用,所以在正常系统登录状态下的init和telinit是等同的。更多信息通过man telinit 了解。

当作为系统实例启动,systemd通过system.conf 解析配置文件,如果作为用户进程启动,从user.conf解析配置文件,更多信息通过systemd-system.conf 了解。

  • 系统同时存在sysV init脚本使能和systemd service,那么到底是生谁效的?

    如果同时存在systemd 单元文件和sysVinit脚本,亦或者upstart配置文件,理论上systemd>sysv init>upstart.

  • 如下路径的unit 关系,哪些unit是使能的?

    参考 man systemctl ->COMMANDS->Unit File Commands-> enable NAME...

    在/lib/systemd/system 保存了所有unit file,其中部分.service 文件包含[install] 部分,当调用...

htpdate

标签 :GAC-350 htpdate

GAC-350 放弃ntpdate采用htpdate,通过/etc/default/htpdate配置为deamon模式,并且尝试从多个门户网站同步时间。但是测试反馈从开机无网络到网络恢复的时候同步时间未及时恢复,需要等待一段时间。

初步怀疑第一次未正常获取到时间后,默认轮询周期过大,导致未及时同步,在man htpdate找到轮询周期的描述,从这里看这里默认的轮询周期在30分钟至32小时。

https://salsa.debian.org/debian/htpdate

仔细走读了代码,发现这里的最小时间和最大时间有很多规则,理顺完整原理后再详细介绍这里的规则。

  • htpdate 区分deamon 模式,在deamon模式会周期同步时间,否则只同步一次;
  • 从服务器http文件头多次获取时间,如果存在多个服务器,多次获取;
  • 计算多个服务器获取时间平均值,并且计算本地误差然后更改时间;

而对于轮询时间和异常处理,如下规则:

  • 多个服务器,某一个服务器获取时间失败,休眠,时间设置最小时间除以/服务器数量;

  • 成功获取时间(任一服务器),如果存在误差,立即同步,休眠30分钟(固定时间)最小延时值设置为最小时间;

  • 多个服务器获取时间均失败,最小时间睡眠;

  • 获取成功,但是不存在时间误差;睡眠时间*2,直到最大时间;

综上,如果未通过-m 或者 -M 默认最小轮询时间为30(DEFAU...

bashrc notes

bash 登录会使用/etc/profile和~/.bashrc,视情况将如下的值保存在对应文件,使之生效。

  • man 高亮

  • 支持中文

  • root 账户登录警告

  • PS1

  • 设置 terminal tab 标题

shell command

对于Shell命令我们要区分bash 内置(bash built in )和GNU 开源软件包以及三方软件包。对于所有命令我们都可以尝试whereis 确定可执行文件、源码、和手册路径。

同时可以可以通过which确定当前环境变量下的命令位置

对于命令我们可以尝试通过 man 啃手册,当然也可也通过 -h或者--help 快速确定命令选项。不习惯在console 阅读文档,需要做一些笔记的命令。可以尝试其pdf文档。

还是区分bash 内置命令(bahs built in)和GNU软件包,以及三方软件包。

当然也有其他shell命令的归档文档http://tldp.org/LDP/abs/html/part4.html

http://linuxtools-rst.readthedocs.io/zh_CN/latest/base/01_use_man.html

  • QUOTING

    特殊转移字符;

  • Special Prameters

    描述$*、$@、$#……等特殊变量;

  • Parameter Variables

    描述${#a}变量操作的表达式;

linux cooling device

这里详细介绍并理解基于 allwinner a64 linux 下根据热量传感器 采集的温度用以自动调频 原理。

a64集两个热量传感器分别监控gpu和cpu温度。

挂载在sysfs数据属性

挂载sysfs 数据属性。

挂载在sysfs数据属性

/var/log/syslog 日志分析

如上日志表示基于cpu核心温度变化自动调节了cpu主频最大值。

如下代码片段设计:

  • 设计cpu压力测试(温度高会自自动调频);
  • 增加手动切换调频;
  • 实时打印温度、频率范围、当前频率值;
  • 可以尝试去掉cpu自动调频;

使用ubiqua ZigBee抓包

tools 目录保存1.3、1.4、2.2 版本,1.3直接双击UbiquaToolbox_1.3.2145.msi安装后选择同目录的 Ubiqua.exe覆盖安装目录。

最新版本2.2 暂时不支持破解,需要在官网下载并且在线申请评估版本试用。

  • 正常安装后通过选择Device->Add device... 添加抓包器(我们这里选择 TexasInstruments -> CC2531 );

  • 成功添加抓包设备后在Device Manager 显示设备,右键选择设置抓包信道、协议栈等信息,单击开始抓包;
  • 如果ZigBee使能网络加密和APS层加密功能,正常抓包无延时高亮,需要配置解密密钥。Tools->Options->Security->Add->ZigBee Network Key /Application or Trust Center link Key。

1.3和1.4 老版本安装出现此问题,看样纸是服务器是需要翻墙,同时直接访问官方也不能正常访问。

翻墙后正常。

cc2530 存储架构

在理解CC2530的51内核存储结构上面吃力了。先提出疑问,在swru191f-CC253xSystem-on-ChipSolutionfor2.4-GHz IEEE 802.15.4andZigBee® Application .pdf上面介绍如下的存储空间,但是确找不到对应的sram和256kb的flash 映射空间。

在CC2530的Dtasheet上面详细介绍了8051 CPU的存储架构

对于8051的CPU存储空间,区分以下4类;

  • CODE 只读存储空间,应用存储,64KB;
  • DATA 读写存储空间,单CPU指令周期读写,256个字节,低128字节支持直接或者间接访问,高128字节支持间接访问;
  • XDATA读写存储空间,访问周期在4-5个CPU指令周期,64KB,访问速度慢于 DATA空间,同时CODEXDATA共享一部分的公用总线,因为,CODE预取指和XDATA的访问不能并行。
  • SFR 可读写的特殊功能寄存器存储空间,支持单CPU指令周期直接访问,128字节,对于寄存器,划分为字节单位,直接位直接访问。

对于以上CODE和DATA存储空间需要特别注意

  • 方便DMA的获取,如上的 SRAM、8051 DATA SPACE、 XREG、8051 SFR SPACE被映射在XDATA的低30KB;
  • 2KB的INFORMATION PAGE 用以存储IEEE地址的信息;
  • 高32KB用以映射需...