| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux驱动开发 (面试常见问题整理) -> 正文阅读 |
|
[系统运维]Linux驱动开发 (面试常见问题整理) |
1.Linux设备驱动的分类 -> 字符设备? ? -> 块设备? ? -> 网络设备 字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标等。 块设备可以用任意顺序进行访问,以块为单位进行操作,如硬盘、软驱等。字符设备不 经过系统的快速缓冲,而块设备经过系统的快速缓冲。 但是,字符设备和块设备并没有明显的界限,如对于Flash设备,符合块设备的特点,但是 我们仍然可以把它作为一个字符设备来访问。 网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket 机制。 2.linux中引入模块机制有什么好处? 该机制有助于缩短模块的开发周期。即:注册和卸载都很灵活方便。 3.什么是交叉编译?为什么需要交叉编译? 我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。 这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序, 可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有 有限的存储空间和运算能力,比如常见的 ARM 平台,这种情况下,在ARM平台上进行 本机编译就不太可能了,这是因为一般的编译工具链需要很大的存储空间,并需要很强的 CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们 就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上)编译出针对其他平台的可 执行程序。 4.什么是GPIO GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高 或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。 5.主设备号和次设备号的用途 一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。 主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如 一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED 灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设 备号就分别表示两个LED灯。 6.Uart和IIC和SPI的区别 UART:基本都用于调试。主机和从机至少要接三根线,RX、TX和GND。TX用于发送数据, RX用于接受数据(收发不是一根线,所以是全双工方式)。 SPI:是一种串行同步通讯协议,。SPI 接口由SDI(串行数据输入),SDO(串行数据输出), SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS 决定了唯一的与主设备通信的 从设备,片选信号低电平有效。如没有CS 信号,则只能存在一个从设备,主设备通过产生移位 时钟来发起通讯。数据在时钟的上升或下降沿由SDO 输出,在紧接着的下降或上升沿由SDI 读 入。 IIC:两根线:一个时钟线SCL和一个数据线SDA。只有一根数据线,所以是半双工通信。 7.产生死锁的原因主要是: -> 因为系统资源不足 -> 进程运行推进的顺序不合适 -> 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则 就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 8.软中断 软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。 很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是 外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核 (或其他进程)对某个进程的中断" 9.一个程序从开始运行到结束的完整过程 -> 预编译的过程中,主要处理源代码中的预处理指令,引入头文件,去除注释,处理所有的 条件编译指令,宏的替换,添加行号,保留所有的编译器指令。 -> 编译,编译过程所进行的是对预处理后的文件进行语法分析,词法分析,语义分析,符号 汇总,然后生成汇编代码。 -> 汇编过程将汇编代码转成二进制文件,二进制文件就可以让机器来读取。每一条汇编语句都会 产生一句机器语言。 ->?链接,链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符 号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统 装入执行的统一整体。 10.内核的配置原理 menuconfig本身的软件只负责提供menuconfig工作的这一套逻辑,menuconfig的菜单内容来自于 Kconfig文件,配置的关键是得到.config文件,内核在编译过程中会读取.config中的配置项,并且 用这些配置项去指导整个编译链接过程。 配置项被配置成Y、N、M会影响.config文件中的CONFIG_XXX变量的配置值。 .config中的配置值(=y、=m、没有)会影响最终的编译链接过程。如果=y则会被编入 (built-in),如果=m会被单独连接成一个ko模块,如果没有则对应的代码不会被编译。 那么这么是怎么实现的?都是通过makefile实现的。 https://blog.csdn.net/weixin_49303682/article/details/118282246 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 8:48:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |