-
串口
串口我们要做的就是在文件中修改设备树, 在启动的时候uboot设置为使用串口ttymxc0, 就是6ull串口一, 我们真正要做的就是在设备树中添加所要使用的串口节点信息。当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttymxcX(X=0….n)文件在编写的时候主要实现的是uart_driver结构体struct uart_driver { struct module *owner; const char *driver_name; const cha...…
-
SPI
SPI和I2C类似, 主要的结构体是spi_master及认购提, 主要的实现就是个结构体的实现, 有通过控制器和外设交流的通信函数主要实现的函数有transfer或者transfer_one_message函数, 6ull主机使用的是后者6u自己使用的结构体叫spi_imx_data结构体, 实现函数tx和rxspi_imx_data结构体中有spi_master, 还有函数setup_transfer以及txrx_bufs函数setup_transfer: 设置tx, rx的绑定函数 ...…
-
I2C
I2C分为I2C控制器驱动, 由原厂进行编写, 还有具体的设备驱动, 由我们自己编写之前使用的platform是虚拟出来的总线, I2C可以自己作为一条总线, 重点就是I2C是适配器总线驱动重要的数据结构:i2c_adapter和i2c_algorithm,定义在include/linux/i2c.h文件中驱动是i2c-imx.c文件, 使用platform从设备树获取设备定义一个物理的控制器或者说I2C适配器驱动的主要工作就是初始化i2c_adapter结构体变量,然后设置i2c_alg...…
-
MISC
MISC混合的, 混杂的, 有一些外设不能进行分类的时候就使用MISC驱动, 其实就是最简单的字符驱动, 嵌套在platform之中所有的MISC设备驱动的主设备号都为10,不同的设备使用不同的从设备号MISC设备会自动创建cdev,不需要像我们以前那样手动创建我们需要向Linux注册一个miscdevice设备struct miscdevice { int minor;//次设备号 const char *name; const struct file_operations *fops...…
-
RTC
RTCLinux内核将RTC设备抽象为rtc_device结构体,因此RTC设备驱动就是申请并初始化rtc_device,最后将rtc_device注册到Linux内核里面结构体的重点是rtc_class_ops设备树snvs_rtc: snvs-rtc-lp { compatible = "fsl,sec-v4.0-mon-rtc-lp"; regmap = <&snvs>; offset = <0x34>; interrupts ...…
-
Linux自带的led驱动
Linux自带的led驱动一般自带的驱动都是需要使用图形界面进行配置图形界面–>Device Driver–>LED Support –> LED Support for GPIO connected LEDs使能驱动之后在在文件.config中存在CONFIG_LEDS_GPIO=y, 会把驱动文件编译到内核之中驱动分析使用标准的platform-drivermodule_platform_driver(gpio_led_driver); 使用一个宏完成函数的注册, ...…
-
LCD
LCD屏幕Framebuffer设备RGBLCD屏幕framebuffer为Linux显示模拟出来的显存, 允许程序直接对显存进行读写, 应用程序操作显存的机制系统会虚拟出来fbX这样的设备, 对设备进行操作即可lcdif: lcdif@021c8000 { compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; reg = <0x021c8000 0x4000>; interrupts = <GIC_SP...…
-
INPUT子系统
INPUT子系统输入有按键, 鼠标, 键盘, 触摸屏等, linux做了一个专门的框架, 本质上还是字符设备不同设备的输入代表的含义不同, 我们需要按照要求上报事件主要分为三层: 驱动层:输入设备的具体驱动程序,比如按键驱动程序,向内核层报告输入内容。 核心层:承上启下,为驱动层提供输入设备注册和操作接口。通知事件层对输入事件进行处理。 事件层:主要和用户空间进行交互。input核心层会帮我们注册一个字符设备类, 主设备号为13, 创建的类放在/sys/class目录下面, 在文件d...…