嵌入式linux
文章平均质量分 83
我是黏黏虫
永远忠于梦想!
展开
-
史上最经典的Linux内核学习方法论
做个标记 http://blog.chinaunix.net/uid-26258259-id-3783679.html 毫不夸张地说,Kconfig和Makefile是浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。Kconfig和Makefile就是Linux Kernel中引导我们去了解一个Kerne转载 2016-12-14 15:59:00 · 592 阅读 · 0 评论 -
ubuntu16.04不显示菜单项
使用如下命令:restart unity-panel-service原创 2016-12-14 11:56:51 · 3666 阅读 · 0 评论 -
Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailab
出现上述问题解决方法:sudo rm /var/lib/apt/lists/* -vf sudo apt-get update转载 2016-11-22 12:42:57 · 762 阅读 · 0 评论 -
linux设备驱动归纳总结(十二):简单的数码相框
http://blog.chinaunix.net/uid-25014876-id-116926.html其实代码很简单,实现lcd驱动,使lcd能够显示图片,当按下按键后切换图片。先要说明一下几处地方:1、代码中显示的图片都是*.bin文件(显示模式是使用16位数据来表示一个像素的颜色——5:6:5),将jpg文件转为*.bin文件的工具在我上传的mkimage目录中转载 2017-02-10 15:57:06 · 889 阅读 · 0 评论 -
linux设备驱动归纳总结(十一):简单的看门狗驱动
http://blog.chinaunix.net/uid-25014876-id-112879.html设备驱动的归纳已经差不多了,趁着知识点还没有遗忘,写点代码巩固一下,来个简单的看门狗驱动——静态平台类的杂设备看门狗驱动,有定时和重启两个基本功能。一、S3C2440中的看门狗——具体请看s3c2440文档看门狗应该可以算是S3C2440中最转载 2017-02-10 15:02:35 · 468 阅读 · 0 评论 -
linux设备驱动归纳总结(十):1.udev&misc
http://blog.chinaunix.net/uid-25014876-id-111839.html不知不觉我的总结已经写得七七八八了,这一章节只是补充一下两个知识点:动态创建设备节点和杂设备类的注册。一、动态创建设备节点——udev之前加载字符型设备后是通过命令mknod来创建设备节点的。在2.6内核中,有一个名叫udev的后台程序,它通转载 2017-02-10 15:01:34 · 280 阅读 · 0 评论 -
linux设备驱动归纳总结(九):1.platform设备驱动
http://blog.chinaunix.net/uid-25014876-id-111745.html这一节可以理解是第八章的延伸,从这节开始介绍platform设备驱动。一、什么是paltform总线一个现实的linux设备和驱动通常都需要挂接在一种总线上,比较常见的总线有USB、PCI总线等。但是,在嵌入式系统里面,SoC系统中集成的独立转载 2017-02-10 15:00:08 · 632 阅读 · 0 评论 -
linux设备驱动归纳总结(八):3设备模型的分层与面向对象
http://blog.chinaunix.net/uid-25014876-id-110738.html前面的内容介绍了总线、设备和驱动函数的关系和操作。从这节开始,介绍设备管理中的分层思想和面向对象思想(名字是我自己瞎编的,《LDD》上指的是结构体内嵌)。可以理解是平台类设备(platform)的一个过度。一、设备管理的分层回想一下之前的设备转载 2017-02-10 14:56:22 · 255 阅读 · 0 评论 -
linux设备驱动归纳总结(八):4.总线热插拔
http://blog.chinaunix.net/uid-25014876-id-110774.html上一节介绍设备管理中的分层思想和面向对象思想(名字是我自己瞎编的)。接下来说一下热插拔的操作。一、热插拔的实现我不知道在这里用热插拔这样的名字是否合适,在之前的代码,需要我自己手动去加载驱动和设备的模块,但在现实的情况下,一般是当设备一被插入转载 2017-02-10 14:58:42 · 305 阅读 · 0 评论 -
linux设备驱动归纳总结(八):2.match.probe.remove
http://blog.chinaunix.net/uid-25014876-id-110295.html上一节介绍了总线、设备和驱动函数的注册,这节着重介绍它们三者的关系,和上一节一样,我模拟一条usb总线,一个usb鼠标设备和一个usb鼠标驱动函数,当然,只是名字是usb,里面并没有实质的操作,只是通过这样来介绍一下三者之间的关系。一、总线、设备和驱动函数在/s转载 2017-02-10 14:55:29 · 289 阅读 · 0 评论 -
linux设备驱动归纳总结(八):1.总线、设备和驱动
http://blog.chinaunix.net/uid-25014876-id-109733.html这几天一直在看设备模型,内核的代码看得我越来越沮丧,特别是kboject、kset和ktype之间的关系。但是,设备模型的归纳我打算先跳过这几个重要结构体,先介绍总线、设备和驱动——设备管理的相关内容。先介绍如何使用,有机会介绍大概的原理。一、sysfs文件系统转载 2017-02-10 14:52:17 · 391 阅读 · 0 评论 -
linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
http://blog.chinaunix.net/uid-25014876-id-119723.html这节的内容说不上是驱动,只是写个代码让触摸屏能够工作,随便介绍一下时钟子系统(我不知道这样叫合不合适),仅次而已。一、程序不能工作程序的源代码在13th_ts_input/13th_ts_input/1st。大致的操作就是配置寄存器,设置触摸转载 2017-02-10 15:59:51 · 281 阅读 · 0 评论 -
linux设备驱动归纳总结(一):内核的相关基础概念
linux设备驱动归纳总结(一):内核的相关基础概念xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一.linux设备驱动的作用内核:用于管理软硬件资源,并提供运行环境。如分配4G虚拟空间等。linux设备驱动:是连接硬件和转载 2017-01-16 13:15:07 · 269 阅读 · 0 评论 -
linux设备驱动归纳总结(三):7.异步通知fasync
http://blog.chinaunix.net/uid-25014876-id-62725.html异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信号与一个函数对应,每次接收到这个信号就会调用相应的函数。一、什么是异步通知个人认为,异步通知类似于中断的机制,如下转载 2017-01-22 17:07:53 · 478 阅读 · 0 评论 -
linux设备驱动归纳总结(三):6.poll和sellct
一、系统调用select的简介简单来说,select这个系统调用的作用就是在应用层调用驱动函数中的poll来检测指定的文件的状态(读、写和异常)。如果某个状态满足,select函数调用成功后返回,应用程序就可以通过指定的函数来判断现在的文件状态。注意的是:select可以指定判断的时间,指定时间内,应用程序会阻塞在select函数,直到状态满足或者超时。二、驱动函数po转载 2017-01-20 17:27:58 · 176 阅读 · 0 评论 -
linux设备驱动归纳总结(二):模块的相关基础概念
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一。初探linux内核模块内核模块:内核本身是很庞大的一个结构,需要的组件很多。编译内核时,用户 可以把所有的代码编译进内核,但是这样会引起两个问题:一是内核过大;二是 当需要添加或者删除转载 2017-01-16 15:11:41 · 206 阅读 · 0 评论 -
Linux下select()系统调用
一、select()函数功能 select系统调用允许程序同时在多个底层文件表述符上,等待输入的到达或输出的完成。二、函数意义 一个服务器可以同时在多个打开的套接字等待请求到来的方法而处理多个客户。(只是具体应用的其中之一) 自己的理解,但凡是程序在执行过程中会遇到阻塞(不到条件发生就不往下执行)的情况,都是很浪费CPU资源转载 2017-01-20 15:59:55 · 619 阅读 · 0 评论 -
内核新的ioctl方式---- unlocked_ioctl和compat_ioctl
http://lwn.net/Articles/119652/The ioctl() system call has long been out of favor among the kernel developers, who see it as a completely uncontrolled entry point into the kernel. Given the vast n转载 2017-01-20 15:36:20 · 652 阅读 · 0 评论 -
unlocked_ioctl和堵塞(waitqueue)读写函数的实现
学习了驱动程序的设计,今天主要总结的是ioctl和堵塞读写函数的实现。一、ioctl函数的实现首先说明在2.6.36以后ioctl函数已经不再存在了,而是用unlocked_ioctl和compat_ioctl两个函数实现以前版本的ioctl函数。同时在参数方面也发生了一定程度的改变,去除了原来ioctl中的struct inode参数,同时改变了返回值。但是应用程序设计过转载 2017-01-20 15:33:42 · 436 阅读 · 0 评论 -
wait_event_interruptible 使用方法
1. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(), 而schedule()会将位于TASK_INTERRUPTIBLE状态的当前进程从runqueue 队列中删除。从转载 2017-01-20 15:25:41 · 480 阅读 · 0 评论 -
Linux设备驱动归纳总结(七):2.内核定时器
http://blog.chinaunix.net/uid-25014876-id-106572.html这节将介绍内核定时器的使用。一、定时器之前说过两类跟时间相关的内核结构。1、延时:通过忙等待或者睡眠机制实现延时。2、tasklet和工作队列,通过某种机制使工作推后执行,但不知道执行的具体时间。接下来要介绍的定时器,能够使工作在转载 2017-02-10 14:51:21 · 223 阅读 · 0 评论 -
linux设备驱动归纳总结(七):1.时间管理与内核延时
http://blog.chinaunix.net/uid-25014876-id-105727.html这节将介绍一些很枯燥的内核,大体是内核中时间的概念和内核延时的使用,并没有源代码。一、内核时间的相关概念墙上时钟:也就是实际时间。系统时间:自系统启动开始所经过的时间。时钟中断:内核会周期性的产生时钟中转载 2017-02-10 10:14:07 · 223 阅读 · 0 评论 -
linux内核中jiffies的回绕问题
http://blog.chinaunix.net/uid-25014876-id-105185.html本文原地址:http://blog.csdn.net/yuanlulu/archive/2010/11/18/6019862.aspxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2017-02-10 09:23:31 · 264 阅读 · 0 评论 -
linux设备驱动归纳总结(四):3.抢占和上下文切换
http://blog.chinaunix.net/uid-25014876-id-65711.html上一节介绍了进程调度的一些基本概念,并简单介绍了在没有抢占的情况下,CFS调度的是如何分配进程的优先级和时间片。但是,内核并不会只是单一地分配时间片让进程运行。一、什么是上下文切换上下文切换,是指从一个可执行的进程切换到另外一个可执行的进程。在linux内转载 2017-02-08 15:24:15 · 246 阅读 · 0 评论 -
linux设备驱动归纳总结(四):2.进程调度的相关概念
http://blog.chinaunix.net/uid-25014876-id-65555.html进程的调度就是指进程间的切换,进程调度的知识其实我也不太清除,我查找的资料有些说法并不一致,所以我只能说一下一些我的理解。如有错误或不足,望指正。一、I/O消耗型进程和处理器消耗型的进程:进程分为I/O消耗型和处理器消耗型两种。I/O消耗型,是指进转载 2017-02-08 14:50:42 · 224 阅读 · 0 评论 -
linux设备驱动归纳总结(四):1.进程管理的相关概念
http://blog.chinaunix.net/uid-25014876-id-64866.html接下来的几节我会大概的讲一下内核进程的一些概念,其实应该在学习系统编程时候就应该知道的。。我参照的书籍是《linux内核设计与实现》(第三版)。我会尽可能地跳开内核代码,简述一下原理。一、什么是进程简单的说,进程就是正在运行的程序,一个程序可以同时有多个进转载 2017-02-08 14:47:16 · 233 阅读 · 0 评论 -
linux设备驱动归纳总结(三):3面向对象思想和lseek
一、结构体struct file和struct inode在之前写的函数,全部是定义了一些零散的全局变量。有没有办法整合成到一个结构体当中?这样的话,看起来和用起来都比较方便。接下来就要说这方面的问题,不过先要介绍一下除了fops以外的两个比较重要的结构体:1)struct file在内核中,file结构体是用来维护打开的文件的。每打开一次文件,内核空间里就会多增加一个fi转载 2017-01-17 14:43:49 · 252 阅读 · 0 评论 -
创建一个设备节点 主要命令及参数
Linux下生成驱动设备节点文件的方法有3个:1、手动mknod;2、利用devfs;3、利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。在2.6.17以前,在/dev目录下生成设备文件很容易,de转载 2017-01-17 11:10:37 · 922 阅读 · 0 评论 -
linux设备驱动归纳总结(三):2open.close.read.write
linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write一、文件操作结构体file_operations继续上次没讲完的问题,文件操作结构体到底是什么东西,为什么我注册了设备之后什么现象都没有?可以验证文件操作结构体的内容。file_operations是一个函数指针的集合,用于存放我们定义的用于操转载 2017-01-16 15:49:47 · 233 阅读 · 0 评论 -
linux设备驱动归纳总结(三):1字符型设备之设备申请
一、驱动的分类:内核驱动大致分为三类:1)字符设备:在今后的接触的大多数都是字符设备,我也只学过这个。2)块设备 :与硬盘相关的设备。3)网络设备:与网络相关的设备。上面的三种设备,我也只是学习过字符设备,所以对后面的两种也没有太多的归纳。稍稍说一下字符设备与块设备之间的区别:1)传输数据大小:字符设备以字节方式进行存转载 2017-01-16 15:48:56 · 278 阅读 · 0 评论 -
简单分析uboot启动内核
1.uboot启动内核的代码缩减如下:s = getenv ("bootcmd");debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "");if (bootdelay >= 0 && s && !abortboot (bootdelay)){ run_command (s, 0);}2.假设boot转载 2016-12-13 17:03:41 · 258 阅读 · 0 评论 -
linux设备驱动归纳总结(四):4.单CPU下竞态和并发
http://blog.chinaunix.net/uid-25014876-id-67005.html经过上面几节的铺垫,终于要来重点了,由于内核的进程调度和中断(中断还没讲,不过这里会大概的说说),它们都会进入内核共用内核的资源。所以,只要一不留神,自己进程的资源就会在不经意的情况下被别的进程修改了。这节将介绍并讨论如何解决。一、什么是并发所谓的并发,就转载 2017-02-08 16:03:23 · 198 阅读 · 0 评论 -
linux设备驱动归纳总结(四):5.SMP下的竞态和并发
http://blog.chinaunix.net/uid-25014876-id-67673.html这节将在上一节的基础上介绍支持多处理器和内核抢占的内核如何避免并发。除了内核抢占和中断外,由于多处理器的缘故,它可以做到多个程序同时执行。所以,进程除了要防自己的处理器外,还要防别的处理器,这个就是这节要介绍的内容。一、多处理器抢占式内核的内核同步需要防什么转载 2017-02-08 16:08:15 · 346 阅读 · 0 评论 -
linux设备驱动归纳总结(五):1.在内核空间分配内存
http://blog.chinaunix.net/uid-25014876-id-79134.html一般的,用户空间使用函数malloc在堆上分配内存空间,同样的,在内核空间同样有一套类似的函数来分配空间。下面的知识会涉及页式管理的内存机制,如果不懂的要先复习一下,在S3C2440数据手册的MMU部分有介绍。一、内核空间和用户空间有什么不同学转载 2017-02-08 16:32:41 · 232 阅读 · 0 评论 -
linux设备驱动归纳总结(六):3.中断下半部之工作队列
http://blog.chinaunix.net/uid-25014876-id-100700.html这节介绍另外一种的下半部实现——工作队列。相对于软中断/tasklet,工作对列运行在进程上下文,允许睡眠,接下来慢慢介绍。1、工作队列的使用按惯例,在介绍工作队列如何实现之前,先说说如何使用工作队列实现下半部。步骤一、定转载 2017-02-10 09:22:30 · 276 阅读 · 0 评论 -
linux设备驱动归纳总结(六):3.中断下半部之tasklet
http://blog.chinaunix.net/uid-25014876-id-100005.html一、什么是下半部中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。另外,中断上下转载 2017-02-10 09:21:13 · 235 阅读 · 0 评论 -
linux设备驱动归纳总结(六):2.分享中断号
http://blog.chinaunix.net/uid-25014876-id-90837.html上一节介绍的内容是,调用接口request_irq(),使中断号与中断处理函数对应。但是,有时候会有这样的情况,如果开发板上按键的中断已经被另外的驱动程序注册中断了,而我现在又想再注册一次这个中断,这就出现了一个中断号不止对应一个中断函数的情况。注意,这里与硬件上的共享中断不一样,这转载 2017-02-10 09:16:56 · 253 阅读 · 0 评论 -
linux设备驱动归纳总结(六):1.中断的实现
http://blog.chinaunix.net/uid-25014876-id-90740.html一、什么是中断中断分两种:1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求。其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ)。一般地,linux下很少使用快速中断请求。2)异常,又转载 2017-02-10 09:15:35 · 247 阅读 · 0 评论 -
linux设备驱动归纳总结(五):4.写个简单的LED驱动
http://blog.chinaunix.net/uid-25014876-id-84693.htmlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx在上面的章节的知识,已经能够实现个简单的LED驱动。居于前面操作LED的函数(5th_mm_2/3rd/转载 2017-02-09 15:53:33 · 204 阅读 · 0 评论 -
linux设备驱动归纳总结(五):3.IO静态映射
http://blog.chinaunix.net/uid-25014876-id-83299.htmlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx有时候会觉得,每次访问硬件都要先通过ioremap来获取虚拟地址,其实有没有一种一劳永逸的方法,只要一次转载 2017-02-09 15:52:38 · 248 阅读 · 0 评论