首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅说驱动程序加载过程

在开始之前,首先简要介绍一下本文主题,这篇文章是关于将内核模块加载到操作系统内核方法介绍。所谓“内核模块”,指便是通常所说驱动程序。...不过因为加载到内核程序通常是用一来操作硬件,所以驱动程序名字要更常见些。在以下叙述中,我将主要使用“驱动程序”这个词。...本文不是对Rootkit细节描述,但却介绍了通常Rootkit是如何将自己加载到内核。在本文中,我将循序渐进展示一个驱动程序编译,加载,以及执行过程。...在介绍如何加载驱动程序之前,首先介绍如何编译一个基本驱动程序。 通常,编写Windows系统驱动程序必然要用到微软提供WDK,即Windows Driver Kits。...以上所展示是一个简单驱动程序编译过程,接下来我们编写加载驱动程序到内核代码。 通常方案是将驱动程序作为加载程序一项资源,包括到加载程序中去,在加载程序运行时候再将驱动程序释放出来。

2.8K90

Linux 串口基本用法

查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 精简版,设置比较简单,还可以有背景颜色。...PC上串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建用户列表。.../etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需每个用户信息。

9.8K41
您找到你想要的搜索结果了吗?
是的
没有找到

Linux基础(串口编程)

虽然以太网接口和USB接口也是以一个串行流进行数据传送,但是串口连接通常特指那些与RS-232标准兼容硬件或者调制解调器接口。废话少讲,今天来解剖使用串口编程代码细节。...上面的代码是使用串口第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...数据模式,即关闭掉字符回显、关闭输入输出时特殊进度控制特殊字符,因为我们此时不需要使用串口来实现终端控制,因此这些功能都不需要: cfmakeraw(&serial); 第25-26行,很简单,设置输入输出波特率...最后,将以上所有参数一股脑设置到对应串口就行了: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统中某一个你想要设置成上面那样属性参数串口,比如就拿粤嵌

12.7K20

Linux 查看本机串口方法

最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1、查看串口是否可用    可以对串口发送数据比如对com1口,echo /dev/ttyS0 2、查看串口名称使用    ls...-l /dev/ttyS*   一般情况下串口名称全部在dev下面,如果你没有外插串口卡的话默认是dev下ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然; 3、...查看串口驱动    cat/proc/tty/drivers/serial 4、查看串口设备    dmesg | grep ttyS* 5、查一下板子上串口有没有设备    grep tty/proc.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用串行设备。...PC上串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口使用: 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0

21.1K20

解决设备ROOTDISPLAY0000加载驱动程序DriverWUDFRd失败方法

本文将介绍一种解决方法,通过分析Windows日志系统中异常信息,定位到设备ROOT\DISPLAY\0000加载驱动程序\Driver\WUDFRd失败原因,并通过卸载向日葵软件来解决该问题。...在事件查看器中,点击左侧面板"Windows日志",然后选择"系统"。在右侧窗口中,可以看到列出系统事件。步骤2:定位异常信息在系统事件列表中,查找最近发生错误事件。...根据描述,找到类似于"为设备 ROOT\DISPLAY\0000 加载驱动程序 \Driver\WUDFRd 失败"错误信息。点击该错误事件,查看详细信息。...在属性窗口"驱动程序"选项卡中,点击"卸载设备"按钮,确认卸载。重启计算机。步骤4:卸载向日葵软件打开"控制面板",选择"程序"或"程序和功能"。在程序列表中,找到向日葵软件。...步骤5:测试和验证重新启动计算机后,系统会自动重新安装显卡驱动程序。使用计算机一段时间,观察是否还会出现蓝屏问题。如问题已解决,则说明根本原因是向日葵软件与显卡驱动冲突。

3.4K10

嵌入式Linux串口编程

简介 嵌入式Linux串口编程与Linux系统下编程没有什么区别,系统API都是一样。...嵌入式设备中串口编程是很常用,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。...RS232与RS485在使用上区别,RS232是全双工,只能对接一个设备串口设备。RS485是半双工总线协议,一般可以挂多个传感器设备,半双工意思是同时只能有一个设备向串口发数据。...用到API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw...将终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理 tcflush 用于清空输入、输出缓冲区 tcsetattr 设置串口终端参数 read 读取数据 write 写数据 close 关闭串口设备

13K20

Linux设备驱动程序(三)——字符驱动

主编号标识设备相连驱动,例如 /dev/null 和 /dev/zero 都由驱动 1 来管理,而虚拟控制台和串口终端都由驱动 4 管理;次编号被内核用来决定引用哪个设备,依据你驱动是如何编写,你可以从内核得到一个你设备直接指针...例如我们要操作某个设备,首先,我们要知道设备在/dev下设备文件名。这个设备文件提供主设备号以及次设备号。然后内核通过设备文件提供主设备找到设备驱动程序(操作设备由驱动程序实现)。...最后通过主设备号和次设备构成设备号找到正确设备。有了操作对象(设备)和操作方法(驱动程序)那就可以完成了我们要求。 一个驱动程序可以操作多个设备,所以不同设备可以具有相同主设备号。...3、主编号动态分配 尽量使用动态分配方法,这样就能在加载甚至编译模块时候设定主设备号,大大优于静态分配。...如果想尝试比较简单字符驱动实现,可以查看我另一篇驱动开发之 hello 驱动程序实现文章: 荔枝派Zero(全志V3S)驱动开发之hello驱动程序

39941

Linux驱动实践:如何编写【 GPIO 】设备驱动程序

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序基本框架,主要是从代码流程和 API 函数这两方面触发。...编写驱动程序 以下所有操作工作目录,都是与上一篇文章相同,即:~/tmp/linux-4.15/drivers/。...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中 udev 服务,自动在 /dev 目录下创建了设备节点。...当驱动程序加载时候,通过 module_init( ) 注册函数 gpio_driver_init() 将会被执行,那么其中打印信息就会输出。...所以,此时我们在 /dev 目录下,就可以看到下面这4个设备节点: 现在,设备驱动程序已经加载了,设备节点也被创建好了,应用程序就可以来控制 GPIO 硬件设备了。

4.8K30

Linux系统驱动之Framebuffer驱动程序框架

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 Framebuffer驱动程序框架 1....怎么编写字符设备驱动程序 驱动主设备号 构造file_operations结构体,填充open/read/write等成员函数 注册驱动:register_chrdev(major, name, &fops...Framebuffer驱动程序框架 分为上下两层: fbmem.c:承上启下 实现、注册file_operations结构体 把APP调用向下转发到具体硬件驱动程序 xxx_fb.c:硬件相关驱动程序...怎么编写Framebuffer驱动程序 核心: 分配fb_info framebuffer_alloc 设置fb_info var fbops 硬件相关操作 注册fb_info register_framebuffer

3.2K30

Linux入门、深入

内核到 ARM9开发板              5、嵌入式 Linux串口通信              串行I/O基本概念              嵌入式Linux应用软件开发流程 ...            Linux系统文件和设备              与文件相关系统调用              配置超级终端和MiniCOM 能够熟悉进行串口通信             ...熟悉文件I/O 编写串口通信程序              编写多串口通信程序              6、嵌入式系统中多进程程序设计              Linux系统进程概述             ...结构              加载驱动程序了解设备驱动程序概念              了解Linux字符设备驱动程序结构              能够编写字符设备驱动程序编写Skull驱动 ...              Linux 块设备驱动程序块设备驱动程序工作原理              典型块设备驱动程序分析              块设备读写请求队列了解Linux块设备驱动程序结构

2.9K61

Linux设备驱动程序(一)——设备驱动简介

前言 这一部分主要是用来介绍 Linux 设备驱动程序一些基本概念,包括:Linux 设备驱动程序作用、内核功能划分、设备和模块分类以及版本编号。...一、Linux 设备驱动程序作用 设备驱动程序就像一个个“黑盒子”,使某个特定硬件响应一个定义良好内部编程接口,这些操作完全隐藏了设备工作细节。...另外,Linux 支持多个文件系统类型,就是说,物理介质上不同数据组织方式。例如,磁盘可被格式化成标准 Linux ext3 文件系统,普遍使用 FAT 文件系统,或者其他几个文件系统。...文本控制台(/dev/console)和串口(/dev/ttyS0 )是字符设备例子,因为它们很好地展现了流抽象。字符设备通过文件系统结点来存取,例如 /dev/tty1 和 /dev/lp0。...例如,你可以说 USB 模块,串口模块,SCSI 模块,等等。

80541

Linux笔记】Linux驱动基础

驱动层和应用层 还记得实习那会儿我第一次接触嵌入式Linux项目的时候,我导师让我去学习项目的其它模块,然后尝试着写一个串口相关应用。...STM32用一个串口不就是串口初始化,然后想怎么用就怎么用吗?后来经过学习才知道原来是那么一回事呀。这就是单片机转转嵌入式Linux思维误区之一。...驱动模块加载有两种方式:第一种方式是动态加载方式,即驱动程序与内核分开编译,在内核运行过程中加载;第二种方式是静态加载方式,即驱动程序与内核一同编译,在内核启动过程中加载驱动。...我们前面说了驱动装载方式之一动态装载:把驱动程序编译成模块,再动态装载。动态装载体现就是开发板已经启动运行了Linux内核,我们通过开发板串口终端使用命令来装载驱动。...对应到驱动程序里我们有如下两个函数: module_init(hello_init); //注册模块加载函数 module_exit(hello_exit); //注册模块卸载函数 这里加载与注册有用到

25.8K54

韦东山:Linux驱动程序基石之mmap

这涉及在用户态buffer和内核态buffer之间传数据,如下图所示: 应用程序不能直接读写驱动程序buffer,需要在用户态buffer和内核态buffer之间进行一次数据拷贝。...改进方法就是让程序可以直接读写驱动程序buffer,这可以通过mmap实现(memory map),把内核buffer映射到用户态,让APP在用户态直接读写。...二级页表地址旺射最小单位有4K、1K,Linux使用4K。...3.3, 驱动程序要做驱动程序要做事情有3点: ① 确定物理地址 ② 确定属性:是否使用cache、buffer ③ 建立映射关系 参考Linux源文件,示例代码如下: 还有一个更简单函数:...9.4 驱动编程 我们在驱动程序中申请一个8Kbuffer,让APP通过mmap能直接访问。

3.8K21

韦东山:Linux驱动程序基石之mmap

改进方法就是让程序可以直接读写驱动程序buffer,这可以通过mmap实现(memory map),把内核buffer映射到用户态,让APP在用户态直接读写。...二级页表地址旺射最小单位有4K、1K,Linux使用4K。 一级页表项里内容,决定了它是指向一块物理内存,还是指问二级页表,如下图: ?...是否使用cache、是否使用buffer,就有4种组合(Linux内核文件arch\arm\include\asm\pgtable-2level.h): ?...3.3, 驱动程序要做驱动程序要做事情有3点: ① 确定物理地址 ② 确定属性:是否使用cache、buffer ③ 建立映射关系 参考Linux源文件,示例代码如下: ?...还有一个更简单函数: ? 4,驱动编程 我们在驱动程序中申请一个8Kbuffer,让APP通过mmap能直接访问。 ① 使用哪一个函数分配内存?

6.9K40

使用picocm来进行Linux串口调试

主要原因就是minicom没有彩色文字,看着难受,特别是调试ARM Linux时候233 安装 因为正常是在Debian系列Linux发行版上面使用(deepin或者ubuntu这些,解决方案比较完善...然后使得这个设备能被picocom工具访问使用 sudo chmod 777 /dev/ttyUSBx 请自行将ttyUSBx替换为当前使用串口设备 连接串口设备 下面是一般连接一个串口设备说使用命令...参数讲解 -b: 设置波特率参数 /dev/ttyUSBx:串口设备,请替换为当前使用串口设备 打开帮助提示页面 ?...+h打开,所以其他命令也是同理 发送接收文件 如果直接使用上面的连接串口设备命令直接去进行文件发送的话,你就会发现Ctrl a+s进行发送时候根本没办法确定使用哪种协议进行,很让人摸不着头脑..."rb -vv" -b 115200 /dev/ttyUSBx 同样,使用当前串口设备文件 退出picocom 直接就是按动Ctrl a+q就可以 尾声 picocom相较于minicom

9.2K60
领券