# 前言 开发过单片机的小伙伴可以看一下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。...# 正文 用户空间的每个函数(用于使用设备或者文件的),在内核空间中都有一个对应的功能相似并且可将内核的信息向用户空间传递的函数。 下表为几种设备驱动事件和它们在内核和用户空间对应的接口函数。...*/ int memory_init(void) { int result; /* Registering device */ // 在内核空间,把驱动和/dev下设备文件链接在一起...但是模块加载到内核中,还是不能用,得有具体的设备才能用。 如果驱动模块中有实现自动生成当前设备文件节点的代码,那么会使用和热拔插相关的代码脚本,自动在/dev下面生成对应的设备文件。...当然最终都要运行mknod命令,它会根据你传进去的主次设备号和类型。在内核维护的设备和驱动列表中寻找你在驱动模块中注册的设备和驱动。
Linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载 2....编写内核驱动 #include #include static int __init test_init(void) { return...0; //返回0表示成功, 返加负数退出加载模块 } //__init 当内核把驱动初始化完后, 释放此函数的代码指令空间 static void __exit test_exit(void) { ....驱动模块的Makefile obj-m += test.o //源码文件为test.c modules:make -C 内核源码目录 M=驱动代码所在目录 modules modules install...:make -C 内核源码目录 M=驱动代码所在目录 modules_install INSTALL_MOD_PATH=/文件系统路径 clean:make -C 内核源码目录 M=驱动代码所在目录
文章目录 Linux安装NVIDIA显卡驱动的正确姿势 什么是nouveau驱动?...检测NVIDIA驱动是否成功安装 集显与独显的切换 使用标准仓库进行自动化安装 使用**PPA**仓库进行自动化安装 使用官方的NVIDIA驱动进行手动安装 常见问题解决 Linux安装NVIDIA显卡驱动的正确姿势...可能想玩Linux系统的童鞋,往往死在安装NVIDIA显卡驱动上,所以这篇文章帮助大家以正常的方式安装NVIDIA驱动。...想了解历史的可以去看看这篇知乎,腾讯和AMD是linux的罪人吗?。 好了不扯了,正式开始讲安装把!...由于nouveau是构建在内核中的,所以要执行下面命令生效: sudo update-initramfs -u 6.
转载请标明出处floater的csdn blog,http://blog.csdn.net/flaoter Linux SPI驱动分为核心层,控制器驱动层和设备驱动层。...核心层是Linux的SPI核心部分,提供了核心数据结构的定义,总线、设备和驱动的注册、注销管理等,提供与上层的统一接口。...linux将I2C、SPI、USB等总线驱动隔离成控制器驱动和设备驱动,使两者相对独立。 本文以qcom的spi控制器为例,对spi控制器驱动进行解析。kernel代码版本是3.18。...linux驱动与设备是一对多的关系,在spi_master设备注册时,控制器的结构体信息会提供给spi_master作为私有数据。...总线传输涉及到几个重要的结构体,队列,内核工作线程和厂商的总线传输实现几个方面。
本篇介绍 本篇介绍下如何写字符设备的驱动程序。...支持阻塞IO的驱动demo Linux 上的设备类型可以大概分为以下几种: 字符设备:以字节为单位传输,传输率低,不支持随机访问,常见的设备有鼠标,键盘,触摸屏等 块设备: 以块位单位传输,常见的就是磁盘...先看下字符设备的结构 struct cdev { struct kobject kobj; // 用于linux设备驱动模型 struct module *owner; // 字符设备驱动所在的内核模块对象指针...const struct file_operations *ops; // 字符设备驱动中最关键的一个操作函数,在和应用程序交互的过程中起枢纽作用 struct list_head list...再介绍下misc 设备,linux 内核将一些不符合预先确定的字符设备划分为杂项设备,使用的数据结构如下; struct miscdevice { int minor; const char
原文档:https://cloud.tencent.com/developer/article/2145058GPU服务器控制台vnc跟普通cvm不一样,当独立显卡为默认显示时,控制台vnc就不会正常使用了...系统内误操作开了一些类似防火墙规则的限制,比如第三方软件搞了特殊的限制使得不能远程,此时想进系统去除限制,进不去系统,又不知如何下发指令复原,只能依赖进系统后在图形界面上操作,此时可以使用自动化助手下发指令使下次开机时不加载显卡驱动...,这样控制台vnc就可以像普通cvm那样操作了,到时候进去去除限制即可,然后再把干预的开机不加载显卡驱动的动作复原回去,重启后就跟误操作之前一样了。...具体命令参考这篇文档尾部:https://cloud.tencent.com/developer/article/1853791禁止显卡驱动的命令:reg add "HKLM\SYSTEM\CurrentControlSet...REG_DWORD /freg add "HKLM\SYSTEM\ControlSet001\Services\nvlddmkm" /v "Start" /d 4 /t REG_DWORD /f二选一执行恢复显卡驱动的命令
linux内核版本:4.14 pcie转四路串口芯片:亚信的AX99100 linux内核里是没有这块芯片的驱动的,这里自己添加驱动进去进行编译。...1.从亚信官网下载该芯片的linux驱动https://www.asix.com.tw/cs/download.php?...sub=driverdetail&PItemID=256 2.在 linux/drivers/tty/serial/的目录下新建一个99xx的目录,把解压之后的文件里除了.cache.mk、Makefile...下的Kconfig,增加 source "drivers/tty/serial/99xx/Kconfig" 7.在linux目录下,使用你自己的编译器进入menuconfig进行内核配置(make menuconfig...Device Drivers > Character devices > Serial drivers目录下,勾选以下两个刚才添加的选项,并把8250的两个选项取消选中 9.进行编译,这样就把AX99100的驱动编译进内核里了
最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。...如果去看drivers/staging下的代码,就会发现很多驱动程序都没有严格遵守内核的coding style,而且在很多驱动程序的TODO文件里,都会把"checkpatch.pl fixes"作为自己的目标之一...在Linux内核的coding style里,switch和case要求有相同的缩进。本例的代码很少,错误也只有这一个,手动修改很方便。如果类似的缩紧错误很多怎么办?...比如,Linux内核的coding style要求,行尾不能有空格(包括Tab),去除这些空格就可以借助sed。 我自己的习惯很差,经常在代码的行尾留下一些空格。...sizeof typeof alignof attribute defined”; 9、在前缀自增自减运算符之后和后缀自增自减运算符之前不需要空格(“++”和“--”); 10、结构成员运算符(“.”和
#include 1....模块参数 在驱动定义变量 static int num = 0; //当加载模块不指定num的值时则为0 module_param(变量名, 类型, 权限);类型: byte, int, uint,...EXPORT_SYMBOL(函数名/变量的地址) //把函数/或者变量的地址导出到内核的符号表中 EXPORT_SYMBOL_GPL(函数名) /////////// /proc/kallsyms 查看当前系统的符号表
显卡驱动:很明显就是字面意思,通常指NVIDIA Driver,其实它就是一个驱动软件,而前面的显卡就是硬件。...CUDA Driver: 运行CUDA应用程序需要系统至少有一个具有CUDA功能的GPU和与CUDA工具包兼容的驱动程序。...- 相比之下,driver API提供了更细粒度的控制,特别是在上下文和模块加载方面。实现内核启动要复杂得多,因为执行配置和内核参数必须用显式函数调用指定。....run 文件安装,因为使用 .deb可能会将已经安装的较新的显卡驱动替换。...(y)es/(n)o/(q)uit: n # 如果在这之前已经安装好更高版本的显卡驱动就不需要再重复安装,如果需要重复安装就选择 yes,此外还需要关闭图形界面。
Ubuntu自带的NVIDIA显卡有bug,电脑运行一段时间会无故卡死。 从NVIDIA下载的显卡安装后会出现各种各样的问题:1. 屏幕黑屏 2. 循环登录 等。为此重装了N次Ubuntu系统。...今天试了附加驱动里面的这个驱动,稳定不卡死了,特意记录一下。 ?
导读本文将介绍如何在Ubuntu系统上,安装显卡驱动。1. 下载驱动驱动程序下载打开上面的驱动下载链接,根据自己的显卡型号进行选择对应配置,如下图,后点击搜索。...禁用系统默认显卡驱动sudo gedit /etc/modprobe.d/blacklist.conf # 在文件末尾写入blacklist nouveauoptions nouveau modeset...配置环境变量gedit命令打开配置文件sudo gedit ~/.bashrc末尾写入export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATHexport...LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH保存更新source ~/.bashrc5....# –no-opengl-files 不安装OpenGL文件# –no-x-check 安装驱动时不检查X服务,非必需。
在购买电脑时,大家都会看一下设备介绍,其中就有显卡驱动这一项,对于不精通电脑的人来说,对于显卡驱动不太认识,这是电脑在安装完系统之后,都需要安装的一种驱动,如果没有显卡驱动电脑也无法正常的工作,下面就来看看显卡驱动的作用是什么吧...image.png 显卡驱动作用 显卡驱动的作用就是用来驱动显卡的,这是电脑硬件中所对应的一个软件。通过添加驱动程序计算机中的硬件就能正常的工作,当然不同的硬件使用的驱动程序也不一样。...显卡驱动的作用就是为了给电脑里面的显卡提供的软件,确保显卡可以正常的工作。没有显卡驱动显卡不能运行,电脑屏幕也不会显示。...显卡驱动要不要更新 显卡驱动也会有新版本的推出,如果及时地更新了显卡驱动,是可以修改一些游戏中的图形显示,也就是说更新了显卡驱动,能提高游戏性能,还能修正旧版本中的Bug,以及增加挖掘显卡硬件功能,让硬件功能更好地发挥...但也不是说更新的显卡驱动更好,需要结合显卡驱动与显卡是不是能匹配,如果不匹配就不需要更新,因为显卡驱动的更新可能会导致显卡寿命降低。
/****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中在...具体的调试选项说明可参见驱动一书,或通过menuconfig的help说明查看。...(2)如何通过宏对printk调试语句进行全局控制 通过和Makefile配合,可以在c文件中定义属于我们自己的调试语句。...如”-p 8856″ -o 将输出的信息导入特定的文件 strace对于发现系统调用时的细微错误非常有用,尤其是针对多进程的程序,可以通过strace输出的返回值和进程pid获得大量有用信息。...在某些情况下,oops会导致内核混乱,而混乱的结果就是死机,这些情况可能包括: *oops发生在持有锁的代码中 *oops发生在和硬件设备通讯的过程中 *oops在中断上下文中发生 *oops发生在idle
设备号分两部分,主设备号和次设备号。 通常,主设备号标示设备对应的驱动程序,linux允许多个驱动共用一个主设备号; 而次设备号用于确定设备文件所指的设备。...在驱动中访问设备号应该用中定义的宏。...见和驱动书的p54 2.6内核结构的初始化: struct file_operations my_fops = { .owner = THIS_MODULE, .llseek =...file中其他的内容和驱动关系不大。 c.inode结构 内核用inode结构表示一个实际的文件,可以是一个普通的文件,也可以是一个设备文件。...当inode表示一个字符设备时,i_cdev指向内核中的struct cdev. 其他结构和设备驱动关系不大。
驱动框架的概念 内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架...因此,Linux中LED的驱动框架把所有LED设备的共性给实现了,把不同的地方留给驱动工程师去做。...内核开发者在编写内核代码时只要将函数设置合适的级别,这些函数就会被链接的时候放入特定的段,内核启动时再按照段顺序去依次执行各个段即可。...详见Linux设备管理:sysfs文件系统的功能及其应用。 led_class_attrs结构体数组设置了leds设备类的属性,即led硬件操作的对象和方法。...对应的操作规则有读写,即show和store。
,一个工作简单理解就是对应于一个函数,可以通过内核调度函数来调用work_struct中func指针所指向的函数。...); /*许可证*/ MODULE_LICENSE("GPL"); 3.2 自定义工作队列-按键驱动 工作队列除了可以使用内核共享队列以外,也可以自己创建队列,下面这份代码就演示如何自己创建队列,并完成初始化... /*文件操作集合头文件*/ #include /*使用copy_to_user和copy_from_user*/ #...*中断IO口定义*/ #include /*内核定时器相关*/ #include /*等待队列相关*/ #include...内核分配给设备的主设备号和设备名字 /*动态分配cdev结构体,返个cdev结构;如果执行失败,将返回NULL。
简介 本文主要来讲讲Linux内核驱动中,EXPORT_SYMBOL()宏定义的用法。 在阅读的Linux内核驱动源码的时候,我们会发现很多的函数带有EXPORT_SYMBOL()宏定义。...EXPORT_SYMBOL()宏定义作用 EXPORT_SYMBOL宏定义定义的函数或者符号将对内核代码公开,不用修改内核代码就在其他的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用...实验 编写代码 编写两个模块:rice_export.ko 和 rice_import.ko,其中: rice_export.ko:导出定义的函数 rice_import.ko:调用导出的函数 导出函数模块的代码
复习总线设备驱动模型,做了一点小笔记,大牛略过。 一、Linux系统的驱动框架的基础很大一部分是围绕着总线设备驱动模型展开的。...二、涉及3个重要结构体: struct bus_type:总线 struct device :设备 struct device_driver:驱动 三、结构体核心代码分析(2.6.38内核) structbus_type...*p; }; 其中,struct subsys_private包含一个设备链表(struct klist klist_devices)和一个驱动链表( struct klist klist_drivers...structdevice_driver结构体,当这些驱动向内核注册各式各样的驱动时,最终都会调用到: int driver_register(structdevice_driver *drv) { ...; } 无论是调用driver_register()注册驱动, 还是用device_register注册设备, 内核都会调用总线的match函数来探测是否有合适device_driver的device或者是否有合适
内核定时器介绍 内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 和 kernel/timer.c 文件中...如果编内核时不支持 SMP(多处理器), del_timer_sync()和 del_timer()等价 函数参数 timer:对应的定时器结构体 函数返回值 返回0:成功 函数定义文件 \linux-...添加定时器到内核*/ add_timer(&timer); printk("驱动测试: 驱动安装成功\n"); return 0; } static void __exit tiny4412...); /*驱动入口--安装驱动的时候执行*/ module_exit(tiny4412_linux_timer_cleanup); /*驱动出口--卸载驱动的时候执行*/ MODULE_LICENSE...内核提供的延时函数 Linux 内核中提供了进行纳秒、微秒和毫秒延迟。
领取专属 10元无门槛券
手把手带您无忧上云