Linux系统下CH365/CH367驱动程序编译及安装

2021-11-17 17:41:34 来源:华启智能

本文主要介绍公司KCPI-1847、KPCI-1840、KPCIE-1847和KPCIE-1840使用了CH365/CH367芯片等型号板卡在Linux系统下(包括国产的中标麒麟跟银河麒麟系统)驱动的编译和安装。
1. 使用的系统环境
本文使用Ubuntu 20.04 LTS版本Linux系统为测试环境。
 Ubuntu Linux系统版本信息
2. 使用到的工具软件介绍
Linux系统下编译CH365/CH367的驱动使用到的工具主要有gcc和make,版本如下所示:
gcc和make版本介绍 
3. 下载CH365/CH367驱动的源代码CH36X_LINUX.ZIP,解压后文件结构如下:
CH365——LINUX文件结构 
4. 编译CH365/CH367驱动
执行cd指令进入drv目录下,执行make指令编译驱动程序。
Linux下CH365驱动make报错 
执行make指令会遇到警告和错误,不重要的警告可以忽略,错误却不能忽略。
/home/ubuntu/CH36X_LINUX/drv/ch36x.c: In function ‘ch36x_init’:
/home/ubuntu/CH36X_LINUX/drv/ch36x.c:1679:56: error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
 1679 |  printk(KERN_INFO "-->WCH ch36x dirver init %s, %s\n", __DATE__,
      |                                                        ^~~~~~~~
/home/ubuntu/CH36X_LINUX/drv/ch36x.c:1680:9: error: macro "__TIME__" might prevent reproducible builds [-Werror=date-time]
 1680 |         __TIME__);
      |         ^~~~~~~~
/home/ubuntu/CH36X_LINUX/drv/ch36x.c: In function ‘ch36x_exit’:
/home/ubuntu/CH36X_LINUX/drv/ch36x.c:1736:56: error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
 1736 |  printk(KERN_INFO "-->WCH ch36x driver exit %s, %s\n", __DATE__,
      |                                                        ^~~~~~~~
/home/ubuntu/CH36X_LINUX/drv/ch36x.c:1737:9: error: macro "__TIME__" might prevent reproducible builds [-Werror=date-time]
 1737 |         __TIME__);
      |         ^~~~~~~~
At top level:
/home/ubuntu/CH36X_LINUX/drv/ch36x.c:778:1: warning: ‘ch365_interrupt_handler’ defined but not used [-Wunused-function]
  778 | ch365_interrupt_handler(int irq, void *dev_id)
      | ^~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:288:/home/ubuntu/CH36X_LINUX/drv/ch36x.o] 错误 1
make[1]: *** [Makefile:1849:/home/ubuntu/CH36X_LINUX/drv] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-5.11.0-37-generic”
make: *** [Makefile:12:modules] 错误 2
网络上提供的解决方法如下:
1. 在编译驱动的相应 Makefile 中增加一行:CFLAGS += -Wno-error=date-time,然后保存重新 make;
2. 若 CFLAGS 不生效,将关键字替换为 EXTRA_FLAGS;
3. 修改 /lib/modules/'uname -r'/build/Makefile 文件,找到包含 “-Werror=date-time” 这一行注释掉,然后保存退出。之后重新 make 即可;
刘工分析报错是因为ch36x.c文件中1679和1735两行使用到了__DATE__,__TIME__。
经验证如下两种办法均可解决编译错误问题:
1. 直接注释掉使用了__DATE__,__TIME__这两个变量的相关代码行。
2. 修改/lib/modules/5.11.0-37-generic/build/Makefile文件注释掉KBUILD_CFLAGS   += -Werror=date-time
注释掉KBUILD_CFLAGS   += -Werror=date-time 
重新执行make指令,可成功编译出CH365/CH367的驱动文件ch36x.ko。
ubuntu@LK:~/CH36X_LINUX/drv$ make
make -C /lib/modules/5.11.0-37-generic/build M=/home/ubuntu/CH36X_LINUX/drv
make[1]: 进入目录“/usr/src/linux-headers-5.11.0-37-generic”
make[1]: 离开目录“/usr/src/linux-headers-5.11.0-37-generic”
ubuntu@LK:~/CH36X_LINUX/drv$ ls
ch36x.c    ch36x.ko   ch36x.mod.c    ch36x.mod.o  Makefile       Module.symvers
ch36x.dwo  ch36x.mod  ch36x.mod.dwo  ch36x.o      modules.order
 
5. 安装编译成功的驱动文件ch36x.ko
执行sudo insmod /home/ubuntu/CH36X_LINUX/drv/ch36x.ko 安装驱动
ubuntu@LK:~/CH36X_LINUX/drv$ sudo insmod /home/ubuntu/CH36X_LINUX/drv/ch36x.ko
执行 lsmod
ubuntu@LK:~/CH36X_LINUX/drv$ lsmod
Module                  Size  Used by
ch36x                  28672  0
Linux系统下CH365驱动编译成功,安装成功 
代表CH365/CH367的驱动安装成功。

参考资料:
1.
linux - ch367驱动编译,https://blog.csdn.net/rong11417/article/details/102909500
2.Linux 驱动编译报错:error: macro "__DATE__" ,https://blog.csdn.net/rong11417/article/details/102909453

相关文章

产品分类

推荐分类

联系我们

  • 点击联系  点击联系
  • 联系华启易通