iTOP-RK3568开发板驱动开发指南
文章平均质量分 92
驱动教程全新升级,并持续更新~更全,思路更科学,入门更简单。
北京迅为
让学习更简单,让开发更容易
展开
-
RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结
_copy(initfn)表示复制用户定义的初始化函数,__attribute__((alias(#initfn)))表示将init_module函数与用户定义的初始化函数initfn关联起来。这些函数最终都会调用load_module函数,而在load_module函数中,会通过do_one_initcall(mod->init)来执行驱动程序的入口函数。这些宏定义了一些内联函数和与之关联的特殊命名的函数,以及一些属性和别名,用于在编译时进行检查并将用户定义的函数与特定的模块函数关联起来。原创 2024-01-15 14:40:16 · 1196 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一个系统调用
如上图所示,在运行应用程序之后,打印“This is helloworld syscall” 成功调用自定义的系统调用,至此,向系统中添加一个系统调用实验结束。iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\。iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\。最后,重新编译内核源码,烧写内核镜像。原创 2024-01-15 14:25:04 · 459 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶6 内核运行ko文件实验——系统调用
它是应用程序与操作系统之间的桥梁,允许应用程序请求操作系统执行特定的操作,例如文件操作,进程管理,网络通信等。在load_module函数中,完成模块的加载过程,返回do_init_module函数进行模块的初始化。在do_init_module函数中,如果模块的init函数不为空,调用do_one_initcall函数执行模块的初始化函数。在do_one_initcall函数中,执行一个初始化调用函数,这个函数通常在内核初始化过程中使用,用于执行各个模块的初始化函数。那么,什么是系统调用呢?原创 2024-01-15 14:19:18 · 1535 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶5 自定义实现insmod命令实验
该驱动程序就是最简单的helloworld驱动程序,只是在第6行添加了dump_stack()函数,用来在内核中输出当前调用堆栈信息,在这里使用该函数的目的是验证在app中的init_module系统调用是否生效。dump_stack函数会打印调用的一系列函数,这些函数的具体调用已经在进阶第一章讲解过了,这里的重点为红色框中的倒数第二行,调用了init_module函数加载了helloworld驱动。该应用程序的重点在30行,使用init_module系统调用加载模块到内核。原创 2024-01-15 14:07:16 · 1010 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶4 内核是如何运行ko文件的_insmod
在该函数中有着两种模块加载方式,19-31行为第一种使用finit_module系统调用的加载方式,33-57行为第二种使用init_module系统调用的加载方式,默认情况会先使用第一种方式进行模块的加载,如果加载失败了才会使用第二种方式进行加载。其中最重要的是第18行的bb_init_module函数,正是通过该函数加载的内核模块。在开发板的各种系统中,insmod命令都默认存在了,而命令在本质上也是一个可执行程序,也有着对应的源码,不管是何种系统,insmod命令的源码是相同的(原创 2024-01-15 13:45:00 · 1268 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶3 驱动代码使用Makefile的宏
通常,通过在makefile中使用KBUILD_CFLAGS_MODULE变量,可以将特定于模块的编译选项添加到模块的编译命令中。在Makefile中KBUILD_CFLAGS_MODULE和EXTRA_CFLAGS都是用于指定编译内核模块时的编译选项的变量,下面是两个变量的详细介绍。例如,KBUILD_CFLAGS_MODULE += -DDEBUG表示将-DDEBUG编译选项添加到模块的编译命令中,定义了一个名为DEBUG的宏。至此,驱动代码使用Makefile的宏实验就完成了。原创 2024-01-15 13:10:09 · 1173 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶2 让驱动快一点被加载实验
arch_initcall的优先级为3,device_initcall的优先级为6,所以helloworld_a.c驱动会比helloworld_b.c驱动先加载,然后将两个驱动编译进内核,得到boot.img镜像之后,重新烧写到开发板即可(可以看到驱动A的加载时间为内核启动后的0.52秒左右,驱动B的加载时间为内核启动后的1.78秒左右,与我们预想的实验现象相同,至此让驱动快一点被加载实验就完成了。编译进内核的驱动才可以比较加载的速度,所以本章节不会将驱动编译成ko的形式,而是编译进内核中。原创 2024-01-15 10:56:44 · 730 阅读 · 0 评论 -
RK3568驱动指南|驱动基础进阶篇-进阶1 编译进内核的驱动系统是如何运行的?
所以,当使用module_init(helloworld)宏定义模块的入口函数后,会创建一个 __initcall_hello_world6函数指针变量,并将其初始化为hello_world函数,这个__initcall_hello_world6函数指针变量的目的是将模块的入口函数放置在内核的初始化调用链中,以便在系统引导期间自动执行。至此,关于编译进内核的驱动系统是如何运行的这一问题就讲解完成了,最后布置一个课程作业,利用本章节学习到的知识来让驱动可以更快的被加载,会在下一章中对该作业进行讲解。原创 2024-01-15 10:39:58 · 1168 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第136章 实战:实现动态切换引脚复用功能
当向selectmux文件写入0时表示选择功能2,也就是将该引脚复用为I2C3_SDA,当向selectmux文件写入1时表示选择功能1,也就是将该引脚复用为GPIO,这里我们先输入以下命令向selectmux文件写入1,验证GPIO的复用。左侧为该引脚的一些其他复用功能,在前面的章节中复用的都是GPIO功能,而本章节中将实现I2C3_SDA和GPIO两个复用功能的动态切换。pinctrl-1 指定了与该配置相关联的引脚控制器句柄,这里为 &i2c3_sda,表示复用为i2c3_sda功能。原创 2024-01-13 17:49:58 · 1471 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验
在第四行中的pinctrl-names参数并不是default,这就需要用到我们前面pinctrl子系统中的知识来查找并设置相应的pinctrl状态了,所以再第一节中我们将会重新学习一下pinctrl的一些相关函数。pinctrl 状态是与引脚相关的配置和控制状态,例如引脚模式、电气属性等。struct pinctrl *p:指向 pinctrl 实例的指针,表示要进行状态查找的 pinctrl。struct pinctrl *p:指向 pinctrl 实例的指针,表示要进行状态设置的 pinctrl。原创 2024-01-13 17:28:59 · 977 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第134章 三级节点操作函数实验
该函数的功能是在给定的父设备节点 dev 下获取当前子设备节点 child 的下一个子设备节点。在上一个章节中讲解了新版本GPIO子系统中的GPIO操作实验,而在进行操作之前首先要获取相应的gpio描述,在前面的示例中获取的都是二级节点的GPIO描述,那如果我们要如何获取下面led1和led2两个三级节点的gpio描述呢?如果仍旧使用gpiod_get来获取gpio描述会发现是获取不成功呢,获取三级节点的GPIO描述要使用什么函数呢,带着疑问,让我们进入本章节的学习吧。如果获取失败,返回值为 NULL。原创 2024-01-13 16:57:14 · 1084 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第133章 GPIO操作函数实验
返回值为整型,表示GPIO的方向。如果成功获取到GPIO方向,返回值为GPIO_LINE_DIRECTION_IN(0)表示输入,或GPIO_LINE_DIRECTION_OUT(1)表示输出。gpiod_direction_input 将给定的GPIO描述符所代表的GPIO配置为输入模式。gpiod_direction_output 函数用于配置GPIO的方向为输出,并可指定初始输出值。gpiod_get_direction函数用于获取GPIO的方向,即判断GPIO是输入还是输出。原创 2024-01-13 16:10:07 · 1279 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-132章 获取单个gpio描述实验
相较于上面介绍的gpiod_get函数,下面的三个函数可能会多一个index参数和optional的函数后缀,其中index 表示GPIO的索引值,当设备树的GPIO属性值包含多个GPIO引脚描述时,使用index来表示每个GPIO引脚的唯一标识。在第三行的内容中,1 表示引脚索引,RK_PA0表示资源描述符,用于标识与该引脚相关联的物理资源,表示引脚所属的功能组,RK _FUNC_GPI0 表示将引脚的功能设置为GPIO,&pcfg_pull_none表示引脚配置为无上下拉。原创 2024-01-13 15:48:40 · 1200 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第131章 GPIO子系统API函数的引入
新版本GPIO子系统接口是基于描述符(descriptor-based)来实现的,而旧版本的GPIO子系统接口是基于整数(integer-based)来实现的,在Linux内核中为了保持向下的兼容性,旧版本的接口在最新的内核版本中仍然得到支持,而随着时间的推移,新版本的GPIO子系统接口会越来越完善,最终完全取代旧版本,所以在本课程中主要讲解新版本的GPIO子系统接口。(11)void *data: 指向与GPIO设备相关的数据的指针,用于存储和访问与GPIO设备相关的自定义数据。原创 2024-01-13 15:08:52 · 1092 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第130章 GPIO的调试方法
6. /sys/kernel/debug/pinctrl/*/pinconf-pins:这些文件包含了GPIO引脚的配置信息,如输入/输出模式、上拉/下拉设置等。如下图所示,我们进入/sys/kernel/debug/目录下。5. /sys/kernel/debug/pinctrl/*/pingroups:该路径提供有关用于配置和控制系统上的 GPIO引脚的引脚组的信息。2. /sys/kernel/debug/pinctrl/*/pins:这些文件列出了GPIO的引脚编号,可以查看GPIO编号。原创 2024-01-13 14:10:10 · 1356 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第129章 GPIO控制和操作实验
GPIO软件编程方式有多种,可以写驱动程序调用GPIO函数操作GPIO,也可以直接通过操作寄存器的方式操作GPIO,还可以通过sysfs方式实现对GPIO的控制。会发现在/sys/class/gpio 目录下生成了一个名为 gpio15 的文件夹(gpioX,X 表示对应的编 号),该文件夹就是导出来的 GPIO 引脚对应的文件夹,用于管理、控制该 GPIO 引脚。出现上图报错的原因是该GPIO已经被其他GPIO使用,需要在内核中找到使用GPIO的驱动,并取消该驱动才可以正常使用GPIO。原创 2024-01-13 11:27:02 · 3062 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第128章 GPIO入门实验
我们甚至不用去写驱动,直接命令操作就可以了,因为linux系统本身有好多成熟的驱动框架,使用这些框架的好处就是当我们更换平台的时候,比如换到RK3568平台,我们应用程序可以几乎不用做任何改变,就可以直接在新的平台上运行。GPIO的实际应用举例,比如按键输入,当按下按键的时候,GPIO引脚的状态会发生变化,可以通过读取GPIO引脚的状态来检测按键事件,并进行相应的处理。控制led灯,GPIO可以控制LED的状态,通过设备GPIO引脚的输出状态,可以控制LED的亮灭,实现指示灯,状态指示等功能。原创 2024-01-13 10:19:01 · 1849 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl 子系统-第127章 猜想验证
这里传递过来的是pinctrl的设备树节点,在24-76行的for循环中会获取 pinctrl-* 属性,而在pinctrl节点中并没有该属性,pinctrl-* 属性是在一系列的设备节点中添加的,所以会在这里返回错误,同样的错误会一层层的向上级函数传递,最终导致pinctrl_bind_pins函数返回错误,从而不能设置引脚的复用,所以猜想2是不正确的。首先我们可以提出两种猜想,第一个猜想是在加载LED驱动的时候进行的pinctrl引脚复用,第二种猜想是在加载pinctrl驱动的时候完成的引脚复用。原创 2024-01-12 17:40:02 · 956 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl 子系统-第126章 通过pinctrl状态设置引脚复用实验
至此,关于pinctrl_bind_pins函数的重要内容就讲解完成了,通过pinctrl_bind_pins函数实现了为给定的设备绑定引脚,并在绑定过程中选择和设置适当的pinctrl状态,在124.1小节最后提出的struct pinctrl_state *default_state跟pinctrl_map结构体是什么时候建立起联系的问题也就解决了。·对于引脚复用设置(PIN_MAP_TYPE_MUX_GROUP),调用pinmux_enable_setting()函数来启用该设置。原创 2024-01-12 17:30:27 · 1277 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl 子系统-第125章 add_setting函数分析
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。【公众号】迅为电子。原创 2024-01-12 17:14:37 · 858 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl 子系统-第124章pinctrl_bind_pins函数
到这里关于pinctrl_bind_pins函数的第二阶段讲解就完成了,在该阶段大多都是关于赋值的操作并将节点加入到链表中,但分析到这里我们仍旧没有找到struct pinctrl_state *default_state和pinctrl_map结构体是在什么地方进行的绑定,所以在下个章节我们将继续分析124.2 小节中create_pinctrl函数接下来的部分。使用 devm_pinctrl_get 函数获取设备的pinctrl句柄,并将其赋值给 dev->pins->p。原创 2024-01-12 16:27:13 · 1090 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl 子系统-第123章dt_node_to_map函数分析
设备树(Device Tree)中存放的是对硬件设备信息的描述,包含了硬件设备的配置和连接信息,例如在pinctrl节点中的引脚的配置和映射关系。而rockchip_dt_node_to_map 函数的作用就是根据设备树中的节点信息,生成对应的引脚映射数组。函数设置映射的类型为PIN_MAP_TYPE_CONFIGS_PIN,并将引脚的名称作为映射的数据。然后,函数设置第一个映射的类型为PIN_MAP_TYPE_MUX_GROUP,并将父节点的名称作为映射的数据。同时,将设备节点的名称作为映射的组名。原创 2024-01-12 15:02:05 · 973 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl 子系统-第122章pinctrl 子系统函数操作集
在pinctrl的probe函数中,首先定义了一个struct rockchip_pinctrl *类型的结构体指针类型的变量info,然后传入了rockchip_pinctrl_register函数,然后又分别传入了rockchip_pinctrl_parse_dt函数和devm_pinctrl_register函数。其中,RK_PA2用于CAN0的接收引脚(can0_rxm1),RK_PA1用于CAN0的发送引脚(can0_txm1)。结构体pinconf_ops,用于定义引脚配置操作的函数指针。原创 2024-01-12 14:48:37 · 1326 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl子系统-第121章 pinctrl probe函数讲解
(2)第11-15行,对pinctrl描述结构体进行初始化。由于pinctrl驱动的probe函数理解起来较为复杂,所以在讲解pinctrl驱动的probe函数之前,我们先来了解一些与pinctrl相关的数据结构,本章首先会学习pinctrl_desc结构体和rockchip_pinctrl 结构体,最后对pinctrl probe函数进行分析。(3)第23-29行:调用rockchip_pinctrl_get_soc_data函数,根据设备信息获取与该设备相关的rockchip_pin_ctrl结构体。原创 2024-01-12 11:21:04 · 1081 阅读 · 0 评论 -
RK3568驱动指南|第十一篇 pinctrl子系统-第120章 pinctrl子系统的引入
在前面设备树相关的章节中已经对pinctrl节点的编写和使用进行了讲解,设备树的pinctrl可以分为客户端和服务端两个部分,在pinctrl客户端可以指定引脚描述、引脚组描述和配置描述,以满足其特定的功能和需求,不同厂商在客户端内容的编写格式是相同的。在上面的pinctrl节点中,描述了RK3568 GPIO控制器的配置和使用方式,pinctrl节点总共描述了五个GPIO控制器,分别是gpio0、gpio1、gpio2、gpio3和gpio4。接下来对rk3568的pinctrl设备树进行详细的讲解。原创 2024-01-12 10:53:01 · 1313 阅读 · 0 评论 -
RK3568驱动指南|第十篇 热插拔-第119章使用mdev挂载U盘和T卡实验
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。【公众号】迅为电子。原创 2024-01-12 10:10:05 · 1414 阅读 · 0 评论 -
RK3568驱动指南|第十篇 热插拔-第118章 使用udev挂载U盘和T卡实验
"/etc/udev/rules.d/usb/usb-add.sh":是要执行的命令的路径,即在设备添加时执行 /etc/udev/rules.d/usb/usb-add.sh 脚本文件。"/etc/udev/rules.d/tf/tf-add.sh":是要执行的命令的路径,即在设备添加时执行 /etc/udev/rules.d/tf/tf-add.sh 脚本文件。检查到/sbin/udevd进程就表示当前系统使用的是udev,至此配置buildroot文件系统支持udev就完成了。原创 2024-01-11 17:04:38 · 1807 阅读 · 1 评论 -
RK3568驱动指南|第十篇 热插拔-第117章uevent_helper实验
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。【公众号】迅为电子【粉丝群】82441201原创 2024-01-11 15:26:03 · 987 阅读 · 0 评论 -
RK3568驱动指南|第十篇 热插拔-第116章netlink监听广播信息实验
套接字类型指定了套接字的数据传输方式,常用的套接字类型包括SOCK_STREAM、SOCK_DGRAM、SOCK_RAW等。协议类型指定了套接字所使用的具体协议类型,常用的协议类型包括IPPROTO_TCP、IPPROTO_UDP、IPPROTO_ICMP等。协议族指定了套接字所使用的协议类型,常用的协议族包括AF_INET、AF_INET6、AF_UNIX等。其中,domain参数指定了套接字的协议族,type参数指定了套接字的类型,protocol参数指定了套接字所使用的具体协议。原创 2024-01-11 14:07:32 · 1030 阅读 · 0 评论 -
RK3568驱动指南|第一篇 驱动基础-第5章 驱动模块传参实验
驱动模块传参是一种可以随时向内核模块传递、修改参数的方法。例如可以传递串口驱动的波特率、数据位数、校验位、停止位等参数,进行功能的设置,以此节省编译模块的时间,大大提高调试速度。Linux内核提供了 module_param(name, type, perm)、module_param_array(name, type, nump, perm)宏和module_param_string(name, string, len, perm)宏,分别进行基本类型、数组和字符串参数的传递。原创 2023-09-07 10:00:33 · 527 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第11章 创建设备节点实验
在上两个章节的学习中,我们已经成功的申请了设备号并且注册了相应的字符设备。系统通过设备号对设备进行查找,而字符设备注册到内核之后,并不能直接进行设备文件操作命令(打开、关闭、读、写等),需要相应的设备文件作为桥梁以此来进行设备的访问,在本章节将对如何创建设备节点进行学习。原创 2023-09-08 10:34:46 · 323 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第8章 驱动模块编译进内核实验
把驱动编译进Linux内核,用 * 来表示,所以配置选项改为*。如果想要将驱动编译为模块,则用M来表示,配置选项改为M。通过上一章的学习,我们学会了使用menuconfig图形化配置工具,以及了解了menuconfig相关的文件:Kconfig .config XXXdefconfig。接下来修改上一级目录的Kconfig文件和Makefile文件,也就是driver/char目录。编译成功之后,进入到drivers/char/hello目录下,可以看到会生成对应的.o文件。【最新驱动资料(文档+例程)】原创 2023-09-08 10:32:31 · 403 阅读 · 0 评论 -
RK3568驱动指南|第一篇 驱动基础-第2章 你好!内核源码
本章我们来认识Linux内核源码,开始真正进入到驱动的世界里面,不知道各位小伙伴们有没有做好准备呢?原创 2023-09-07 09:56:45 · 1104 阅读 · 0 评论 -
RK3568驱动指南|第一篇 驱动基础-第6章 内核模块符号导出实验
驱动程序编译生成的ko文件是相互独立的,即模块之间变量或者函数在正常情况下无法进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导出。内核符号导出指的是在内核模块中导出相应的函数和变量,在加载模块时被记录在公共内核符号表中,以供其他模块调用。符号导出所使用的宏为EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)。原创 2023-09-07 10:02:21 · 384 阅读 · 0 评论 -
RK3568驱动指南|第一篇 驱动基础-第3章 helloworld 驱动实验
在学习C语言或者其他语言的时候,我们通常是打印一句“helloworld”来开启编程世界的大门。学习驱动程序编程亦可以如此,使用helloworld作为我们的第一个驱动程序。接下来开始编写第一个驱动程序—helloworld。原创 2023-09-07 09:57:29 · 815 阅读 · 0 评论 -
RK3568驱动指南|第一篇 驱动基础-第1章 前言
磨刀不误砍柴工!在学习驱动之前先和同学们交流下学习方法和学习态度。原创 2023-09-07 09:56:09 · 717 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第10章 注册字符设备实验
在上一小节中已经对设备号的相关知识进行了讲解,并成功申请到了设备号,那在Linux系统中,设备号是怎样与字符设备进行关联的呢?字符设备又是怎样注册的呢?带着疑问,让我们开始本章节的学习吧。原创 2023-09-08 10:34:02 · 338 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第7章 menuconfig图形化配置实验
上一小节我们打开的图形化配置界面是如何生成的呢?图形化配置界面中的每一个界面都会对应一个Kconfig文件。所以图形化配置界面的每一级菜单是由Kconfig文件来决定的。图形化配置界面有很多菜单。所以就会有很多Kconfig文件,这也就是为什么我们会在内核源码的每个子目录下,都会看到Kconfig文件的原因,那掌握Kconfig文件相关的知识是不是就非常重要呢。所以这一小节我们来看下如何编写Kconfig文件来生成图形化配置界面,也就是Kconfig文件的语法是什么。Mainmenu。原创 2023-09-08 10:30:19 · 891 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第12章 字符设备驱动框架实验
在进行注册字符设备实验章节中,使用cdev_init(…)函数对struct cdev结构体类型变量和struct file_operations结构体类型变量相链接,struct file_operations结构体就是把系统调用和驱动程序关联起来的关键数据结构。该结构体的每一个成员都对应着一个系统调用,读取file_operation中相应的函数指针,接着把控制权转交给函数,从而完成了Linux设备驱动程序的工作。原创 2023-09-08 10:35:17 · 266 阅读 · 0 评论 -
RK3568驱动指南|第二篇 字符设备基础-第9章 申请字符设备号实验
第9章 申请字符设备号实验经过前面章节的学习,相信大家已经对驱动模块的基本框架、驱动模块传参等知识有了自己的认识,本章节开始就要进入字符设备的世界了。字符设备是指在I/O传输过程中以字符为单位进行传输的设备,可以使用与普通文件相同的文件操作命令(打开、关闭、读、写等)对字符设备进行操作,是Linux驱动中最基本的一类设备驱动,例如最常见的LED、按键、IIC、SPI,LCD等都属于字符设备的范畴。要想对字符设备进行操作,需要通过设备号来对相应的设备进行查找,在本章节将对设备号相关知识进行讲解。原创 2023-09-08 10:33:12 · 324 阅读 · 0 评论