嵌入式Linux驱动编程复习资料
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式Linux驱动编程复习资料相关的知识,希望对你有一定的参考价值。
一、选择题
Linux
使用mknod
命令创建设备节点
Linux
使用mkdir
命令创建目录文件
Linux
使用mkfifo
命令创建管道文件Linux
设备驱动主要分为:字符设备、块设备、网络设备Linux
驱动模块的后缀名为:.ko
Linux
下常用系统调用名,系统调用实际也是VFS层提供的功能
1.read
: 读取
2.open
:打开设备
3.close
:关闭设备
4.lseek
:偏移设备
注意:fopen\\fread
为标准IO
,不是系统调用platform_driver
和platform_device
在总线中匹配成功后,执行probe
接口Linux
通过ioremap
函数实现物理地址和虚拟地址的映射- 设备树被内核识别后,会在
/sys
目录下为用户提供可视化操作接口 linux
的miscdevice
的主设备号是10
二、填空题
- 在
printk
打印内核信息时,以信息级打印应设置KERN_INFO
前缀 - 设备树定义节点时,定义资源的属性名是
reg
- 实现内核空间拷贝到用户空间的接口名:
copy_to_user
- 内核提供了
cdev
结构体描述字符设备,cdev_add
是向内核添加,cdev_del
是从内核中移除
三、判断题
- 内核模块源码可以配置为编译进内核和以模块编译的方式
- 内核模块的入口需要通过
module_init
进行注册到内核里 Linux
字符设备和块设备独占主设备号Linux
设备号中主设备号为12位- 内核模块通过
insmod
命令实现用户空间向内核空间加载 - 使用
kmalloc
函数在内核空间申请内存,使用malloc
函数从用户空间申请内存 - 内核
platform
总线设备是一种虚拟的设备驱动 - 内核通过
sysfs
文件系统导出内核设备模型 linux
内核的虚拟内存是 3 G − 4 G 3G-4G 3G−4G 空间- 使用
wait_event
接口将当前访问进程设置为等待状态
四、简答&程序题
4.1 编写驱动的Makefile
BASE_KERNEL ?= 内核的源码目录
obj-m += 驱动源文件名.o
all:
make -C $(BASE_KERNEL) M=$(PWD) modules
clean:
make -C $(BASE_KERNEL) M=$(PWD) clean
4.2 驱动模块
- ①模块加载函数,通过
insmod
命令加载内核,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。- ②模块卸载函数,通过
rmmod
命令卸载某模块,被调用执行。- ③模块许可证声明,使用
MODULE_LICENSE
配置GPL
的声明。- ④可选模块参数、模块导出符号表、模块作者等信息声明。
4.3 Global_memory文件打开
static int mem_open(struct inode *node, struct file *fp)
struct mem_dev *dev;
dev = container_of(node->i_cdev, struct mem_dev, cdev);
fp->private_data = dev;
return 0;
4.4 简单的驱动程序
#include <linux/init.h>
#include <linux/module.h>
static __init int hello_init(void)
printk("Hello world!\\n");
return 0;
static __exit void hello_exit(void)
printk("Goodbye!\\n");
module_init(hello_init)
module_exit(hello_exit)
MODULE_LICENSE("GPL");
以上是关于嵌入式Linux驱动编程复习资料的主要内容,如果未能解决你的问题,请参考以下文章