11 openwrt mt7628 oled驱动

1.遇到的第一个问题,编译固件过大

1.1 配置i2c驱动

make menuconfig
Kernel modules —> I2C support —> <*> kmod-i2c-gpio-custom.

11 openwrt mt7628 oled驱动_第1张图片## 1.2编译后固件过大

Openwrt修改flash大小

前言:在我们编辑固件选择软件包的时候会使固件逐渐变大,但是要符合你使用的型号,所以就修改固件大小来改变它。由于openwrt下默认一些固件大小是8M,所以在此来修改成16M,来支持我们的使用。

在新的版本中,已经加了对16M的支持,openwrt/tools/firmware-utils/src/mktplinkfw.c

代码如下

static struct flash_layout layouts[] = {
{
.id = “4M”,
.fw_max_len = 0x3c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x140000,
}, {
.id = “4Mlzma”,
.fw_max_len = 0x3c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x100000,
}, {
.id = “8M”,
.fw_max_len = 0x7c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x140000,
}, {
.id = “8Mlzma”,
.fw_max_len = 0x7c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x100000,
}, {
.id = “16M”,
.fw_max_len = 0xf80000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x140000,
}, {
.id = “16Mlzma”,
.fw_max_len = 0xf80000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x100000,
}, {
.id = “16Mppc”,
.fw_max_len = 0xf80000,
.kernel_la = 0x00000000,
.kernel_ep = 0xc0000000,
.rootfs_ofs = 0x2a0000,
}, {

}

};
所以这里就不进行修改了

1.修改dts

文件目录:openwrt/target/Linux/ramips/dts,在该目录下找到自己想要修改的dts文件,这里以mt7620a_mt7610e做示例

修改处dts代码展示:

            partition@50000 {
                label = "firmware";
                reg = <0x50000

0xfb0000>; }; 值得一提的是,7b=8M fb=16M

2.修改Makefile

文件目录:openwrt/target/linux/ramips/image/Makefile,由于我刚刚修改的是mt7620a_mt7610e,所以找到相关代码

11 openwrt mt7628 oled驱动_第2张图片
注意,这里是我修改之后的,以前是Default8M,现在改成16M,修改完之后编译,就可以看到你之前由于固件大于8M从而没有被编译出来的固件了。
原文链接:

1.3加载硬件驱动

在编译好固件之后,进入系统,需要加载相应的模块才能加载i2c设备,使用命令:

insmod i2c-dev

如果是 WRTnode2 系列的板子,请使用

insmod i2c-gpio-custom bus0=0,5,4

相关链接:http://wiki.wrtnode.cc/index.php?title=I2C%E7%9A%84%E7%8E%A9%E6%B3%95

修改i2c-gpio-custom.c
volatile unsigned long *GPIOMODE;
volatile unsigned long *GPIO0_31_DIR;
volatile unsigned long *GPIO0_31_DATA;

static int __init i2c_gpio_custom_probe(void)
{
int err;

printk(KERN_INFO DRV_DESC " version " DRV_VERSION "\n");

GPIOMODE=(volatile unsigned long *)ioremap(0x10000060,4);
GPIO0_31_DIR=(volatile unsigned long *)ioremap(0x10000600,4);
GPIO0_31_DATA=(volatile unsigned long *)ioremap(0x10000620,4);

*GPIOMODE |= (0x1<<20);
*GPIO0_31_DIR |= (1<<4)|(1<<5);
*GPIO0_31_DATA |= (1<<4)|(1<<5);
err = i2c_gpio_custom_add_one(0, bus0);

2.oled应用程序

管脚配置说明 链接:
https://www.jianshu.com/p/a45edc744275

应用程序
11 openwrt mt7628 oled驱动_第3张图片
配置:make menuconfig—>utilities–>
在这里插入图片描述

下载链接:https://download.csdn.net/download/liupeng08304/11760337 mt7628_oled.zip

3编译运行

insmod i2c-gpio-custom bus0=0,5,4 &oled /dev/i2c-0

4显示效果

11 openwrt mt7628 oled驱动_第4张图片11 openwrt mt7628 oled驱动_第5张图片

5存在问题

对于dts怎么修改io配置不是很了解,不知道哪里有详细的介绍

你可能感兴趣的:(11 openwrt mt7628 oled驱动)