自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (8)
  • 收藏
  • 关注

原创 ATF史上最全分析--概貌

ATF全貌

2021-12-12 14:13:24 1450 1

原创 ATF史上最全分析--bl1阶段

ATF bl1代码流程分析

2021-12-10 16:46:25 5201

转载 glibc堆内存管理

概述 堆(heap)是指进程虚拟空间中由开发者动态分配的内存区域,它与栈不同,具有地址向上增长的特点,并且由开发者自己分配与释放。开发者一般通过malloc与free管理动态内存,而malloc和free其实是glibc动态内存管理的对外接口。 为了避免用户频繁使用系统调用带来的开...

2021-09-12 17:26:54 1054

原创 malloc没那么简单

malloc的用法在函数的实现中,经常需要动态的申请内存,就需要调用malloc函数来申请。malloc函数的使用范围很广,在使用时一般只需要包含stdlib.h就可以直接使用,下面展示一个malloc的简单实例。mem.c#include <stdio.h>#include <stdlib.h>void main(){ unsigned int *ptr = NULL; ptr = malloc(2000); *ptr = 0x12345678; print

2021-08-04 08:30:07 453

原创 linux进程调度的基本知识(根据代码自己总结的)

linux调度器linux调度器是以模块方式提供的,调度器类有dl_sched_class rt_sched_class fair_sched_class idle_sched_class每个调度器都有相关的调度策略 调度类 描述 调度策略 dl_sched_class Deadline调度器 SCHED_DEADLINE rt_sched_class

2021-08-04 08:29:24 569

原创 ubuntu中安装ecos源码(带图详细步骤,亲测可用)

目录1. 安装ecos需要的标准库2. 安装ecos的构建工具3. 安装tcl脚本4. 运行ecos的构建工具来进行ecos构建5. 等待下载ecos源文件6.查看下载的ecos源码​1. 安装ecos需要的标准库apt-get install lib32stdc++62. 安装ecos的构建工具wget --passive-ftp ftp://ecos.sourceware.org/pub/ecos/ecos-install.tcl3. 安装tc..

2021-08-03 21:47:21 1134

原创 Emmc系列(一)--------基本概念

1. 名词解释Emmc:Embedded Multi-Media Card,嵌入式多媒体卡。在工程技术领域,会引入Emmc设备、Emmc控制器、Emmc协议这些概念。Emmc设备:遵循Emmc通信协议的设备(通常是一个芯片);Emmc控制器:实现Emmc协议的控制器;Emmc协议:由MMC协会订立,符合JEDEC标准,主要针对手机或平板电脑等产品的内嵌式存储器标准规格。2. 系统框架Host顾名思...

2021-07-31 18:12:53 3897

原创 函数未声明导致的错误

函数未声明导致的错误对于一个合格的程序员来说,在进行函数调用前必须要对函数进行声明,应该是最基本的知识。而且现在的编译器都自带一定的代码检查功能,对于函数在调用前未声明的情况,在编译时都会提示告警信息,来提示开发人员相关的代码缺陷。但通常在写测试代码时,程序员一般会比较随意,不一定会严格按照编程规范去写代码,因此经常会出现省略函数声明的操作,而在编译时,对编译器提示的告警信息也会忽略,这时候就会出现一种类型的bug。那就是函数返回指针时,指针的类型会被编译器设置成默认类型,也就是整型(integer)。

2021-07-24 15:10:09 4318 1

原创 推荐几个ubuntu16.04的下载地址

做linux驱动开发的人必须要使用linux桌面系统来编译程序。这里提供几个国内的下载地址ubuntu16.04下载地址: 中科大源http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开源镜像站http://mirrors.aliyun.com/ubuntu-releases/16.04/ 兰州大学开源镜像站http://mirror.lzu.edu.cn/ubuntu-releases/16.04/ 北京理工大学开源http://mi...

2021-04-17 14:06:40 346

原创 linux同步机制-complete

linux驱动程序中可以使用的同步机制有很多,这里只介绍complete机制。1. 什么是complete?completion,它用于一个执行单元等待另一个执行单元执行完某事。Linux系统中与completion相关的操作主要有以下4种: (1) 定义completion struct completion my_completion; (2) 初始化completion init_completion(&my_...

2021-03-29 10:41:04 2085

原创 U-boot的环境变量: bootcmd 和bootargs

bootcmd是uboot自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。现在我的bootcmd的参数设置为:bootcmd=nfs 0x30008000 192.168.1.149:/opt/FriendlyARM/uImage;bootm表示uboot以nfs的方式加载位置在于192.168.1.149:/opt/FriendlyARM/这个目录下面的uImage文件,加载之后再执行bootm。bootm 指

2021-03-17 16:30:36 1114 2

原创 浅析linux内核printk的原理

通常,在调试linux驱动时,我们常用到printk函数来输出一些关键信息,来作为调试手段。但不知道大家有没有想过,内核中的printk是如何打印到我们的串口控制台的呢?

2021-03-09 17:16:36 2395

原创 Linux中利用grep命令如何检索文件内容详解

linux源码经过几十年的发展目前所具备的代码量已经非常大了,研究linux代码的人经常需要在linux源码里检索文件内容和相关资料,就需要用到“find”和“grep”命令,这里给大家介绍下关于Linux中利用grep命令如何检索文件内容的相关资料,并且给大家简单介绍了关于Linux grep和find的区别,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。前言Linux系统中搜索、查找文件中的内容,一般最常用的是grep命令,另外还有egrep命令,同时vi命令也支持文件

2021-03-09 14:56:17 9250

原创 如何构造linux根文件系统

1. 什么是linux根文件系统?这个概念其实我也花了很久才明白,一开始一直分不清根文件系统与yaffs文件系统、ex2文件系统、jffs2文件系统的区别,下面就讲讲这个linux根文件系统到底是何方神圣。我们拿windows下的定义来类比吧,因为大部分人对windows操作系统还是比较熟悉的。文件系统就是把闪存中地址与数据的关系按照一定的规则组织起来,对用户提供一个比较方便的操作接口。可以想想,如果没有文件系统,你想要在你的PC的D盘里找一个视频文件,那就需要你自己去对D盘进行寻址,再取出对应地址

2021-03-07 15:54:05 415 1

原创 在嵌入式设备上移植tcpdump功能

最近研究了下如何在嵌入式设备上移植tcpdump的功能,tcpdump是一款款用来截取网络数据的工具,在嵌入式系统中常用来抓取和分析网络数据包。在这里我们着重讲下如何在嵌入式的系统中使用tcpdump。1. 下载libpcap源码和tcpdump源码可能有人会问,为什么要下载libpcap源码呢?我只是安装个tcpdump,不想安装libpcap啊。但其实你在安装tcpdump时就会发现,tcpdump的编译过程是基于libpcap提供的库文件进行操作的,这点也可以在tcpdump的configur

2021-03-02 17:14:50 1644

原创 linux挂载QSPI FLASH

常用的flash设备有:nor-flash、nand-flash、qspi-flash。对于qspi-flash设备,linux要想正常挂载的话,必须要注册qspi控制器驱动、qspi设备驱动两种驱动文件。qspi控制器驱动主要是初始化好控制器的寄存器,而qspi设备驱动则是对应的flash操作接口以及调用到块设备驱动,进行块设备解析。对于flash设备驱动的架构,可以参阅博主的上篇文章。这里我们从字符设备的角度分析下qspi-flash的驱动架构。以zynq为例来分析:一、qspi控制器驱动q

2020-12-03 18:22:22 5190 3

原创 zynq之nand-flash驱动

pl35x_nand驱动程序按照阅读linux驱动程序的方法,来解读pl35x_nand.c文件。首先也是注册驱动,如果compatible能够与设备树对应上,则调用probe函数,先看下probe函数都干了啥?static int pl35x_nand_probe(struct platform_device *pdev){ struct pl35x_nand_info *xnand; struct mtd_info *mtd; struct nand_chip *nand_chip;

2020-11-17 15:40:38 2487

原创 zynq-smc驱动框架解析

zynq-nand flash linux驱动解析

2020-11-16 18:03:29 2390

原创 linux打实时补丁以及实时性能测试

在工业产品中使用操作吸引,一般都需要使用实时性较强的操作系统,而众所周知,linux系统是基于时间片划分的非实时系统,其实时性难以满足工业化对时效性的要求,因此很多应用场景中无法使用linux操作系统。当然这一局限性已经有所改善,目前linux社区已经增加了众多版本的实时补丁,只要给linux内核打上实时补丁,其实时性会得到大幅度提升。在此,我们就讲讲如何给linux内核打补丁以及如何测试linux系统的实时性。一、给linux打实时补丁我们以linux-xlnx-xilinx-v2017.4.

2020-11-10 15:14:28 8737

原创 移植linux系统至zynq板卡--简单实用

如何移植linux系统至zynq板卡上呢?这里我们只讲方法,不讲原理,适合小白参考!一、必要信息假设你手上有一块zynq的板卡,现在你需要给板卡搭载一个linux操作系统,以及开发一些接口模块的驱动程序。那么首先你需要知道板卡的原理图,原理图中你需要关注以下几点: zynq具体型号 zynq启动方式 DDR型号 FLASH型号 uart引脚约束 二、搭建BD平台利用vavido软件搭建BD平台,这部分不会的可以直接参照我的另外一篇博客《zynq

2020-11-08 12:00:51 947

原创 windows能ping通linux板卡,但linux板卡却ping不通windows

在板卡上移植linux网卡驱动,修改完设备树后,看到linux的启动信息中打印了很显然,linux启动时完成了mac和phy的初始化工作,按道理网口应该能够正常通信了,于是,试着在linux命令行里输入ping 192.168.1.24(PC的以太网IPv4地址),却发现ping不通;反过来,在windows的命令行里ping 192.168.1.10(板卡的ip地址),却可以ping通。显然,网口的链路层应该是可以正常通信的,估计是上层应用阻止了网络访问,查看PC的防火墙状态,发现PC未关

2020-10-27 10:40:23 2009

原创 如何计算DDR存储容量

做嵌入式开发的工程师肯定都接触过DDR,DDR就是我们常说的内存的大小,现在DDR已经发展到DDR5系列了,存储容量和存储速度都得到了极大的提高。但嵌入式项目中目前用到最多的还是DDR3和DDR4系列,大部分都是采用的镁光的DDR。驱动开发人员经常会被应用开发人员问你这个系统内存有多大啊,驱动人员有时候就会很懵圈,因为驱动开发时一般不怎么关注内存。今天,我们就针对镁光的DDR的数据手册,讲一下如何去确认DDR容量的问题。这是镁光的DDR数据手册,一般DDR的型号里面就已经确定了DDR的容量,那么

2020-08-12 14:10:08 11995

原创 linux驱动开发----字符驱动模板

之前看到在这里我想把字符驱动讲的简单点,其基本思想是:向内核注册驱动; 在驱动中注册设备; 构造字符设备file_operation结构体,实现file_operation中定义的行为函数。

2020-08-11 17:07:15 267

原创 malloc、kmalloc、kzalloc、vmalloc的区别

开发过linux应用程序的人都知道,在linux应用程序中,动态申请内存时用的函数是malloc(),malloc函数的原型是: malloc void *malloc(unsigned int num_bytes)如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...)

2020-08-10 10:20:41 2617

原创 linux驱动开发----zynq----SPI驱动(总线框架)

注:本文针对linux-xlnx-xilinx-v2017.4版本进行介绍一、引言 前面我们讲到了SPI的接口标准,以及SPI的工作模式,那么知道这些其实就可以进行SPI驱动的开发了,但是我们这里讲的是linux驱动开发,那么是不是掌握了SPI接口的一些知识就可以进行linux驱动开发呢?当然不是,linux驱动开发对应于总线类型(如:SPI / IIC / USB)的驱动,有一套独立的驱动框架,SPI驱动的开发就需要在SPI驱动框架中去实现。二、体系结构 ...

2020-06-08 11:09:14 3986 2

原创 module_platform_driver 与 module_init

在linux内核源码中,我们经常看到module_platform_driver 与 module_init这两个宏定义,有时候在这个驱动中用module_platform_driver,有时候用module_init,那这两个宏定义之间有什么差异吗?还是说可以随便用呢?这就需要我们旭跟踪代码,来看看这两个宏定义到底什么东西? 首先,介绍下module_init,module_init对于做驱动的人应该不陌生,linux内核是一个宏内核,宏内核就是驱动和内核打包在一起的。由于...

2020-06-02 12:26:58 11694 2

原创 linux驱动开发----SPI驱动(SPI基础知识)

注:本文针对xilinx的zynqMP系列芯片讲解SPI驱动一、引言 SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构。支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first)。SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。二、SPI总线结构​三、SPI接口 SPI...

2020-05-27 08:33:40 3609

原创 linux驱动开发----如何看懂LINUX驱动代码

对于一个从单片机驱动开发转到linux驱动开发的人员来说,最头疼的莫过于是linux的驱动框架了。在传统单片机开发的过程中,都是直接操作寄存器,比喻说配置个IO口引脚输出为高电平,只需要向方向寄存器、数据寄存器写入值就可以实现了,这种方法比较直观简单,开发人员只需要掌握C语言、原理图以及datasheet就可以进行开发了。而linux驱动开发需要涉及的东西就比较多了,开发人员需要掌握C语言、原理图、datasheet、驱动框架等内容,特别时驱动框架,对于刚从事Linux驱动开发的人员来说,简...

2020-05-13 14:13:16 3576 1

原创 Device Tree -----设备树

Device Tree文件的格式为dts,包含的头文件格式为dtsi,dts文件是一种通俗易懂的编码格式,人可以直接看懂,但uboot和kernel不能直接识别dts文件,他们只能识别二进制文件,所以需要把dts文件编译成dtb文件。dtb文件是一种可以被kernel和uboot识别的二进制文件。把dts文件编译成dtb文件的工具是dtc。 ...

2020-05-07 21:37:52 1595

原创 Yocto相关概念

Yocto:Yocto是这个开源项目的名称,该项目旨在帮助我们进行LINUX系统的自定义; Poky:Poky有两个含义。第一个含义是用来构建LINUX的构建系统,值得注意的是该Poky仅仅是一个概念,而非一个实体:它包含了BitBake工具,编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外,Poky还有另外一层意思,使用Poky系统得到的默认参考LIN...

2020-05-07 21:21:38 1329

原创 linux操作系统的文件属性

linux文件系统中的文件属性有三种:r : 4(可读) w : 2(可写) x : 1(可执行)linux系统中文件夹的默认权限是755。通常,在linux系统中,查阅文件属性都是通过命令行来实现的,一般建议用 ls -ld文件夹名称来查询文件夹的读写权限。...

2020-05-07 21:05:45 399

原创 ZYNQ的启动过程

ZYNQ的启动分为两个阶段:第一阶段:BOOT ROM(由ZYNQ厂家固化代码)第二阶段:FSBL(First Stage Bootloader),由SDK工具来制作1. 第一阶段(BOOT ROM) 上电后,ZYNQ SOC会首先执行片内BOOT ROM代码,BOOT ROM代码读取BOOT MODE寄存器来判断是哪一种启动方式(SD CARD / QSPI FLASH / J...

2020-05-05 22:03:24 1331

原创 DSP/BIOS程序中的printf

在DSP/BIOS的系统程序中,一般可以利用printf和LOG_printf两种方式来打印系统消息,但printf和LOG_printf是有区别的,在DSP/BIOS这样的实时性操作系统中,建议不要采用printf来打印调试信息,而选用LOG_printf来打印消息。这是由于printf打印会耗费较长时间,约为几十微秒,这样就会严重影响操作系统的实时性。 关于L...

2020-05-05 21:52:17 1211

原创 CCS中自定义内存的方法

在基于TMS320C6474芯片的驱动开发和应用程序开发过程中,可能需要分配一块独立的内存来使用,那么如何在CCS中自定义内存呢?1. 复制.cmd文件,删除文件中原有的内容;2. 通过MEMORY伪指令来指示存储空间MEMORY{ NEWSECT: origin = 0x8300000 length = 0x00001000 . ...

2020-05-05 21:39:56 3719

原创 SYS/BIOS与DSP/BIOS的区别

1.SYS/BIOS可用于包含DSP在内的其他处理器,DSP/BIOS只能用于DSP处理器;2.SYS/BIOS在XDCtools中使用配置技术;3. SYS/BIOS兼容DSP/BIOS5.4或更早版本的应用程序,但不再支持PIP模块;4. SYS/BIOS的TSK和SWI最高有32级优先级;5.SYS/BIOS提供了新的定时器模块,应用程序可直接配置和使用定时器;6....

2020-05-05 21:28:45 1609

原创 petalinux安装指南--Unable to locate package XXX

本文在UG1144文档《PetaLinux Tools Documentation Reference Guide》基础上更新!1.获取petalinux资源包去官网(https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools.html)下载...

2020-04-05 13:48:25 1005

原创 在linux命令行中动态配置PL比特流

1. 将PL的bit文件打包生成BIN文件,2018.3版本之前,FPGA manager 只支持bootgen generated bin files,由于我们使用的vivado是2017.4版本的,所以需要将bit文件转换为Bin文件,可以通过SDK来将bit文件转换成bin文件。2. 在LINUX的shell命令行中输入: echo 0 > /sy...

2020-03-21 20:25:24 1145

原创 配置ZYNQ的PS从QSPI FLASH启动

配置ZYNQMP的PS从QSPI FLASH启动:PS会根据MODE PIN来决定从哪种存储介质中进行启动 从原理图上可知,MODE[3:0]引脚的值为0010,再根据前面BOOT MODE的表,可知PS端的启动模式为Quad-SPI(32b),即QSPI flash启动。 由于BBU上ZYNQMP外挂的是NOR FLASH,NOR FLASH是可以直接...

2020-03-21 20:18:20 2626 1

原创 LINUX内存池实现

在LINUX应用程序中,业务需求上需要利用DMA来进行数据搬移的操作,但由于LINUX应用程序中访问的都是虚拟地址,且这个虚拟地址对应的物理地址并不一定是连续的。而DMA的操作是针对物理地址来实现的,且必须是连续的物理地址,来满足突发数据的传输。这就涉及到如何来处理虚拟地址与DMA操作之间的关系了。 实现虚拟地址和DMA地址之间的统一性,可以利用如图1所示的方法: ...

2020-03-21 20:14:17 653

原创 LINUX应用开发-定时器

在LINUX应用程序开发的过程中,经常会用到定时器来周期性的做某件事情,虽然说LINUX是一个非严格实时操作系统,但对于时间精度要求不是特别严格的系统而言,LINUX的定时器还是有它的用处的,下面就简单介绍下LINUX定时器的用法。a)在main函数中进行定时器初始化void TimerInit(){ struct itimerval tick; si...

2020-03-19 09:07:31 322

ATF_BL1.xmind

ATF BL1代码流程

2021-12-11

ATF_BL1代码流程.pdf

ATF BL1代码流程图

2021-12-11

axidma-simple.rar

本资源是自己写的axidma的驱动程序,不是axidmatest,另外资源中提供了对应的设备树以及应用层的axidma测试程序,亲测在myir的开发板上可以正常运行,axidma direct回环模式成功

2020-11-08

XILINX axidma的BD工程以及对应的linux设备树

axidma的BD工程,亲测可以利用此工程在myir的开发板上进行AXIDMA测试,本资源主要是axidma的sg模式回环测试

2020-11-08

uramdisk文件系统

uramdisk文件系统,下载后可直接使用,也可以mount后自行修改,uramdisk里面包含了基本的命令,大小为6M,可根据flash空间自行裁剪

2020-11-08

ZYNQMP_SPI.pdf

本资料根据xilinx提供的ZYNQMP手册中SPI章节翻译过来,相比于全英文版的datasheet,中文版的数据手册能够帮助你更快的了解SPI控制器。

2020-05-13

EDMA中断demo

基于TMS320c6474的EDMA中断程序,不在CSL库的基础上开发

2018-10-29

TMS320C6474 EDMA3例程

TMS320C6474的EDMA3模块化程序,分为寄存器版本和CSL版本,主动触发方式

2018-10-22

空空如也

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

TA关注的人

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