...
分享

hi3798mv100编译ch341串口驱动

这是一场持久战
查阅了无数资料
经历了无数失败
直到...
[373010.516498] usbcore: registered new interface driver ch341
[373010.516706] usbserial: USB Serial support registered for ch341-uart

首先感谢各位前辈的分享:
@teasiu https://www.znds.com/tv-1207323-1-1.html
@AyFun https://github.com/AyFun/HiSTBLinux_drive
@07bug https://github.com/07bug/HiSTBLinuxV100R005C00SPC060
@三见故山秋 https://blog.csdn.net/m0_48931482/article/details/136988649?spm=1001.2014.3001.5502

那就开始吧。

盒子的基本信息:

板型名称 : hi3798mv100_hi3798mdmo1d
CPU 信息 : hi3798mv100-series@4核处理器 | armv7l架构
系统版本 : Ubuntu 20.04.6 LTS | V20230401-4.4.35_ecoo_81092768-32

编译所用的pc系统信息,是腾讯云的服务器...

Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:    20.04

一、下载SDK

https://github.com/07bug/HiSTBLinuxV100R005C00SPC060
解压到root目录下。

二、编译环境

安装需要的编译工具

apt-get install gcc make gettext bison flex bc zlib1g-dev libncurses5-dev lzma

三、编译

1.根据盒子拷贝相应的config

cp configs/hi3798mv100/hi3798mdmo1d_hi3798mv100_cfg.mak cfg.mak

2.make hiboot

这一步是为了生成交叉编译工具链

# 首先要配置以下环境变量 在sdk根目录下
source ./env.sh
make hiboot

大概38秒就完成了。

3.编译内核

这一步是为了编译依赖吧,反正不编译没法直接编译模块

cd /root/HiSTBLinuxV100R005C00SPC060/source/kernel
make all

会出现以下错误 这是sdk的问题

解决:
wget 下载linux-4.4.35.tar.gz到third_party/open_source/下

# 先删除
rm ../../third_party/open_source/linux-4.4.35.tar.gz
# 下载到third_party/open_source/
wget -P ../../third_party/open_source/ https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.35.tar.gz

下载完成后再 make all
耐心等待完成...

4.收集盒子信息:

在盒子上看看你的内核版本是多少

uname -r

然后到 /lib/modules/4.4.35ecoo 目录下找到任意一个驱动,查看驱动信息。

modinfo cfg80211.ko

记住下面这一行,编辑vermagic.h的时候要一致。

5.到编译机器上编辑vermagic.h文件

编译完成后会出现linux-4.4.y目录

vim linux-4.4.y/include/linux/vermagic.h

看下面的拼接字符要和modinfo cfg80211.ko里面的一致

我这边是:替换 UTS_RELEASE 为 4.4.35_ecoo_xxxx;删掉了MODULE_VERMAGIC_PREEMPT的内容

6.下载官网ch341驱动

https://www.wch.cn/downloads/CH341SER_LINUX_ZIP.html
在root下mkdir个ch341目录
把下载的驱动ch341.h/ch341.c放在里面,不要官网的Makefile文件。

7.创建ch341的Makefile文件

vim /root/ch341/Makefile

键入以下内容:

obj-m := ch341.o

KDIR := /root/HiSTBLinuxV100R005C00SPC060-master/source/kernel/linux-4.4.y  # 修改为你的 Linux 内核源码路径
PWD := $(shell pwd)

all:
        $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
        $(MAKE) -C $(KDIR) M=$(PWD) clean

8.编辑Makefile文件,主要是交叉编译参数太多,图个方便,避免出错!

vim Makefile

拷贝上面menuconfig
新行粘贴后修改menuconfig为M=/root/ch341 modules

9.开始编译模块

# 开始make
make ch341

如果出现:

Makefile文件粘贴不合适了,make前面的空格换成tab

10.进入 /root/ch341 拷贝ko到盒子

cd /root/ch341

注意了下面是盒子上操作了

1.加载驱动

insmod ch341.ko

报错:insmod: ERROR: could not insert module ch341.ko: Invalid module format
输入dmesg | tail查看具体错误:

dmesg | tail

像下面的就是vermagic.h文件没搞正确

啥错误没提示那就是合适了,恭喜你!

2.放到 /usr/lib/modules/4.4.35_xxxx/kernel/drivers

cp ch341.ko /usr/lib/modules/4.4.35_xxxx/ch341.ko
# 更新模块依赖
depmod -a
# 查看状态
dmesg | tail

dev目录下也有了ttyCH341USB0

3.开机自动加载

编辑/etc/modules在最后加入ch341

vim /etc/modules

4.重启后验证

lsmod | grep ch341

@ayFun 提到的官网的串口驱动死机问题:
测试在minicom下确实会卡死,测试 echo "test" > /dev/ttyCH341USB0 也是可以正常接受到的。
在screen工具下不会的,screen /dev/ttyCH341USB0 9600 完美!
还有sdk自带的ch341驱动在接收的时候丢数据延迟,不知道什么原因。

至此完毕,祝君成功!

前端禁用微信浏览器字体调整,用户设置了系统字体大小,导致微信内嵌h5页面字体大小改变 关于小程序上canvas移动卡顿的解决方法
biu biu biu
js时间转化为几天前,几小时前,几分钟前 Liunx命令大全 php身份证号验证 小程序遇到的坑,图片下载 downloadfile合法域名 一行代码手机端使用开发者工具调试网页