自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 串解-解串芯片

这篇文章简单记录一下TI的串解串芯片的相关内容,避免以后调试的时候再从头去看一、ds90ub964以前调试过mipi csi的解串芯片,时间过去太久了,有的概念已经忘记了,重新记录一下。现在拿964为例,964成为解串器,一般和摄像头端的串解芯片(比如953)配对使用。964有4个RX Port,所以964一共可以外接4个摄像头,964和摄像头段的连接为FPD-Link,964和Soc段的连接为MIPI CSI,有两个CSI-2 TX端口,每一个端口有4个data line。可以分别配置每个摄像头的数

2022-01-24 19:23:19 1984

原创 三、CAN调试

根据项目的需求,现在需要外接毫米波雷达到TDA4板子上,毫米波雷达为CAN接口,所以要进行TDA4板子上Can接口的调试,下面根据调试的步骤来进行说明一、软件回环测试在实验之前先简单说明一下,在Linux上can接口是以socket的形式来操作的,也称socket can,应用程序只需要把要发送的can数据打包成can帧的数据包,然后使用socket来发送或者接收,应用程序是非常简单的。can数据主要是以can frame的形式传输的,数据结构定义为struct can_frame { canid

2022-01-13 19:31:51 1927 1

翻译 二、DBCC

DBCC 相关内容DBCC的含义是 DBC converter/compiler ,DBC文件的翻译/转换器,它可以把DBC文件转换成不同的格式,目前不支持CAN-FDDBCC git地址介绍dbcc 是一个程序,用于将 DBC 文件主要转换为 C 代码,该代码可以将 CAN 消息序列化和反序列化为表示这些消息和信号的结构。 也可以打印出结构中包含的信息构建源文件 mpc.c 和 mpc.h 源自一个用 C 编写的称为 MPC 的解析器组合器,并在第 3 条 BSD 许可下获得许可。要构建,

2022-01-07 17:54:55 205

原创 一、编译TIOVX PC端文件

TDA4平台是最近由于工作关系新接触到的一个自动驾驶的平台,我也是从头开始学习,以后就在这个专栏下记录自己的一些实验。开始本篇文章内容TIOVX是TI对标准OpenVx的扩展,TI对OpenVx中添加了一些自己的实现,也保留OpenVx原来的一些用法,关于更多TIOVX的内容大家可以在网上搜索,或者浏览TDA4平台的一些文档,这里就不多说了,我也了解不深。这里帖几篇其他人的文章,介绍的比较好TIOVXTIOVXTIOVX这些都是介绍TIOVX的概念和一些使用的文章,当然,也可以直接去看官方提供

2022-01-03 18:20:40 494

原创 imx8qxp DDR Test

以前在使用imx6的时候使用过nxp提供的内存测试工具ddr_stress_tester,这个工具可以对内存进行校验,给出我们的DDR寄存器配置参数的参考值,然后根据此参考值重新配置DDR,然后再进行测试,现在使用imx8qxp的平台,也要进行DDR的测试,但是i8和i6的测试流程有一点不同,所以在此做以记录。1、修改nxp官方excel文件nxp的ddr测试工具需要一个excel文件来描述单板信息和内存信息,这个excel文件官方会给出,我们要测试自己的板子的话第一步就是要修改这个excel文件这

2021-07-09 12:11:59 494 5

原创 imx8qm xen 虚拟网卡

几经周折,终于可以在这里写下这篇文章,记录一下在imx8qm中使用xen启动Linux和Android系统,并使用网络进行通信,参考了下面这篇文章https://blog.csdn.net/u011784994/article/details/106767143在参考的这篇文章中,我按照他的步骤完成linux网络的配置,他在配置Android网络的时候是配置的eth0看到eth0,我以为要把网络接口配置到domU,也就是Android系统那里去,才能生成eth0接口,于是,按照这个思路就迎来了第一个

2021-03-05 17:18:25 533

原创 imx8qm xen android wifi

名字有点长,尽可能表达出文章要写的重点,接着上一篇的内容,在上次的文章中,我已经把虚拟机Android要使用的usdhc3接口和gpio已经都配置好了,本篇来记录碰到的问题上次配置好了之后,我把编译出来的文件重新烧录进系统中,满怀希望的打开Android界面的wifi开关,结果打开之后不一会就自动关闭了,这就很让人迷惑了,为此我还特地检查了那些配置过得资源,显示都是没有问题的,于是使用logcat来打印系统信息mek_8q:/sys/bus/sdio/devices # logcat|grep

2021-03-02 16:20:28 150

原创 IMX8qm + Android WIFI

目录一 Linux端配置usdhc接口二 Android端配置usdhc3三 问题imx8qm支持xen特性,可以在一块板子上运行两个系统(Linux+Android),但是资源只有一份,所以,在调试的过程中要特别注意资源的分配, linux使用的设备树文件为dom0,Android使用的设备树为domu接下来我就记录一下我在调试的过程中遇到的问题一 Linux端配置usdhc接口wifi设备使用sdio接口与cpu通信,首先检查Android系统的默认资源里有没有wifi所使用

2021-02-26 17:22:03 863

原创 IMX6ULL SPI

目录spi_master结构体spi_device结构体spi_driver结构体总结对linux内核spi驱动框架的学习,会通过三个结构体来一步步深入了解,这三个结构体分别是spi_master,spi_device,spi_driverspi_master结构体借着IMX6ULL平台分析一下linux内核中的SPI驱动程序的大概框架,总体上的框架和上一节中的i2c的驱动是差不多的,回忆一下在i2c驱动程序中,围绕着一个重要的结构体叫做i2c_adapter,它是具体的i2c总

2021-02-23 21:49:10 991

原创 IMX6ULL I2C框架

本节来看I2C驱动框架,题目叫IMX6ULL I2C框架,不是imx特有的i2c驱动框架,只是借着IMX6ULL的平台来分析linux内核中的I2C驱动框架,在Linux内核中,把I2C分为I2c总线、设备、驱动,实现了分层的概念,那么,在内核中,I2C总线抽象为一个结构体叫做I2c_adapter,一个i2c_adapter就是平台上一个真实的物理I2Ci2c_adapter来看一下I2C框架中最重要的i2c_adapter结构体的内容其中重要的成员是struct i2c_algori

2021-02-22 10:55:01 302

原创 IMX6ULL LCD驱动(二)

目录一 注册fb_info二 核心层代码总结一 注册fb_info接着上一小节的register_framebuffer函数开始,调用do_register_framebuffer函数,,列出主要内容static int do_register_framebuffer(struct fb_info *fb_info){ int i, ret; struct fb_event event; struct fb_videomode mode; if (n..

2021-02-04 16:05:43 296

原创 IMX6ULL LCD驱动(一)

本小节来分析Linux内核中的LCD框架,只分析基于RGB接口的LCD框架,如果是涉及GPU的那就比较复杂了,有过应用层对LCD操作的应该知道,上层应用是通过一些Ioctl函数操作/dev/fbxxx,这些函数对内核同统一出来的一套LCD的操作函数,还有,对于不同的单板,其LCD控制器的操作肯定是不同的所以,从这两方面来看,内核LCD框架肯定有两部分工作要完成初始化具体单板的LCD控制器 注册统一的操作函数为上层应用使用驱动大多都是这样,应用不关心下面具体的单板,具体的单板只需要实现自己的操

2021-02-04 15:22:58 855

原创 Linux 4.19输入子系统二

目录一、驱动实验二、应用程序实验三、内核自带按键驱动一、驱动实验上小节简单分析了Linux4.19内核中输入子系统的框架,本节就来实际体验一下输入子系统该如何去用,详细的代码就不去写了,这里只列出流程/* 初始化函数 */int xxx_probe(){ struct input_dev *inputdev; /* input结构体 */ /* 1、申请input_dev结构体 */ keyinputdev.inputdev = input_.

2021-02-02 22:24:23 60

原创 Linux 4.19输入子系统一

之前在Linux2.6内核上已经接触过Linux的输入子系统框架,现在使用新版本的内核,和旧的内核在流程上有一些不一样,但是大体的流程还是一样的,本篇就来分析一下Linux4.19内核中的输入子系统,IMX6ULL使用的是4.15版本的内核,是一样的,原文链接...

2021-02-02 21:46:41 52

原创 IMX6ULL pinctrl子系统

目录概述设备树表示内核中操作总结概述在前面的学习过程中操作了很多的IO引脚,那么,使用一个IO引脚最重要的三部分1、配置IO的复用,主要是MUX类的寄存器2、配置IO的电气属性,主要配置PAD类的寄存器3、配置IO的输入输出设备树表示设备树的引入方便开发者对设备进行描述,对于外设的一些引脚的使用,在设备树中也有描述,称为pinctrl子系统,内核根据设备树中的描述来完成对管脚的配置,这篇随着imx6ull平台的设备树分析来简单了解一些...

2021-01-28 22:52:08 369

原创 设备树中的特殊节点

设备树用来描述一个平台上的设备信息,不仅包括SOC上的设备,还可以添加一个外设信息,简单记录一下设备树中的特殊节点的理解地址信息设备树中的地址信息一般用#address-cells和#size-cells来修饰,address表示地址由几个单元组成,一个单元是一个32位的值(在32位系统上),size-cells表示地址的长度由几个单元组成,比如 aips2: aips-bus@02100000 { compatible = "fsl,aips-bus", "simple-bus".

2021-01-27 22:25:03 302

原创 三、系统频率

目录一、系统时钟来源二、时钟系统三、系统主频修改3.1 PLL1系统主频3.2另一路频率设置3.3 总结4、代码一、系统时钟来源之前的实验中都是采用默认的时钟配置,IMX6ULL默认时钟是396MHz,本节就来配置IMX6ULL使其工作在推荐的528MHz,先看芯片的时钟来源,打开芯片核心板原理图可以看到,芯片已经接了一个32.768KHz的晶振,这个晶振的频率很小,它是用来为系统的实时时钟RTC提供时钟的,一般的,XTALI和XTALO就是系统的时钟引脚,可以查

2021-01-14 23:08:21 724 1

原创 二、启动方式和烧写镜像

第一次的led使用是把生成的bin文件烧到了SD卡,然后从SD卡启动的,这一节就来看一下IMX6ULL的启动方式的选择打开参考手册,找到系统启动这一节,这一节其实已经很详细的说明了启动方式,启动方式手册中说,在系统上电的时候,芯片内部的boot Rom会根据eFUSEs或者BOOT_MODE[1:0]的状态来选择启动设备,boot Rom支持的启动设备有下面这些关于eFUSEs的启动方式选择就不考虑了,一般的芯片主要都是通过IO口的状态来选择启动设备的,IMX6ULL的两个启动引脚就对应4中启动选

2021-01-10 12:56:57 176

原创 一、汇编LED

本篇作为IMX6ULL平台学习的开篇,从此很长一段事件将学习IMX6的开发,也在此对自己立下学习要求,当以认真,谦恭的态度往后学习。好了,开始吧。拿到每一个新的开发板,进行的第一个实验必然是LED的实验,LED在嵌入式的学习中就和软件中的"Hello world"一样重要,更重要的是通过LED实验了解一个新的平台下的GPIO的操作方法,之前接触过IMX6的开发平台,也没有系统的了解过它的IO操作方法,现在来了解一下一、IMX6ULL IO管脚复用功能根据以往的嵌入式开发经验,都知道对于芯片的IO口在

2021-01-08 21:13:19 369

原创 Linux驱动之热插拔

这篇文章简单记录一下有关Linux驱动中的热拔插,在Linux内核驱动开发的时候经常会在程序里创建类,在类中创建设备,比如下面这一段,是从以前的代码中摘抄出来的major = register_chrdev(0, "fifth_drv", &sencod_drv_fops);fifthdrv_class = class_create(THIS_MODULE, "fifth_drv");fifthdrv_class_dev = class_device_create(fifthdrv_c

2020-10-12 22:32:17 885

原创 Linux驱动之I2C创建实例

在上一节中,简单的介绍了Linux-3.4内核中的i2c驱动框架,那么,接下来,就来实际的创建i2c的驱动实例,加深对Linux内核中的i2c驱动的理解1、方法一第一中方法其实就是上节内容中所说的方法,现在来简单回顾一下,上节的内容最后的出来的结论是在系统开始运行之后,和架构相关的mach-xxxx.c文件先运行起来,这个文件中定义有i2c_board_info相关的结构体,结构体包含i2c设备的名字和地址,然后调用i2c_register_board_info 注册i2c_board_info

2020-05-25 23:29:44 963

原创 Linux驱动之I2C框架(3.4内核)

在上一节的文章中介绍了在linux2.6内核中的I2C驱动框架,2.6内核现在已基本上不再使用了,可能版本有点太老了,但对于我们分析内核结构来说也不算过时,看懂旧的再看新的也就没有那么大的压力了,那今天就来分析一下Linux3.4内核中的I2C框架吧分析文件·drivers/i2c/busses/i2c-s3c2410.c注册平台设备驱动,查看probe函数的内容我只截取部分内容,从这些内容中就可以看出套路其实和之前的差不多,也是定义一个关于i2c的结构体,然后去设置这个结构体,设置的时候有一

2020-05-20 22:38:15 247

原创 Linux驱动之I2C框架(2.6内核)

i2c协议对于做嵌入式开发来说应该是必须要了解的一个协议了,也是最基本的一个协议,对i2c协议的物理特性的介绍和i2c设备的操作在我的裸机编程部分有讲解,今天来探索内核中的I2C的真正面目,使用内核:linux-2.6.22.6和以前一样,也是来看一个具体的文件来开始分析(drivers\i2c\busses\i2c-s3c2410.c)文件的入口,很简单,注册了平台软件驱动,重点来看结构体中的probe函数,下面来分步看一下这个函数的内容分配了一个s3c24xx_i2c结构体对象,使能i2c时钟

2020-05-17 22:03:03 128

原创 Linux驱动之触摸屏

这一节来学习触摸屏的知识,在之前的裸机编程中也有一节是介绍触摸屏的知识,所以这一节对于触摸屏的特性的介绍就不会太多,主要来看看在内核中,触摸屏的驱动是如何来实现的,先来看实例代码drivers/input/touchscreen/s3c2410_ts.c,从这个位置就可以知道,它是使用输入子系统来实现的先从入口函数看起,它也是注册平台设备驱动,看一下结构体的内容,从最重要的probe函数开始分析这个函数我只展示了部分的内容,从它的函数体就可以看出来,它主要干了这么几件事情1、分配了一个input_

2020-05-15 22:13:15 661

原创 Linux驱动之LCD程序编写

在上一节中,分析了内核中的LCD的驱动框架,不要被内核中复杂的调用过程把我们搞迷糊了,总结起来就是以下几点1、分配fb_info结构体2、设置fb_info结构体3、注册fb_info结构体是不是很简单,软件层面的fbmem.c不需要我们去管,当然,如果你想要去深入分析的话,剩下的硬件层面的代码就做了那么三件事情,这一节,来编写具体的内核LCD驱动,遵循上面的编程流程先来分配一个结构体,然后去设置它,在设置的时候要注意,fb_info结构体中有一个成员是固定的,就是表示这个设备的一些常用的参数,比

2020-05-11 22:39:45 291

原创 Linux驱动之LCD框架介绍

在裸机编程的时候,曾经编写过LCD的测试程序,对这一部分不是很了解的可以先去看一下,我们今天要做的是基于Linux内核框架下的LCD驱动程序,内核版本,Linux-2.6.22.6内核中已经集成了LCD的驱动框架,在driver/video/fbmem.c,打开这个文件,发现它是符合字符设备驱动的编写流程,下面是它的入口函数注册了一个字符设备驱动,主设备号FB_MAJOR是29,要注意的是在入口函数里注册了类,但是并没有在类下注册设备,先来看看它的操作函数集合中的函数上面的是open函数的详情,

2020-05-11 21:21:01 488

原创 内核移植之修改分区创建文件系统

在上一节最后我们已经成功传递了机器id,启动了内核,但是在挂接跟文件系统的时候出现了错误,这一节的内容我们就来解决这些问题1、修改内核分区先来修改内核中的分区信息,后面再来解决文件系统的问题,原来的内核在启动的时候会打印出分区的信息,可以根据这些输出信息来在内核中定位出分区信息的位置,由于我当时在启动的时候没有保存那些信息,所以这里就无法显示,我使用的smdk2440单板的分区信息是在arc...

2020-04-26 23:50:35 129

原创 内核移植之初步设置单板

uboot的移植先告一段落,从这节开始进入内核的移植,,移植的内核的版本为Linux3.4.2,编译器的版本为arm-linux-gcc 4.3.2把linux内核的压缩包传到服务器上,解压,进入内核目录,首先要做的事就是编辑顶层的Makefile,要使用我们的编译环境在编译内核的时候要使用配置文件,路径是**/arch/arm/configs/,进入这个目录去查看和我们相关的配置文件,...

2020-04-24 22:07:15 221

原创 uboot移植之剪裁和烧写文件系统

通过前面几节的内容,uboot基本上已经移植成功了,把它烧入单板中可以成功启动,并且具备网络下载功能,如果也已经烧录了内核和文件系统,启动是没有问题的,今天这一节来做最后的事情,就是uboot的剪裁和一些结尾,之前我们编译好的uboot很大,有500多k,因为它里边包含了很多我们用不上的模块,就需要剪裁uboot,去掉那些不需要的模块,减小它的大小在之前的启动信息里,有如下的错误警告** Wa...

2020-04-21 23:31:08 199

原创 uboot移植之网卡

经过前面的几节内容,我们的uboot移植已经支持了nor flash启动和nand flash启动了,这一节的内容是让Uboot支持DM9000网卡,就可以使用tftp下载文件了,速度要比串口下载快很多第一步先找到DM9000的文件–driver/net/dm9000.c,在这个文件的同目录下查看Makefile可以看到,要是想编译dm9000.c这个文件,就必须定义CONFIG_DRIVE...

2020-04-19 20:43:24 2786

原创 uboot移植之设置单板nor启动和nand启动

在上一节的内容里,只是初步的修改了uboot的时钟、SDRAM,让uboot在从nor启动的时候可以顺利的启动起来,然后添加了我们自己的重定位代码和对nand flash的操作,为从nand启动的时候代码重定位做准备,其实uboot还并没有可以正常的启动起来,这一节就来实现uboot的nor启动和nand启动,这节过后,我们的uboot就可以正常的启动了1、nor启动上一节uboot启动的时候...

2020-04-17 22:24:07 409

原创 uboot移植之添加单板和NAND启动

在学习完裸机知识后进入到了uboot的学习,最开始对uboot的完全不了解,慢慢的去看uboot的源码,分析它的结构,最近开始做uboot的移植,在这里也不是说要展示什么,只是把自己在移植的过程中遇到的问题和一些过程记录下来,方便以后查看,好了,我们可以从官网上下载uboot,我们使用的是uboot-2012.04.01,这个版本的uboot里并没有对s3c2440单板的支持,所以,把它下载到24...

2020-04-10 22:20:11 309

原创 再提代码重定位

最近在做uboot的一些移植工作,在过程中遇到了很多的问题,有的问题是由于概念不清楚而引发的,其中就包括代码重定位,也不全是代码重定位,牵扯到程序执行的一些地址,关于代码重定位的问题,我在另一篇文章中也做了简单的介绍,这次遇到的问题我也花了一些时间进行了总结,在此把自己的感想做以记录,不对的地方还请指出1、两个地址加载地址:存储地址运行地址:链接地址,运行时所处的地址区别:加载地址简单的说...

2020-04-09 22:44:59 115

原创 ADC和触摸屏

一、ADC和触摸屏介绍这节内容我们来介绍S3c2440上边的ADC和触摸屏,ADC,Analog-to-Digital Converter的缩写,是一种把模拟信号转换为数字信号的转换器,比如我们要测量接有一个变阻器的电路的电压,2可以通过ADC进行转换,把电路的模拟信号转换为方便我们阅读的数字信号,S3c2440上的ADC是一个10位的转换器,可以接收8路的模拟输入信号,触摸屏的模拟电压信号也...

2020-04-04 21:00:21 391

原创 LCD初步测试

1、lcd基本知识今天这篇文章来介绍使用s3c2440来操作lcd的过程,在开始之前首先来介绍关于lcd的一些概念。lcd就是我们常说的显示设备,常用的是TFT lcd和STN lcd,lcd能显示一张图片就是因为在它内部存在一个电子枪,电子枪把缓存里的数据拿出来一个一个打到显示屏上,根据显示屏的分辨率来决定发出多少数据,关于更多它内部的工作细节我们在此不去深究,了解它的大概的工作原理就...

2020-03-28 18:04:34 1249 1

原创 uboot的配置、编译分析

在这篇文章里将来介绍s3c24x0的uboot的配置和编译的过程,首先,我们知道uboot在编译之前还要有其他的操作,分别是解压缩:拿到手的uboot一般是一个压缩包,第一步需要先解压缩(废话)打补丁:下载的uboot是从官网上下载的,所以它可能不是我们想要的,要想添加适合我们自己的功能,就要有一个自己的补丁文件,然后打补丁(patch -p1 < …/u-boot-1.1.6_jz...

2019-12-24 10:48:24 138

原创 输入子系统(二)

在上一节中介绍了Linux内核中的输入子系统的框架,在对输入子系统框架有了大概的了解之后,这一节来实际的编写代码,加深对输入子系统的理解,在写程序之前先来梳理一下,使用输入子系统编写程序的步骤1、最开始肯定是要注册一个代表物理硬件的input_device,这样的话,在内核成功识别之后才能对我们需要操作 的设备进行操作,2、提供对应的硬件操作函数 可以看出,在使用这个框架来编写程序之后,...

2019-12-14 21:25:52 68

原创 输入子系统(一)

1、框架之前写的驱动程序都是使用自己的框架,也只有我们自己知道在测试时该打开什么设备,那么,内核中提供了一套框架,将这些输入设备都进行了统一和规范化,这就是今天要来介绍的输入子系统打开内核source insight工程,在drivers目录下找到input.c,这是输入子系统的最开始的文件,从这里进行分析从上面这张图可以看到,input.c在它的入口函数里先注册了一个名为inout的类...

2019-12-14 14:37:21 218 1

原创 C函数形参传递

在上大学的时候,C语言的教材上有这么一个经典的案例–编写函数来交换两个数的值。这个案例针对的是C语言函数参数的传递过程,先来复习一下这个过程。上面的函数是第一个版本的交换两个数的代码,看上去没有问题,然后执行的结果却和我们预期的不一样从打印结果来看,在my_swap函数里确实是把a和b的值交换了,但是m和n的值还是原来的值,按道理来说m,n和a,b是对应的,所以,从结果来看,my_swa...

2019-12-11 19:52:14 1814

原创 异步通知

前面分别使用了查询、中断、poll机制编写驱动程序之按键驱动,这一节中来介绍另外一种机制—异步通知。所谓的异步通知就是应用程序不再主动的去查询按键的模式,它可以去做别的事情,一旦有了按键事件发生,驱动程序将主动的通知应用程序来读取按键值,该机制使用的就是Linux下的信号signal来实现的,先来看看应用程序的写法void my_signal_fun(int signum){}int m...

2019-12-10 23:52:30 147

空空如也

空空如也

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

TA关注的人

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