自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 QT中配置显示长宽

QT的显示配置文件是/etc/formfactor/machconfig文件,在这个文件中是有显示的长宽设置参数的,如下:但是默认是被注释掉了Formfactor是形状相关的文件夹,在这个文件夹下查找其他文件。同级还有一个config文件,如下:这部分判断了刚才上面文件中的长宽宏定义,默认没有设置,所以执行下面的命令:执行fbset后使用grep读取了geometry项用awk命令获取行像素点参数是800翻转之后的长宽参数没有问题...

2022-05-31 09:21:46 397

原创 Linux内核中的互斥锁和自旋锁的区别

很多人搞不清自旋锁和互斥锁的区别,这两种锁都是最底层的锁实现。是很多高级锁的基础。为什么需要锁?共享资源是有限的,且同一时间只能有一方占用。就像我们常见的共享单车,它是多人共用的,但是在某个时刻,只能有一个人使用,当我们扫码的时候,它只属于我们,其他人不能占用。这就是加锁的意义。为了保证系统中的共享资源在一个时刻只能有一个线程访问,避免多线程同时使用导致的数据错乱。锁是谁加的?任何操作都是由内核完成,线程向内核申请加锁,是否能锁住是由内核决定的。互斥锁假设我们目前有两个进程,进程A和进程B。当A

2022-05-09 13:46:48 2915

原创 6Q4.1.15系统上移植mysql

参考链接如下:https://blog.csdn.net/weixin_42150360/article/details/113948214?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4https://www.cnblo

2022-05-09 11:07:20 304

原创 git命令应用——blame命令

当我们使用git的时候,我们都会用git log去查看一下历史提交。commit 5a73eb9eaabbb9ebcabd9138eccb8897325a81ba (HEAD -> master)Author: mx <1015442941@qq.com>Date: Thu Mar 31 13:42:38 2022 +0800 support docker commit 1764eec8df073f01a9a11521bd50821410c6b2edAu

2022-05-06 13:37:40 4818

原创 关于FIFO的一点理解。

FIFO,是First Input First Output的缩写,就是先进先出的意思。首先来说FIFO存储器,其目的是为了增加数据传输率,处理大量的数据流,以及匹配不同传输速率的系统。FIFO存储器是先进先出的双口缓冲器,一个输入口,一个输出口,第一个由输入口进入的数据第一个从输出口移出。单片FIFO主要有两种结构:触发导向结构和零导向结构。触发导向传输结构的FIFO是通过寄存器阵列构成的,零导向传输结构是由具有读和写地址指针的双口RAM构成。其只要作用是作为系统的缓:1、 对连续的数据流进行缓存,防

2022-05-05 15:42:03 1414

原创 linux平台触摸配置流程

触摸板的两种实现方式:电阻触摸和电容触摸。我们的电阻触摸是通过cpu自带的四路ADC来采集。还有一些平台CPU没有ADC或者ADC不够用,就使用了tsc2007这个adc芯片来实现,然后通过iic和cpu通信。这次我们主要说电容触摸的驱动如何配置重点说一下iic接口的:说到配置还要分两类:有设备树和没设备树有设备树的情况下,就进行两步操作,一是添加驱动和将驱动编译进内核。kernel/drivers/input/touchscreen一般触摸的驱动都在这个路径下,以gt911为例,我们可以在这个

2022-04-15 15:45:58 1187

原创 解决imx6q上操作GPIO在终端看不到变化的问题

我们对于GPIO的操作有两个方法,一是通过一个gpio驱动,生成GPIO节点,然后在根目录的/dev下对相应节点进行操作。另一个是通过文件系统的/sys/class/gpio接口对相应的GPIO进行导出然后操作。在第二种方法的操作过程中,暴露出一个问题,在我们导出gpio之后设置方向为输出,然后设置了其输出值,再cat其value值的时候发现没有变化。后用万用表测量确实电平是修改了的。这个问题是由于读取output的value值是从PSR中读取的,而写入的output值是写入到DR中的,不是同一个寄存

2022-04-15 15:00:37 473

转载 make的相关命令详解和区别

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。  makefile带来的好处就是–“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nm

2022-04-15 10:55:56 822

原创 RK3399调试MIPI屏幕的一些知识延伸

MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准。名词解释• DCS (DisplayCommandSet):DCS是一个标准化的命令集,用于命令模式的显示模组。• DSI, CSI (DisplaySerialInterface, CameraSerialInterface• DSI 定义了一个位于处理器和显示模组之间的高速串行接口。• CSI 定义了一个

2022-04-12 16:03:14 3153

原创 关于shell脚本的一些理解和基础

shell脚本基本语法我们都知道,在编写shell脚本的时候第一行必然是#!/bin/bash因为linux中不只有bash一个解析器,不同解析器中的语法不相同,这个是通知系统使用bash解析器一、shell脚本中的变量shell中一样可以对变量进行赋值、运算但是需要注意几个点:1、shell脚本相比C语言有一个优势是变量不需要定义,在使用的时候直接a=1,第一次使用就默认会定义。2、shell中的变量只有两种类型,整型和字符串。3、shell中使用变量不能加空格,否则会被识别成命令。shel

2022-04-12 15:53:00 971

原创 IIC通信详解及数据读取过程分析

IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。特点:主要适用于小数据量,距离短,的情况。属于同步、半双工串行通信。可以实现一个主机和多个从机之间通信,并且通信均由主机发起,从机不能主动发起数据。器件发送数据到总线上,则定义为发送器,器件从总线上读取数据,则定义为接收器(主器件和从器件都可以是发送器也可以是接收器)谁接收谁应答

2022-04-12 10:49:11 9305 1

原创 imx6q修改LVDS接口数据格式

LVDS数据格式有两种:VESA标准和JEIDA标准,飞凌支持的10.1寸lvds屏,默认的数据格式是VESA,所以源码中默认也是VESA格式,如果替换的一些屏是JIEDA格式,则需要修改。由于需要显示logo,所以显示是分成两部分,UBOOT阶段的显示和内核阶段的显示UBOOT:修改board/freescale/mx6sabresd/mx6sabresd.c文件。默认是VESA格式,需要添加JEIDA格式的相关配置:static void enable_lvds(struct display_i

2022-04-08 11:57:38 937

原创 linux中的sleep函数和delay函数

对于做过单片机程序的朋友来说,delay是很常见的函数,通常就是while或者for循环,进行空指令的执行,由于单片机的晶振固定,一个机器周期的时间是固定的,执行多少个空指令, 就可以完成多少个机器周期时长的延时。其实在linux中的delay函数,道理是一样的,都是通过cpu执行空指令来达到延时的目的,但是对于操作系统这种多线程进行的方式来说,在需要延时的时候,可以通过将进程挂起的方式来实现延时。这就是sleep函数。sleep和delay的区别最明显也最重要的区别就是,在执行delay的时候,是执行

2022-03-30 09:14:40 3287

原创 在IMX6Q的linux4.1.15版本上默认支持docker

关于docker:Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。所以很多应用由于其环境特殊,是需要运行在docker里的。但6q默认没有支持d

2022-03-29 16:58:12 1299

原创 2022-3-25随笔

从19年十月份起,从事嵌入式行业已经两年半的时间,从刚开始连一个ls命令cd命令都不知道怎么用,到现在独立调屏独立移植驱动。说实话不知道是怎么过来的,进步都在潜移默化之间,突然有一天,面对浩瀚的代码,从手足无措变成我可以试着读一读。最遗憾的一点就是没有好好记录自己这个学习的过程,当某一天回过头先看一看的时候,就会出现现在这个状态,不知道怎么过来的。实际上,但是可能有存在一种想法:我是个垃圾,垃圾之路是不值得分享的。而现在我愿意称之为小白,小白的成长之路实际上更适合一些同类小白。每篇文章都有其受众。技术大牛

2022-03-25 13:57:40 156 1

原创 s5p4418安卓系统适配fpc8563芯片遇到的问题及解决

应一个客户需求,4418安卓系统适配pcf8563芯片。由于安卓系统的linux内核是3.4.39版本,并没有支持设备树,所以修改完配置文件,还需要在板级文件进行配置。修改配置文件:--- a/linux/kernel/kernel-3.4.39/arch/arm/configs/s5p4418_drone_android_lollipop_defconfig+++ b/linux/kernel/kernel-3.4.39/arch/arm/configs/s5p4418_drone_android_

2022-03-25 11:41:26 4108

原创 RTC保存年份不正确的问题排查及解决

在imx 6q的4.1.15版本linux系统上适配hym8563这款rtc芯片,配置上驱动后产生了如上面的问题,设置时间没有问题,设置年份会比减六年存储。但是如果设置的是15年及以下就不会有这个问题。这是时间的读取程序,使用了bcd2bin函数,将存入的bcd格式数据转成bin格式。关于bcd格式和bin的区别:Bcd格式有的也叫8421格式,或者叫8421bcd,学过数电肯定有印象。Bin格式就是直接转成二进制数。例如一个十进制15,转成二进制是1111转成bcd格式是,0001 010.

2022-03-14 11:13:43 967

原创 老版本ubuntu使用apt-get命令更新错误

使用的ubuntu环境:12.04 LTS执行sudo apt-get update的时候报错:W: Failed to fetch http://mirrors.163.com/ubuntu/dists/precise/main/source/Sources 404 Not Found [IP: 219.148.147.103 80]看起来是源的问题,于是修改源,改成阿里源。sudo gedit /etc/apt/sources.list阿里源deb http://mirrors.aliy

2022-03-14 11:01:58 3696

原创 关于看门狗应用的分析及拓展

以下为看门狗测试应用的代码/** Watchdog Driver Test Program*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/ioctl.h>#include <linux/types.h>#include <linu

2022-03-14 10:05:21 254

原创 LTC2943电量计芯片数据读取

最近调试了一款电量计芯片,LTC2943。关于其数据读取过程,进行如下分析,这部分不太了解的朋友可以参考,都是个人的一些理解,有不到位的地方欢迎指出。首先看到,芯片手册中关于寄存器的定义和描述如下:本文主要用到的是02h和08h这两个寄存器,02寄存器中存储的是电荷量,08寄存器中存储的是电压值。电量支持应该是使用给这两个寄存器,手册中所说的C、D寄存器。但是在手册中没有看出这两个寄存器有什么区别,驱动中也是只使用了MSB这个。获取寄存器数据的函数返回值就是读取到的数据。这个是驱动中获取

2022-03-09 16:04:19 2939 1

原创 make[2]: *** [arch/arm/dts/s5p4418-drone.dtb] Error 127报错的解决办法

在ubuntu中编译uboot源码或者内核源码的时候,可能会出现make[2]: *** [arch/arm/dts/s5p4418-drone.dtb] Error 127这类似的设备树编译报错这一般是因为ubuntu中没有对应的设备树编译器执行命令sudo apt-get install device-tree-compiler安装设备树编译器即可安装了编译器之后,编译有另外一个问题:应该是和dtc这个命令的参数有关,参考一篇文章提到需要更新dtc版本https://blog.csdn.net

2022-03-07 11:13:15 3137

原创 U-BOOT启动流程的一点分析

都说start.S是整个系统启动的第一个文件,但是是从哪里决定的呢,这要看连接文件u-boot.lds,来确定程序入口点:所以看到入口是_start,在这个start有一个image copy start是镜像复制的开始,_start函数也在这个vectors.s中定义。查看arch/arm/lib/vector.s在这个start函数中,直接跳转到一个叫ARM_VECTORS的宏定义下面:第一条就是跳转到reset函数,这个函数是在start.S中定义的。查看arch/arm/cpu/arm

2022-01-10 14:43:31 321

原创 OK3399设置GPIO默认低电平

设置GPIO默认低电平。这个方式比较简单粗暴,适合应急使用,不太符合代码标准,仅供参考需求:在3399开机启动阶段,要求gpio拉低。但是在uboot阶段,并没有找到相关的函数。所以想到直接用writel函数写寄存器。关于writel、readl等的具体使用,可以百度。Writel是一个一次写入32位的函数。格式为Write(0xffffffff,0x00000000);其中ffffffff指的是写入的内容,00000000指的是要写入的地址。查看3399CPU手册part1。3399的g

2022-01-10 10:31:04 1541 1

原创 3399ubuntu系统配置开机自启脚本

如果是使用过6UL 6Q或其他平台的朋友可能知道,一般开机自启脚本都在/etc/init.d/rc.local这个呢是用的init.d工具管理的开机启动。但在ubuntu系统上,是使用的systemd管理的。实际上实现的内容都是一样的,开机之后的一些配置。所以,开机自启脚本也是这样实现。、systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。执行 ls /lib/systemd/system 你可以看到有很

2021-10-14 11:32:08 264

原创 ubuntu下创建docker镜像并打包输出

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。以上呢,是关于docker的解释。通俗来说,就是一个个针对于不同的源码的不同开发环境,一些库啊什么的。由于我日常工作中会用到编译不同arm处理器的linux或者android系统,但是不同版本之间用到的交叉编译器还有库之类的都不太一样,甚至有冲突。之前的是通过不同的ubuntu虚拟机来区分,但是这样的弊端就

2021-07-13 11:38:36 3045

原创 IMX6DL4.1.15支持EIM总线(下)——配置原理分析。

上次说到在飞凌IMX6DL上支持了EIM总线,描述了一下具体操作。但是知其然,还需要知其所以然,因为我有一个十位地址位,32位数据位的配置方法,如下。但客户需要的是五位地址,八位数据。且是有引脚复用的。底板是使用CSI0的引脚做的数据引脚,EIM的DA脚做的地址引脚。所以配置是需要修改的,查看CPU手册:手册中找到如上表格,左侧红色部分为要做的功能,A的为地址线,D的为数据线。上面绿色的为对应的配置。中间黄色的为做对应功能的引脚。客户需要的数据位是8位,所以我需要在黄色部分左侧四列中选择。也

2021-07-06 15:46:17 1268 3

原创 IMX6DL4.1.15支持EIM总线(上)——实际操作,修改内容。

工作中遇到一个客户需要通过IMX6Q的EIM总线和fpga通信。需要配置一条8位数据位,5位地址位的EIM总线。飞凌6Qlinux4.1.15默认没有配置EIM总线。需要添加EIM总线的配置,实际上,和添加一个串口类似,同样是三步:1、添加EIM总线节点2、配置引脚复用3、去掉其他的引脚功能复用。一、首先进行节点添加。1、arch/arm/boot/dts/imx6qdl-sabresd.dtsi文件中添加如下&weim { pinctrl-names = "default"

2021-07-06 15:28:52 1430 1

原创 linux学习笔记——gst-launch-1.0

使用平台:飞凌OK3399-C开发板gst-launch-1.0是构建和运行基本GStreamer管道的工具命令格式:gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTIONOPTIONS参数选项:–help-v, --verbose-q, --quiet 不打印信息-m, --messages 输出管道总线上的消息-t, --tags 输出标记tag(也称为元数据)-o FILE, --output=FILE 将管道保存到XML文件中,并退出-f,

2021-07-05 16:24:06 5821

针对EIM总线的fpga驱动

之前分享了imx6q上配置EIM总线的方法,通过fpga测试,很多人需要这个源码。

2022-03-14

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

TA关注的人

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