ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
Hikey 970 USB转串口驱动安装
-
在已经发布的hikey 970 Debian系统中是没有包含U转串驱动的。在没有安装驱动的情况下插上U转串设备时在/dev下面是没有ttyUSB设备的。
安装驱动需要自己编译对应的驱动程序。安装方法如下。
下载Linux内核源代码
执行下面的指令下载hikey linux内核源代码
git clone --single-branch -b hikey970-v4.9 --depth=1 https://github.com/96boards-hikey/linux # 切换到hikey 970分支 cd linux git checkout hikey970-v4.9
配置内核源代码
获取内核配置文件
cp /proc/config.gz ~/ gzip -d ~/config.gz # 进入内核源代码文件夹 cd ~/linux # 将内核配置文件复制到此处 make mrproper cp ~/config .config sudo chmod 666 .config # 配置内核文件 sudo apt-get install libncurses5-dev sudo apt-get install bc make menuconfig
正常情况下会显示如下的内核配置界面
找到 Device Drivers–>USB Support --> USB Serial Converter Support
将其设置成M。编译内核module有两种模式,一种是直接编译到内核里面,另一种是编译成独立的.ko文件module。我们采用的是.ko的模式。这样不用重新编译内核更加方便。
继续进入此选项将想要编译的驱动设置成M,如果不清楚自己的型号可以全部设置成M
设置完成后选择保存,之后再退出此界面编译驱动module
执行下面的语句开始编译内核
make modules_prepare sudo make -j4 modules # 需要执行这个才会生成modules.order,modules.builtin make M=drivers/usb/serial
正常情况下应该能够看到终端输出如下
LD drivers/usb/serial/built-in.o Building modules, stage 2. MODPOST 50 modules CC drivers/usb/serial/aircable.mod.o LD [M] drivers/usb/serial/aircable.ko CC drivers/usb/serial/ark3116.mod.o LD [M] drivers/usb/serial/ark3116.ko CC drivers/usb/serial/belkin_sa.mod.o LD [M] drivers/usb/serial/belkin_sa.ko CC drivers/usb/serial/ch341.mod.o LD [M] drivers/usb/serial/ch341.ko CC drivers/usb/serial/cp210x.mod.o LD [M] drivers/usb/serial/cp210x.ko CC drivers/usb/serial/cyberjack.mod.o LD [M] drivers/usb/serial/cyberjack.ko CC drivers/usb/serial/cypress_m8.mod.o LD [M] drivers/usb/serial/cypress_m8.ko CC drivers/usb/serial/digi_acceleport.mod.o LD [M] drivers/usb/serial/digi_acceleport.ko CC drivers/usb/serial/empeg.mod.o LD [M] drivers/usb/serial/empeg.ko CC drivers/usb/serial/f81232.mod.o LD [M] drivers/usb/serial/f81232.ko CC drivers/usb/serial/ftdi_sio.mod.o LD [M] drivers/usb/serial/ftdi_sio.ko CC drivers/usb/serial/garmin_gps.mod.o LD [M] drivers/usb/serial/garmin_gps.ko CC drivers/usb/serial/io_edgeport.mod.o LD [M] drivers/usb/serial/io_edgeport.ko CC drivers/usb/serial/io_ti.mod.o LD [M] drivers/usb/serial/io_ti.ko CC drivers/usb/serial/ipaq.mod.o LD [M] drivers/usb/serial/ipaq.ko CC drivers/usb/serial/ipw.mod.o LD [M] drivers/usb/serial/ipw.ko CC drivers/usb/serial/ir-usb.mod.o LD [M] drivers/usb/serial/ir-usb.ko CC drivers/usb/serial/iuu_phoenix.mod.o LD [M] drivers/usb/serial/iuu_phoenix.ko CC drivers/usb/serial/keyspan.mod.o LD [M] drivers/usb/serial/keyspan.ko CC drivers/usb/serial/keyspan_pda.mod.o LD [M] drivers/usb/serial/keyspan_pda.ko CC drivers/usb/serial/kl5kusb105.mod.o LD [M] drivers/usb/serial/kl5kusb105.ko CC drivers/usb/serial/kobil_sct.mod.o LD [M] drivers/usb/serial/kobil_sct.ko CC drivers/usb/serial/mct_u232.mod.o LD [M] drivers/usb/serial/mct_u232.ko
编译完成之后可以在drivers/usb/serial中看到生成了许多.ko文件。这些就是我们需要的驱动文件。
安装驱动module
# 创建module文件目录 sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ sudo cp drivers/usb/serial/*.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ # 复制depmod依赖文件 sudo cp ~/linux/modules.order /lib/modules/$(uname -r)/ sudo cp ~/linux/modules.builtin /lib/modules/$(uname -r)/ # 生成对应文件 cd /lib/modules/$(uname -r) sudo depmod -a # 加载驱动 sudo modprobe pl2303
测试驱动
查看驱动是否正常加载
lsmod
正常输出如下
Module Size Used by ftdi_sio 49152 0 pl2303 20480 0 usbserial 40960 2 ftdi_sio,pl2303
可以看到pl2303驱动已经成功加载。
这时再插上U转串试一下
可以看到已经有ttyUSB0了。至此串口已可以正常使用了。
自动加载驱动
修改 /etc/modules文件
在其中加入想要加载的内核模块的名称,比如对于我的设备就是pl2303。文件内容如下# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. pl2303
保存退出,下次在系统启动时就会自动加载这个驱动了。
-
本人开始用的是leubuntu 按照教程编译驱动module后
进行到安装驱动module发现缺少depmod依赖文件
modules.order 和 modules.builtin都没有找到
换到了lebian后也是同样的问题 -
-
@weijiz 那该如何处理
我试着下了一个ko文件
但insmod失败 显示invalid -
@robutun 我更新了这篇文章,现在应该可以了。
-
@weijiz 多谢 等下试试
-
@weijiz 不好意思 再来打扰一下
现在进行到最后一步 sudo modprobe pl2303
然后就卡在那了 另开窗口lsmod也是同样的没反应 -
@robutun 这个我没有遇到过,不太清楚
-
@weijiz 您好。
最近在hikey970上又遇到一个问题,可能和内核有关。
我想通过x11vnc远程控制,图形化rviz。
这个方法是在网上看到的,之前试过其他的方法远程不了rviz。
现在遇到的是x11vnc开启时,会出现如下错误:
shmget(scanline)failed
shmget:function not implemented
我查了可能的原因是内核中缺少svsv ipc
我尝试了源码编译内核但没有解决这个问题。
不知道中间哪一步出错了。
我的步骤是
make menuconfig
make -j8
make modules_install
make install
mkinitramfs 4.** -o /boot/initrd.img-4. **
update-grub2 -
@robutun x11vnc我也没法运行,还没成功过
-
@weijiz 这样啊
我不知道能不能通过编译内核来解决
你可以试一下 -
@weijiz
今天我在x11vnc的官网上看到一个和shmget:Function not implemented差不多的问题
FAQ里Q71 有提到x11vnc fail with shmget: No space left on device or Minor opcode of failed request: 1 (X_ShmAttach)?
回答里有提出通过禁用shmget来避免这个问题 在x11vnch 后加入-noshm
我试过这个方法 成功地打开了rviz
我之后再试试内核编译 能不能解决shmget的问题 -
@robutun 感谢分享