1,首先WK2124模块
WK 系列串口扩展芯片简介 目前 WK 系列能实现 SPI 扩展 UART 的芯片包括 WK2124、WK2204、WK2168、 WK2132。目前 WK2124、WK2204、WK2168 能实现 SPI 扩展 4 路 UART,WK2132 能实现扩展 2 路 UART。
目前这几款芯片使用的都是相同的 linux 驱动。 WK 系列扩展的子通道的 UART 具备如下功能特点: 每个子通道 UART 的波特率、字长、校验格式可以独立设置,最高可以提供 2Mbps 的通信速率。 每个子通道具备收/发独立的 256 级 FIFO,FIFO 的中断可按用户需求进行编程触 发点且具备超时中断功能。
这里可以参考https://blog.csdn.net/David_oneone/article/details/133267956
2,配置X3模块的SPI设备树,找到X3模块的DTS路径(/rdkgen/source/kernel/arch/arm64/boot/dts/hobot)找到hobot-x3-cm.dts在里面找到&spi1,
通过WK2124给的代码,添加进去
&spi1 {
status ="okay";
//fsl,spi-num-chipselects =<1>;
pinctrl-names ="default";
//pinctrl-0 =<&pinctrl spi1 sso gpio &pinctrl ecspi1 ecspi1>;
//pinctrl-0 =<&pinctrl_spi1_spi1>;
//cs-gpios =<&gpi05 9 GPIO ACTIVE LOW>;
wk2xxx_spi1@0{
status ="okay";
compatible ="wkmic,wk2xxx_spi"; //注意这里的命名要和驱动代码里的一致
reg = <0>;
spi-max-frequency=<10000000>;
reset_gpio=<&gpios 16 GPIO_ACTIVE_HIGH>;
irq_gpio=<&gpios 12 IRQ_TYPE_LEVEL_LOW>;
//cs-gpios =<&gpios 9 GPI_ACTIVE_LOW>;
};
};
3,编译驱动代码模块,通过交叉编译环境,编译WK的源码WKxxx_spi.c,给的有Makefiel,这里Makerfiel需要修改一下
ARCH:= arm64
MVTOOL_PREFIX = /home/wang/rdk-gen/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- //这里换成自己的编译工具路径
CROSS_COMPILE= $(MVTOOL_PREFIX)
KDIR := /home/wang/rdk-gen/source/kernel/ //这里换成自己的内核源码路径
TARGET =wk2xxx_spi
EXEC = $(TARGET)
obj-m :=$(TARGET).o
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o *~core.depend.*.cmd *.ko *.mod.c .tmp_versions $(TARGET)
make后在当前文件夹会生成一个wkxxx_spi.ko文件这个就是我们要放到X3系统里面要加载的模块
还需要修改地平线X3moudle dts中的hobot-pinctrl-xj3中的复用管脚,这里要参考X3模块的PIN_MUX在文档中找到中断和复位所用的GPIO口,在代码中设置他们所使用的功能。
4,X3模块的内核编译,修改完dts,把驱动代码wkxxx_spi.c放进内核源码的(/rdk-gen/source/kernel/drivers/spi )目录下,然后就可以对内核进行编译了。
先编译内核参考地平线官方文档https://developer.horizon.cc/documents_rdk/linux_development/environment_build
内核源码在 source/kernel,为方便内核的编译,提供mk_kernel.sh程序给用户使用。
执行以下命令编译linux内核:
sudo ./mk_kernel.sh
编译完成后,会在deploy/kernel目录下生成内核镜像、驱动模块、设备树、内核头文件。
dtb Image Image.lz4 kernel_headers modules
这些内容会被hobot-boot、hobot-dtb和hobot-kernel-headers三个debian包所使用,
所以如果想要自定义修改这三个软件包,需要先编译内核。
再编译hobot-dtb软件包,
mk_debs.sh 支持单独构建指定的软件包,在执行时带包名参数即可,例如:
./mk_debs.sh hobot-dtb
最后编译系统镜像
sudo ./pack_image.sh c
编译完成生成的新镜像在(/rdk-gen/deploy)目录下
把镜像重新烧录到X3,通过Ctrl+鼠标右键,在Mobaxter中拉取wkxxx_spi.ko文件,然后
模块签名
编译好的驱动模块文件,需要进行签名后才能加载到RDK X3的内核里,命令如下:
root@ubuntu:~# hobot-sign-file wkxxx_spi.ko
加载模块
加载ko:insmod wkxxx_spi.ko
加载成功会出现
然后就可以在、dev/目录下看到生成的四个串口节点