嵌软秋招两万字八股文汇总(五)

Elcdif原理:

工作原理(简要)

驱动或应用(framebuffer 驱动、DRM/KMS 或裸机)将像素数据放入一块内存(帧缓冲)。

eLCDIF 配置为读取该帧缓冲的基址、分辨率、stride(pitch)和像素格式。

eLCDIF 按面板时序配置时钟与同步信号,并通过内置的 DMA/读请求从内存读取像素流。

将像素数据送到并通过外设 PHY 或并行/serial 接口输出到显示面板(例如 RGB 并行口、LVDS/DSI 通常需要额外的转换器/桥接芯片)。

在每帧或行完成时可触发中断,供驱动进行页切换或更新策略。

15、 详细讲一下I2C的驱动流程。

I2C 适配器驱动: 使用plantform模型,匹配后进入probe函数中进行初始化,i2c_struct 结构体来表示 I.MX 系列 SOC 的 I2C 控制器。结构体要有个叫做 adapter 的成员变量,i2c_adapter 的algo成员变量为i2c_imx_algo,也就是设置 i2c_algorithm,具体总线操作算法的函数集合。包含 I2C1 适配器与 I2C 设备的通信函数 master_xfer。在master_xfer中根据mesaage的标注位判断读写,向 I2C 设备写数据,如果要用 DMA 的话就使用 i2c_imx_dma_write 函数来完成写数据。如果不使用 DMA 的话就使用 i2c_imx_write 函数完成写数据。

i2c_imx_probe 函数主要的工作就是一下两点:

①、初始化 i2c_adapter,设置 i2c_algorithm 为 i2c_imx_algo,最后向 Linux 内核注册i2c_adapter。

②、初始化 I2C1 控制器的相关寄存器。

I2C设备驱动:i2c_client 和 i2c_driver,总线、设备和驱动模型;设备驱动中对于i2c收发数据会先构建msg消息结构体,包含读写标注位、设备地址、数据地址。然后使用i2c_transfer 函数最终会调用 I2C 适配器中 i2c_algorithm 里面的 master_xfer 函数。

16、 详细讲一下中断的驱动流程。

中断控制器结构体irq_domain,初始化和注册,里面包含绑定的设备树节点,操作集合,里面有translate函数主要负责解析设备树中中断属性得到硬件irq,map建立硬件irq和虚拟irq的映射关系。当字符设备使用irq_of_parse_and_map时,就会得到虚拟irq。

17、 内存管理

进程描述符task_struct和内存描述符mm_struct,mm_struct包含堆栈代码段起始地址和结束地址。还既维护了按地址递增的 vm_area_struct 链表(通常命名为 mm->mmap),也维护了一棵按地址区间索引的红黑树(mm->mm_rb 或 mm->mm_rb_root)来支持高效的查找。mm_struct里面的虚拟内存描述符vm_area_struct使用链表和红黑树完成虚拟内存管理。因为链表操作可以在已知前驱时 O(1) 完成,代码通常先通过红黑树或 find_vma_prev 找到前驱,然后在链表中插入,从而保持两者一致。

一个进程的多个线程各自有自己的 task_struct,但它们可能共享同一个 mm_struct(虚拟内存空间)。

18、 boot移植和linux内核移植流程

在nxp仓库下载uboot代码,先在 configs 目录下创建默认配置文件,。mx6ull_alientek_emmc.h 里面有很多宏定义,这些宏定义基本用于配置 uboot,也有一些I.MX6ULL 的配置项目。如果我们自己要想使能或者禁止 uboot 的某些功能,那就在mx6ull_alientek_emmc.h 里面做修改即可。每个板子对应一个文件夹,修改lcd和网络,主要是io以及参数。Bootcmd和bootargs设置启动参数

在目录 arch/arm/boot/dts 中添加自己的设备树文件,修改makefile文件中的配置项,将该设备树添加进去。对于一些适配主要修改设备树的内容。

#面试问题记录##牛客创作赏金赛#
全部评论

相关推荐

爱吃烤肠的牛油最喜欢...:50K是ssp了估计,ssp的人家多厉害都不用说,每年比例大概在百分之5左右
点赞 评论 收藏
分享
gelmanspar...:奖学金删掉,自我评价删掉,简历压缩一下,写一页
如果再来一次,你还会学机...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务