自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

简单IoT

用简单的文字记录IoT开发相关过程,方法和工具

  • 博客(100)
  • 收藏
  • 关注

原创 Yocto动态软件包管理(Runtime Package Management)之:rpm和dnf

这篇文章会一步步教你如何使用Yocto的动态rpm包管理功能,以及相应的dnf工具。通过添加以下行来更改build/conf/local.confPACKAGE_CLASSES = "package_rpm"PACKAGE_FEED_URIS = "http://<local-machine-ip>:5678"EXTRA_IMAGE_FEATURES += " package-management "选择一个镜像编译,比如 core-image-full-cmdline$

2022-03-12 12:00:00 2018

原创 PLC(可编程逻辑控制器)里面的Modbus协议实现基本都过时了

可编程逻辑控制器(Programmable Logic Controller,PLC),一种具有微处理器的用于自动化控制的数字运算控制器,可以将控制指令随时载入内存进行储存与执行。在工业领域几乎到处都能看到它的身影,不过最近在项目中发现了绝大部分PLC里面的Modbus协议实现都已经过时了。事情是这样的,有个项目中需要用到第三方的PLC作为Modbus Client端来与我们的Linux工控机(当然作为Modbus Server端)通信,总线使用的是串口232/485,结果发现几乎所有的波特率(4800

2022-02-07 19:51:53 1151

原创 使用SecOC打造的CAN网络依旧很不安全

CAN总线天生没有安全功能CAN总线诞生的时候是完全没有考虑过信息安全问题的。明文传输、报文广播传输、极少网络分段、无内容校验等特性,让进入CAN网络的黑客如同进了游乐场,轻松便可以伪造报文对设备进行控制。CAN总线通讯的安全补丁为了提升CAN协议的安全性,博世在AutoSAR中补充了全称为Secure Onboard Communication(SecOC)的组件,为传统的CAN总线引入了一套通信认证的方法。假如搭载SecOC后,一次CAN通信就变成了如下过程,主要使用了密码技术里面的身份认证信息

2021-05-12 10:39:10 3925 6

原创 TCP连接卡在SYN_RECV状态:服务端忽略Ack数据包,并且重新传输 Syn Ack数据包

问题描述和初步分析这段时间在帮一个项目调试客户现场的网关离线问题,发现TCP连接时不时会卡在SYN_RECV状态:$ netstat -an | grep :80tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTENtcp 0 0 69.164.201.172:80 71.56.137.10:56657 SYN_RECVtcp 0 0

2021-04-09 19:49:23 8442

原创 使用正则表达式解决常见问题

数字数字在正则中用 \d 或 [0-9] 来表示。连续的多个数字,用 \d+ 或 [0-9]+表示。n 位数据,用 \d{n}表示。至少 n 位数据,用 \d{n,}表示。m-n 位数字,用 \d{m,n}表示。正数、负数和小数如果希望正则能匹配到比如 3,3.14,-3.3,+2.7 等数字,可以写成 [-+]?\d+(?:.\d+)?。非负整数,包含 0 和 正整数,可以写成[1-9]\d*|0。非正整数,包含 0 和 负整数,可以写成-[1-9]\d*|0。十六进制数十六

2021-03-13 10:47:21 425

原创 数据结构与对象

数据结构考虑代表 Person 的数据结构,其中包括名,姓和电话号码。这种数据结构在各种程序语言中看起来有何不同呢?C中代表 Person 的数据结构:struct Person { char firstName[20]; char lastName[20]; char phoneNumber[10];};在 Java 中,相同的数据结构可能看起来像这样:public class Person { public String firstName; public String

2021-03-05 19:14:30 876

原创 使用Yocto Project配置Qt5和Qt5 SDK

配置Qt5 SDK在Yocto里面配置Qt5 SDK(交叉编译工具链)的大致步骤如下:下载meta-qt5并添加到 bblayers.conf.在local.conf里面添加DISTRO_FEATURES_append = " opengl wayland "在your-custom-image.bb里面添加inherit populate_sdk_qt5为了解决后续使用SDK遇到的一个错误“…/sysroots/x86_64-phytecsdk-linux/usr/bin/qmlcachege

2021-02-20 19:11:59 4057

原创 Sonar Scanner 分析参数:即如何配置sonar-project.properties文件

可以在多个位置配置项目分析设置。下面是层次结构:在 UI 中定义的全局属性适用于所有项目(从顶部栏转到"管理>配置 >常规设置" )在 UI 中定义的项目属性覆盖全局属性值(在项目级别,转到项目设置> 常规设置)在项目分析配置文件定义的项目分析参数将覆盖 UI 中定义的参数分析/命令行参数,在启动分析时定义(使用命令行),"-D"覆盖项目分析参数全局和项目级别界面中显示的大多数属性也可以设置为分析参数,但下面列出的参数只能在分析时设置。强制参数服务器属性描述

2021-02-12 23:36:04 11690

原创 在 Ubuntu 系统中使用 BuildWrapper 和 SonarQube Scanner 分析一个C++项目

之前我们已经完成“在 Ubuntu 20.04 LTS 上安装SonarQube”,我们还需要安装BuildWrapper 和 SonarQube Scanner才能分析一个C++项目。安装BuildWrapper分析C/C++项目需要BuildWrapper,它运行构建并收集和分析 C/C++项目所需的所有配置(如宏定义,include目录等)。生成包装器不会影响构建过程,它只是窃听该过程,并写入你指定的文件中。你可以直接从SonarQube服务器(请确保使用的是商业版本)下载生成包装器,以便使其版

2021-02-05 12:58:48 1924 2

原创 在 Ubuntu 20.04 LTS 上安装SonarQube

介绍SonarQube是一个基于开源 Web 的工具,用于管理代码质量和代码分析。它最广泛地用于连续的代码检查,它会检测编程语言错误,代码味道和漏洞问题,编程语言如PHP,C#,JavaScript,C/C++和Java,检测以后还跟踪统计和创建图表,使开发人员能够快速识别代码中的问题。预先配置sonarqube official page 提到当前已经不支持MySQL,安装和运行SonarQube前需要在当前会话终端增加如下参数的值:sudo sysctl -w vm.max_map_count=

2021-01-29 20:06:17 3684 5

原创 C++: free(): double free detected问题分析和处理

最近在项目中遇到了“free(): double free detected”问题,出问题的代码类似于:#include <queue>#include <cstring>#include <iostream>using namespace std; class Test{ int *myArray; public: Test() { myArray = new int[10]; } ~Test() {

2021-01-22 11:02:02 16365

原创 将SVN仓库转换为Git仓库

首先下载git-svn工具:$ sudo apt install git-svn使用git svn clone命令开始转换:$ git svn clone URL --no-metadata -T trunk -b branches -t tagsgit svn clone 命令会把整个Subversion仓库导入到一个本地的Git仓库中。-T trunk -b branches -t tags告诉Git该Subversion仓库遵循了基本的分支和标签命名法则。如果你的主干(trunk,.

2021-01-15 20:13:51 1315

原创 使用GPL, LGPL和Zlib开源许可证的一些注意点

GPL(GNU General Public License)我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。GPL协议的主要内容是只要在一个软件中使用("使用"指

2021-01-08 19:32:58 4582

原创 使用LVM(逻辑卷管理)安装Ubuntu 18.04

进入U盘系统后使用LVM安装Ubuntu 18.04首先参考如何制作Ubuntu 18.04 LTS安装启动U盘制作一个Ubuntu18.04 LTS系统的U盘引导盘,然后从U盘启动进入Ubuntu 18.04系统,在这个只读系统里面使用LVM安装Ubuntu 18.04,和普通安装只有如下这一步有差异,需要勾选"Use LVM with the new Ubuntu installation",然后一路点击确认即可(安装完以后不要重启):减少LVM根文件系统大小前面安装LVM根文件系统会使用整个磁

2021-01-03 14:33:47 10919

原创 如何在Windows 10上创建和运行批处理(batch)文件

在Windows 10上,批处理文件是一个特殊的文本文件,通常具有.bat扩展名,并且包含一个或多个命令提示符可以理解并按顺序运行以执行各种操作的命令。通常,您可以在Windows 10上手动键入命令以执行特定任务或更改系统设置。但是,批处理文件简化了重新键入命令的工作,从而节省了时间和潜在的不可逆错误。下面是创建和运行批处理文件的一个示例打开VS Code在一个新建页面里面输入如下行:@echo offtitle windows 10 batch example:: Set web ser

2020-12-11 19:48:23 4126

原创 使用Zsh遇到的一个坑:没有换行符的输出多了一个百分号

这段时间项目中由于开源许可证问题,把Bash切换成了Zsh,结果发现了一个很有趣的问题,在Bash这个shell中,如果使用某个命令行来打印一串没有换行符的字符串,那么下一个提示符会附加到最后一个没有终止的行,如些所示:bash$ printf testXXXtestXXXbash$但是Zsh的处理方式就完全不一样了,默认自动给没有换行符的字符串添加一个百分号%,同时另起一行显示新的提示符:zsh$ printf testXXXtestXXX%zsh$不过我们可以在zshrc配置文件里面把

2020-12-04 20:25:09 4748 5

原创 基于Tornado搭建Web Server提供客户端上传文件和服务端文件下载功能

最近工作中遇到一个需求:搭建一个Web Server,客户端可以使用curl的post命令来上传文件,同时也要支持客户端直接从服务端硬盘里面下载大文件,于是用Tornado库搭建了一个简单的Web Server。提供客户端上传文件功能主要是下面的post()接口实现的,客户端使用curl的post命令上传文件就会被保存到服务端test/file。class POSTHandler(tornado.web.RequestHandler): def post(self): for

2020-11-28 16:22:51 1215

原创 正则表达式边玩边学

最近在学习极客时间的《正则表达式入门课》,感觉很适合入门玩,所以简单作一些笔记方便查找参考。正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。在编程语言中,正则常常用来简化文本处理的逻辑。在 Linux 命令中,它也可以帮助我们轻松地查找或编辑文件的内容,甚至实现整个文件夹中所有文件的内容替换,比如 grep、egrep、sed、awk、vim 等。另外,在各种文本编辑器中,比如 Atom,Sublime Text 或

2020-11-21 15:16:46 316

原创 最小特权原则(PoLP)

在信息安全,计算机科学和其他领域,最小特权原则(PoLP)要求在计算环境的特定抽象层中,每个模块(例如进程,用户或程序)必须只能访问对其合法目的必要的信息和资源。概述该原理意味着仅向用户帐户或进程授予执行其预期功能所必需的那些特权。例如,仅用于创建备份的用户帐户不需要安装软件:因此,它仅具有运行备份和与备份相关的应用程序的权限。其他任何特权(例如安装新软件)均被阻止。该原则也适用于通常使用普通用户帐户工作的个人计算机用户,并且仅在情况绝对需要时才打开受密码保护的超级用户权限。最小特权原则被广泛认为是一

2020-11-14 14:47:16 3641

原创 Vim一些实用技巧总结

跨会话撤销下面选项和配置使得 Vim 在重新打开一个文件时,仍然能够撤销之前的编辑(undo),这就会产生一个保留编辑历史的“撤销文件”(undofile)了。set undofileset undodir=~/.vim/undodirif !isdirectory(&undodir) call mkdir(&undodir, 'p', 0700)endif更快地移动用 vim -c ‘normal 5G36|’ 来执行跳转到出错位置第 5 行第 36 列。用 H(Hi

2020-11-07 14:44:26 611

翻译 有意思的Vim插件:vim-surround

这段时间玩Vim的时候发现了一个很有意思也很实用的插件vim-surround,于是就用vim-plug插件管理器快速安装试了下(如何使用vim-plun插件请参考我之前写的使用Vim 8.0搭建远程服务器端IDE),发现这个插件可以对括号,方括号,引号,XML标记轻松的进行删除,更改和添加,下面来看下示例以及我的实验:...

2020-10-31 14:19:01 1023

原创 Yocto-一些很有用的Bitbake构建调试命令

https://elinux.org/Bitbake_Cheat_Sheethttps://subscription.packtpub.com/book/virtualization_and_cloud/9781788399210/1/ch01lvl1sec27/debugging-the-build-systemhttps://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/Useful-bitbake-commands/ta-p/1128559

2020-10-23 20:32:05 4399

原创 使用TFTP,U盘或者NFS来调试内核

安装和配置TFTP server首先在Ubuntu系统安装TFTP server# sudo apt-get install tftpd-hpa配置TFTP server,修改/etc/default/tfptd-hpaTFTP_DIRECTORY="/tftpboot"创建tftpboot目录# sudo mkdir /tftpboot# sudo chmod -R 777 /tftpboot重启TFTP server# sudo /etc/init.d/tftpd-hpa res

2020-10-16 19:46:36 451

原创 Linux系统和程序中的DEP和ASLR保护机制

你好

2020-10-07 16:39:43 3469

翻译 为什么网络安全对物联网(IoT)很重要

物联网和连接设备的持续增长(Gartner预测,到2020年结束,全球将使用204亿个连接物),导致数据呈指数级增长-有望使家电更智能,过程更高效,生活更轻松。尽管这种大规模生成和收集数据肯定有很大的好处,但轻松访问数据也带来了更多的漏洞-不安全的IoT设备给个人和公司信息带来了严重的风险。出于多种原因,保护物联网设备的安全具有挑战性。越来越多的小工具正在成为智能设备,并且随着制造商更快地推出新产品,很可能将安全性放在低优先级,因为这些制造商的重点在于上市时间和投资回报率指标。消费者和企业对于网络安全缺乏

2020-09-05 19:49:07 966

原创 Yocto边玩边学:BitBake中的优先选择变量PREFERRED_PROVIDER

当有多个菜谱提供同一个项目时,BitBake会使用PREFERRED_PROVIDER来优先选择其中一个菜谱。你需要在变量后缀指定被提供项目的名称,并将其设置为你想优先使用的配方的PN。这里是一些例子: PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto" PREFERRED_PROVIDER_virtual/xserver = "xserver-xf86" PREFERRED_PROVIDER_virtual/libgl ?=

2020-08-29 14:35:35 3039

原创 为什么工程师需要提高沟通技巧

为什么工程师需要提高沟通技巧《人性的弱点》中卡耐基列出过详细的研究数据来证明人的收入只有15%是由技术和专业能力决定的(即使是在工程技术行业),而另外的85%是由与他人沟通的能力决定的。大多数人(包括我们自己)对软件工程师的印象就是写代码。 事实上,在软件开发领域,我们很多时候都需要和人打交道,而不是计算机。而且工程师写的代码首先是给人看的,最后才是让计算机理解。如果不是这样的话,我们干脆把代码写成0或者1这样的机器码好了。所以,如果想成为一个出色的软件工程师,就需要提高我们的沟通技巧,比如成为一个演讲

2020-08-21 19:15:35 2153 1

原创 Yocto边玩边学:BitBake中的条件变量-OVERRIDES

BitBake 使用 OVERRIDES 来控制在 BitBake 解析食谱和配置文件后去覆盖哪些变量。下面会描述如何把 OVERRIDES 用作条件元数据,并且讨论与 OVERRIDES 有关的关键字展开,同时提供一些示例来帮助理解。条件变量元数据我们可以用OVERRIDES来有条件地选择变量的特定版本,以及有条件地附加或添加变量的值。注意:OVERRIDES名称(值)只能使用小写字符。另外,名称中不允许使用下划线,因为它们用于将OVERRIDES与其他名称和变量名称分开。选择一个变量:OVE

2020-08-15 13:33:17 2745 1

原创 技术管理实战学习笔记(四)

继续学习极客时间上面刘建国(前百度最佳经理人)撰写的的技术管理实战36讲。最后学习的是“管理沟通篇”和“管理之路篇”,主要是讨论无处不在的管理沟通,以及总结出适合自己的管理之路。下面是我的学习总结。首先是“管理沟通篇”:管理沟通那些事儿为什么技术管理者们认为管理沟通是如此地挑战?尤其对于向上沟通会如此地头疼呢?先看下面的四项工作有什么特点:技术开发工作:使用电脑、学习语言、设计算法、开发功能、遵循规范……项目管理工作:明确需求、制定计划、把控流程、推动执行、通报进展……和下级合作:分配任务、跟

2020-08-05 18:22:04 506

原创 技术管理实战学习笔记(三)

继续学习极客时间上面刘建国(前百度最佳经理人)撰写的的技术管理实战36讲。目前学习“团队建设篇”和“任务执行篇”,主要是关于回答“带人”和“做事”过程中遇到的一些问题,下面是我的一些学习笔记。首先是“团队建设篇”:团队建设该从哪里入手?为了容易理解,再次搬出作者前面提到的“马车模型”,总结出了团队建设时 6 个维度的工作要素:针对员工个体的两个要素是:能力和激励;针对员工个体之间的两个要素是:分工和协作;针对团队整体的两个要素是:梯队和文化。如何提升员工的个人能力?作为管理者,你应该如何

2020-07-31 00:08:48 766

原创 技术管理实战学习笔记(二)

这周继续学习极客时间上面刘建国(前百度最佳经理人)撰写的的技术管理实战36讲。目前学习“角色认知篇”和“管理规划篇”,主要是关于回答技术管理里面的WHAT以及刚开始带团队从哪里入手的问题,下面是我的一些学习笔记。首先是“角色认知篇”:管理都做哪些事呢?作者先列举了管理学历史上的几位泰斗人物的一些真知灼见,比如:古典管理理论的代表人物亨利·法约尔,“科学管理之父”弗雷德里克·泰勒,“现代管理学之父”彼得·德鲁克,当代管理大师斯蒂芬·罗宾斯。总结出管理最重要三要素:看方向、带人和做事。接着用“马车模型”

2020-07-25 12:05:17 396

原创 技术管理实战学习笔记(一)

“知道为什么而活的人,便能生存”——这句尼采说的话,被弗兰克尔在《活出生命的意义》一书中多次引用。他在奥斯维辛集中营中无时无刻不牵挂着自己的妻子,也不断梦想着战后能够到各地展开心理方面的专题讲座,怀着强烈的求生欲望,他积极抵抗集中营里的极度痛苦并存活下来,最终创立了维也纳第三心理学派:意义疗法。最近对“技术管理”越来越感兴趣,所以开始学习极客时间上面刘建国(前百度最佳经理人)撰写的的技术管理实战36讲。目前学习的开篇词和“自我倾听篇”主要是关于回答技术管理里面的WHY的问题,理顺新经理内心的纠结与焦虑,让

2020-07-18 20:05:23 6664

翻译 CMake教程(三)

混合静态和共享库(步骤9)在本节中,我们将展示 BUILD_SHARED_LIBS 变量可用于控制默认行为 add_library(),并控制在没有显式类型库(控制STATIC, SHARED,MODULE或OBJECT)的情况下如何构建库的。为此,我们需要添加 BUILD_SHARED_LIBS到顶层CMakeLists.txt。我们使用option() 命令,因为它允许用户选择该值是ON还是OFF。接下来,我们将重构MathFunctions使其调用封装的真实库mysqrt或sqrt,而不是要求调

2020-07-11 23:27:34 2416

翻译 CMake教程(二)

安装和测试(步骤4)现在,我们可以开始向项目添加安装规则和测试支持。安装规则安装规则非常简单:对于MathFunctions,我们要安装库和头文件,对于应用程序,我们要安装可执行文件和配置的头文件。因此,我们在MathFunctions/CMakeLists.txt最后添加:install(TARGETS MathFunctions DESTINATION lib)install(FILES MathFunctions.h DESTINATION include)并在顶层CMakeLists

2020-07-04 15:24:36 487

原创 如何把本地代码目录推送到远程Git存储库

If you already have code ready to be pushed to this repository then run this in your terminal.cd existing-projectgit initgit add --allgit commit -m "Initial Commit"git remote add origin Git_Server_URLgit push -u origin masterIf your code is already

2020-06-13 14:25:19 634

原创 如何按大小排序列出当前目录下(包含子目录)的所有文件

如果我们需要在当前目录下,按大小从大到小的顺序列出所有文件(包括子目录下的所有文件),那么这里推荐两个方法。方法一:使用zsh和GNU ls如果你使用的是zsh(https://simpleiot.blog.csdn.net/article/details/102490854),那么可以使用如下命令:ls -ldU – **/*(.OL)其中(.OL)有一个glob限定符(http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Quali

2020-06-04 19:54:09 4929

翻译 CMake教程(一)

CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile 或者 project 文件,能测试编译器所支持的 C++ 特性,类似 UNIX 下的 automake 。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用

2020-05-28 17:35:32 718

原创 Yocto:解决“QA Issue: Package version for package went backwards which would break package feeds”

Yocto:解决“QA Issue: Package version for package went backwards which would break package feeds”最近项目需要在Yocto里面回退一个软件包到比较旧的版本,而新版本的软件包已经生成了cache,这样在编译的时候就会遇到如下错误:QA Issue: Package version for package went backwards which would break package feeds主要原因是:如果启用

2020-05-24 12:33:40 2549

原创 移植u-boot问题:include/config.h:6:10: fatal error: configs/.h: No such file or directory

在移植新的uboot 2019到i.MX6UL平台的时候遇到了如下编译问题:$ make mx6ul_14x14_evk_defconfig## configuration written to .config#$ make u-boot.imx scripts/kconfig/conf --syncconfig Kconfig CHK include/config.h UPD include/config.h CFG u-boot.cfg GEN

2020-05-16 14:02:27 5436 2

原创 在Ubuntu 18.04上设置DHCP服务器

由于需要给开发板自动分配IP地址,所以需要在Ubuntu 18.04上安装和配置dhcp服务器。我们将要安装isc-dhcp-server,设置IP范围,该范围将被用于DHCP服务器为客户端提供IP,并为具有特定MAC地址的客户端分配固定的IP地址。步骤1:安装DHCP服务器我们需要做的第一件事是通过运行以下命令来安装dhcpd服务器:sudo apt install isc-dhcp-se...

2020-04-30 19:17:20 5847 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除