背景:嵌入式作业1.环境i.MX8MP EVK,Linux 5.10.52,Yocto需要编译出yocto的sdk,然后使用以下命令激活交叉编译环境。source /opt/fsl-imx-xwayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linuxhttps://www.nxp.com/docs/en/user-guide/IMX_PORTING_GUIDE.pdf根据上面的链接单独编译出内核头文件。
一、概念所谓并发,是指多个内核路径同时访问和操作数据,可能发生 覆盖共享数据的情况,造成被访问数据的不一致。在内核中发生并发访问并发源主要有以下4种。中断和异常软中断和tasklet:软中断和tasklet可能随时会被调度运行,从而打断当前正在执行进程的上下文。内核抢占:调度器支持内核抢占。多处理器并发运行上述情况需要针对单核和多核系统进行区别对待。对于单处理器的系统有以下并发...
出入口函数注册usb_driver结构体,设置probe,disconnect,id_table等参数,其中probe函数用于设置usb控制接口的信息,设置video_device结构体,设置它的release, fops,ioctl_ops函数。并且注册这个结构体1.首先会调用myuvc_open函数,2.调用querycap表明它是个摄像头,且打开数据流传输,3.列举支持哪些的数据格...
Spi总线在实际应用得比较多,所以这篇为文章讲解以实际应用为主,bus总线类型细节不做讲解,感兴趣的读者可以分析源码,研究内核源码我觉得是一件非常有趣的事情,同时也是一门艺术。Spi总线上可以挂flash、wifi网卡等常见设备。本文讲解以挂在flash作为实例。 Spi总线硬件电路如下图所示。一般有四根线– MOSI, MISO, SCK, SS;spi下可以挂在多个设备,SS...
Linux内核中有很多总线驱动,但都是由bus_type总线内管理,在/sys/bus目录下能够看到该内核定义了那些系统总线,常见的有platform、iic、spi、input等。内核中的总线与实际物理总线不一样,这里的总线是虚拟的,仅仅是一系列链表管理的对象,我们称这个管理链表为驱动总线。本文分析platform总线,这个总线在驱动结构中比较常用。平台定义与注册如下图所示。 注意留意...
这篇文章分析挂在spi总线下的flash设备驱动程序,设备树信息如下所示。Spi设备驱动程序如下:看到没有,spi_driver驱动结构与platform_driver结构基本一致。我们来看看spi总线的匹配方式如何。Spi核心层定义与注册如下所示。注册方式与platform总线完全一致,看到初始化驱动的入口函数了吗,这也是在前文提到过的,是module_init的一种变形。匹配函...
I2C总线经常挂载eeprom、温度传感器、湿度传感器等设备。I2C总线下可以挂载多个设备,识别设备采用一个地址,这个地址在一条i2c总线是独一无二的。I2C总线驱动与spi总线驱动框架是一致的,都是采用控制器、core、设备三层驱动。内核中I2C 的处理已经做好了,我们只需要做设备驱动程序相关的内容。总线处理好了I2C 协议,即总线知道如何收发数据,而不知道数据的含义,我们要做的只是设备相...
1、修改设备树文件在根节点/创建一个LED的子节点2、驱动编写
搜索
一、上半部和下半部(顶半部和底半部)上半部:我们在使用request_irq申请中断时注册的中断服务函数属于中断处理的上半部。适合耗时不长的程序。下半部:适合处理过程耗时的代码。①、 如果要处理的内容不希望被其他中断打断,可以放到上半部。②、如果要处理的任务对时间敏感,可以放到上半部。③、如果要处理的任务与硬件有关,可以放到上半部1、软中断Linux 内核使用结构体 softir...
先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下:①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width)、高(height)、hspw、hbp、hfp、vspw、vbp 和 vfp 等信息。②、初始化 LCD 像素时钟。③、设置 RGBLCD 显存。④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片...
Linux I2C 驱动框架简介
一、USB的一些基本概念管道(Pipe) 是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。端点(Endpoint) 是USB 设备中的可以进行数据收发的最...
Linux下写驱动控制gpio时,有两种方法:用request_mem_region函数和ioremap等得到控制寄存器的地址,然后用iowrite32函数控制该gpio用gpio_request 和 gpio_set_value函数来控制gpio引脚第二个是内核提供的gpio 子系统,一般就用它。第一个就是你自己实现一个和第二个相似的东西。Linux3.0内核的操作办法由于之前移...
区别于Linux4.0之前的字符设备驱动结构,4.0采用cdev注册字符设备。一、构造一个字符设备结构体,用于cdev的初始化struct led_dev_t{ struct cdev cdev;};二、__init 入口函数1.设备号的处理dev_t led_devno= MKDEV(led_major,0);MKDEV(led_major,0)通过主次设备号生成dev_t,...
前言Machine是ASOC架构中的关键部件,没有Machine部件,Codec和Platform是无法工作的。分析内核版本为4.17Machine代码分析以smdk_wm8580.c为例。整体结构是先注册平台驱动,当平台驱动和平台设备的名字相匹配的时候,就会调用平台驱动里的probe函数。1.入口函数:注册平台设备分配一个名为“soc-audio”的platform_device...
概述ASLA存在的问题: Codec驱动与SOC中断CPU耦合严重,这将导致代码重复,一个Codec驱动每个cpu上会出现不同的版本。当音频事件发生时(插拔耳机,音箱)没有标准的方法通知用户,尤其在移动端此事件非常常见。当播放/录制音频时,驱动会让整个codec处于上电状态,这样会在移动端非常浪费电量。同时也不支持改变采样频率/骗置电流来节约功耗。ASOC的解决办法:Codec代...
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号