4月份开始找实习,有点项目经验。这几天电话面了一个小公司,被问到
这两个项目的背景是什么,介绍一下这两个项目,常用什么操作系统,有其他板子的sdk包你可以做到驱动lcd吗,iic和spi出现问题会用示波器查询原因吗,有了解rtos吗,专业成绩怎么样
我感觉自己都能说一点,但是挂断后感觉答的不好还有错误,对操作系统的知识直接说不会,面试题目还是要积累一下,答不上来
面试题目:
有用过指针吗,主要在项目怎么使用?
直接访问寄存器地址
ioremap 映射虚拟地址操作硬件
处理数据缓冲区
用结构体指针管理设备信息
函数指针实现驱动接口与回调
uboot启动流程
硬件上电,CPU 从复位地址取指(一般是 Flash 起始地址)。
执行 SPL / 第一阶段启动:关看门狗、关中断、初始化 DDR、时钟、引脚。
把 U-Boot 本体从 Flash 搬到 DDR 并跳转到 DDR 执行。
进入 第二阶段 U-Boot:初始化串口、网口、Flash、EMMC 等外设。
解析环境变量,执行 bootcmd:读取内核、设备树到内存。
启动命令 bootm / booti 跳转 Linux 内核,U-Boot 使命结束。
uboot如何引导内核启动的
U-Boot 先把内核镜像 和设备树 DTB 读到 DDR 里,然后准备好启动参数,最后通过 bootm/booti 跳转到内核入口,把 CPU 控制权完全交给 Linux,自己就退出了。
iic和spi出现问题怎么排查问题
排查 IIC 和 SPI 问题,我一般先看硬件供电、引脚和上拉,然后用示波器看时钟是否正常、有没有应答。
有时钟没应答,多是从机地址或硬件问题;没时钟多是驱动配置或引脚复用错。
再降低速率、确认 SPI 模式、IIC 读写时序,基本就能定位。
LCD的驱动框架,如何编写
1.分配一个fb_info结构体:framebuffer_al1oc();
2.设置fb_info
3.设置硬件相关的操作
- 使能LCD,并注册 fb_info:register_framebufferO
什么是根文件系统
根文件系统是 Linux 挂载的第一个文件系统 ,对应根目录 /,里面包含 init 进程、工具、库、设备节点,内核必须靠它才能完成后续启动,进入用户态。
中断实验:
这次实现GPIO中断实验。当IO口检测到低电平(按键触发),就使得LED亮
要写一个中断要知道为什么中断分上半部和下半部,Linux 内核将中断分为上半部和下半部的主要目的就是实现中断处理函数的快进快出,那些对时间敏感、执行速度快的操作可以放到中断处理函数中,也就是上半部。剩下的所有工作都可以放到下半部去执行。中断下半部一般使用"软中断""tasklet""工作队列"
添加设备树节点
key {
compatible = "rzroomi,key";
pinctrl-0 = <&key_gpio>;
pinctrl-names = "rzroomi,key";
key-gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
interrupt-parent = <&gpio0>;
interrupts = <22 IRQ_TYPE_LEVEL_LOW>;
status = "okay";
};
设置 interrupts 属性,也就是设置中断源,第一个 cells 的 22 表示 GPIO0 组的 22
号 IO,也就是 PC6。IRQ_TYPE_LEVEL_LOW表示低电平触发。
如何写一个驱动中断?使用的框架是什么?
1定义 platform_driver 结构,实现 probe / remove 函数。
2编写 of_device_id 匹配表,与设备树 compatible 对应。
3在 probe 函数中:从设备树获取按键 GPIO通过 gpiod_to_irq() 转换成中断号
4注册中断处理函数 request_irq
5实现 中断上半部(中断处理函数),快速响应并调度底半部。
6用 工作队列 / 定时器 做 底半部,处理消抖、LED 控制等逻辑。
7卸载时释放中断、GPIO,取消工作队列。
上半部快速响应并调度工作队列,下半部做按键消抖和 LED 控制,实现稳定的按键中断功能。
函数使用
1,module_platform_driver
这是新认识的函数自动帮你生成module_init(xxx_init)module_exit(xxx_exit)
2,devm_request_irq()
注册中断,最核心函数
参数有
中断号
中断处理函数
触发方式(IRQF_TRIGGER_LOW / FALLING)
设备名称
传递给中断的私有数据
3,irqreturn_t irq_handler()
中断执行函数。中断上半部,中断触发时立刻执行。
具体的驱动代码下期再写。
'这期内容有点少,主要是花时间去准备实习面试,如有错误的地方请指正,谢谢!!