在安装dnw驱动时遇到如下报错:
make -C /lib/modules/`uname -r`/build M=`pwd`/src/driver modules
make[1]: Entering directory '/usr/src/linux-headers-4.15.0-30deepin-generic'
make[2]: 放弃循环依赖 /home/sun/Desktop/Arm/dnw-linux/src/driver/secbulk.o <- /home/sun/Desktop/Arm/dnw-linux/src/driver/secbulk.o 。
LD [M] /home/sun/Desktop/Arm/dnw-linux/src/driver/secbulk.o
ld:没有输入文件
scripts/Makefile.build:580: recipe for target '/home/sun/Desktop/Arm/dnw-linux/src/driver/secbulk.o' failed
make[2]: *** [/home/sun/Desktop/Arm/dnw-linux/src/driver/secbulk.o] Error 1
Makefile:1552: recipe for target '_module_/home/sun/Desktop/Arm/dnw-linux/src/driver' failed
make[1]: *** [_module_/home/sun/Desktop/Arm/dnw-linux/src/driver] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-30deepin-generic'
Makefile:10: recipe for target 'driver' failed
make: *** [driver] Error 2
解决办法,参考了https://blog.csdn.net/liduxun/article/details/50709714中的方法:
- 修改secbulk.c的makefile,如下:
obj-m := secbulk.o
KDIR := /lib/modules/`uname -r`/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
rm -rf *.order *.symvers
- 修改secbulk.c 文件驱动号,修改前使用
lsusb
查看设备ID,两部分
static struct usb_device_id secbulk_table[]= {
{ USB_DEVICE(0x18d1, 0x4e26)},
{ }
};
make一下,
如果出现报错,检查修改的makefile里tab是否是空格
此时应该出现了secbulk.ko,加载此文件到内核,sudo insmod secbulk.ko
,如果没出现还要找其他问题。查看是否加载驱动,
dmesg
信息中出现usbcore: registered new interface driver secbulk
进入dnw文件加 make ,然后make install
dnw会自动复制到/bin, 这是调用dnw命令测试一下dnw是否安装成功,然后接上开发板,下载个文件试试,可以看一下
ls /dev
中的secbulk*是否存在,开发板上电
,我的是secbulk1 ,这时需要修改dnw.c文件const char* dev = "/dev/secbulk1";
重新make、make install,就好了
7.开机自动加载该驱动,首先sudo 编辑/etc/modules,添加驱动名称secbulk
,不带后缀。然后将驱动secbulk.ko
拷贝至/lib/modules/(uname -r)/kernel/drivers/下面的一个分类中,本次我拷贝至了usb下的serial分类。
- sudo depmod 更新驱动,并重启,当设备连接上就出现了