说明:
答案:
1.创建客户端
2.指定IP地址和端口号
3.进行连接
4.发布主题或订阅主题
5.数据传输
6.断开连接
答案:
电源,晶振,复位电路;
内部结构:ROM/RAM,计时器,中断,I/O串并行口,总线
答案:
在系统运行以后就启动看门狗计时器,此时看门狗就开始自动计时,如果达到一定时间还不去清零,看门狗就会溢出从而引起看门狗中断,造成系统复位。
答案:
STM32是一款嵌入式芯片,中断是其常用的一种工作模式。进入中断可以通过如下步骤实现:
配置中断向量表:中断向量表是一段存储中断向量地址的内存空间,需要在程序初始化时配置。可以通过修改VTOR (VectorTable Offset Register)寄存器来设置中断向量表的起始地址。配置中断控制器:STM32芯片的中断控制器包括NVIC (NestedVectored lnterrupt Controller)和EXTI (External lnterrupt)。NVIC用于处理内部中断,EXTI用于处理外部中断。可以通过配置NVIC或EXTI相关寄存器来使能、禁止或配置中断优先级。
定义中断服务程序:在程序中定义中断服务程序,当中断发生时会跳转到相应的中断服务程序执行。中断服务程序需要按照一定的规范编写,包括入口地址、退出方式等。
触发中断:在程序中触发中断,可以通过软件触发或硬件触发。软件触发可以通过NVIC相关寄存器进行设置,硬件触发可以通过外部信号触发EXTI中断。
答案:
(1)Linux中断分为硬件中断和内部中断(异常),调用过程:外部中断产生->发送中断信号到中断控制器->通知处理器产生中断的中断号,让其进一步处理。即处理器收到来自中断控制器的中断处理请求,保存中断上下文,跳转到中断对应的处理处,(快速完成中断中断上半部,中断上半部返回后执行中断下半部),中断处理函数返回时恢复现场。
(2)tasklet和workqueue,两者都是中断下半部的一种实现方法。区别在于tasklet属于中断上下文,支持smp、不可睡眠和阻塞;workqueue基于线程的封装,属于进程上下文,因此支持睡眠、阻塞。
(3)为了能够在中断处理过程中被新的中断打断,将中断处理程序一分为二,上半部登记新的中断,快速处理简单的任务,剩余复杂耗时的处理留给下半部处理。下半部处理过程中可以被中断,上半部处理时不可被中断。
答案:
有三种方式:devfs机制、udev机制、手动创建设备节点。
devfs机制,从来没用过,应该是2.6以前的内核使用的;
udev机制,其实就是现在常用的device_create()、class_create()这一套接口,所谓udev是上层用户空间程序,是基于驱动中创建使用了这两个接口而起作用的,但是udev在日常开发中几乎接触不到,我们只需在驱动中调用创建节点的这两个API就ok了,剩下的工作就交给udev去做。
mknod ,新手最常用的一种创建设备节点方法,但并非入门后就再没有用途。在某些情境下,或许有人不想使用udev机制,于是把节点创建工作写在脚本里,这样也是无可厚非的
答案:
分别会执行module_init()、module_exit()指定的init函数和exit函数。
要注意的就是尽量使在init函数中出现的资源申请及使用有对应的释放操作在exit中,init申请,eixt释放。
卸载出现的异常?那很稀松平常了,大多数都是资源使用完没释放,但是模块却卸载了。
答案:
常见的三个接口,kmalloc(),vmalloc(),__get_free_pages()。
kmalloc()操作的空间位于直接映射区(即4G空间中的896M区域),申请到空间物理地址多为连续地址,常用于操作频繁的数据结构,连续地址利于提高访问效率。
对于一些操作不频繁的数据结构可以用vmalloc()申请内存,vmalloc()操作的空间优先选择高端内存,这里申请出的内存物理地址往往不是连续的,所以访问效率不会很高。
__get_free_pages()操作的区域跟kmalloc()相同,位于直接映射区,不同的是它申请的是物理页的整倍数大小的内存。
答案:
ioremp是内核中用来将外设寄存器物理地址映射到主存上去的接口,即将io地址空间映射到虚拟地址空间上去,便于操作。为什么非要映射呢,因为保护模式下的cpu只认虚拟地址,不认物理地址,给它物理地址它并不帮你做事,所以你要操作外设上的寄存器必须先映射到虚拟内存空间,拿着虚拟地址去跟cpu对接,从而操作寄存器。
答案:
(1)总线,设备,驱动。
(2)匹配规则:当有一个新的设备挂起时,总线被唤醒,match函数被调用,用device名字去跟本总线下的所有驱动名字去比较,相反就是用驱动的名字去device链表中和所有device的名字比较。如果匹配上,才会调用驱动中的probe函数,否则不调用。
(3)至于先后顺序,鉴于个人理解,不会有影响,不管谁先谁后,bus都会完成匹配工作。
(4)谈谈对Linux设备驱动模型的认识:设备驱动模型的出现主要有三个好处
设备与驱动分离,驱动可移植性增强;
设备驱动抽象结构以总线结构表示,看起来更加清晰明,谁是属于哪一条bus的;
最后,设备与驱动分离,很好的奠定了热插拔机制。