
Linux驱动--驱动大全
文章平均质量分 92
Linux的LCD驱动,I2C子系统,input子系统,pinctrl子系统,SPI子系统等驱动。正点原子和韦东山老师的驱动学习笔记。
陈 洪 伟
这个作者很懒,什么都没留下…
展开
-
Linux内核的I2C驱动框架详解
目录1 I2C驱动整体框架图 2 I2C控制器2.1 I2C控制器设备--I2C控制器在内核中也被看做一个设备2.2 i2c控制器驱动程序2.3 platform_driver结构体中的probe函数做了什么2.3.1 疑问: i2cdev_notifier_call函数哪里来的2.3.2 疑问:为什么有两个probe2.3.3 疑问:of_i2c_register_devices(adap);和bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_n原创 2023-07-31 17:25:22 · 6536 阅读 · 0 评论 -
Linux内核input子系统详解
函数,这里设置了中断处理函数是gtp_irq_handler,在gtp_irq_handler函数里面就是真正读取触摸屏数据的最底层的硬件函数了,里面就是调用i2c_transfer函数读取数据的了。假设nr设置为1,max_slots设置为5,那么督导的数据保存在:samp[0][0]、samp[0][1]、samp[0][2]、samp[0][3]、samp[0][4]和samp[1][0]、samp[1][1]、samp[1][2]、samp[1][3]、samp[1][4]中。原创 2023-11-03 16:47:57 · 1140 阅读 · 2 评论 -
Linux内核UART串口子系统驱动框架详解
具体看函数内部,申请了imx_uart结构体之后,显示解析了设备树获取了寄存器信息,然后设置这个uart_port结构体,然后uart_port结构体里面的ops操作结构体对应的是uart_ops结构体,这个uart_ops结构体里面对应的就是一些imx6ull自己的一些操作函数了,这就具体到底层硬件操作函数了,设置完这些东西之后就开始调用uart_add_one_port(&imx_reg, &sport->port)函数去添加一个port。原创 2023-10-19 14:28:07 · 8325 阅读 · 12 评论 -
Linux内核SPI子系统驱动框架详解
当我们在应用程序中调用比如write函数的时候,其实调用的就是spi设备驱动注册进去的file_operations结构体里面的write函数,也就是图中的spidev_write函数,这个spidev_write函数进一步调用的就是spi_write函数,这个spi_write函数就就是在SPI核心层定义的,然后spi_write函数进一步调用的就是SPI控制器驱动程序中的spi_sync函数。如上图所示是spi控制器和spi设备的软件架构图,左边是SPI控制器驱动软件结构,右边是SPI设备的软件结构,原创 2023-09-22 17:17:51 · 3275 阅读 · 9 评论 -
Linux内核的GPIO子系统驱动框架详解以及基于pinctrl和gpio子系统的LED驱动程序
上图就是gpio子系统的层次结构图,在其他的驱动程序里面,我们可以直接用gpiod_set_value这种函数来设置引脚的值,这个函数是在gpio库里面定义的,gpio库起到一个承上启下的作用,然后这个gpiod_set_value函数最终调用的是chip->set(chip, gpio_chip_hwgpio(desc), value)函数,这里的chip就是在gpio驱动程序里面注册的结构体,这个结构体体里面就包含了一些对gpio的操作函数。base // 这个GPIO控制器的GPIO编号。原创 2023-09-06 20:02:15 · 3498 阅读 · 3 评论 -
Linux内核的pinctrl子系统驱动框架详解
然后在这个结构体中,分别包含了pins,还有一些操作函数,然后又调用了imx_pinctrl_probe_dt(pdev, info);首先设备树中的iomuxc节点会被转化成一个platform_device,然后根据compatible = "fsl,imx6ul-iomuxc"进行匹配时,imx6ul_pinctrl_probe函数会被调用,在这个函数中,先是取出了pinctrl_info = (struct imx_pinctrl_soc_info *) match->data;原创 2023-08-28 21:21:51 · 2340 阅读 · 0 评论 -
Linux内核中实例化i2c设备的几种方法----./Linux-4.9.88/Documentation/i2c/instantiating-devices文件翻译
以下内容来自 ./Linux-4.9.88/Documentation/i2c/instantiating-devices,只是翻译成了中文。原创 2023-07-31 10:23:38 · 702 阅读 · 0 评论 -
Linux内核的platform总线驱动架构
我们写裸机程序的时候,思路是像下图这样的,这样的弊端就是我们要重复写设备驱动,简单的方法是就是每个平台的 I2C 控制器都提供一个统一的接口(也叫做主机驱动),每个设备的话也只提供一个驱动程序(设备驱动),每个设备通过统一的 I2C接口驱动来访问。这就是驱动的分隔,驱动只负责驱动,设备只负责设备,想办法将两者进行匹配即可。这个就是 Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。原创 2023-07-17 09:40:40 · 511 阅读 · 0 评论