- 博客(79)
- 资源 (4)
- 收藏
- 关注
原创 LoRa及LoRaWAN简介
1、什么是LoRa和LoRaWAN 1.1 LoRa和LoRaWAN的区别 LoRa是低功耗广域网通信技术中的一种,是Semtech公司专有的一种基于扩频技术的超远距离无线传输技术。 LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。它是一种媒体访问控制(MAC)层协议。 LoRa = PHY Layer LoRaWAN ...
2019-08-27 22:43:20
43879
5
原创 ModBus协议简介及移植到STM32单片机
一、基本概念Modbus协议是全球最早用于工业现场的总线规约,许多工业设备,包括PLC,DCS,智能仪表等都在使用此协议作为他们之间的通信标准。Modbus协议是一个请求/应答协议,发起请求的为Master(client),响应请求的为slave(server)。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一个控制器请求访问其它设备的过程...
2019-06-16 23:46:34
33587
4
原创 openwrt wifi调试记录
前言 目前wifi模块使用过pcie接口和sdio接口两款。pcie接口的wifi模块使用较广,内核一般都有现成的驱动支持,至于sdio接口的wifi驱动,可以找芯片厂商拿。本人从事系统及驱动开发,看看内核代码移植一些驱动还是比较得心应手的,因此本文不记录wifi驱动的调试,而是记录wifi应用的开发。 年末将至,回望这三年工作经历,尽心尽力,自觉能力上从事一些系统及驱动开发游刃有余,只是做
2018-03-15 11:37:40
7000
1
转载 Linux Netlink基本使用
转载地址:http://blog.chinaunix.net/uid-28541347-id-5578403.html1、什么是Netlink 什么是Netlink?Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到N
2017-12-15 14:42:49
5129
2
转载 socket编程简介
前言 本篇文章摘抄于网络,放在自己的博客只是为了方便查看和记忆。现在优快云已经有手机客户端了,无聊的时候拿起手机,看看这些大神写的文章总比看电视剧好。希望原创的大神勿怪,一些好的文章总是使人茅塞顿开,受益匪浅,不由得使人想记录之,然后时刻阅读和学习。原文地址:http://blog.youkuaiyun.com/hguisu/article/details/7445768/1、socket编程流程 soc
2017-05-03 15:22:54
3212
转载 boa 流程分析
本文转载,原文地址:http://www.360doc.com/content/17/0503/11/42601800_650569770.shtml引言 随着企业安全意识的增强以及现代化管理水平的提高,对设备的远程监控在工业控制系统中得到了越来越广泛的应用。近年来,Web技术广泛普及,把Web技术应用在这种监控系统中,可以让操作者通过浏览器维护和管理监测点,查看监测数据。同时,监测中心的服务程序
2017-05-03 11:49:44
2430
转载 linux之dup和dup2函数解析
本文转载,原文地址:http://blog.youkuaiyun.com/fulinus/article/details/9669177#comments1、文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态。一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2),0与进程的
2017-05-03 11:27:06
77316
4
转载 GSM短信收发介绍
1、短消息收发的实现模式 Gsm收发短消息又分三种模式:BLOCK 模式、TEXT 模式和PDU 模式。BLOCK 模式现在用的很少了;TEXT 模式则只能发送ASCII 码,它不能发送中文的UNICODE码(确切地讲,从技术上来说是可以用于发送中文短消息的,但是国内的手机基本上不支持);而PDU 模式开发起来则较为复杂,它需要编写专门的函数来将文本转换为PDU 格式,但PDU 模式被所有手机支持
2017-04-12 20:54:24
10587
1
转载 MII接口介绍
1、简介 MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口和一个MAC和PHY之间的管理接口。“媒体独立”表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作。MII接口的类型有很多,常用的有MII、RMII、SMII、SSMII、SSSMII、GMII、R
2017-04-12 20:43:38
29509
2
原创 FXS(le88266)工作原理介绍
1.FXS简介 所谓FXS(Foreign eXchange Station),是用来连接传统电话机使用的。FXS的另外一个功能,就是可以连接传真机,或是以外线的方式连接入商用交换机。其基本电路包括两部分:CODEC 与 SLIC(用户线路接口电路)。 经常和SLIC一起出现的另一个术语是SLAC(用户线语音处理电路),用来实现用户模拟语音的PCM编解码。即 SLAC包含了CODEC,而SL
2017-04-12 20:29:39
12608
1
原创 PVID和VID的理解
VID解释 VID(VLAN ID)是VLAN的标识,在交换机里面用来划分端口。比如一个交换机有8个端口,现在将port1,port2,port5三个端口的VID设置成1111,那么这三个端口就能接收vlantag=1111的数据包。 拥有和数据帧TAG标记一致的VID的物理端口,不论是否在这个VID上是Untagged Port或者tagged Port,都可以接受来自交换机内部的标记了这
2017-04-12 20:03:09
77918
4
原创 ip地址的分类及子网掩码介绍
前言 内容均来源于网络,而我只是把他们拼凑在一起,记录于此只为方便复习记忆。本文一针见血地介绍了ip地址的分类及子网掩码的作用^_^IP地址的分类 IPv4网络使用32位地址,以点分十进制表示,如192.168.0.0。地址格式为:IP地址=网络地址+主机地址 或 IP地址=网络地址+子网地址+主机地址。 最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(I
2017-02-24 19:23:08
8828
转载 嵌入式网络通讯详解
前言 最近在做网络相关的项目,然而大学学的网络编程以及网络协议相关的知识都已经忘得差不多了。庆幸的是网上牛人多,百度一下发现了一篇言简意赅的文章(http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html),唤醒了我许多大学的回忆,不胜感慨。我下定决心要把网络的相关知识从新梳理一遍,因而记录如下。ISO参考模型 ISO/OS
2017-02-24 17:45:26
6840
原创 嵌入式系统中的镜像升级
前言 刚进公司的时候,所接触到的产品使用的是ramdisk文件系统,我们使用了mkimage工具将zImage和ramdisk文件系统组合成一个包,然后再写到nandflash。这时候的系统升级只需要在uboot下将nandflash擦除,然后将新的包写到nandflash就可以了。后来使用了mmc作为储存介质后我们改用了ext4作为文件系统,这时候就不能在uboot下直接升级了,刚开始我们做了两
2017-02-22 20:10:34
2357
转载 结构体对齐详解
原文地址: http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html1、结构体数据成员对齐的意义 许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处
2017-02-21 21:28:46
1511
1
原创 应用程序段错误调试
1、段错误(SIGSEGV)的产生 从用户态程序开发的角度,我们并不需要理解操作系统复杂的内存管理机制,这是和硬件平台相关的。但是了解内核发送SIGSEGV信号的流程,对我们理解SIGSEGV是很有帮助的。 红色部分展示了内核发送SIGSEGV 信号给用户态程序的总体流程。当用户态 程序访问一个会引发SIGSEGV 的地址时,硬件首先产生一个page fault,即“缺页异常”。 在
2017-02-20 20:21:28
939
转载 Goertzel算法简介
原文地址:http://www.cnblogs.com/haibin-zhang/p/5515607.htmlGoertzel算法由Gerald Goertzel在1958年提出,用于数字信号处理,是属于离散傅里叶变换的范畴,目的是从给定的采样中求出某一特定频率信号的能量,用于有效性的评价。这个算法有几个关键的参数:采样率R,指的是需要分析的数据每秒钟有多少个采样目标频率f,指
2017-01-04 17:48:28
34603
3
原创 运算符优先级
假设high和low是两个整数,他们的值介于0-15之间,如果r是一个八位整数,且r的低四位与low的各位上一致,而r的高四位与high的各位上一致,很自然会想到要这样写: r = high << 4 + low 但是很不幸,这样写是错误的,加法运算的优先级要比移位运算的优先级要高,因此本例实际上相当于: r = high << (4 + low) 对于这种情况,有两种更正方
2016-12-27 14:27:59
1376
原创 shell-sed工具
1.使用说明 sed本身是一个管道命令,可以分析standard input,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能。其用法如下:sed -nefr '动作'参数:-n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上。但是如果加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来。-e:直接在命令行模式上进行s
2016-12-27 11:34:18
694
原创 shell-判断式
test命令测试功能使用test命令判断一个文件是否存在:root@silent:/home/lianxi/shell# test -e /home/hh && echo "exist" || echo "no exist"no existtest的所有参数汇总如下表所示: 利用判断符号[] 使用中括号必须要特别注意,因为中括号用在很多地方,包括通配符与正则表达式等,所以如
2016-12-23 14:06:26
396
原创 shell-条件判断式
if…thenif判断式的格式有如下三种。 第一种,单层、简单条件判断式if [ 条件判断 ]; then 当条件判断式成立时,可以进行的命令工作内容;fi <==将if反过来写,就称为fi,结束if之意。第二种,一个条件判断if [ 条件判断 ]; then 当条件判断式成立时,可以进行的命令工作内容;else 当条件判断式不成立时,可以进行的命令工作内容;fi
2016-12-23 11:01:51
665
原创 shell-函数
shell脚本中,函数的语法如下:function fname () { 程序段} function也是拥有内置变量的,它的内置变量与shell script很类似,函数名称代表示0,而后续的变量也是以0,而后续的变量也是以1, $2…来替代的。 一个简单的例子如下:#!/bin/bashfunction print_message () { echo "my name
2016-12-23 10:38:30
351
原创 shell-循环
while do done这个语法的格式如下:while [ condition ] <==中括号内的状态就是判断式do <==do是循环的开始 程序段落done <==done是循环的结束一个简单的例子。从控制台读取一个数值max,然后计算1加到max的和,然后输出,程序如下:#!/bin/bashdeclare -i sumde
2016-12-23 10:27:01
432
原创 ARM Linux启动流程-根文件系统的加载
前言 在Kernel启动的初始阶段,首先去创建虚拟的根文件系统(rootfs),接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系统,也即真实的文件系统。 接下来结核内核代码(内核版本:linux-3.14.28),讲解整个流程。1、文件系统的分类 文件系统大体可以分为基于内存的文件系统(initrd)和非基于内存的文件系统(noinitrd),想要了解根
2016-12-05 22:20:56
5584
原创 ARM Linux启动流程-start_kernel阶段
start_kernel的主要功能 start_kernel()函数是内核初始化C语言部分的主体。这个函数完成系统底层基本机制,包括处理器、存储管理系统、进程管理系统、中断机制、定时机制等的初始化工作。 分析所在文件:init/main.c 内核版本:linux-3.14.28start_kernel流程介绍 1、void lockdep_init(void) 有些体系结构有
2016-12-02 17:42:13
711
转载 ARM Linux启动流程-汇编第二阶段
本文整理了ARM Linxu启动流程的第二阶段——start_kernel前启动阶段(汇编部分),内核版本为3.12.35。我以手上的树莓派b(ARM11)为平台示例来分析Linux内核在自解压后到跳转运行start_kernel之前所做的主要初始化工作:包括参数有效性验证、创建初始页表和MMU初始化等。内核版本:Linux-3.12.35分析文件:arch/arm/kernel/
2016-12-01 20:48:41
1547
转载 ARM Linux启动流程-汇编第一阶段
转载地址:http://blog.youkuaiyun.com/luckyapple1028/article/details/44726131本文整理了ARM Linxu启动流程的第一阶段——内核自解压,内核版本为3.12.35。我以手上的树莓派b(ARM11)为平台示例来分析uboot跳转到Linux内核运行后做了哪些初始化动作,以及如何转入真正的内核开始运行。内核版本:Linux-3.12.35分析文件:l
2016-12-01 19:46:02
3130
原创 ARM Linux启动流程-前传
1、zImage的组成 zImage是由一个压缩后的内核piggy.o,连接上一段初始化及解压功能的代码(head.o misc.o)组成的。 2、Linux的入口 内核从什么地方开始运行呢?当然要看lds文件啦。zImage的 生成经历了两次大的链接过程: 一次是顶层根目录下vmlinux的生成,由arch/arm/boot/vmlinux.lds(这个lds文件是由 arch/ar
2016-12-01 19:13:24
536
转载 va_start和va_end使用详解
转载地址:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html C函数传递参数的用法和原理1.1 用法 在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表,例如void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种
2016-11-25 09:39:17
639
原创 uboot启动流程详解(5)-_main
前言 _main标号中主要调用的函数有三个,board_init_f,relocate_code,board_init_r,这里先贴出_main的代码并注释,然后对这三个函数的流程及原理进行详细介绍。1、代码注释ENTRY(_main)/* * Set up initial C runtime environment and call board_init_f(0). *//**这里首先为
2016-11-17 11:46:24
7209
3
原创 uboot启动流程详解(4)-cpu_init_crit
1、源码及注释cpu_init_crit标号对应的源码:/************************************************************************* * * CPU_init_critical registers * * setup important registers * setup memory timing * *****
2016-11-16 09:03:34
2926
原创 uboot启动流程详解(3)-cpu_init_cp15
1、代码及注释说明: 1、关于p15协处理及其指令的介绍请看《ARM协处理器介绍 》。 2、关于mmu的详细介绍请查看《 MMU内存管理单元介绍 》。 3、如果想要详细阅读以下代码,需要查阅arm的参考手册《ARM_Architecture_Reference_Manual_ARMv7-AR.pdf》。/***************************************
2016-11-15 20:16:19
2420
原创 uboot的编译及连接过程
1、.bin文件的组成 一个.bin文件主要包含text段(代码),data段(初始化的全局变量),以及bss段(未初始化的全局变量)。局部变量是在运行过程中分配的,不包含在bin文件里面。下面举一个例子说明#include <stdio.h>#include <string.h>int a = 0; //全局未初始化变量,系统默认赋值成0,bss段,4个字节int b
2016-11-15 18:20:41
1538
原创 MMU内存管理单元介绍
前言 本篇文章简要阐述MMU的概念,以及以段地址的转换过程为例,简单说明MMU将虚拟地址转换成物理地址的过程。更多详细内容请查看《ARM-MMU(中文手册).pdf》。1、MMU概述 在ARM存储系统中,使用MMU实现虚拟地址到实际物理地址的映射。为何要实现这种映射? 首先就要从一个嵌入式系统的基本构成和运行方式着手。系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处高
2016-11-15 13:55:27
2454
原创 ARM协处理器介绍
什么是协处理器 协处理器是一种芯片,用于减轻系统微处理器的特定处理任务。例如,数学协处理器可以控制数字处理;图形协处理器可以处理视频绘制。例如,intel pentium微处理器就包括内置的数学协处理器。 协处理器可以附属于ARM处理器。一个协处理器通过扩展指令集或提供配置寄存器来扩展内核处理功能。一个或多个协处理器可以通过协处理器接口与ARM内核相连。 协处理器可以通过一组专门的、提
2016-11-15 11:46:30
12029
原创 uboot启动流程详解(2)-reset
1、cpsr寄存器介绍 通过向模式位M[4:0]里写入相应的数据切换到不同的模式,在对CPSR,SPSR寄存器进行操作不能使用mov,ldr等通用指令,只能使用特权指令msr和mrs。 在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读
2016-11-12 18:58:01
4019
原创 uboot启动流程详解(1)-_start
(1)代码及注释.globl _start /*声明一个符号可被其它文件引用,相当于声明了一个全局变量,.globl与.global相同*/_start: b reset /* b是不带返回的跳转(bl是带返回的跳转),意思是无条件直接跳转到reset标号处执行程序*/ ldr pc, _undefined_instruction /*未定义指令异常向量,ldr的作用是,将符号_und
2016-11-12 16:12:01
1590
原创 uboot整体介绍
1、什么是uboot U-boot,全称Universal Boot Loader,是由DENX小组的开发的遵循GPL条款的开放源码项目,它的主要功能是完成硬件设备初始化、操作系统代码搬运,并提供一个控制台及一个指令集在操作系统运行前操控硬件设备。U-boot之所以这么通用,原因是他具有很多特点:开放源代码、支持多种嵌入式操作系统内核、支持多种处理器系列、较高的稳定性、高度灵活的功能设置、丰
2016-11-12 14:39:36
1010
原创 编译地址与运行地址
(1)什么是编译地址 32位的处理器,它的每一条指令是4个字节,以4个字节存储顺序,进行顺序执行,CPU是顺序执行的,只要没发生什么跳转,它会顺序进行执行行, 编译器会对每一条指令分配一个编译地址,这是编译器分配的,在编译过程中分配的地址,我们称之为编译地址。 uboot里面,在include/configs目录下有相应平台的头文件,比如我使用的是飞思卡尔的cpu(IMX6SL),对应的
2016-11-12 13:30:56
3201
原创 开发一个字符设备驱动
1、什么是字符设备 1.1 基本概念 字符设备是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。 1.2 数据结构struct cdev//设备结构体{ struct kobject kobj; /* 内嵌的kobject 对象 */ s
2016-11-05 12:18:01
816
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人