自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)

总结起来,PAP适用于对安全性要求不高的场合,如某些无需高度保密的拨号连接场景;而CHAP则广泛应用于对安全性要求较高的网络环境,尤其是在需要保护密码和防范中间人攻击的场合。由于CHAP的特性,现代网络通信中更倾向于选择CHAP或其他更安全的身份验证协议。PAP,即密码认证协议,是一种简单的链路层身份验证协议,主要用于点对点协议(PPP)中。

2024-04-19 17:01:27 383

原创 Linux进程间通信的方式汇总

这些通信方式各有特点,可以根据具体的应用场景和需求来选择合适的通信方式。

2024-04-19 08:53:48 701 1

原创 Linux用户态/内核态通信方式汇总

用户态和内核态之间的通信方式主要有以下几种:系统调用(System Call):这是最常见的方式,用户态程序通过系统调用接口(如open、read、write、fork等)请求内核执行特定的动作。系统调用是用户态和内核态之间进行交互的桥梁,它允许用户态程序请求内核提供服务。中断(Interrupts):中断包括软中断和硬中断。当中断到来时,CPU会暂停当前执行的用户态代码,切换到内核态来处理中断。中断机制允许内核在适当的时候介入用户态程序的执行,处理一些紧急或特殊的情况。

2024-04-19 08:52:50 1264

原创 常见拨号类型

L2TP拨号利用L2TP协议和隧道技术在公共网络上建立安全的VPN通道,实现远程用户对私人网络资源的访问。它通过封装和传输第二层数据,确保了数据的完整性和安全性。同时,结合IPSec等安全机制,可以进一步提高数据传输的安全性。然而,在选择使用L2TP拨号时,需要根据具体需求和网络环境进行评估和配置。

2024-04-17 15:39:10 983

原创 Port Forwarding和Port Trigger的异同点

端口转发

2022-10-20 08:47:51 448 1

原创 QoS简介

因为网络传输的资源是有限的,网络设备,比如CPU,switch等网络传输设备传输能力有限,报文缓存空间有限,当网络流量达到限制时,就会发生取舍的问题,取的是需要保证质量的服务,舍的是不需要保证质量的服务,因此QoS一般会对应高优先级服务和低优先级服务。边界路由器可以通过多种条件(比如报文的源地址和目的地址、ToS域中的优先级、协议类型等)灵活地对报文进行分类,然后对不同类型的报文设置不同的标记字段,而其他路由器只需要简单地识别报文中的这些标记,然后对其进行相应的资源分配和流量控制即可。

2022-10-10 17:44:56 3118

原创 Linux下tftp服务器/客户端安装

tftp是常见的网络传输协议,可以很方便地进行文件传输。这里基于Linux主机安装tftp服务器端和客户端。配置修改如下(修改TFTP_DIRECTORY为本机tftp目录的绝对路径)检查网络是否连通正常,如用ping工具,留意防火墙是否打开,如果是,请关闭。新建配置文件(TFTP_DIRECTORY为本机tftp目录的绝对路径)平台为ubunt 14.04和16.04。重启tftp server端。......

2022-08-04 11:50:25 1712

原创 日志输出到串口方法(嵌入式设备)

提供一版将日志输出到串口/dev/console的方法,不可重定向。同时也可以输出到文件,文件限定最大行数。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#include <unistd.h>#include <stdarg.h>#define print(fmt, args...) printf("\033[1m

2022-05-30 11:23:44 791

原创 Chromedriver安装

Chromedriver安装python结合selenium可以实现自动控制网页/浏览器。但是前提需要安装chromedriver,且需要和chrome浏览器的版本相匹配,本文记录安装chromedrive的流程。打开chrome浏览器,在setting中检查版本(示例版本为92.0.4515.131):在http://chromedriver.storage.googleapis.com/index.html中下载对应的chromedriver,没有完全匹配的就选版本号最接近的即可。

2022-04-02 10:47:34 821

原创 【OpenWrt】【编译】报错zlib

【OpenWrt】【编译】报错zlib文章目录【OpenWrt】【编译】报错zlib问题现象解决方法下载编译更新可执行文件和库文件问题现象openssl:Error: 'zlib' is an invalid command.需要更新openssl以支持zlib特性。解决方法下载编译下载最新的openssl版本:https://www.openssl.org/source/例如笔者这里是:1.1.1n,故$ wget https://www.openssl.org/source/op

2022-04-01 18:37:07 613

原创 模块设计要点

模块设计要点做了几年的开发,总体来说,设计模块时,有些通用的注意点,还是可以总结下来,以供后用。模块的功能要明确,不明确的功能,要么不做,要么缕清需求模块的功能分层/解耦要清晰,方便测试。一个很简单的方法,就是通过测试的方式来看待接口(TDD),这样的话,为了满足测试,接口自然就分层清晰了,也就是所谓的可测性考虑可扩展性,虽然多数时候是:make it run,然后才是make it riun fast。但是好的框架,对于后续扩展的工作,会带来极大的便利,这在模块设计的早期阶段,值得花时间去思考

2022-03-28 21:39:25 1225

原创 Linux 数据描述

Linux数据描述记录见到的一种简洁的Linux内核描述数据的方式: const char *str; struct { char *name; unsigned int val; } of_fmt_table[] = { { "i2s", SND_SOC_DAIFMT_I2S }, { "right_j", SND_SOC_DAIFMT_RIGHT_J }, { "left_j", SND_SOC_DAIFMT_LEFT_J }, { "dsp_a", SND_SOC_DA

2022-03-21 09:51:44 205

原创 Linux任务定时工具——crontab用法

crontab用法crontab可以定时执行某些操作,很实用。通常Linux系统都已经自带。用法$ crontab -hcrontab: invalid option -- 'h'crontab: usage error: unrecognized optionusage: crontab [-u user] file crontab [ -u user ] [ -i ] { -e | -l | -r } (default operation is replace, per 1003

2022-03-20 21:23:36 595

原创 GD32定时器——单个定时器下多个通道PWM捕获

GD32定时器——单个定时器下多个通道PWM捕获文章目录GD32定时器——单个定时器下多个通道PWM捕获背景方案实现代码问题背景目前在GD32上开发,由于IO资源不足,需要在一个定时器下进行多个PWM的捕获。定时器可以配置PWM捕获,方法有二:配置定时器通道的PWM模式部分定时器配置为PWM模式后,可以直接捕获PWM,这样做方便快捷,确定是需要定时器通道本身支持该功能,并不是所有的定时器通道都支持配置PWM捕获。定时器计数,通过计数值(高电平和低电平)换算原理也很简单,检测电平边缘触发,例

2022-03-17 14:21:50 5182

原创 OpenWrt——ubuntu 20.04安装uci、ubox、uloop

OpenWrt——ubuntu 20.04安装uci、ubox、uloop文章目录OpenWrt——ubuntu 20.04安装uci、ubox、uloop安装ubox安装UCI安装ubox克隆源码$ git clone http://git.nbd.name/luci2/libubox.git libubox.gitCloning into 'libubox.git'...remote: Counting objects: 996, done.remote: Compressing ob

2022-03-13 22:57:05 2027

原创 Linux I2C例程应用层读写

Linux应用——I2C通信例程文章目录Linux应用——I2C通信例程背景需求实现设计文件组织代码异常记录背景需求两块板子通过I2C连接,其中一块为Master角色,一块为Slave角色,可以实现双方的相互通信,包括传输文件。本文描述Master角色的编码。需求:可以指定Slave地址可以指定传输文件块大小可以指定传输每个数据块间隔可以指定实现设计读取命令行参数初始化参数后,依照参数向I2C设备写入数据,并尝试读取一段定长的数据文件组织文件名文件描述备注

2022-03-08 09:14:36 4457 1

原创 Linux crontab用法

crontab用法crontab可以定时执行某些操作,很实用。通常Linux系统都已经自带。用法$ crontab -hcrontab: invalid option -- 'h'crontab: usage error: unrecognized optionusage: crontab [-u user] file crontab [ -u user ] [ -i ] { -e | -l | -r } (default operation is replace, per 1003

2022-03-08 08:55:33 177

原创 读书笔记——《802.11无线网络权威指南》

读书笔记——《802.11无线网络权威指南》文章目录读书笔记——《802.11无线网络权威指南》概要摘要概要秉承“不动笔墨不读书”的原则,摘录自己读书时的要点,如若有所思,则一并记下。当然,多数情况下,应该是读一点,记一点,毕竟时间比较零碎。摘要EAP,Extendsible Authentication Protocol,可扩展身份认证协议;WEP,Wired Equivalent Pravacy,有线等效加密帧大致分为:数据帧,管理帧,控制帧PHY层可以分为两个子层,一个是物理

2022-02-09 22:30:03 2392

原创 外设总线简记

外设总线文章目录外设总线USBI2CUARTSPICAN介绍相关外设总线的基本要点,并记录部分代码片段。USB高速通信协议,常见于电脑、U盘和蓝牙键鼠等I2C2根线,SDA和SCL,数据线和时钟线,一种同步传输协议,主机在开始发送信号之后,需要先发送7个bit的地址位和1个bit的读写位。每个从机都有属于自己的I2C地址,当发现这条指令属于自己时,便拉低SDA线(即回复ACK信号),然后主机开始发送/接收数据数据传输完成后,主机发送数据停止位,完成本次传输常见速率从几百kbps到1M

2022-02-07 16:03:36 428

原创 VS Code环境搭建

VS Code环境搭建近期更换了电脑,想来好久没有在window下开发了,于是觉得换了win10系统,记录下开发环境搭建要点。VS Code上手很快,无需配置过多插件,基本可以满足日常开发,故选用此软件。下载安装VS Code则不再赘述。只记录配置要点:在工作区创建.vscode文件夹,用于存放配置文件配置文件tasks.json,主要是指定一次编译任务的流程:{ "version": "2.0.0", "command": "g++", "args": ["-

2022-01-22 13:54:52 470

原创 shell挂载目录

shell挂载目录部分场景下,有的目录不可写,这个时候可以通过挂载对应目录可写,脚本如下:#!/bin/shfor dir in $@do tmp_dir=/tmp/`basename ${dir}`_tmp cp -a ${dir} ${tmp_dir} mount -t ramfs -n none ${dir} cp -a ${tmp_dir}/* ${dir} rm -rf ${tmp_dir} done这里针对指令说明:可以传入多个dir作

2021-10-18 09:27:16 353

原创 内核——bug捕获和时间测量

有一些函数假定在特定情况系被调用,或者假定在特定情况下不被调用,内核使用BUG_ON和BUG_TRAP宏来捕获这类条件不满足的地方,当传给BUG_TRAP的输入条件为假时,内核会打印出警告消息(warning message)。对于BUG_ON则打印错误信息,然后内核Panic。以下为示例:BUG_ON(v.counter != r);...

2021-08-15 14:37:37 122

原创 Linux C语言向量定义

向量定义/结构体结尾数组长度为0某些情况下,数据结构的末端会定义一个可以扩展的可选区块,如:struct people { int age; int height; ... char placehelder[0];};可选区块从placehelder开始,这个placehelder被定义为大小为0的向量,也就是说,如果people被分配为带有可选区块,placehelder便是指向这个可选区块的起始处,当分配为不带有可选区块时,placehelder便是一个指向此结构体尾端的指针,不消耗任

2021-08-14 23:28:35 334

原创 函数指针和虚拟函数表(VFT)

+ 函数指针函数指针是一种简洁且高效的编码方式,可以提高代码的复用率,又能利用面向对象语言的某些优点。在数据结构类型(对象)的定义中,你可以包含一组函数指针(方法/接口),于是,该结构的部分/全部操作都可以通过嵌入的函数来完成。C语言的函数指针在数据结构中大致如下:struct object { ... int (*init)(int argc, const char *argv); int (*mainloop)(int mode); ...}函数指针的有点,在

2021-08-14 23:17:41 406

原创 Linux系统Kernel Panic定义

Linux系统Kernel Panic定义Panic即恐慌,内核恐慌指的是一类消息,它由操作系统发现难以修复的内部错误后,显示为“panic”,主要在Unix或类Unix上使用该术语。内核处理程序对于panic的处理,通常是将调试信息输出到文件或者屏幕,然后让计算机停止运行。嵌入式设备出于debug的需要,也可以在debug信息写入到Flash的指定空闲分区中,这样在系统重启后仍然可以看到该信息。...

2021-08-14 22:53:12 1867

原创 Ubuntu 14.40源码编译安装git

Ubuntu源码编译安装git(更新git版本)因项目需要,目前仍在ubuntu 14.04 32bit上开发,但git版本比较老,部分功能使用异常,故需要更新,记录更新流程。$ git --versiongit version 1.9.1大致需要:安装依赖下载源码编译安装其中1和2不要求顺序。安装依赖:$ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev li

2021-08-12 11:34:11 295

原创 .vimrc参考

.vimrc参考示例贴一份本人的.vimrc参考,放在home目录下(~),并重命名为.vimrc,然后打开vim,执行如下指令即可安装::PlugInstall说明:leader键为;(小拇指按很方便~)YouCompleteMe自然是必须的啦airlinemolokai主题带注释nerdtreenerdcommenterauto-pair窗口跳转快捷键具体如下:set nocompatible " be iMproved, requireds

2021-08-09 20:03:40 171 1

代码阅读神器Source Insight配置

1. 支持Source Insight 3、4 2. 调整字体等宽 3. 配置为Solarized

2022-02-05

空空如也

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

TA关注的人

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