自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 资源 (2)
  • 收藏
  • 关注

转载 Linux Socket CAN——驱动开发(转)

Linux Socket CAN驱动开发一 CAN总线协议CAN是Controller Area Network(控制器局域网)的缩写。CAN通信协议在1986年由德国电气商博世公司所开发,主要面向汽车的通信系统。现已是ISO国际标准化的串行通信协议。根据不同的距离、不同的网络,可配置不同的速度,最高速度为1MBit/s。CAN被细分为三个层次:(1)CAN对象层(the object layer);(2)CAN传输层(the transfer layer);(3)CAN物理层(

2021-01-27 14:09:57 862

转载 socket can 编程

Socket can文档原名称:can.txt,位于 linux-3.2.0-m3352/Documentation/networking/can.txt。CAN 控制器局域网络协议族之 Readme 文件(aka Socket CAN)。另外在该文档的后边附加一个CAN收发测试程序,用于与下位机通信。目录1 概述 / 什么是 Socket CAN?2 目的 / 为什么要使用 socket API?3 socket can 概念3.1 接收列表3.2 数据发送的本地回环模式(loopback

2021-01-27 14:03:01 8195

转载 CAN总线详解(转)

1、简介CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。优点:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格越来越低。Ø 低成本:ECUs通过单个CAN接口进行通信,布线成本低。Ø 高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置。Ø 可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择。Ø 高效

2021-01-26 09:42:07 1999

原创 MTD分析

概述:本文对mtd的整个结构进行了分析,分析得并非很深入,但可以了解大体框架和目录结构,另外本文会对源码文件进行分析,大致描述其作用,文中关于oob相关部分并未涉及到,针对本文的内容中,如有不恰当的地方,请留言指教,多谢3 驱动结构3.1 源码结构3.1.1 文件结构drivers/mtd/:chips目录:nor flash的驱动程序位于该目录,目录下的文件包含nor flash的一些操作接口,其中nor flash分cfi和jedec两种,其他则是除前面两种以外的,cfi_cmdset_0

2021-01-16 16:31:49 2383

原创 AXI EMC使用总结

1 Flash介绍1.1 Nor flash和Nand flashNor flash :读快,写慢,擦除慢,引脚多,地址线和数据线分开,但读写操作简单Nand flash :读稍微比nor慢,但写和擦除较快,容量大,但存在坏块和位反转,地址和数据引脚复用,读写操作比较复杂2 axi emc介绍2.1 概述axi emc是fpga的一个ip core,axi 外部存储控制器,支持sram,nor flash ,psram,cellularRAM,IP核使用AXI4接口,支持32bit和64bit的

2021-01-11 22:35:36 6240

原创 ZYNQ 平台 AD9361实现网络通信的一种方案+网卡驱动分析及实现

声明:文中若有不合理的地方,欢迎讨论学习及指正,本文仅仅涉及软件部分的代码,不阐述逻辑代码的实现。功能:通过AD9361芯片实现无线组网,能实现视频、文件、音频等传输,其基本原理是在Linux内核层添加一个网卡设备,进行网络包的传输,其过程和真实的网卡一致,通过MAC层从物理设备收发上次协议栈的数据。整体框架:程序分析:分配接收缓冲区缓冲区用于接收数据,防止数据突发量太大无法处理,分配函数实现如下:ringBuffer = ringbuffer_malloc();注册一个网

2020-09-21 18:02:27 2819 4

原创 PowerPC P2040启动流程分析

PowerPC P2040启动流程概述: P2040采用powerpc架构,总共有四个e500mc核,独有的DPAA数据路径加速架构,5个Gbps或4 2.5 Gbps以太网控制器,支持10Gbps以太网(XAUI)控制器,十个5Ghz的SerDes通道,扩展性很强的Enhanced local bus controller(eLBC),Multicore programmable interrupt controller (PIC),两个4通道的DMA等。芯片资源与框架如下:...

2020-09-20 12:18:42 1886

原创 AXI DMA总结、内核axidmatest.c测试程序分析、SG mode

AXI DMA概述:XILINX提供的AXI DMA支持Scatter/Gather mode和Direct Register mode数据位宽支持32,64,128,256,512,1024bits,stream数据位宽支持8,16,32,64,128,256,512,1024bits,这里数据位宽表示DDR到上图中DataMover的数据位宽,stream数据位宽表示的DataMover到设备的数据位宽,表示一次可以传输多少位的数据。最高支持64bit地址。 AXI DMA在Scatte

2020-09-20 10:16:52 3503 1

原创 ZYNQ 简述及启动流程

ZYNQ概述: ZYNQ是一款ARM+FPGA集一身的SOC,其中ARM 包含两个Cortex A9核,支持多数通用接口,CPU频率最高支持1G Hz,每个CPU拥有独立的32KB L1数据高速缓存和指令高速缓存,在多处理配置中APU使两个CPU共享512KB的L2高速数据缓存和指令高速缓存,芯片GPIO总数118个,PS 54个,PS到PL有64个,下图是详细的引脚分布。PS与PL之间可通过AXI总线交互,其中有AXI HP 与AXI GP两种,不同的在于HP是高速的,...

2020-09-20 09:51:47 1658

原创 eLBC增强型控制器使用总结+PowerPC P2040 reboot命令无效原因分析

eLBC 增强型本地总线控制器,NOTE !!!总线控制器,从名字可以获取到一个关键的信息,“总线控制器”,可以猜测什么样的总线控制器是增强型控制器,具备多个控制器的功能?或者可以多用兼容不同接口,看一下官方描述上面说到,有以下功能,通用的片选控制器,NAND flash控制器,还有一个用户可编程的控制器UPM,接下来看一下各自的特点GPCM:兼容SRAM EPROM NOR FLASH EEPROM和其他外围设备第二个的意思是可以用来启动系统最小三个时钟周期访问外围设备.

2020-09-20 09:45:44 2523

原创 voliate 会影响什么?

voliate 会影响什么?除了常规的作用,还有那些作用?最近在项目中遇到了一个奇怪德问题,一个iomem的指针,指向了映射的某片空间,程序中需要频繁读取该片空间的某些地址,该项目使用射频芯片实现网络通信,所以在mac层会对数据收发做处理,虚拟一个以太网接口,实现正常的网络通信,在收发的过程中,会频繁读取该指针指向的空间的某些地址,实验过程中,发现该指针使用voliate和不使用voliate时,使用iperf测试出的速率相差很大,没加voliate时,只有3.98Mbits/sec ,加上时,能达到5

2020-09-13 10:35:43 211

转载 Socket缓冲区大小修改与系统设置

每个Socket在Linux中都映射为一个文件,并与内核中两个缓冲区(读缓冲区、写缓冲区)相关联。或者说,每个Socket拥有两个内核缓冲区。有时,我们需要修改缓冲区的内核限制的最大值,使其符合我们的实际需求。一、系统设置[jiang@localhost ~]$ uname -aLinux localhost.localdomain 2.6.32-642.el6.x8...

2020-04-15 21:11:25 6468

原创 RK3399 设备树获取子结点信息

驱动测试代码:#include <linux/kernel.h>#include <linux/gpio.h>#include <linux/init.h>#include <linux/module.h>#include <linux/delay.h>#include <linux/of.h>#inclu...

2020-04-09 19:53:39 549

转载 DMA概述

在开始分析代码之前,先简要介绍一下DMA的基础知识。 什么是DMADMA,Direct Memory Access,直接内存访问。既然叫 直接内存访问,那么相对应地,应该就有 “间接的内存访问”。间接的内存访问,我的理解是,就是指最常见的,我们利用CPU的指令,去从一个内存地址中读出数据,然后写到另外一个内存地址中,完成对应的赋值操作。此过程,完全都是CPU去操作的,如果是单...

2020-04-09 19:52:52 3687 1

转载 以太网学习之二 物理介质(10Base、100Base-T、100Base-TX等)

在搞网络这一块的时候,看到了100Base-T、100Base-TX等这些东西,在IEEE802.3中,也到处是这些词。大体了解了一下,下面是正文。  以太网采用CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路存取和冲突检测)介质访问控制方式的局域网技术,最初由Xerox公司于1975年研制成功,1979年7月~19...

2020-04-09 19:45:53 4057

转载 以太网学习之一 详解 MAC、MII、PHY

结构  从硬件的角度看,以太网接口电路主要由MAC(Media Access Control)控制器和物理层接口PHY(Physical Layer,PHY)两大部分构成。如下图所示  但是,在实际的设计中,以上三部分并不一定独立分开的。 由于,PHY整合了大量模拟硬件,而MAC是典型的全数字器件。考虑到芯片面积及模拟/数字混合架构的原因,通常,将MAC集成进微控制器而将PHY留在片外...

2020-04-09 19:38:55 1506

原创 linux 内核网络杂烩

sk_buff 整理笔记(一、数据结构)sk_buff整理笔记(二、操作函数)sk_buff整理笔记(三、内存申请和释放)sk_buff整理笔记(四、克隆与复制)sk_buff整理笔记(五、队列管理函数)...

2020-04-08 09:18:49 213

转载 Dynamic DMA mapping Guide (转)

一、前言这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同?在DMA API中涉及好几个地址的概念(物理地址、虚拟地址和总线地址),正确的理解这些...

2020-04-01 18:37:08 146

转载 Linux下DMA驱动api 以及测试实列

dmaengine framwork主要分为两部分:DMA controller 和DMA engine API。涉及内核相关文档:Documentation/damengine目录、Documentation/devicetree/bindings/dma/、Documentation/DAM-API-HOWTO.txt\DMA-API.txt\DMA-attributes.txt1、dm...

2020-03-31 20:04:48 2410

转载 Linux dma api

linux下的DMA驱动框架drivers\dma\dmaengine.c文件内,在linux下编写DMA的设备驱动一般步骤如下。申请DMA通道struct dma_chan *dma_request_channel(dma_cap_mask_t mask,dma_filter_fn filter_fn,void *filter_param);其中dma_cap_mase...

2020-03-31 20:01:30 291

原创 tcp udp多连接,可以创建多个服务器,单播、广播、组播

思路如下: select链表----------------------------------------------------------------------------- ^ ^ ^ | | | | | | |向上register |向上register |向上register |accpet...

2020-03-24 21:39:51 542

转载 U-boot简介及常用命令说明

1. 疑问使用u-boot开发一些项目有一段时间了,对u-boot也更加熟悉了。以前经常想u-boot存在的意义到底是啥呢?百科上说U-Boot的作用是系统引导。恩?引导系统?具体什么含义?u-boot在实际开发中还有什么具体作用?好吧,如果你对这些问题感兴趣,是吧。………………2. u-boot在实际项目中的作用以我的项目经历,我觉着u-boot有如下3种功能:一,验证硬件是否正常工...

2020-03-12 20:28:04 1477

原创 填坑之串口接受数据不完整包的解决办法

通过串口收发包时,遇到了一个包多次才接收完整的问题,猜测是串口的接收buffer大小的问题,这种问题我采取的是拼包的形式解决。代码如下:#include <liblog.h>#include <stdio.h>#include <pthread.h>#include <sys/select.h>#include <termios....

2019-11-06 11:17:54 5121 1

转载 C语言在子函数中调用malloc申请内存

#include <stdio.h> #include <stdlib.h>#include <string.h>void test1(char **str)...

2019-10-28 21:15:10 1180

转载 Linux C语言下UDP实现指定端口收发数据实例

本文实现以下功能:1.UDP sever指定往8888端口发送数据2.UDP sever指定从9999端口接收数据3.UDP client指定从9999端口接收数据4.UDP client指定从8888端口接收数据5.打开一终端执行./udp_server6.打开另一终端执行./udp_client7.udp_server每隔30秒向udp_client发送“TESTER_STAR...

2019-10-28 21:04:08 4832 3

原创 NTP server 时间同步服务器搭建

#修改时区在/usr/share/zoneinfo/Asia/目录下,ls -lShanghai查看该文件实际指向哪一个文件,将该文件拷贝为localtime,放入/etc、目录下#允许ntp通过防火墙sudo ufw allow ntp交叉编译ntp步骤:1.获取ntp源码:sudo apt-get source ntp(需要联网,使用该命令,可以获取...

2019-10-26 15:55:52 1518

转载 深入理解uboot(转)

最近一段时间一直在做uboot移植相关的工作,需要将uboot-2016-7移植到单位设计的ARMv7的处理器上。正好元旦放假三天闲来无事,有段完整的时间来整理下最近的工作成果。之前在学习uboot时,在网上看了很多文章,很多都是基于老版本的的uboot,并且很多都是直接从代码开始分析,并没有将uboot与ARM处理器体系结构结合起来。毕竟很多时候做一件事情,你知道怎么去做这件事和你知道这件...

2019-08-05 14:12:47 271

转载 深入理解uboot 2016 - 基础篇(处理器启动流程分析)

转载:https://blog.csdn.net/kernel_yx/article/details/53045424最近一段时间一直在做uboot移植相关的工作,需要将uboot-2016-7移植到单位设计的ARMv7的处理器上。正好元旦放假三天闲来无事,有段完整的时间来整理下最近的工作成果。之前在学习uboot时,在网上看了很多文章,很多都是基于老版本的的uboot,并且很多都是直接从代码...

2019-06-26 10:47:37 516

转载 linux驱动程序中字符设备和块设备区别

设备文件分为Block Device Driver和Character Device Drive两类。Character Device Drive又被称为字符设备或裸设备raw devices; Block Device Driver通常成为块设备。而Block Device Driver是以固定大小长度来传送转移资料 ;Character Device Driver是以不定长度的字元传送资料 。...

2019-03-20 16:49:19 944

转载 内存泄漏的场景分析和避免方法总结,C语言内存泄漏详解(转)

大家都知道,在堆上分配的内存,如果不再使用了,就应该及时释放,以便后面其他地方可以重用。而在 C 语言中,内存管理器不会自动回收不再使用的内存。如果忘了释放不再使用的内存,这些内存就不能被重用了,这就造成了内存泄漏。内存泄漏几乎是很难避免的,不管是老手还是新手,都存在这个问题,甚至 Windows 与Linux这类系统软件也或多或少存在着内存泄漏。也许对一般的应用软件来说,这个问题似乎不是...

2019-03-07 17:24:11 958

原创 RK3399生成OTA升级包、SD卡升级

1、先编译整个系统2、. build/envsetup.sh &amp;&amp; lunch g3399-userdebugg3399-userdebug这个选项是得根据实际情况来,可以通过lunch命令查看(记得先. build/envsetup.sh)3、make otapackage后在下面这个目录生成.zip完整升级包,改为update.zip拷贝到U盘,系统会自动检测提示升...

2019-03-07 11:53:38 4284

转载 Linux中断上下文中为什么不能休眠

2.schedule()在切换进程时,保存当前的进程上下文(CPU寄存器的值、进程的状态以及堆栈中的内容),以便以后恢复此进程运行。中断发生后,内核会先保存当前被中断的进程上下文(在调用中断处理程序后恢复);但在中断处理程序里,CPU寄存器的值肯定已经变化了吧(最重要的程序计数器PC、堆栈SP等),如果此时因为睡眠或阻塞操作调用了schedule(),则保存的进程上下文就不是当前的进程cont...

2019-03-05 11:07:32 846

转载 Linux中断下半部实现的三种机制

之前提到过,之所以中断会分成上下两部分,Linux 的上半部就是中断处理程序,下半部采用三种机制来实现,这样分两部执行的策略有利于缩短响应硬件的时限。 中断下半部的处理 对于一个中断,如何划分出上下两部分呢?哪些处理放在上半步,哪些放在下半部?这里有一些经验可供借鉴:如果一个任务对时间十分敏感,将其放在上半部。 如果一个任务和硬件有关,将其放在上半部。 如果一个任务要保...

2019-03-05 10:52:01 2079

转载 Linux内核并发控制

1. 同步与互斥(1)互斥与同步机制是计算机系统中,用于控制进程对某些特定资源(共享资源)的访问的机制(2)同步是指用于实现控制多个进程按照一定的规则或顺序访问某些系统资源的机制。(3)互斥是指用于实现控制某些系统资源在任意时刻只能允许一个进程访问的机制。互斥是同步机制中的一种特殊情况。(4)同步机制是linux操作系统可以高效稳定运行的重要机制2. Linux系统并发主...

2019-03-05 10:35:31 502

转载 Linux设备驱动开发--内核定时器

1.Linux内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于&lt;Linux/timer.h&gt;和kernel/timer.c文件中。2.被调度的函数是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:(1)没有current指针、不允许访问用户空间。因为没有进...

2019-03-05 10:28:48 237

转载 Linux I2C驱动--用户态驱动简单示例

1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-02. I2C通用设备驱动以字符设备注册进内核的static const struct file_operations i2cdev_fops = { .owner = ...

2019-03-04 17:41:00 1139

转载 Linux中断处理流程

1. 中断处理流程  当中断发生时,Linux系统会跳转到asm_do_IRQ()函数(所有中断程序的总入口函数),并且把中断号irq传进来。根据中断号,找到中断号对应的irq_desc结构(irq_desc结构为内核中中断的描述结构,内核中有一个irq_desc结构的数组irq_desc_ptrs[NR_IRQS]),然后调用irq_desc中的handle_irq函数,即中断入口函数。我们...

2019-03-04 17:24:56 268

转载 TCP三次握手四次挥手过程详解

TCP头部: 其中 ACKSYN序号这三个部分在以下会用到,它们的介绍也在下面。暂时需要的信息有:ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和...

2019-03-04 15:10:30 235

转载 孤儿进程与僵尸进程

1、前言  之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的...

2019-03-01 16:35:23 101

转载 C++中内存泄漏的几种情况

1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存;二是在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存2.没有正确地清除嵌套的对象指针3.在释放对象数组时在delete中没有使用方括号方括号是告诉编译器这个指针指向的是一个...

2019-03-01 09:21:20 809

FDC2214代码(基于430-f5529的,基于stm32103的)-CCS

程序实现FDC2214通道数据的读取,分别在msp430f5529和stm32f103zet6上实现,代码经过验证,保证有效

2020-09-20

SSH软件安装

SSH安装流程,该软件用于虚拟机与Windows之间传输文件的pc工具

2018-11-06

空空如也

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

TA关注的人

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