- 博客(91)
- 资源 (1)
- 收藏
- 关注
原创 《嵌入式驱动面试常见问题攻略》
首先要明确驱动要实现的功能和性能要求,然后根据硬件特性设计合适的驱动架构,接着编写代码并进行编译和测试,最后对出现的问题进行调试和优化。硬件寄存器的配置需要了解硬件的规格和手册,明确每个寄存器的功能和位定义。嵌入式驱动程序是一种专门为嵌入式系统中的硬件设备编写的软件,其作用是提供硬件与操作系统之间的接口,使操作系统能够对硬件进行控制和管理,实现硬件功能的正常使用。可以讲述在开发某个特定硬件设备的驱动时,遇到的技术难题,如硬件兼容性问题、性能瓶颈等,以及如何通过技术手段和团队协作来解决这些问题。
2024-08-09 20:37:56 572
原创 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_驱动2 io多路复用
1.当一个app应用程序,如果像读取多个硬件中的数据,监听多个文件描述符,这时就要引入io多路服用机制2.使用select/poll/epoll监听多个文件描述符3.如果所有硬件数据(文件描述)没有准备好,进程进入休眠状态4.如果有一个或者多个硬件数据(文件描述符)准备好。唤醒休眠进程5.当进程被唤醒之后,在内核空间,读取到准备好的文件描述符6.从准备好的文件描述符集合中,读取准备好的文件描述符7.从文件描述符中读取数据。
2024-07-29 08:59:24 640
原创 0724_驱动2 inode和file结构体功能
1.在进程中调用open函数,打开设备文件时,会返回一个文件描述符2.每个进程都有自己唯一的文件描述符,文件描述符之间没有干扰3.在进程中调用open函数,返回的文件描述符4.所以在进程中可以找到文件描述符相关信息5.通过task_struct结构体,记录描述进程的相关信息6.所以task_struct结构体中可以找到文件描述符。
2024-07-27 17:34:17 232
原创 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_驱动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
原创 0618_QT4
完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?
2024-06-18 20:27:04 610
原创 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
原创 0605_C++3
设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函数、析构函数。
2024-06-05 19:09:07 573
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人