IMX6Q提供了一个General Purpose Timer (GPT)和两个Enhanced Periodic Interrupt Timer (EPIT),共三个定时器中断,但是GPT已经用作系统的时钟中断了。 如果我们要用到其他的时钟中断,就只能用两个EPIT。 可是,在IMX6Q的BSP里面没有提供EPIT的中断,下面就介绍下如何实现EPIT中断。 1 在dts文件里面添加对EPIT的支持.   在imx6q.dtsi中添加下面的代码   epit1: epit@020d0000 { …

2021年9月7日 0条评论 14点热度 阅读全文

1.原始套接字使用场景         我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据,原有的头部信息在传递过程中被隐藏了。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等,而像SOCK_STREAM、SOCK_DGRAMZ则通常用于应用层,并不能满足该需求。          通过原始套接字,…

2021年4月25日 0条评论 28点热度 阅读全文

9、linux物理地址到虚拟地址映射MMU 在单片机和裸机中操作硬件直接访问物理寄存器即可 例如 unsigned int *p = 0x12345678; *p = 0x87654321; 但是在Linux上不行,在Linux上,如果要想操作硬件,需要先把物理地址转换为虚拟地址,因为Linux使能了MMU(物理地址转换为虚拟地址),所以我们在Linux上不能直接操作物理地址。 MMU的好处? ​ (1) 让虚拟地址成了可能 ​ (2) 可以让系统更加安全,因为有了MMU,我们上层应用看到的内存都是虚拟内存,我们的…

2021年4月20日 0条评论 19点热度 阅读全文

printk简介 在Linux内核中没有printf函数,那么内核是怎么打印调试信息的呢,这里我们用到的是printk函数,在内核中想要向控制台输出或者显示一些内容,必须需要printk函数,这个函数。不同之处在于, printk可以根据日志级别对消息进行分类,一共有 8个消息级别,这 8个消息级别定义在文件 include/linux/kern_levels.h里面,定义如下 #define KERN_SOH "\001" #define KERN_EMERG KERN_SOH "0" 紧急事件,一般是内核崩溃 …

2020年12月12日 0条评论 3点热度 阅读全文

前言     中断在驱动中是非常常用的,无论是外部的GPIO中断,还是SPI,I2C等发送或接收中断,都是必不可少的。所以今天来看看Linux中的中断处理。   中断分类 上面我们根据中断来源,屏蔽方式和中断入口对中断进行了简单的分类。   中断控制器 PIC: 可编程中断控制器 GIC: Generic Interrupt Controller, 通用中断控制器。(常用) GIC是目前最常见的一种中断控制器,它在多核CPU中特别常见。它对中断做了细分: SGI: Softw…

2020年7月20日 0条评论 1点热度 阅读全文

linux内核可加载模块的makefile 在开发linux内核驱动时,免不了要接触到makefile的编写和修改,尽管网上的makefile模板一大堆,做一些简单的修改就能用到自己的项目上,但是,对于这些基础的东西,更应该做到知其然并知其所以然。 本篇文章中只讨论linux内核模块编译的makefile,linux内核makefile总览可以参考另一篇博客:linux内核makefile概览 本篇博客参考官方文档。 linux内核使用的是kbuild编译系统,在编译可加载模块时,其makefile的风格和常用的编…

2020年7月15日 0条评论 1点热度 阅读全文

文章目录 Linux内核按键去抖动问题 按键抖动 按键驱动的方法 Linux内核去除抖动的原理 代码示例 总结 Linux内核按键去抖动问题 按键抖动 按键抖动表现出来的现象其实就是明明只是按下去一次按键,但是却总是触发多次中断,本质其实是因为按键属于机械结构,所以不可避免会在按下和松开时产生意外的中断触发。 按键驱动的方法 按键去抖动的方法有两种: 硬件去抖动:硬件工程师只需要添加一个滤波电路等方式即可去除不规整的波形导致的抖动产生,但是这样会提高产品的成本,但是去除抖动效果最好。 软件去抖动:传统的单片机利用循…

2020年1月2日 0条评论 1点热度 阅读全文

内核编译与配置 1. Menuconfig 2. Kconfig 3. Makefile 4. 内核配置与编译的流程 5. 注意 1. Menuconfig Linux编译器是通过.config文件确认哪些代码要编译进内核,如果我们要配置和裁剪内核,需要对.config文件下手。更改.config文件的工具就是muneconfig, 它是基于文本菜单的配置界面。在Linux源码目录下输入命令 make Menuconfig 即可进入配置界面,具体界面如下如所示: 我们可以通过配置menuconfig菜单来对哪些代码…

2019年12月5日 0条评论 3点热度 阅读全文

  概要 前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义offsetof和container_of。内容包括:1. Linux中的两个经典宏定义2. Linux中双向链表的经典实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3562146.html 更多内容: 数据结构与算法…

2019年6月2日 0条评论 1点热度 阅读全文

1. Linux内核模块 Linux本身是宏内核(单内核),但是又提供了模块这样一种机制,构成了Linux独有的模块特性。 Linux内核模块的特点: (1)模块本身不被编译入内核镜像,从而控制了内核的大小。 (2)模块一旦被加载,它就和内核中的其他部分完全一样。 2. Linux内核模块操作指令 (1)lsmod         显示系统中已加载的所有模块,实际就是读取并分析“/proc/modules”文件。         注:内…

2019年4月17日 0条评论 2点热度 阅读全文