IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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使用mknod命令创建设备节点
    Linux使用mkdir命令创建目录文件
    Linux使用mkfifo命令创建管道文件
  2. Linux设备驱动主要分为:字符设备、块设备、网络设备
  3. Linux驱动模块的后缀名为: .ko
  4. Linux下常用系统调用名,系统调用实际也是VFS层提供的功能
    1. read: 读取
    2. open:打开设备
    3. close:关闭设备
    4. lseek:偏移设备
    注意:fopen\fread 为标准 IO ,不是系统调用
  5. platform_driverplatform_device在总线中匹配成功后,执行probe接口
  6. Linux通过ioremap函数实现物理地址和虚拟地址的映射
  7. 设备树被内核识别后,会在/sys目录下为用户提供可视化操作接口
  8. linuxmiscdevice的主设备号是10

二、填空题

  1. printk打印内核信息时,以信息级打印应设置KERN_INFO前缀
  2. 设备树定义节点时,定义资源的属性名是reg
  3. 实现内核空间拷贝到用户空间的接口名:copy_to_user
  4. 内核提供了cdev结构体描述字符设备,cdev_add是向内核添加,cdev_del是从内核中移除

三、判断题

  1. 内核模块源码可以配置为编译进内核和以模块编译的方式
  2. 内核模块的入口需要通过module_init进行注册到内核里
  3. Linux字符设备和块设备独占主设备号
  4. Linux设备号中主设备号为12位
  5. 内核模块通过insmod命令实现用户空间向内核空间加载
  6. 使用kmalloc函数在内核空间申请内存,使用malloc函数从用户空间申请内存
  7. 内核platform总线设备是一种虚拟的设备驱动
  8. 内核通过sysfs文件系统导出内核设备模型
  9. linux内核的虚拟内存是 3 G ? 4 G 3G-4G 3G?4G 空间
  10. 使用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");
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-08 19:16:18  更:2022-06-08 19:18:53 
 
开发: 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年5日历 -2024/5/19 1:42:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码