linux驱动面试题

1. 字符设备与块设备区别

(1)字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节自/字符来读写数据。键盘、串口、调制解调器都是典型的字符设备。

(2)块设备:应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘、软盘、CD-ROM驱动器和闪存都是典型度的块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外,数据的读写知只能以块(通常是512B)的倍数进行。与字符设备不同,块设备并不支持基于字符的寻址。
这两种类型的设备的根本区别在于它们是否可以被随机访问。字符设备只能顺序读取,块设备可以随机读取。

2. 查看字符设备信息命令

lsmod和modprobe

3. modprobe和insmod

modprobe和insmod都可以实现加载模块。

区别一:modprobe可以解决模块间依赖的问题,比如A模块使用了符号导出,导出的符号需要在B模块中使用,这就要求在加载模块时需要先加载模块A再加载模块B,在insmod的情况下会给报错,而用modprobe则会在/lib/modules/$(shell uname -r)/目录下去寻找依赖模块。

区别二:,现在需要加载模块A,而模块A已经加载过了,已经存在了,使用insmod再次加载会报错,而使用modprobe加载模块A就不会有错误提示

4. 注册字符设备方法

void cdev_init(struct cdev *cdev, struct file_operations *fops);

int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);

5. ioremap函数作用

ioremap将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问。

void *ioremap(unsigned long phys_addr, unsigned long size)
入口: phys_addr:要映射的起始的IO地址;
size:要映射的空间的大小;

6. 设备驱动程序三个重要概念总线bus, 设备device, 驱动driver,三者关系

总线将设备和驱动绑定。在系统注册一个设备的时候,会寻找与之匹配的驱动;

同样,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线自动完成

7. insmode回调用什么函数?rmmode呢

insmode会调用module_init函数, 做一些初始化,

rmmode会调用module_exit函数,会释放内存

8. 有哪些原子操作

void atomic_inc(atomic_t *v)
void atomic_dec(atomic_t *v)
void atomic_add(int i, atomic_t *v)
void atomic_sub(int i, atomic_t *v)

int atomic_dec_and_test(atomic_t *v);
 对原子类型的变量v原子地减1,并判断结果是否为0,如果为0,返回真,否则返回假。 
 
int atomic_inc_and_test(atomic_t *v);
 对原子类型的变量v原子地增加1,并判断结果是否为0,如果为0,返回真,否则返回假。 
 
int atomic_add_negative(int i, atomic_t *v);
  对原子类型的变量v原子地增加I,并判断结果是否为负数,如果是,返回真,否则返回假。 
 
int atomic_add_return(int i, atomic_t *v);
  对原子类型的变量v原子地增加i,并且返回指向v的指针。

9. spinlock和semaphore差异

(1)spinlock不能睡眠,semaphore可以

(2)spinlock可以用在中断处理程序(或上半部分),semaphore 不可以

(3)spinlock尽量短,semaphore无此限制

10.mmap作用

mmap将一个文件或者其它对象映射进内存,mmap()必须以PAGE_SIZE为单位进行映射,而内存也只能以页为单位进行映射
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

int munmap(void* start,size_t length);
 

11. tasklet、workqueue区别

tasklet中断上下文,不可睡眠,softirq特殊实现

workqueue进程上下文,可以睡眠,内核线程实现

 tasklet 更适合执行短小、不耗时的任务,而 workqueue 更适合执行较为耗时的任务。

12. kmalloc, vmalloc区别

kmalloc物理内存连续,虚拟内存也连续;vmalloc物理内存不一定连续,虚拟内存连续

kmalloc分配内存小, vmalloc分配的大

kmalloc快,vmalloc慢

kmalloc slab内存分配机制,vmalloc是buddy机制

13. I2C

数据线SDA, 时钟SCL

空闲时都是高电平, SCL稳定在高电平时,SDA由高到低产生一个开始位,由低到高产生一个停止位。开始位和停止位都是由主设备产生。

在传输过程前,主设备先发送1字节的地址信息,7bit是设备地址,1bit是读写标志

之后每次传输的数据也是1个字节,从MSB开始传输。

在每个字节传完后,在SCL的第9个上升沿到来之前,接收方应该发出1个ACK

14. SPI

SCLK, SI,SO, CS(低电平有效)

15. USB

半双工  低速1.5Mbit/s, 全速12Mbit/s 高速480Mbit/s VBUS, D+,D-,Groud

全双工  USB3.0(super speed) 5Gbit/s,增加4个引脚

四种传输方式:

控制ccontrol

同步Isochronous

中断 Interrupt

批量Bulk

设备device,配置Configuration,接口Interface, 端点Endpoint

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值