05 2020 档案
九、i2c设备驱动
摘要:一、前言 前面第二篇文章中,我总结了Linux系统下i2c驱动中的适配器驱动,但是一个完整的总线-设备驱动模型应该包含总线驱动和设备驱动,总线驱动也就是前面所总结的i2c适配器驱动,现在再来总结一下i2c设备驱动的具体实现步骤。 二、硬件平台及内核版本 硬件平台:NXP I.MX6Q(四核) Ker
阅读全文
八、延迟的工作队列INIT_DELAYED_WORK
摘要:前面讲到工作队列是一种可以将工作推后执行的一种机制,当我们希望某个工作以一个固定的周期去执行的时候可以使用延迟的工作队列来实现,通过分析延迟工作队列函数我们发现,它本质上也是通过注册内核定时器来保证这个延迟的时间的, 因此我们也可以使用内核定时器+工作队列的方式来代替延迟的工作队列。不过这种基于内核
阅读全文
七、create_workqueue和create_singlethread_workqueue
摘要:工作队列是一种可以将我们的工作推后执行的一种机制,在大部分时候,我们并不需要自己建立新的工作队列,而只需要定义工作就可以了,但是还是有必要了解工作队列的创建步骤如下: 1.先定义一个工作队列 static struct workqueue_struct *my_workqueue = NULL; 2
阅读全文
六、系统软中断、tasklet、工作队列work queue的区别及使用
摘要:前言:这篇文章不会对系统软中断、tasklet、工作队列work queue的内核实现机制进行深入分析,仅仅是谈一下这几种机制的不同以及简单的使用。有描述不对的地方,欢迎大家指出。 说明:在分析具体代码时候,用I.MX6Q平台的串口驱动代码来进行分析,内核版本是3.0.35版本 一、系统软中断 讲软
阅读全文
五、prink的使用以及console控制日志输出级别
摘要:事情描述:前段时间做项目,遇到了一个比较奇怪的问题,应用层下发的数据,经过驱动使用SPI发送到打印头上,数据出现被拉宽的现象。刚开始是怀疑应用层给的数据不及时导致数据输出受到延迟,后来放开串口调试,发现一按下打印,大量通过SPI输出数据的时候,会不断打印调试的语句,如果把调试语句去掉,打印就正常了,
阅读全文
四、多核CPU下绑定某个中断到指定的CPU
摘要:前言:标题谈的是多核CPU下绑定某个中断到指定的CPU的方法,但是实际工作中,这个方法可以适配很多种数据接收的情况,所以就记录一下自己之前工作上遇到的具体某一个问题以及解决方法。 之前有一个项目,需要串口接收大量的数据,硬件平台采用的是NXP的I.MX6D系列芯片,双核CPU。实际发现,在接收数据的
阅读全文
三、I.MX6 SPI驱动(控制器驱动、设备驱动)
摘要:1 I.MX6Q的SPI适配器驱动(3.0.35版本内核) 2 文件路径:Kernel/linux_IMX6_CoreC_3.0.35_for_Linux/drivers/spi/spi_imx.c 3 一、控制器驱动 4 入口函数:spi_imx_init() 5 static int __ini
阅读全文
零、Uboot中start.S源码解析
摘要:本文章转自https://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analysis.html 下面来对start.S进行详细分析,看看每一个部分,是如何实现的。 1.1. 设置C
阅读全文
二、I.MX6Q I2C适配器驱动
摘要:1 I.X6Q的I2C适配器驱动(3.0.35版本内核) 2 入口函数(可以预知I2C总线内部也是platform总线) 3 static int __init i2c_adap_imx_init(void) 4 { 5 return platform_driver_probe(&i2c_imx_d
阅读全文