Linux Driver
文章平均质量分 76
漫游嵌入式
一名从事半导体行业的嵌入式Linux学徒;内核贡献者;热衷于底层原理;佛系更新笔记中。。。
展开
-
i.MX8MPlus中的CLK子系统
芯片手册中的clk框架CCM(Clock Control Module)框架图外部时钟的输入源有24MHz,32.768KHz以及四个EXT CLK。这7个输入源都可以直接连接到CCM,但是PLL只能以24MHz,32.768KHz作为输入。从PLL和分频器出来的时钟也可以作为CCM的输入。每一个Slice在经过MUX模块后,由分频器产生我们需要的时钟频率,然后再输出给Gate模块,以便控制时钟的开关。CLK ROOT相关寄存器每一个Slice都有自己的index、偏移地址和时钟源配置寄存器CC原创 2022-04-19 08:35:41 · 1255 阅读 · 1 评论 -
kms框架
KMS(Kernel Mode Setting)的框架如下,用户空间使用双framebuffer机制,分别对应两个plane对象。plane从drm_framebuffer获取显示数据。然后plane传送给crtc(lcdif控制器),经过编码后再送给显示屏(connector)进行显示。一般来说现在的soc都在lcdif外围设计了bridge ip来实现诸如mipi、lvds和hdmi的功能。这里芯片已经实现的bridge就是我们这里的drm encoder(显示编码器)。而在encoder下面外接转换芯原创 2022-02-10 11:05:36 · 2311 阅读 · 0 评论 -
TZASC380技术手册笔记
一、简单介绍TZASC可以为应用提供合适的安全地址区域。一个典型的TZASC必须包含以下几个系统: an AXI to APB bridge restricting APB traffic to the TZASC to secure only a TZASC AXI bus masters: — an ARM processor — aDigital Signal Processor(DSP). AXI infrastructure co...原创 2021-11-15 13:06:20 · 809 阅读 · 2 评论 -
嵌入式实践教程--i.MX8M family Secure Boot HABv4签名实战
教程地址:https://source.codeaurora.org/external/imx/uboot-imx/tree/doc/imx/habv4/guides/mx8m_secure_boot.txt?h=lf-5.10.52-2.1.0文件要求:- U-Boot: u-boot-nodtb.bin u-boot-spl.bin U-Boot DTB file (e.g. fsl-imx8mq-evk.dtb)- ATF image: bl31.bin- DDR firm原创 2021-11-18 13:33:11 · 1978 阅读 · 0 评论 -
Linux驱动中container_of的作用
container_of的作用的通过结构体成员变量地址获取这个结构体的地址。内核函数调用常常给函数传入的是结构体成员地址,然后在函数里面又想使用这个结构体里面的其他成员变量,所以就引发了问题。static void sensor_suspend(struct early_suspend *h) { struct sens...原创 2021-11-20 19:49:38 · 1112 阅读 · 0 评论 -
嵌入式实践教程--Android HAL自定义HAL代码教程
HIDL接口定义创建hidl目录在aosp中的hardware/interfaces目录下创建自己的hal目录mkdir -p hardware/interfaces/qmiller/1.0/default创建hal文件在我们刚才创建的hardware/interfaces/qmiller/1.0/目录下新建IQmiller.hal文件,传入string name,返回string类型的result。package android.hardware.qmiller@1.0;原创 2021-12-04 19:49:02 · 2600 阅读 · 0 评论 -
嵌入式实践教程--Android HAL MPU6050调试方法
目录1.查看sensorservice上报的数据2.adb设置自动旋转3.打印framework代码中变量的数值4.数据库操作法5.build.propadb shell start sensorsadb shell service check sensorserviceadb shell lshal debug android.hardware.sensors@2.0:ISensors/default1.查看sensorservice上报的数据dumpsys将原创 2021-12-06 23:01:45 · 1100 阅读 · 0 评论 -
嵌入式实践教程--字符驱动设备实践
字符驱动设备实践原创 2021-11-22 12:54:51 · 645 阅读 · 0 评论 -
嵌入式实践教程--设备树下的I2C驱动开发
Linux I2C 驱动框架简介原创 2020-02-24 13:35:27 · 5196 阅读 · 0 评论 -
嵌入式实践教程--设备树下的LCD驱动开发
先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下:①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width)、高(height)、hspw、hbp、hfp、vspw、vbp 和 vfp 等信息。②、初始化 LCD 像素时钟。③、设置 RGBLCD 显存。④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片...原创 2020-02-14 11:43:16 · 957 阅读 · 0 评论 -
嵌入式实践教程--设备树下的platform驱动
实战原创 2020-02-12 20:32:38 · 1151 阅读 · 0 评论 -
嵌入式实践教程--设备树驱动下的中断开发
一、上半部和下半部(顶半部和底半部)上半部:我们在使用request_irq申请中断时注册的中断服务函数属于中断处理的上半部。适合耗时不长的程序。下半部:适合处理过程耗时的代码。①、 如果要处理的内容不希望被其他中断打断,可以放到上半部。②、如果要处理的任务对时间敏感,可以放到上半部。③、如果要处理的任务与硬件有关,可以放到上半部1、软中断Linux 内核使用结构体 softir...原创 2020-02-10 15:02:21 · 720 阅读 · 0 评论 -
嵌入式实践教程--设备树下的LED驱动开发
1、修改设备树文件在根节点/创建一个LED的子节点2、驱动编写原创 2020-02-04 12:37:12 · 1084 阅读 · 0 评论 -
嵌入式实践教程--Linux之ASOC
概述ASLA存在的问题: Codec驱动与SOC中断CPU耦合严重,这将导致代码重复,一个Codec驱动每个cpu上会出现不同的版本。当音频事件发生时(插拔耳机,音箱)没有标准的方法通知用户,尤其在移动端此事件非常常见。当播放/录制音频时,驱动会让整个codec处于上电状态,这样会在移动端非常浪费电量。同时也不支持改变采样频率/骗置电流来节约功耗。ASOC的解决办法:Codec代...原创 2018-10-26 20:36:37 · 1013 阅读 · 0 评论 -
嵌入式实践教程--ASOC之Machine
前言Machine是ASOC架构中的关键部件,没有Machine部件,Codec和Platform是无法工作的。分析内核版本为4.17Machine代码分析以smdk_wm8580.c为例。整体结构是先注册平台驱动,当平台驱动和平台设备的名字相匹配的时候,就会调用平台驱动里的probe函数。1.入口函数:注册平台设备分配一个名为“soc-audio”的platform_device...原创 2018-10-27 09:43:24 · 1496 阅读 · 0 评论 -
嵌入式实践教程--ASOC之Codec
概述ASOC的出现是为了让Codec独立于CPU,减少和CPU之间的耦合,这样同一个Codec驱动无需修改就可以适用任何一款平台。还是以下图做参考例子:在Machine中已经知道,snd_soc_dai_link结构就指明了该Machine所使用的Platform和Codec。在Codec这边通过codec_dai和Platform侧的cpu_dai相互通信,既然相互通信,就需要遵守一定的规则...原创 2018-10-27 09:50:02 · 2011 阅读 · 0 评论 -
嵌入式实践教程--ASOC之Platform
概述在ASOC在Platform部分,主要是平台相关的DMA操作和音频管理。大概流程先将音频数据从内存通过DMA方式传输到CPU侧的dai接口,然后通过CPU的dai接口(通过I2S总线)将数据从达到Codec中,数据会在Codec侧会解码的操作,最终输出到耳机/音箱中。依然已下图作为参考:在platfrom侧的主要功能有: 音频数据管理,音频数据传输通过dma; 数据如何通过cpudai传...原创 2018-10-27 09:52:21 · 2392 阅读 · 0 评论 -
修改S3C显卡驱动使能LVDS
Linux下写驱动控制gpio时,有两种方法:用request_mem_region函数和ioremap等得到控制寄存器的地址,然后用iowrite32函数控制该gpio用gpio_request 和 gpio_set_value函数来控制gpio引脚第二个是内核提供的gpio 子系统,一般就用它。第一个就是你自己实现一个和第二个相似的东西。Linux3.0内核的操作办法由于之前移...原创 2018-11-27 20:23:25 · 628 阅读 · 0 评论 -
USB协议架构分析
一、USB的一些基本概念管道(Pipe) 是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。端点(Endpoint) 是USB 设备中的可以进行数据收发的最...原创 2018-11-28 17:55:49 · 2218 阅读 · 0 评论 -
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.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,...原创 2019-04-09 16:38:06 · 1117 阅读 · 3 评论 -
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(二)——并发与同步
一、概念所谓并发,是指多个内核路径同时访问和操作数据,可能发生 覆盖共享数据的情况,造成被访问数据的不一致。在内核中发生并发访问并发源主要有以下4种。中断和异常软中断和tasklet:软中断和tasklet可能随时会被调度运行,从而打断当前正在执行进程的上下文。内核抢占:调度器支持内核抢占。多处理器并发运行上述情况需要针对单核和多核系统进行区别对待。对于单处理器的系统有以下并发...原创 2018-10-25 19:22:16 · 649 阅读 · 0 评论 -
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(六)I2C总线驱动
I2C总线经常挂载eeprom、温度传感器、湿度传感器等设备。I2C总线下可以挂载多个设备,识别设备采用一个地址,这个地址在一条i2c总线是独一无二的。I2C总线驱动与spi总线驱动框架是一致的,都是采用控制器、core、设备三层驱动。内核中I2C 的处理已经做好了,我们只需要做设备驱动程序相关的内容。总线处理好了I2C 协议,即总线知道如何收发数据,而不知道数据的含义,我们要做的只是设备相...原创 2019-04-16 18:52:18 · 880 阅读 · 0 评论 -
USB摄像头驱动思路
出入口函数注册usb_driver结构体,设置probe,disconnect,id_table等参数,其中probe函数用于设置usb控制接口的信息,设置video_device结构体,设置它的release, fops,ioctl_ops函数。并且注册这个结构体1.首先会调用myuvc_open函数,2.调用querycap表明它是个摄像头,且打开数据流传输,3.列举支持哪些的数据格...原创 2018-10-29 16:43:36 · 2209 阅读 · 0 评论