
linux学习之路
文章平均质量分 92
fight_onlyfor_you
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PCIE读办卡信息代码
本代码是小白写的如果各位大神有好代码 请在下方留个方式#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2017-08-05 14:55:45 · 424 阅读 · 0 评论 -
LCD驱动程序层次分析
我们内核里面自带的触摸屏驱动是fbmem.c它肯定不止一个,根据我们驱动的分层思想,它肯定会把共性的东西抽出来我们来看这个驱动的入口函数static int __initfbmem_init(void){proc_create("fb", 0, NULL, &fb_proc_fops);if (register_chrdev(FB_MAJOR,"fb",&fb_原创 2017-03-08 12:38:39 · 459 阅读 · 0 评论 -
平台总线模型
平台总线模型主要分为3个部分,1.driver 2.device 3.busdevice主要放硬件相关的东西driver里面主要存放的比较稳定的代码我们依然可以查看gpio_keys.c这个代码来学习平台总线是一种虚拟的总线driver这个结构体会通过调用platform_driver_register这个函数platform_driver_re原创 2017-03-05 21:18:48 · 574 阅读 · 0 评论 -
用户态访问I2C设备
显然内核里面有万能的驱动程序给我们用看看内核文档 在\linux-4.8.14\Documentation\i2c下面的这里有的dev-interface,这里面告诉了什么,我们来看看里面说了什么通常,I2C设备由设备驱动来控制,但是他也可以提供用户空间直接访问适配器上的设备,通过/dev接口。你需要加载I2C-DEV模块有个i2c-tools 的工具包帮你写好了接口,在网原创 2017-10-03 18:40:43 · 2504 阅读 · 0 评论 -
按键驱动之使用输入子系统架构
有关输入子系统我们可以参考 gpio_keys.c这个代码,注:这只是一个例子,没有实际的作用static struct input_dev *button_dev/*1.分配一个input_device结构体*//*参考gpio_keys.c这个例子,可以知道其分配函数是input_allocate_device*//*2. 设置*//*怎么设置呢,我们来看看这个结构原创 2017-03-04 18:21:19 · 631 阅读 · 0 评论 -
linux驱动之输入子系统
输入子系统框架,把内核打开 搜索input.c输入子系统的代码在/driver/input目录下面 最上一层,我们称它为核心层要看一个驱动程序我们应该从他的入口函数开始看有一行:err = register_chrdev_region(MKDEV(INPUT_MAJOR, 0),INPUT_MAX_CHAR_DEVICES, "input");//注册字符设备,以前是我们自己写原创 2017-03-03 11:35:04 · 565 阅读 · 0 评论 -
I2C设备驱动
以前我们的probe只打印,现在我们做一些有用的事情原创 2017-09-20 22:13:59 · 415 阅读 · 0 评论 -
linux进程调度2
Fork前面创建的是一个进程,假设进程P1,调用fork之后,然后进程P2就被创建,P1是一个task_struct,p2也是一个task_struct,所以在内核里面这是两个task_struct,在内核的调度算法的层面上主要看到一个task_struct,他就会被调度,linux在P1刚刚把P2创建出来的时刻,linux会认为P1和P2之间会有某种内在的联系,前面有提到,task_struct原创 2017-10-16 22:43:18 · 414 阅读 · 0 评论 -
I2C
先来看一下原理图 这是个存储芯片。只用两跟引脚与CPU的I2C控制器相连,一个就是I2C_SCL一个就是I2C_SDA。CPU上的I2C_SCL和I2C_SDA上可以接很多芯片。每个芯片都会有个设备ID,或者称为设备地址,去看芯片的原理图,里面都有设备的地址,比如说我们这里的FM24CL04。I2C硬件协议首先CPU会发出一个start信号,保持SCL为高电平,SDA由高变原创 2017-09-12 01:00:48 · 573 阅读 · 0 评论 -
I2C写设备端
先从第一步做起,怎么去注册一个设备。内核里面有个文档这里有个instantiating-devices。这个文件的名字叫做实例化设备。第一种方法第一种方法通过总线设备来声明设备,这里有个例子,我们直接看源码方便一些I2C_BOARD_INFO解析起来就是I2C单板信息。定义一个board_info结构体。I2C_BOARD_INFO("24c08",0x50原创 2017-09-13 00:30:35 · 658 阅读 · 0 评论 -
内核中的
访问共享资源的代码 区域称为临界区。自旋锁和互斥体是保护内核临界区的两种机制自旋锁可以确保在同时只有一个线程进入临界区。其他进程想进入临界区的线程必须不停得原地打转,知道第一个线程释放自旋锁。这里说的线程不是内核线程,是执行的线程。下面的例子演示了自旋锁的基本用法#includespinlock_t mylock=SPIN_LOCK_UNLOCKED;spin_lock原创 2017-08-05 15:25:43 · 229 阅读 · 0 评论 -
i2c适配器驱动程序
我们先来参考一下内核中自带的驱动程序,看看别人怎么写的我们可以对内核进行make menuconfIg 看看它对应于哪一个文件这里有个S3C2410 I2C Driver然后按下H可以看到它依赖于那个配置这里是依赖于我们的CONFIG_I2C_S3C2410这个配置的我们在driver/i2c目录下搜索,CONFIG_I2C_S3C2410,看看它对应哪个文件原创 2017-10-05 11:53:13 · 485 阅读 · 0 评论 -
LCD驱动程序(1)初步编写LCD驱动程序
先参考内核里面自带的驱动程序,我们只是参考它的头文件而已 /*1.分配一个fb_info结构体*/ 30 s5p_lcd=framebuffer_alloc(sizeof(struct s5p_lcd), &pdev->dev); 31 //这里为什么需要一个大小,内核里面有个经常有个取巧的办法,分配一个结构体 ,本来这个结构体只有这么大,它会额外分配原创 2017-03-08 16:57:52 · 1782 阅读 · 0 评论 -
全程解析Linux鼠标驱动
/* * Copyright (c) 1999-2001 Vojtech Pavlik * * USB HIDBP Mouse support *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU原创 2017-10-13 09:27:18 · 1018 阅读 · 0 评论 -
LCD驱动程序(3)显存与调色板
我们设置好了LCD控制器,它就会自动的从显存里面取出一个像素的值,然后发送到LCD上去,然后再取出第二个......取到最后面之后有返回到第一个,周而复始。显存必须物理地址连续,LCD没那么聪明,你这个显存必须是连续的。怎么分配呢,我们就不能有kmalloc这种函数了。就要用专用的函数来分配这块内存。来看一看内核自带的一些驱动是怎么来分配这块内存的。我们参考我们内核里面的S3c原创 2017-03-10 23:47:01 · 934 阅读 · 0 评论 -
C++day26之rtti
#include<iostream>#include<typeinfo>using namespace std;typedef void (*PF)(int);/* *RTTI:run time type identification typeid,dynamic_cast运行时类型信息,在运行时需要检查类型信息的,那就是多态。所以说这两个东西只有用于多态才有...原创 2018-05-07 23:47:06 · 255 阅读 · 0 评论 -
linux设备树
设备树的最终目的提供一种语言来解析硬件配置信息 设备端:使用设备树之前硬件的描述信息,放置在一个个arch/xxx/mach-xxx/board-xxx.c的C文件中static struct resource dm9000_resource1[] ={ { .start = 0x20100000, .end = 0x20100000 + 1, .f原创 2017-08-19 19:09:19 · 1653 阅读 · 0 评论 -
SPI协议和OLED
一个芯片下面可以接很多个SPI设备,比如说SPI FLASH,SPI OLED,它们直接通过三条先来传输数据。第一条线是时钟线,然后是DO线,就是date output就是芯片给外设发数据然后读数据的话就是DI, 芯片上有很多个SPI设备,但是我们怎么区分要访问哪一个设备呢,所以就会有一个CS0,片选引脚。在硬件上,都是通过SCK,DI,DO来传输数据,都是通过CS来片选。那数据是怎么传的呢,原创 2017-12-30 16:10:05 · 5197 阅读 · 0 评论 -
USB驱动程序之USB总线驱动程序
USB主机控制器分为三种,一种是UHCI OHCI EHCIUHCI规范:intel阵营 告诉你怎么做USB这些东西 适用于低速和全速USB设备 低速一般称为USB1.1 全速一般称为USB2.0 inter做硬件比较牛 所以他的硬件比较复杂点,软件比较简单点 OHCI规范:microsoft阵营做出来的东西 适用于低速和全速 微软软件牛逼点,所以它的软件复杂点,硬件简单点原创 2017-03-14 21:56:40 · 3409 阅读 · 0 评论 -
U-BOOT源码目录
uboot的源码目录分析;各文件介绍(1) . gitignore,这是个git的工具,git是一个版本管理工具。这个文件和git有关,和uboot本身无关的,不用去管(2) config.mk ,后缀是.mk,是一个makefile,将来在makefile中会去调用它(3)MAINTAINERS 维护者,就是当前在参与维护uboot源码的社区工作者(4)Makefi原创 2017-11-04 16:10:00 · 408 阅读 · 0 评论 -
设备树介绍(2)
1.编译最新的内核第一步 tar -xvf .........解压内核第二步 make ARCH=arm xxxx_deconfig第三步 make ARCH=arm CROSS_COMPILE2.如何编译设备树(DTS)dtc编译器:设备树源码dts文件-----编译成二进制文件dtb在scripts/dtc目录下dtc:作用就是对设备树原创 2017-07-01 14:12:33 · 611 阅读 · 0 评论 -
uboot学习(1)
我们的异常向量表放在0地址处,如下图这个地址就是这个地址,不是随便写的,如果说我的异常向量表要放在这个位置,说白了异常向量表是代码,意思是你这个代码就在0地址??但是打开我们的芯片数据手册的memory map章节,可以看到下图这张图可以看出,0地址放的是IROM和IRAM,为什么要有这段地址,实际上是CPU把真正的IROM和IRAM映射到这里,因为系统已启动就在0地址找代原创 2017-10-30 19:14:51 · 364 阅读 · 0 评论 -
pcie驱动介绍
PCIE设备的地址由总线号、设备号和功能号组成,分别称为厂家ID、设备ID和设备类代码我们可以利用lspci工具了解这些概念。PCI工具集的一部分,下载地址为http://mj.ucw.cz/sw/pciutils/下面这个照片是在xx.xx.xx.xx下面的shell终端下运行lspci,运行lspci 上面输出代码每行开头的逻辑地址(xx:yy.z).XX代表PCI的总线号。一原创 2017-08-05 14:51:10 · 18219 阅读 · 1 评论 -
库依赖问题解决办法
问题:执行:sudo apt-get install g++得出如下错误:正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。下原创 2017-08-18 16:49:30 · 1029 阅读 · 0 评论 -
USB驱动程序之概念介绍
在windows下,当你拿一个新的PC设备,把他接到PC上面,它会出现发现新硬件,跳出一个框说要你安装驱动程序假设我们USB连的手机,他会提示你发现android phone,然后弹出对话框,提示你安装驱动程序。但是为什么没有驱动程序,它知道是android phone呢???这些信息应该在我们USB驱动程序读出来才对啊,为什么还没读出来就知道它是什么设备。因为这个windows里面已原创 2017-03-13 22:12:07 · 839 阅读 · 0 评论 -
触摸屏驱动之编写驱动程序
我们打开我们的核心板原理图可以看到这四根引脚分别接在xadcAIN2,3,4,5上面搜索发现不需要配置什么寄存器我们看一看芯片手册上的触摸屏那一章,我们的工作就是阅读那一章然后弄清楚那里面的东西就可以了先来看一看内核自带的触摸屏驱动做了什么事情ts.clock = clk_get(dev, "adc");if (IS_ERR(ts.clock)) {dev_err(原创 2017-03-13 16:26:12 · 4353 阅读 · 0 评论 -
nandflash驱动框架
nandflash驱动框架最上层肯定是应用程——————————app: open read write________________文件系统:文件系统是将对文件的读写转换为对块设备的读写—————————块设备驱动块设备 : 知道怎么优化——————nandflash协议层:知道发什么来读写,擦除,识别——————硬件相关原创 2017-03-28 23:07:18 · 1726 阅读 · 0 评论 -
块设备驱动程序的框架
我们大概来猜一下它的框架是怎么样的应用程序 open read write一个普通的文件“1.txt”1.txt最终肯定要操作硬件啊,比如硬盘啊 flash等等然后中间是块设备驱动程序,对普通文件的读写肯定要转换成对块设备文件的读写,你要读写哪一个扇区,那谁来把文件的读写来转换成对扇区的读写呢???中间就引入了文件系统ll_rw_block是通用的入口 这ll_rw原创 2017-03-21 23:52:17 · 970 阅读 · 0 评论 -
DMA的引入
假设我们的开发板,举个例子就是s5pv210外面接有内存,如上图,假设我们要把内存中某一段的数据作为源,拷贝到这个内存中的另一段中去我们写出程序来,比如说我们这么写char *src=某个地址char *dst=某个地址int i;for(i=0;i{dst[i]=src[i];}谁来运行这个程序,CPU这个S5PV210里面有个CPU,CPU执原创 2017-04-07 11:42:41 · 522 阅读 · 0 评论 -
块设备驱动的引入
块设备只能以快为单位接收输入和返回输出。假设我应用程序也是open read write,块设备里面也是给它提供open read write函数,然后来操作硬件我们举例来验证1.硬盘硬盘的格式像光盘一样一个一个盘面然后这一面上有一个一个的环像跑到一样的东西,这一环一环一样的东西称为柱面跑道上面有一个一个的块称为扇区,分别是扇区0,扇区1。我们假设有这么原创 2017-03-21 22:35:31 · 257 阅读 · 0 评论 -
USB驱动程序之鼠标用做键盘
我们还是接着来看看我们的例子程序 usbmouse.c这里它接着判断了他是不是鼠标,得到它的usb_host_interface,interface=intf->cur_alsetting就是当前接口的设置原创 2017-03-20 23:14:24 · 1430 阅读 · 1 评论 -
触摸屏驱动之概念介绍
触摸屏其实我们也是用输入子系统做的,回过头来看看我们输入子系统,触摸屏跟输入子系统一样的,右边的handler用的是edev.c,左边的device我们分配,设置,注册,和硬件操作开发板厂商一般提供了触摸屏驱动,我们在内核代码里面搜索 s3c2410_ts.c我们大概浏览一遍,然后自己来写static int __init s3c2410ts_init(void){retu原创 2017-03-11 21:38:46 · 2454 阅读 · 0 评论 -
usb驱动程序初步编写
今天我们的目标是将USB鼠标用做按键比如说左键按下就相当于字母L右键按下就相当于字母S滚轮按下就相当于回车相当于一个输入子系统,怎么做呢??1.分配一个input_device结构体2.设置它能够产生按键类事件,能够产生这三个按键3.注册4.硬件相关的操作使用USB总线下路的收发函数来读写数据我们今天写的驱动程序和以前写的驱动程序有什么差别,差别就是原创 2017-03-20 18:00:07 · 14331 阅读 · 0 评论 -
LCD硬件操作
我们的CPU里面有一个LCD控制器,可以把LCD理解成一行有很多个像素,有很多行。然后LCD后面有个电子抢,有个喷嘴,把颜色打到这个屏幕上,打完一个像素之后移动到下一个像素,然后喷射出来它怎么知道怎么移动呢,它怎么知道要移动到下一个像素呢。这个就是我们的vclk决定的,每来一个时钟,就移动一个像素。然后打出颜色,颜色的数据从VD0-VD23V就是video 视频 D就是data数据 V原创 2017-03-08 12:43:03 · 588 阅读 · 0 评论 -
小小的led驱动和测试程序
使用的板子为gec210的板子#include #include #include #include #include #include #include #include #include #include #include #define LEDCON 0xe0200280 //led控制寄存器的物理地址#define LE原创 2017-02-27 09:46:29 · 372 阅读 · 0 评论 -
内核定时器消除按键抖动
按键抖动按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开。因而在闭合及断开的瞬间总是伴随有一连串的抖动。按键去抖动的方法主要有两种:一是硬件电路去抖动;另外一种是软件延时去抖。而延时又一般分为两种,一种是for循环等待,另外一种是定时器延时。在操作系统中,由于效率方面的原因,一般不允许使用for循环来等待,只能使用定时器原创 2017-03-02 21:46:48 · 1062 阅读 · 0 评论 -
arm板裸机编程之led
电路原理图如下由电路原理图可知,当对应的GPIO口输出为低电平的时候,灯会被点亮,当对应的GPIO口输出为高电平的时候,灯会熄灭芯片手册如图。代码如下。C语言点亮灯代码如下#define LEDCON (*(volatile unsigned long *)0xe0200280)#define LEDDAT (*(volatile unsigned ch原创 2017-01-25 18:20:28 · 511 阅读 · 0 评论 -
驱动中的同步互斥阻塞之原子量
目的:只能有一个app打开驱动程序1.原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作常用原子操作函数举例atomic_v v=ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v);//原子变量增加1voi原创 2017-03-01 18:46:21 · 347 阅读 · 0 评论 -
基于异步通知机制的按键驱动
按下按键是驱动程序通知应用程序应用程序里面要注册信号处理函数驱动程序给应用程序发信号发给谁,这就要应用程序告诉驱动pid了怎么发,是驱动里面调用kill_fasync为了使设备支持异步通知机制,驱动程序涉及以下3项工作1.支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID 不过此项工作已经有内核完成,原创 2017-03-01 17:40:02 · 351 阅读 · 0 评论 -
按键驱动增加poll机制
poll机制的原理运用层中的open会调用sys_open,那我们的运用程序中的poll也会调用到我们的sys_pollsys_poll又会调用到do_sys_poll(.... , ...... ,&timeout_jiffies);最后一个参数就是超时参数do_sys_poll又会调用到poll_initwait(&table);poll_initwait>init_p原创 2017-02-28 11:03:22 · 301 阅读 · 0 评论