自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 资源 (1)
  • 收藏
  • 关注

原创 《嵌入式驱动面试常见问题攻略》

首先要明确驱动要实现的功能和性能要求,然后根据硬件特性设计合适的驱动架构,接着编写代码并进行编译和测试,最后对出现的问题进行调试和优化。硬件寄存器的配置需要了解硬件的规格和手册,明确每个寄存器的功能和位定义。嵌入式驱动程序是一种专门为嵌入式系统中的硬件设备编写的软件,其作用是提供硬件与操作系统之间的接口,使操作系统能够对硬件进行控制和管理,实现硬件功能的正常使用。可以讲述在开发某个特定硬件设备的驱动时,遇到的技术难题,如硬件兼容性问题、性能瓶颈等,以及如何通过技术手段和团队协作来解决这些问题。

2024-08-09 20:37:56 572

原创 0730_驱动2 gpiod子系统

【代码】0731_驱动2 gpiod子系统。

2024-08-01 20:20:48 250

原创 0730_驱动1 gpio子系统

【代码】0730_驱动1 gpio子系统。

2024-07-31 18:53:54 396

原创 0729_驱动2 设备树

在linux-3.10内核版本之后引入设备树,设备树是用来存放硬件相关信息的设备树本质上就是一个结构体,这种方法进行管理会让目录层次更为清晰linux操作系统启动时,先下载设备树,下载成功之后,内核进行启动,解析设备树,设别墅解析成功之后,会以树状的形式存放在内存中驱动工程师需要将硬件相关的信息卸载设备树中,编程时,需要解析设备树中的地址。

2024-07-30 20:10:30 460

原创 0729_驱动1 异步通知

使用阻塞,io多路复用,都是用户主要调用接口等待数据返回使用阻塞,io多路复用,如果硬件中的数据没有准备好,用户需要阻塞等待,进程进入休眠状态进程在休眠状态这段期间不可以做其他任何事情,所以内核中引入异步通知能够在数据准备好的时候,底层给应用层发送一个通知当应用层接收到这个统治之后,去读取硬件中的数据,在没有接收到这个通知的时候,应用层去做其他的事情。

2024-07-30 19:03:26 405

原创 0726_驱动3 epoll

【代码】0726_驱动3 epoll。

2024-07-30 18:46:11 126

原创 0726_驱动2 io多路复用

1.当一个app应用程序,如果像读取多个硬件中的数据,监听多个文件描述符,这时就要引入io多路服用机制2.使用select/poll/epoll监听多个文件描述符3.如果所有硬件数据(文件描述)没有准备好,进程进入休眠状态4.如果有一个或者多个硬件数据(文件描述符)准备好。唤醒休眠进程5.当进程被唤醒之后,在内核空间,读取到准备好的文件描述符6.从准备好的文件描述符集合中,读取准备好的文件描述符7.从文件描述符中读取数据。

2024-07-29 08:59:24 640

原创 0726_驱动1 非阻塞/阻塞

1.当一个app应用层程序,取读取硬件中的数据2.不管硬件中的数据是否准备好3.都会立即返回数据。

2024-07-27 19:20:08 327

原创 0725_驱动1 内核中并发和竟态解决方法

1.同一个驱动程序,同时被多个应用层程序进行访问2.访问同一个临界资源,驱动产生竟态。

2024-07-27 19:06:15 1041

原创 0724_驱动2 inode和file结构体功能

1.在进程中调用open函数,打开设备文件时,会返回一个文件描述符2.每个进程都有自己唯一的文件描述符,文件描述符之间没有干扰3.在进程中调用open函数,返回的文件描述符4.所以在进程中可以找到文件描述符相关信息5.通过task_struct结构体,记录描述进程的相关信息6.所以task_struct结构体中可以找到文件描述符。

2024-07-27 17:34:17 232

原创 0724_驱动1 字符设备驱动内部实现

【代码】0724_驱动1 字符设备驱动内部实现。

2024-07-27 17:24:24 236

原创 0723_驱动2 ioctl使用

1.前面通过read和write函数完成对设备的读写操作2.在驱动中,有的时候需要完成对设备的控制3.所以需要将设备的控制,与设备的读写分开。

2024-07-27 16:51:36 168

原创 0723_驱动1 自动创建设备节点

1.因为应用层通过设备节点调用内核层,每次都需要输入mknod命令手动创建设备节点2.mknod命令手动创建设备节点,需要注意主设备号和次设备号。

2024-07-27 16:29:33 514

原创 0722_驱动3 地址映射驱动点灯

在芯片手册上查看到的地址属于物理地址,在硬件层在内核空间地址属于虚拟地址,在内核层在驱动中,操作的是虚拟地址需要将物理地址《--mmu内存管理单元--》虚拟地址映射。

2024-07-27 16:08:34 185

原创 0722_驱动2 用户空间和内核空间数据传输

函数功能:将用户空间的数据,拷贝到内核空间参数:to:内核空间首地址from:用户空间首地址n:拷贝大小返回值: 成功返回0,失败返回未拷贝的字节数。

2024-07-27 15:57:19 531

原创 0722_驱动1 字符设备驱动框架

字符设备驱动按照字节流进行访问,并且只能顺序访问设备号一共有32位,主设备号(高12位)+次设备号(低20位)

2024-07-27 15:50:53 266

原创 0719_驱动6 通用Makefile

【代码】0719_驱动6 通用Makefile。

2024-07-27 15:36:28 138

原创 0719_驱动5 导出符号表

1.因为内核空间共用3-4G空间2.通过上面可知,B模块只要拿到A模块add'函数地址就可以调用A模块的add函数3.A模块:提供者4.B模块:调用者。

2024-07-27 15:33:55 226

原创 0719_驱动4 内核模块传参

1.应用层使用argc和argv进行传参2.内核模块传参需要借助宏函数,接收外部传参信息3.如果厂商提供驱动文件.ko文件,对于驱动工程师可以不关心驱动内部的实现,通过外部传参进行使用驱动文件4.例如:厂商提供屏幕背光亮度驱动代码,对于驱动工程师不需要关心屏幕背光亮度驱动代码,直接通过外部传参,修改屏幕背光亮度。

2024-07-27 15:18:34 324

原创 0719_驱动3 printk使用方法

5.printk有8中打印级别(0-7),打印级别用来过滤信息。6.printk打印级别称之为消息级别,终端打印级别称之为终端级别。10.printk格式:printk(打印级别“格式控制符)3.在内核空间执行grep "printk" * -nR。11.使用dmesg命令,可以查看printk打印的消息。1.应用层打印使用printf,内核层使用printk。7.只有消息级别大于终端级别,消息才能在终端进行打印。13.消息灯集可以省略不写,使用默认的消息级别。9.设置消息级别大于终端级别。

2024-07-27 15:01:17 212

原创 0719_驱动2 编写编译linux内核模块

linux内核模块三要素:入口:执行insmod 安装命令操作出口: 执行rmmod 卸载命令操作许可证:遵循GPL协议,开源,指定入口地址,出口地址。

2024-07-27 14:02:03 423

原创 0719_驱动1 arm裸机开发与linux驱动开发区别

1.只要有硬件存在的地方,就会有驱动存在2.在windows操作系统中,usb驱动,网卡驱动,电源驱动......3.在linux操作系统中,电源驱动,网卡驱动,内存驱动,EMMC驱动.....

2024-07-27 13:48:28 537

原创 0706_ARM8

PWM控制蜂鸣器,风扇,震动马达。

2024-07-06 12:17:04 307

原创 0703_ARM7

封装exti,cic初始化函数。

2024-07-03 19:48:46 289

原创 0702_ARM6

【代码】0702_ARM6。

2024-07-02 21:16:53 321

原创 0701_ARM5

练习:使用usart4。

2024-07-02 10:28:16 442

原创 0628_ARM4

【代码】0628_ARM4。

2024-06-28 19:31:32 211

原创 0627_ARM3

思维导图:

2024-06-27 21:43:16 100

原创 0625_ARM2

汇编实现1-100累加,结果保存在r0。

2024-06-25 19:26:15 615

原创 0624_ARM1

思维导图:

2024-06-24 21:01:58 471

原创 0619_QT5

2024-06-22 14:34:45 272

原创 0618_QT4

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?

2024-06-18 20:27:04 610

原创 0617_QT3

初始界面: 账号或密码错误提示:成功跳转界面:

2024-06-17 19:37:37 380

原创 0614_QT2

【代码】0614——QT2。

2024-06-17 08:52:21 578

原创 0613_QT1

【代码】0613_QT1。

2024-06-13 20:43:27 514

原创 0612_C++7

思维导图:

2024-06-12 19:11:06 155

原创 0611_C++6

以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:比喻:动物园的讲解员和动物表演想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。具体过程如下:定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。

2024-06-11 19:18:17 622

原创 0610_C++5

(5)另外, RMB 类还包含一个静态整型成员变量 count,用于记录当前已创建的 RMB 对象的数量。每当创建一个新的 RMB 对象时,count 应该自增 1;(1)重载算术运算符 + 和 -,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的 RMB 对象作为结果。(2)重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。(3)重载前置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1。

2024-06-10 15:35:00 704

原创 0606_C++4

思维导图:

2024-06-06 20:33:29 126

原创 0605_C++3

设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函数、析构函数。

2024-06-05 19:09:07 573

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除