自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Justwe的博客

记录技术的点滴

  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 RT Preempt linux学习笔记

实时操作系统要求在一个触发信号到来之后能够在一个确定的时间点之前进行响应处理。它与普通的非实时操作系统区别在于:普通操作系统的响应延时受系统负载影响较大,轻负载时可能会满足响应的要求,但是在负载变大的时候响应会变慢,并且这个响应时间是不确定的。因此一个足够快的系统不代表是一个实时操作系统,实时系统必须要求在负载变化的情况下依然能够满足确定的响应时间,如果无法在确定的时候下完成响应,那么会导致系统错误。

2023-09-18 22:52:26 1142

原创 xen-uart

每个earlycon都对应一个earlycon_id,所有的earlycon_id都被维护__earlycon_table中。

2023-09-18 22:15:50 270

原创 xen-timer

该表总结了本节中讨论的不同计时器的信息。对于这些计时器,虚拟偏移量(CNTVOFFSET_EL2)总是表现为0。因此,尽管这些计时器与虚拟计数值进行比较,但实际上它们使用的是物理计数器值。

2023-09-18 22:09:52 250

原创 xen-softirq

主要了解一下xen项目中软中断是怎么使用,如何实现的。同时也对自己学习过程的一次记录。

2023-09-18 09:48:56 121

原创 linux-gic中断分析

这里主要分析 linux kernel 中 GICv3 中断控制器的代码(drivers/irqchip/irq-gic-v3.c)。先来看下中断控制器的设备树信息:二、初始化1. irq chip driver 的声明定义 IRQCHIP_DECLARE 之后,相应的内容会保存到 __irqchip_of_table 里边:这里展开后,会定义一个__of_table_gic_v3结构体,存放在 __irqchip_of_table段里面,该段用于存放中断控制器信息:在内核启动初始化中断的函数中

2023-09-17 23:07:02 312

原创 GICv3学习

参考文档:《corelink_gic600_generic_interrupt_controller_technical_reference_manual_100336_0106_00_en》《IHI0069H_gic_architecture_specification》《ECM0495013B_GIC_Stream_Protocol》接口如下图所示:通常,Distributor和Redistributor用于配置中断,CPU interface用于处理中断Distributor的寄存器是内存映射的(me

2023-09-17 22:59:29 709

原创 xen-gic初始化流程

调试平台使用的是gic-600,建议参考下面的文档来阅读代码,搞清楚相关寄存器的功能。

2023-09-17 22:47:54 229

原创 xen-trap

xen的虚拟化实现有一个很重要的机制就是tarp,中文可以暂且叫做陷入。在ARMv8中,trap就是异常等级的一个切换。当发生trap的时候,就会进入设定好的异常向量表中,硬件自动判断属于哪种类型的异常。

2023-09-17 22:42:47 160 1

原创 ELF格式学习

ELF的英文全称是Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Application Binary Interface)接口的一部分,也是Linux的主要可执行文件格式。

2023-01-03 21:56:53 927

原创 Linux源码目录说明

内核源代码的根目录下包含了以下文件及文件夹:COPYING-许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人可以出售源代码。CREDITS- 贡献者列表Kbuild- 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。Kconfig- 这个脚本会在开发人员配置内核的时候用到MAINTAINERS- 这是一个目前维护者列表,他们的...

2021-01-28 22:52:18 1128

原创 Linux驱动开发—— input子系统

我们平时使用的按键、鼠标、键盘、触摸屏等都属于输入(input)设备, Linux 内核专门有一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报输入事件,比如按键值、坐标等信息, input 核心层负责处理这些事件。input输入子系统分为3层:上层(input事件驱动层)、中层(input核心层)、下层(input设备驱动层)

2020-04-08 12:30:07 509

原创 设备驱动模型底层架构

Linux设备驱动模型是一个比较抽象的概念,它对系统的所有设备和驱动进行了抽象,形成了复杂的设备树型结构,采用面向对象的方法,抽象出了 device 设备、 driver 驱动、 bus 总线和 class 类等概念,所有已经注册的设备和驱动都挂在总线上,总线来完成设备和驱动之间的匹配。总线、设备、驱动以及类之间的关系错综复杂,在 Linux 内核中通过 kobject、 kset 和 subs...

2020-04-04 22:33:22 695

原创 自动创建设备节点

我们在编写好驱动的时候(单纯注册字符设备),使用insmod或者modprobe 加载驱动程序以后还需使用命令“mknod”手动创建设备节点。这样比较繁琐,Linux提供了一种机制来自动创建设备节点(在驱动模块加载后自动在/dev 目录下创建对应的设备文件。) :mdev 机制udev 是一个用户程序,在 Linux 下通过 udev 来实现设备文件的创建与删除, udev 可以检测系统中...

2020-03-29 23:06:43 792 1

原创 字符设备的注册以及删除

linux字符设备驱动开发的重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备。这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。我们先来看看 register_chrdev有什么不足的地方:static inline...

2020-03-29 16:51:19 831

原创 Linux 设备号

Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。 Linux 提供了一个名为 dev_t 的数据类型表示设备号, dev_t 定义在文件 include/linux/types.h 里面,定义如下:typedef __kernel_dev_t dev_t;typedef __u32 __kern...

2020-03-29 16:42:03 350

原创 AM335X开发—— uboot2016.5 SPL阶段分析

一般的芯片启动流程都是Romcode –> BL1 –> BL2 –> Kernel –> User Image,TI的芯片也不例外,Romcode –> ML0(SPL) –> uboot.img整个boot阶段被分为三部分,第一部分是芯片固化的Romcode,上电自动执行,一般支持flash,sd,uart,usb等启动方式,引导加载spl至片内...

2019-07-19 09:53:35 1173

原创 Linux下去掉^M的方法

问题:在windows下使用notepad++写的脚本上传到Linux下,在使用vim编辑的时候我们发现在行末出现了^M。造成的原因:在DOS/Windows里,文本文件的换行符为\r\n,而在linux系统里则为\n,所以DOS/Windows里编辑过的文本文件到了linux里,每一行都多了个^M。^M只是一个换行符号,没有实际的用处,我们可以将它保留,也可以将它删除。解决办法:1....

2019-07-10 10:42:33 1331

原创 qt5.4显示界面+触摸坐标旋转

我们设计的产品在使用时是需要竖屏显示的,但是我们使用的是一个分辨率为1024*600的横屏LCD。这时候,就需要通过旋转来实现竖屏显示了。我们的系统使用的是QT5.4.1,查阅了相关资料,发现所提及的qt旋转都是基于QT4的,只要在参数后面加 -display "Transformed:Rot90"就可以旋转90度。qt5 opengl有这个功能,但是linuxfb没有这个功能。为此,修改...

2019-06-19 16:21:57 6400

原创 嵌入式linux下的触屏模拟

最近博主我接到要求,要对研发的一个产品的触摸屏进行测试,大概内容就是要不断地随机点击触摸屏,来测试软件会不会意外退出(鲁棒性验证)。这里我把开发过程记录下来,方便参考。我们的触摸屏使用的是ads7846这一款触摸屏控制器,找到内核下对应的驱动文件:/drivers/input/touchscreen/ads7846.c。接下来就要开始修改这个驱动了。我的修改思路是这样的:在这个驱动的基础上...

2019-04-10 15:15:26 1843

原创 CAN总线基础知识

最近在调试机器人控制器的CAN接口来实现和焊机进行通讯,之前对于CAN也没有深入的了解,所以花了一些时间来学习,现在我汇总了一下,方便以后查阅,同时也给想了解CAN相关知识的朋友们提供一个参考。1.CAN 协议的基本概念CAN 协议如表 1 所示涵盖了 ISO 规定的 OSI*1 基本参照模型中的传输层、数据链路层及物理层。CAN 协议中关于 ISO/OSI 基本参照模型中的传输层、...

2019-03-21 18:27:48 4005 1

原创 Linux kernel版本号的获取以及修改

在使用linux的时候,我们使用cat /proc/version命令来获得我们内核的版本号,但是是如何产生的呢?请看内核源码中的fs/proc/version.c文件:#include <linux/fs.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/p...

2019-02-19 16:12:06 17251 2

原创 Linux 内核源码中likely和unlikely

if (likely(value))等价于if (value)if (unlikely(value))等价于if (value)也就是说likely()和unlikely()从阅读和理解的角度是一样的。这两个宏在内核中定义如下:    linuxcompiler    #define likely(x) __builtin_expect(!!(x), 1)    #defi...

2018-10-17 09:57:31 199

原创 嵌入式开发——rtc时钟调试笔记

前段时间在调试AM335X的rtc时钟功能,一开始是使用芯片内部的rtc时钟模块,后来发现功耗有点高,转而使用rtc时钟芯片,型号为ds1672.。现在把两者的调试要点记录下来,方便后续的查阅。注:使用的linux内核版本为4.4.32芯片内部RTC:查看官方的说明文档:http://processors.wiki.ti.com/index.php/AM335x_Schematic_C...

2018-10-17 09:40:03 3275

原创 C语言字节对齐的相关笔记

一、概念     对齐跟数据在内存中的位置有关。程序中如果一个变量的内存地址正好位于它长度的整数倍,它就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。二、为什么要字节对齐     字节对齐和CPU的数据访问效率是有关系的。假设整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存:第一次...

2018-07-31 09:46:38 175

原创 clock_gettime 函数笔记

函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。#include<time.h>int clock_gettime(clockid_t clk_id,struct timespec *tp);clk_id : 检索和设置的clk_id指定的时钟时间。           CLOCK_REALTIME:系统实时时间,随系统实...

2018-07-28 13:41:10 29682 7

原创 ioremap和ioremap_nocache函数笔记

ioremap - 将一个IO地址空间映射到内核的虚拟地址空间上去void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)入口: phys_addr:要映射的起始的IO地址;size:要映射的空间的大小;flags:要映射的IO空间的和权限有关的标志; void *i...

2018-07-27 09:30:47 10917

原创 Linux 文件 I/O笔记

一、Linux 的文件 I/O 概述     Linux 把大部分系统资源当作文件呈现给用户,用户只需按照文件 I/O 的方式,就能完成数据的输入输出。Linux 文件,按其代表的具体对象,可分类为:1.普通文件,即一般意义上的文件、磁盘文件;2.设备文件,代表的是系统中一个具体的设备;3.管道文件、FIFO 文件,一种特殊文件,常用于进程间通信;4.套接字(socket)文件,主要用...

2018-07-20 20:53:01 272

原创 485通信自动收发电路详解

我们先看看普通的收发电路。普通的485电路,除了“用RXD连接485芯片的RO引脚、用TXD连接485芯片的DI引脚”,还会用一个单片机的普通IO引脚连接到RE、DE引脚上。当单片机要发送数据的时候,控制PA8为高电平,数据通过TXD发送出去。当单片机要接收数据的时候,控制PA8为低电平,数据通过RXD接收回来。然而,自动收发电路,就是不用单片机引脚PA8,当数据进来的...

2018-07-19 09:27:24 85221 25

原创 AM335X开发——设备树下增加SRAM、FPGA的GPMC设备节点

最近在做嵌入式的开发,调试的是一块搭载了AM3359、AM4379以及Cyclone10三个CPU的板子。三者的通讯主要是通过GPMC总线来实现,数据存储在一块大小为256KB的SRAM中,数据交互则通过Cyclone10这块FPGA上的双口RAM来实现。其中,AM3359这块CPU上运行了linux-rt-4.4.32实时内核。在这里,记录了GPMC调试的一些问题以及基础知识,方便后续的查阅。...

2018-07-18 14:53:41 7411 10

原创 嵌入式开发——Linux串口编程笔记

  Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备。在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2。一、Linux下串口使用的基本流程:二、串口操作需要的头文件       1.#include &lt...

2018-07-18 09:55:05 5056 1

EtherCATCommunication_TC.7z

压缩包中包含了EtherCAT Communication Principles说明文档

2019-10-24

空空如也

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

TA关注的人

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