1 内核配置

搜索1306,会出现

在这里插入图片描述这是陷阱,这个驱动是有点问题的。它对应
/Kernel/linux_code/drivers/staging/fbtft/fb_ssd1306.c这个驱动文件。

该文件的对应compatible是solomon,ssd1306。

我们搜索1307

在这里插入图片描述

  1. 它对应/Kernel/linux_code/drivers/video/fbdev/ssd1307fb.c。compatible 对应 “solomon,ssd1306fb-i2c”。

  2. 按照提示,开启对应的配置。.config文件里,可以看到,已经被正常打开。
    在这里插入图片描述

2 设备树添加

	fate_ssd1306: oled@5c {
			compatible = "solomon,ssd1306fb-i2c";
			reg = <0x5c>;
			status = "okay";
	};

3 验证

3.1 验证驱动

  1. 添加2后,发现内核报错
    在这里插入图片描述

  2. 追踪到代码里:发现没有设置reset-gpios;设置之。发现还报错
    在这里插入图片描述

  3. 这里是I2C总线通信错误。考虑硬件配置,地址问题。发现问题如下:
    是I2C 地址配置错误导致。SSD1306 系列 OLED 的默认 I2C 地址通常是 0x3C 或 0x3D(由硬件 A0 引脚电平决定),我配置的是 reg = <0x5c>,与实际硬件地址不匹配,导致 I2C 从设备无法响应。修改之。最后的设备树如下

	fate_ssd1306: fate_oled@3c {
		status = "okay";
		compatible = "solomon,ssd1306fb-i2c";
		reg = <0x3c>;
		solomon,width  = <128>;
		solomon,height = <64>;
		solomon,page-offset = <0>;
		solomon,com-invdir ;

		reset-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
	};

至此。OLED已经亮起。

3.2 操作oled

确认oled是哪个fb

使用fbset -fb /dev/fb0命令查看 fb0 的属性。看哪个能对应上128*64

使用echo操作

向 fb1 写入 1024 个 0 字节(全黑)
echo -en “\x00” | dd of=/dev/fb1 bs=1 count=1024 2>/dev/null

第 0 字节的第 0 位设为 1(点亮一个像素)
echo -en “\x01” | dd of=/dev/fb1 bs=1 count=1 seek=0 2>/dev/null

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐