![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动入门
陌上花开缓缓归以
无
展开
-
Linux实现内核空间和用户空间数据的传递
read和write的主角是内核,也就是说从内核的角度来决定是读还是写。1,read 从内核空间传数据到用户空间,从内核里面读,写到用户copy_to_user //字符串copy_to_user(user_dst,kernel_source,count);put_user //整形数据put_user(data_source,data_dst)2,write //写到内核,从用...原创 2020-04-23 00:51:08 · 1823 阅读 · 0 评论 -
Linux 字符驱动private_data访问和传递数据
1,struct inode 里面的pravitae_data实现数据之间的传递,open到其他函数之间的传递在open里面里面定义数据,在其他的write,read,ioctl里面访问数据:/******************************************************为什么引入 pravita_data在多个用户要使用设备节点时,我们就引入了prav...原创 2020-04-22 23:47:46 · 1988 阅读 · 0 评论 -
Linux 内核 设备号和struct file_operartion的使用
1,设备号的注册方法总结:获取设备号1) 从设备号中提取major和minorMAJOR(dev_t dev);MINOR(dev_t dev);2) 通过major和minor构建设备号MKDEV(int major,int minor);注:上面只是构建设备号。并未注册3),设备号的注册: 模块加载函数通过 register_chrdev_region( ) 或 a...原创 2020-04-21 22:45:41 · 499 阅读 · 0 评论 -
Linux内核 设备号dev_t的使用(静态和动态创建)
今天我们来谈谈字符设备驱动的框架和具体使用吧:我们先来看看字符驱动的大概框架吧:在这里我用一幅图来看看:首先我们了解一下设备驱动中的基本步骤吧:a -- 模块加载函数通过 register_chrdev_region( ) 或 alloc_chrdev_region( )来静态或者动态获取设备号;b -- 通过 cdev_init( ) 建立cdev与 file_op...原创 2020-04-21 21:34:22 · 2302 阅读 · 0 评论 -
Linux 内核链表深入学习
1,我们常用的链表是将数据域和指针域放在一起的,因为这样我我们很方便的就可以操作数据,但是我们不能改变数据域,这就成了普通链表的局限,所以我们在内核中为了避免这种情况,我们只定义指针域,而数据域让开发者自己去操作,所以我们来看看内核链表的定义和其简单的增删改:数据的定义:用双向链表struct my_list{ struct my_list* pre; struct my_list...原创 2020-04-18 23:52:48 · 229 阅读 · 0 评论 -
linux 内核申请空间(kmalloc ,get_free_page, vmalloc)
1,我们在用户空间又申请空间一说,在内核空间同样有此一说:现在我们简要说明一下他们的区别和对比:kmalloc/kfree //内存分配物理上连续,只能低端内存分配get_zeroed_page/free_page //分配一个页面并清零,只能低端内存分配_get_free_page/free_pages //分配指定页数内存并清零,只能低端内存分配alloc_pages/_free...原创 2020-04-18 23:21:26 · 1202 阅读 · 0 评论 -
Linux 内核入门(内核传递参数,内核符号symbol)
1,我们现在用最简单的hello_word.c来引出内核:hello.c和Makefile实现:#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> //指定license版本MODULE_LICEN...原创 2020-04-17 20:37:58 · 484 阅读 · 0 评论 -
Linux lcd识别代码跟踪自己的lcd
1,lcd参数设置:static struct { int id; char *name; struct nxp_lcd *lcd; int dpi; int ctp; enum lcd_format fmt;} bd_lcd_config[] = { { 25, "HD101", &wxga_hd101, 0, 1, LCD_RGB }, { 32, "...原创 2019-05-13 23:22:07 · 489 阅读 · 0 评论 -
Linux gpio驱动学习
首先我们来看一下gpio驱动框架吧GPIO驱动的头文件为:include/linux/gpio.h和include/asm-generic/gpio.h。GPIO驱动框架的实现代码为:drivers/gpio/gpiolib.c。gpio操作增删改查架构:/* * Add a new chip to the global chips list, keeping the list...原创 2019-05-01 00:25:56 · 928 阅读 · 0 评论 -
Linux 内核阅读宏定义#define的使用总结
面试中定义一个比较两个数大小的宏:简单的宏定义:#define MAX(x,y) x > y ? x : y此种写法当x,y是表达式时会出问题:所以基本改进如下:#define MAX(x,y) (x) > (y) ? (x) : (y)#define MAX(x,y) ((x) > (y) ? (x) : (y)) //此种方法最好上面几种写法是...原创 2019-04-27 23:42:09 · 1281 阅读 · 0 评论 -
linux nanopi3 lcd 闪屏处理
当换上自己的lcd屏幕时,发现屏幕上的黑点总是在闪烁,刚开始我们一直以为是屏幕频率的问题,所以我们之前的nanopi3中的lcds.c里面的lcd702结构体里面的.freq改为70,100,因为我们觉得屏幕闪动就是频率太低,但是改了以后还是没有用,那么lcd的屏幕闪烁到底是什么造成的呢?我们来看下代码:static struct nxp_lcd wvga_s702 = { .widt...原创 2019-04-27 15:25:01 · 984 阅读 · 3 评论 -
Linux lcd驱动开发学习
做Linux lcd驱动移植时,先找到lcd驱动的位置:grep "s702" -nR例如:我的nanopc t3 plus可以看到:可以看到,上面有相应的lcds.c,因为我们的开发板是nanopi t3 plus,即进入到nanopi3,看看里面的lcds.c的类型的s702的结构体即可,既是如下static struct nxp_lcd wvga_s702 = { ...原创 2019-04-27 14:45:23 · 427 阅读 · 0 评论 -
gpio操作实现人体感应灯(一)
#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;string.h&amp;gt;#include &amp;lt;unistd.h&amp;gt;#include &amp;lt;fcntl.h&amp;gt;#in原创 2019-01-12 11:21:24 · 592 阅读 · 0 评论 -
友善之臂nanoPC T3 Plus s5p6818内核和uboot编译和系统量产总结
方法一:uboot 和 Linux 内核的编译,烧写到系统,打开 wiki:http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T3_Plus/zh下载系统: s5p6818-eflasher-20180811-friendlycore-arm64.img.zip用 win32diskimager 烧写到 sd 卡.1,安装 aarch64-...原创 2019-04-07 23:11:24 · 2322 阅读 · 2 评论 -
树莓派GPIO学习和LCD时钟设置
USB 转 TTL 中的四根线这一端是需要链接到树莓派 GPIO 上面的。(如下图)红线(VCC)接排针外面一排,靠近显示灯一端的第一针黑线(GND)接排针外面一排,靠近显示灯一端的第三针白线(TXD)接排针外面一排,靠近显示灯一端的第四针绿线(RTX)接排针外面一排,靠近显示灯一端的第五针重要提示!(切记注意,GIPIO 的第二根针是不需要接的。千万不能接错,否则短路烧毁板子)1,...原创 2019-01-11 22:26:55 · 1924 阅读 · 0 评论 -
nanopi t3 plus 学习(一)
make mrproper命令会删除所有的编译生成文件、内核配置文件(.config文件)和各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令。make clean命令则是用于删除大多数的编译生成文件,但是会保留内核的配置文件.config,还有足够的编译支持来建立扩展模块。所以你若只想删除前一次编译过程的残留数据,只需执行make clean命令。1,下载内核git clone h...原创 2019-01-11 22:16:12 · 830 阅读 · 0 评论