- 博客(129)
- 收藏
- 关注
原创 rk3588-ubuntu22.04系统网关实现路由器功能:
如果网关 和 设备所处的环境可以通过网线联网或者路由器联网,那么不需要将网关配置成路由器的模式,可以直接通过插入网线,实现互联互通。
2024-12-10 16:21:29
1067
原创 通过openVPN实现远程plc设备(方案二)(ubuntu22.04系统网关作为客户端):
openvpn还可以根据配置信息完成更复杂的配置,比如将某个客户端所在网络的其它网络加入到整个 VPN 大网络中。整体对配置总结如下:1.服务端路由的作用是配置当前 VPN 服务器的路由信息,在配置文件中声明的路由将加入到 VPN 服务端的路由表中,以达到当 VPN 服务器接收到目标地址的数据转发时,将数据交给 VPN 服务来处理。2.路由下发中配置的路由将下发给客户端,客户端在接收到下发的路由后,更新本地路由表,符合路由表的数据将转发给VPN 服务端3.ccd下的文件必须与客户端名称相同。
2024-12-09 17:15:50
1055
原创 RK3568/RK3588之修改8250驱动实现RS485收发的自动切换
在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。
2024-11-22 15:30:11
1452
原创 rk3588-ubuntu22.04系统网关利用openVPN和frp实现VPN远程访问PLC设备的程序上传下载
第一阶段:在ubuntu22.04的网关上部署openVPN服务端;第二阶段:利用frp将openVPN监听的服务端端口映射到腾讯云服务器上;第三阶段:在远程windows的PC机上安装openVPN的客户端,形成同一局域网;第四阶段:在ubuntu22.04上调整路由转发,使得远程PLC上位机成功访问PLC设备;
2024-11-22 11:24:52
1057
原创 Linux驱动开发2:字符设备驱动之我的第一个字符设备Linux驱动开发模板
Linux驱动开发2:字符设备驱动之我的第一个字符设备Linux驱动开发模板在本章节,我们从Linux驱动开发中最基础的字符设备驱动开发开始,重点学习Linux下字符设备开发框架,本章会以一个虚拟的设备为例,讲解如何进行Linux字符设备驱动开发,以及如何编写测试APP来测试驱动开发是否正常,为以后的学习打下坚定的基础;1.应用程序和驱动的交互原理:驱动就是获取外设,或者传感器的数据,以及控制外设,数据会提交给应用程序;在编写Linux驱动的时候,既要编写驱动,也要编写一个简单的应用程序app;单片
2021-08-04 03:55:40
610
1
原创 Linux驱动开发1:驱动开发与裸机开发的区别
Linux驱动开发1:驱动开发与裸机开发的区别1.裸机驱动开发回顾:裸机驱动开发是非常底层的,跟寄存器打交道,有些MCU为了方便我们开发,提供了一些库,让我们通过调用API函数来间接的实现利用寄存器来控制我们的裸机外设;2.Linux驱动开发思维:首先,Linux驱动来直接操作寄存器是不现实的;我们Linux驱动开发需要做的是:根据Linux的驱动框架来进行开发,也就是需要掌握各种Linux驱动框架;Linux驱动最终表现为:/dev/***文件:能够打开,关闭,读写等操作;现在的内核支持设备
2021-08-02 23:17:36
1748
原创 C++的基础使用:C++语言的新特性及面向对象
C++的基础使用:C++语言的新特性及面向对象在第二章 C++基础里,这里主要介绍概念为主,主要介绍 C++与 C 语言中常用的不同点,和一些新的变化。其中不会去说指针、数据类型、变量类型、判断和循环等这些知识,这些和C 语言基本是一样使用的。我们主要学习 C++的面向对象编程,对学习 Qt 有很大的帮助;Qt 里就能体现到 C++编程带来的优势和便处。就算没学过 C++,学习 Qt 也不会很难。写 C++基础这章,编者已经把重要概念写出来,但是实际上 C++的内容不止这么多,第二章是快餐式 C++入门
2021-08-02 03:17:55
530
原创 系统移植篇1:系统移植简介
系统移植篇1:系统移植简介对于一个开发板,在我们手中,我们要将其发挥的淋漓尽致,我们不能停留在裸机开发的层次,为了世界的和平,我们需要从驱动层去充分利用我们的开发板,在我们掌握了基本外设的底层原理之后,进行Linux开发的时候就只需要将精力...
2021-06-15 15:15:47
715
原创 嵌入式Linux C代码规范和风格
嵌入式Linux C代码规范和风格本文档为作者在嵌入式和嵌入式 linux C 语言的学习和工作中所总结的代码规范,是作者从 STM32 单片机开发向 Linux C 开发的时候为了摆脱遗留的编码规范陋习而编写的。因此,本文档主要面向 Linux C,会根据实际情况兼容单片机的开发。文档主要以 Linux 源码下的 CodingStyle 文档为蓝本而编写,本文档主要是为了解决作者的实际需求,并不能照顾到所有的开发人员,因此编码规范可能不适合某些程序员朋友。参考:1 、Linux 源码下的《 《C
2021-06-11 14:26:35
987
3
原创 Linux常用命令8:Linux文件内容操作---cat命令详解
Linux常用命令8:Linux文件内容操作—cat命令详解说明:cat,是单词 concatenate 的缩写, 把文件的内容输出到stdout.当与重定向操作符 (> 或着>>结合使用时, 一般都是用来将多个文件连接起来.用法:$cat file1 file2 file3不仅可以从文件中读取内容并且拼接,还能从标准输入流中读取例如:$echo ‘some content’ | cat - file.txt解释:这里的 - 就代表了 ‘some content’ 的
2021-06-02 16:11:11
503
转载 Linux常用命令7:Linux shell if [ -n ] 正确使用方法
Linux常用命令7:Linux shell if [ -n ] 正确使用方法if [ str1 = str2 ] 当两个串有相同内容、长度时为真 if [ str1 != str2 ] 当串str1和str2不等时为真 if [ -n str1 ] 当串的长度大于0时为真(串非空) if [ -z str1 ] 当串的长度为0时为真(空串) if [ str1 ] 当串str1为非空时为真shell 中利用 -n 来判定字符串非
2021-06-02 15:42:51
1972
转载 Linux常用命令6:Linux文件测试操作
Linux常用命令6:Linux文件测试操作1.文件测试操作:返回 true 如果...-e 文件存在-a 文件存在这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用-f file 是一个 regular 文件(不是目录或者设备文件)-s 文件长度不为 0-d 文件是个目录-r 文件具有读权限(对于用户运行这个 test)-w 文件具有写权限(对于用户运行这个 test)-x 文件具有执行权限(对于用户运行这个 test)2.整数比较:-eq 等于,如:if
2021-06-02 15:37:16
728
原创 工具之外,如何高效的阅读代码?
工具之外,如何高效的阅读代码?阅读软件源代码是每个开发者的必由之路,尤其是内核开发者。因为内核开发在很大程度上并不是重新发明轮子,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。就我的个人经验来说,阅读代码与编写代码的时间大概是6 : 4。自由软件的开发与商业软件相比,有一个很大的不同就是文档相对比较缺乏。但同时有一种说法叫做“代码就是最好的文档”——只要你愿意,
2021-06-01 16:10:36
303
原创 树莓派开始,玩转Linux30:树莓派网络诊断
树莓派开始,玩转Linux30:树莓派网络诊断通过对网络协议的介绍,我们已经了解了互联网通信的基本原理。互联网让树莓派变得更加强大。但这也意味着,网络问题会让人非常恼火。下面介绍树莓派常用的网络诊断命令,它们能帮助我们发现网络问题。1.基础工具:网络诊断的第一步是了解自己的设备,比如有哪些接口,IP地址都是什么。使用下面的命令来显示网络接口(Interface)信息,如接口名称、接口类型、接口的IP地址、硬件的MAC地址等。ARP协议用在局域网内部。借用ARP协议设备可以知道同一局域网内的IP-M
2021-05-26 14:24:14
628
1
原创 树莓派开始,玩转Linux29:遍阅网络协议
树莓派开始,玩转Linux29:遍阅网络协议前面的章节专注于计算机的内部,从这一章起转向计算机的外部,即网络功能。互联网的诞生晚于计算机,但它的发展极为迅速。通信协议模块,已经成为计算机操作系统密不可分的一部分。本章介绍网络协议的基础知识。1.通信与互联网协议:通信是一件奇妙的事情,它让信息在不同的个体间传递。动物散发着特殊的气味,传递着求偶信息。人则说着甜言蜜语,向情人表达爱意。猎人吹着口哨,悄悄地围拢猎物。服务生则大声向后厨吆喝,要加两份炸鸡和啤酒。红绿灯指挥着交通,电视上播放着广告,法老的金字塔
2021-05-26 14:04:57
392
4
原创 树莓派开始,玩转Linux28:分级存储
树莓派开始,玩转Linux28:分级存储树莓派上的三种电子元件都有存储数据的功能:CPU缓存、内存和SD卡储存,如表所示。三种元件的速度和容量各不相同。存储元件的容量和速度是个矛盾。为了兼顾性能和成本,计算机大多采取分级存储的形式,从而让不同速度的存储元件协同工作。分级存储的设计,兼顾了读取速度、存储容量和计算机的稳定性。树莓派3B型的各项储存器指标:1.CPU缓存:计算机把最快的存储元件用在最繁忙的地方。CPU是树莓派执行程序的核心,我们编写的程序和需要处理的各种数据都要加载到CPU中才能执行。
2021-05-26 13:41:47
563
原创 树莓派开始,玩转Linux27:鸟瞰文件树
树莓派开始,玩转Linux27:鸟瞰文件树在本章自下而上地介绍了外部存储器的底层细节。本章将自上而下,鸟瞰完整的Linux文件树。直接从属于根目录/的文件和目录都是系统必备的关键内容。我们来看它们的功能。1./boot和树莓派启动:/boot下挂载了FAT32格式的启动分区,里面的文件用于树莓派的开机启动。计算机启动是一个神秘而有趣的过程,先来看计算机常见的启动方式。当我们打开一台普通计算机的电源时,计算机一般会自动从主板的BIOS上读取其中所存储的程序。BIOS知道直接连接在主板上的硬件。它从默认
2021-05-26 13:10:55
287
原创 系统移植篇01:U-boot使用实验的准备
系统移植篇01:U-boot使用实验的准备在移植U-Boot之前,我们肯定要先使用一下U-Boot,得先体验一下U-Boot是个什么东西。I.MX6U-ALPHA 开发板资料里面已经提供了一个已经移植好的 U-Boot,本章我们就直接编译这个移植好的 U-Boot,然后烧写到 SD 卡里面启动,启动 U-Boot 以后就可以学习使用 U-Boot 的命令。1.U-boot简介:Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。
2021-05-24 17:18:30
422
2
原创 系统移植篇00:系统移植简介
系统移植篇00:系统移植简介在上一篇中我们学习了如何进行 I.MX6U 的裸机开发,通过 21 个裸机例程我们掌握了I.MX6U 的常用外设。通过裸机的学习我们掌握了外设的底层原理,这样在以后进行 Linux 驱动开发的时候就只需要将精力放到 Linux 驱动框架上,在进行 Linux 驱动开发之前肯定需要先将Linux 系统移植到开发板上去。如果学习过 UCOS/FreeRTOS 应该知道,UCOS/FreeRTOS 移植就是在官方的 SDK 包里面找一个和自己所使用的芯片一样的工程编译一下,然后
2021-05-24 17:03:07
361
原创 树莓派开始,玩转Linux26:仓库大管家
树莓派开始,玩转Linux26:仓库大管家在前面的章节中,我们已经用到了Linux的文件系统。通过文件系统,可以找到文件、新建文件、删除文件、读写文件。这些高层抽象的用户操作,完全可以满足日常需求。但对于Linux程序员和资深用户来说,只有知道了外部存储器的组织方式,才能深入Linux系统编程。1.外部存储设备:文件系统的终极目标是把大量数据有组织地放入外部存储设备中,比如树莓派的SD卡上。以SD卡作为外部存储器的计算机并不常见。在非树莓派的PC上,更常见的外部存储器是磁盘。外部存储设备的容量一般也比
2021-05-24 16:30:20
319
3
转载 计算机网络从0-1(总结篇)
计算机网络从0-1(总结篇)在这篇文章中,我就是一台电脑,我的名字叫:哒宰在盘古开天辟地之前,我不与其他任何电脑相连,孤苦伶仃。哒宰
2021-05-23 23:44:02
647
1
原创 树莓派开始,玩转Linux25:内存的一页故事
树莓派开始,玩转Linux25:内存的一页故事在讨论进程时,不免要提到内存。内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。本章从内存的物理特性出发,深入内存管理的细节,着重介绍了虚拟内存和内存分页的概念。1.内存:简单地说,内存就是一个数据货架。内存有一个最小的存储单位,大多数都是一个字节。内存用内存地址(Memory Address)来为每个字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存地址从0开始,每次增加1。这种线性增加的存储器地址称为线性地址(Lin
2021-05-20 11:53:00
277
原创 树莓派开始,玩转Linux24:进程调度
树莓派开始,玩转Linux24:进程调度进程是一个虚拟出来的概念,用来组织计算机中的任务。但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失。不过,进程的生命都得到了操作系统内核的关照。就好像疲于照顾几个孩子的母亲,内核必须做出决定,如何在进程间分配有限的计算资源,最终让用户获得最佳的使用体验。内核中安排进程执行的模块称为调度器(Scheduler)。本章将介绍调度器的工作方式。1.进程状态:调度器可以切换进程状态(Process State)。一个Li
2021-05-13 16:36:05
496
2
原创 树莓派开始,玩转Linux23:多任务与同步
树莓派开始,玩转Linux23:多任务与同步上一章提到了IPC,实际上它涉及一个关键问题:计算机的并发性。Linux系统是一个支持并发(Concunrrency)的操作系统。并发系统可以同时执行多个任务。多个进程通过IPC的数据沟通,可以合作完成一个复杂任务。然而,并发系统并不简单,必须解决同步的问题。1.并发与分时:在过去很长时间里,计算机使用的都是单核CPU。每个时刻,单核的CPU只能执行一条指令。从指令的角度看,单核CPU计算机不能并发。但单核CPU计算机可以同时运行多个任务。这种并发是通过
2021-05-13 15:53:47
1103
原创 树莓派开始,玩转Linux22:进程间的悄悄话
树莓派开始,玩转Linux22:进程间的悄悄话有了进程空间的概念,我们可以看到进程的独立性。每个进程的数据停留在自己的进程空间里,互不干涉。这样的独立性,让每个进程可以专注于自己的任务,大大减少了进程间相互干扰而出错的可能性。然而,有的时候,我们又需要打破这种独立性,让进程之间分享数据,从而协调工作。这个时候,就需要进行进程间通信(IPC,Inter-processCommunication)。1.管道:从广义上说,任何能在进程间传送信息的方式都属于IPC。我们先来回顾一些已经接触过的IPC的方式。一
2021-05-13 15:00:50
280
原创 树莓派开始,玩转Linux21:进程的生与死
树莓派开始,玩转Linux21:进程的生与死操作系统把计算机活动划分成进程。程序员编写的程序,也必须运行成进程,才能出现实际效果。既然进程在计算机活动中拥有如此关键的地位,那么我们理应更深入地了解进程。本章将介绍进程的创建和终结,以及与之相关的进程权限。1.从init到进程树:计算机开机时,Linux内核只创建了一个名为init的进程。在Linux运行期间,会有很多其他新进程,如Shell进程、音乐播放程序进程、邮件程序进程等。Linux内核不直接创建其他新进程,除了init进程之外的所有进程,都是通
2021-05-13 12:01:14
389
2
原创 网络基础知识详解(图解版)
网络基础知识详解(图解版)1.网络协议:我们用手机连接上网的时候,会用到许多网络协议。从手机连接 WiFi 开始,使用的是 802.11 (即 WLAN )协议;手机自动获取网络配置,使用的是 DHCP 协议。这时手机已经连入局域网了,可以访问局域网内的主机和资源,但还不能使用互联网应用,例如:微信、抖音等。想要访问互联网,还需要在手机的上联网络设备上进行配置,即在无线路由器上配置 NAT、 PPPOE 等功能,才能把局域网接入到互联网中,手机就可以上网玩微信、刷抖音了。局域网 :小范围内的
2021-05-10 16:05:44
17569
3
原创 浏览器请求数据包如何到达web服务器(图解版)
浏览器请求数据包如何到达web服务器(图解版)浏览器的请求数据包如何到达web服务器?很多读者对于其中的完整流程不是特别的了解,下面通过这22张图,详细的讲解我们点击浏览器的网址之后,数据包是如何经过重重险阻到达web server的。LAN网络中的用户要访问位于远程网络中的服务器存储的网页。用户首先激活网页上的链接。如果该域名对应的IP地址本地已经缓存,就直接访问该地址的80端口或者8080端口;如果没有缓存,那么浏览器会发出DNS请求给DNS服务器,获得该域名对应的IP地址。获得地址后,浏
2021-05-10 14:10:50
516
原创 树莓派开始,玩转Linux20:穿越时空的信号
树莓派开始,玩转Linux20:穿越时空的信号如果说操作系统是一栋大楼,那么内核就是这栋大楼唯一的管理员,应用程序的进程就是大楼里的房客。一般情况下,进程躲在自己的房间里,专注于自己的事情,而不必考虑其他进程。但有的时候,进程也要打破封闭,相互交流。信号就是一种向进程传递信息的方式。1.按键信号:在Shell中可以通过快捷键Ctrl+C来中断正在运行的进程,或者用快捷键Ctrl+Z来中止进程。按下这些按键时,Shell都向进程发出了信号。进程捕捉到这些信号后,会根据信号的含义来执行特定的动作,如结束进
2021-04-29 17:10:19
265
原创 树莓派开始,玩转Linux19:函数调用与进程空间
树莓派开始,玩转Linux19:函数调用与进程空间在Linux中,应用程序位于整个架构的顶层。应用程序的进程会获得一块独立的内存空间,即进程空间。C语言中变量的相关操作实际上就作用于进程空间。应用程序大部分是面向过程的C语言编写的,因此进程空间的使用也受到面向过程思维的影响。这里将用一章的篇幅来讲解进程空间的结构。1.函数调用:函数是面向过程语言提供的抽象语法,也是C语言区别于指令式程序的关键。在程序中,要先定义函数,然后才能调用函数。函数定义中说明了在函数调用发生时,进程应该做哪些事情。我们先
2021-04-29 16:38:37
332
原创 树莓派开始,玩转Linux18:完整架构
树莓派开始,玩转Linux18:完整架构Linux系统可以分为内核和应用程序两个主要部分,但如果细分,内核和应用程序之间,还可以有更精细的模块划分。完整的Linux系统架构,如图所示,下面分别来看Linux架构中的不同部分。1.内核模式与系统调用:计算机启动之后,Linux的内核程序启动成为一个单一的内核进程。这个单一进程将执行内核的相关功能。内核进程有权调用所有的计算机资源。当应用程序运行时,内核会分配给该应用程序一定的计算机资源。应用程序与硬件之间的互动,也必须经由内核进行。因此,即使是一个应用
2021-04-29 16:07:07
427
原创 树莓派开始,玩转Linux17:会编程的bash
树莓派开始,玩转Linux17:会编程的bashbash是一个命令解释器。在前面章节中介绍了在bash中输入命令,它会把输入的命令转化为特定的动作。本章将介绍bash的可编程性。bash提供了某些类似于C语言的编程语法,从而允许你用编程的方式,来组合使用Linux系统。1.变量:正如我们在C语言中看到的,变量是内存中的一块空间,可以用于存储数据。我们可以通过变量名来引用变量中保存的数据。借助变量,程序员可以复用出现过的数据。bash中也有变量,但bash的变量只能存储文本。1.变量赋值bash和C
2021-04-29 15:03:07
566
1
原创 树莓派开始,玩转Linux16:我的地盘我做主
树莓派开始,玩转Linux16:我的地盘我做主Linux是一个多用户系统。多个用户可以同时登录同一台Linux电脑,同时使用,互不干扰。因此,我们必须考虑到用户隐私和用户权限的问题。Linux从UNIX继承来一套用户系统,这套用户系统通过用户权限的设置,可以有效地保护用户隐私,并防止用户进行越权操作。1.我是谁:Linux用户登录时,输入了自己的用户名和密码。用户名是一串可读的文本,比如"pi"。作为惯例,用户名第一位是一个英文字母,后面可以跟随一串英文字母、数字或符号"-"。如果用户登录通过,那么
2021-04-29 12:01:29
269
原创 树莓派开始,玩转Linux15:万物皆是文本流
树莓派开始,玩转Linux15:万物皆是文本流数据是计算机最宝贵的财产。在Linux中,文本流(Text Stream)是不同程序、不同文件之间的数据桥梁。通过这一数据桥梁,Linux的不同模块之间可以方便地进行协作。文本流是UNIX阵营的一大特征,也是UNIX系统备受称赞的一个设计。1.文本流:在计算机中,所谓的数据就是0或1组成的二进制序列,每个0或1占一位。Linux系统对0和1的序列进行了分割,以字节(Byte)来作为数据单位。一个字节对应八位。比如下面一个八位的二进制序列就是一个字节:0
2021-04-29 11:31:17
283
原创 树莓派开始,玩转Linux14:从程序到进程
树莓派开始,玩转Linux14:从程序到进程计算机不止是存储数据的仓库,它还可以进行多种多样的活动,比如收发电子邮件、播放电影、陪人们下棋。应用程序给计算机带来了丰富的动作。Linux系统在应用层面的活动都以"进程"为单位进行。本章我们将初探进程。1.指令:计算机实际上可以做的事情非常简单。我们给CPU发出指令(Instruction),CPU就会执行这些基础动作。指令通常由一串二进制的序列构成。CPU会识别并执行这些指令。每一款CPU都有一套指令集,比如ARM CPU使用的精简指令集。一条指
2021-04-29 11:05:05
679
3
原创 树莓派开始,玩转Linux13:你好,文件
树莓派开始,玩转Linux13:你好,文件对于计算机来说,所谓的数据就是0和1的序列。Linux上的文件提供了数据存储的基本单元。此外,文件还以目录的形式组织起来,以便用户能迅速找到所需数据。本章将深入了解文件的组织方式。1.路径与文件:文件和文件组织构成了一个文件系统(File System)。Linux的文件系统是一个树状结构,整个文件系统有个共同的起点,就是树状结构的顶端,如图所示。Linux把这个起点称为根目录(RootDirectory),用符号/表示。文件树的末端可能是一个普通文件,
2021-04-29 10:43:09
267
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人