Linux内核与驱动
文章平均质量分 95
骑牛唱剧本
这个作者很懒,什么都没留下…
展开
-
【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】
qquadLinux是工作在保护模式下,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。\qquadFramebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。原创 2023-08-13 23:38:20 · 1509 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】
qquad从这张图就可以看出。白光经过楄光和液晶层后通过每一个像素的RGB的三个子像素后,就能呈现出彩色图像。\qquad因此,LCD的电路主要任务就是控制如图中的电极板,从而控制液晶形态而达到控制每个红兰绿子像素的秀光量。\qquad当前主流的LCD是TFT,特点是超薄、清晰。\qquad不同的组件之间的连接,需要做好很多约定,这些软硬件的约定构成了接口。在LCD的屏与控制器之间的接口是开发者重点要关注的。用于连接LCD驱动器与LCD控制器这间的软硬件规范。是芯片级的接口。在单片机上:MCU接口。原创 2023-08-06 21:38:07 · 2316 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(17)内核驱动模块的启动机制】
qquad总结起来,初始化调用链表是一个全局变量,用于管理初始化函数。链表的元素是initcall_t类型的结构体,包含初始化函数的指针和优先级值。在init/main.c文件中的函数会遍历链表,并按照优先级依次调用其中的初始化函数。原创 2023-06-25 11:54:27 · 480 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】
qquad这部分可以在阅读完其它部分后,再来看这个总结,会有更清晰的认识。1、input子系统是一个针对输入类型硬件的高度标准化的驱动框架。2、在充分的归纳驱动行为的基础上,把驱动由3层1事件来实现。这3层从上到下就是(事件处理层、核心层、设备驱动层),而一个事件指的就是struct input_event。3、开发者只需要编写设备驱动层对应的驱动程序即可。事件处理层以及核心层的处理,由内核实现。而串起这些内核 处理的核心又是事件类型(EVENT TYPE)与事件码(EVENT CODE)。原创 2023-06-11 23:43:39 · 1359 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(15)linux总线、设备、驱动模型之I2C总线】
define I2C_CLASS_HWMON (1原创 2023-06-09 11:41:08 · 1950 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(15-1)例程】
因为篇幅的原因,本文为的配套例程。原创 2023-06-08 09:13:59 · 914 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(14)linux总线、设备、驱动模型之platform】
传统的驱动方式,驱动代码与设备数据混在一个程序文件中,这会导致开发不方便以及一些功能难以支持:\qquad为了使得一个驱动可以在不同平台上适配同一类但资源分配不同的设备。这时需要使得设备资源信息独立于驱动,驱动不再绑定具体设备。因此这种思路下就形成了总线设备驱动模型。\qquad这个总线、设备、驱动模型的目的在于使驱动只管驱动,设备只管设备资源,总线负责匹配设备和驱动。驱动则以标准途径拿到板级信息,这样,驱动就可以独立于具体的设备。\qquad在linux2.6以后的设备驱动模型中,需关心总线、设备和驱动原创 2023-06-02 11:06:33 · 1030 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(13-中断管理)】
该节点定义在设备树文件在arch/arm/boot/dts/exynos4.dtsi中,系统已帮我们写好,需要知道其含义,以及该含义的出处。原创 2023-05-28 11:42:56 · 1873 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(12-设备树操作函数)】
学习Linux设备树API的最权威和最好的资源是官方文档。原创 2023-05-16 17:50:33 · 1303 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(11-设备树)】
1、ranges属性值的格式 , 表示将local地址向parent地址的转换。比如对于#address-cells和#size-cells都为1的话,以为例,表示将local的从0x0—(0x0 + 0x20)的地址空间映射到parent的0x10—(0x10 + 0x20)原创 2023-05-13 18:11:41 · 2155 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(10-内核内存管理)】
对于包含MMU(内存管理单元)的处理器而言,linux系统以虚拟内存的方式为每个进程分配最大4GB的内存。这真的4GB的内存空间被分为两个部分–用户空间 与 内核空间。用户空间地地址分布为0~3GB,剩下的3 ~ 4GB 为内核空间。如下图。用户进程通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才可以访问到内核空间。每个进程的用户空间都是独立的,互不相干,用户进程各自有不同的页表。原创 2023-05-08 16:09:35 · 1074 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(9-内核定时器)】
/ 期望的时间值 当前jiffies + x * HZ 做为超时时间 void(* function)(unsigned long);// 时间到达后,执行的回调函数,该函数处于软中断异常上下文,因此该回调函数内不允许有阻塞操作 unsigned long data;//传给回调的参数 };将 entry.pprev 字段置为空,以标识定时器未插入任何链表。设置 function 字段为传入的回调函数 callback。原创 2023-05-04 20:09:00 · 1027 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(8-内核 I/O)-信号驱动】
信号是软中断,用于通知进程某个事件已经发生。进程可以选择如何响应信号:忽略、默认处理、自定义处理等。常见信号有:SIGINT(键盘中断)、SIGKILL(强制终止)、SIGSTOP(暂停进程)、SIGCONT(继续运行进程)等。信号值信号名说明1SIGHUP终端断线,用于进程与控制终端的连接2SIGINT键盘中断,用于进程的输入终端3SIGQUIT键盘的退出键(Ctrl+/)4SIGILL非法指令5SIGTRAP跟踪陷阱6SIGABRT。原创 2023-04-30 12:08:39 · 1111 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(7-内核 I/O)-多路复用】
接上篇,继续内核 I/O的五种模式的解读。原创 2023-04-30 12:06:37 · 1264 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(6-内核 I/O)-阻塞与非阻塞】
在linux内核中,链表是一个非常重要的数据结构。与通常做法中的链表不同,Linux内核方式与众不同,它不是将数据结构塞入链表,而是将链表节点塞入数据结构。这样链表就可以链接在任意的数据结构上。int a;char *c;list_head节点之间前后串联,形成一个数据链表,如示意图,示意中只出现了单向循环。这样,当取得一个list_head的地址后,就可以通过container_of()宏而取得整个数据结构的地址。具体是通过list_entry()宏取得的。原创 2023-04-30 12:02:26 · 1442 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】
执行流:有开始有结束总体顺序执行的一段代码 又称上下文。对于应用层编程而言,只有任务上下文。对于内核编程而言,即有任务上下文也有异常上下文。竞态:多任务并行执行时,如果在一个时刻同时操作同一个资源,会引起资源的错乱,这种错乱情形被称为竞态共享资源:可能会被多个任务同时使用的资源。临界区:操作共享资源的代码段。并发控制机制:为了解决竞态,需要提供一种控制机制,来避免在同一时刻使用共享资源,这种机制被称为并发控制机制对互斥锁初始化为可用 --> 对互斥锁进行P操作锁定 --> 临界区 --> 对原创 2023-04-20 22:47:55 · 707 阅读 · 2 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(4-字符驱动实例)】
使用一个内存缓冲虚拟一个字符型设备,进行字符驱动的模拟实例。原创 2023-04-16 10:30:27 · 594 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(3-字符设备驱动详解)】
项目说明语法功能将主设备号和次设备号转换成dev_t类型头文件参数major为主设备号,minor为次设备号宏定义返回值成功执行返回dev_t类型的设备编号变量用途说明设备号,标识设备的身份标号,可以解析出主设备号与次设备号创建于驱动加载之时,也存于cdev结构体内表示设备的结构体,将设备号与操作函数结构体file_operations关联起来创建于驱动加载之时,加载到内核的cdev链表中驱动实际操作的函数入口,是具体的设备驱动函数集合的入口。原创 2023-04-10 23:04:20 · 1316 阅读 · 3 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(2-linux内核模块)】
模块本身不被编译入内核映像,从而使内核映像比较精简。模块被加载后,其与其它内核进程没有区别。内核模块的本质:一段隶属于内核的“动态”代码,与其它内核代码是同一个运行实体,共用同一套运行资源,只是存在形式上是独立的。记住,内核模块的运行是在内核空间里的。原创 2023-04-08 11:35:47 · 616 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-(1-linux内核结构)】
一个32位处理器的Linux的每个进程享有4G空间,一般0-3G属于用户空间,3G-4G属于内核空间。在ARM环境中,Linux系统充分利用CPU的硬件特性,实现了两级的操作模式,用户(usr)模式和管理模式(svc)。如图,虚拟文件系统为上层的应用程序提供了统一的调用接口,对下则负责调用具体底层文件系统或设备驱动中实现的file_operations结构体中的成员函数。如图,有操作系统后,应用程序可以不管具体的硬件细节,而都使用操作系统API的统一接口,这样利于大规模标准化开发,提高开发效率。原创 2023-04-07 11:14:51 · 1653 阅读 · 0 评论 -
【嵌入式环境下linux内核及驱动学习笔记-开篇】
从本篇开始,进入了linux内核及驱动的学习。linux庞大而复杂,在嵌入式编程的过程中,会涉及大量的linux内核和驱动的相关知识。因此,对linux的学习也是一个循续渐近以及持之以恒的过程。需要不断积累,以及积累不断。原创 2023-04-07 11:10:02 · 938 阅读 · 5 评论