linux驱动开发面试题
1.linux中内核空间及用户空间的区别?
记住“22”,两级分段两级权限。
例如是32位的机器,从内存空间看:顶层1G是内核的,底3G是应用的;从权限看:内核是0级特权,应用是3级特权。
2.用户空间与内核通信方式有哪些?用户获得内核信息方式有哪些?
系统调用。proc。
3.系统调用是什么?
linux提供给应用层访问内核包括设备驱动、进程管理、内核参数的接口,例如字符设备驱动,对上层是统一的接口,对底层则由具体驱动实现。其本质是“门机制”,利用机器指令进入更高的特权空间(内核态)。
3.补-以read为例,描述系统调用的过程?
对一个已创建的普通文件,要先谈open过程:vfs,fs,cache,通用块,IO调度,块驱动,物理块,从而拿到fops给到文件描述符,之后read就和底层读写相关起来了。
4.字符设备和块设备的区别,请分别列举一些?
1.数据流2.系统接口(块有两套接口)
字符设备:串口、键鼠、摄像头
块设备:sd卡,u盘
5.uboot启动流程?
CTUFRC
CPU---->>TIM---->>UART/FLASH/DRAM---->>relocate_code---->>command
6.linux内核启动流程?
UMMISMB
uboot通过theKernel启动---->>Machine---->>MMU---->>Init---->>Setup---->>Mount---->>Busybox
7.linux调度原理?
完全公平/多级反馈队列/基于优先级
优先级:很好理解。缺点:调度是遍历的,饥饿现象
多级反馈队列:超过一定时间下放到低优先级队列。特点:bitmap
完全公平:红黑树动态调整优先级(计算虚拟时间)
8.注册一个字符设备流程,代码层面?
cdev_init(cdev,fops)---->>register_chrdev(设备号,设备节点,fops)
9.创建设备节点?
mknod/启动脚本+mdev -s
10.释放资源要注意的?
内存,ioremap,中断,定时器,工作队列等等要释放
11.内核函数mmap的实现原理,机制?
将文件fd内容映射到进程虚拟内存进行读写,不必经过read/write
void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )
12.遇到Oops?怎么处理的?
当内核出错时(比如访问非法地址)打印出来的信息被称为 Oops 信息。
(未完待续)