(ARM+DSP开发)Linux中如何以模块方式加载没有烧写进内核的驱动

因为我需要在开发板上(OMAPL138-ARM+Linux双核)连接一个USB转串口的设备,而内核中没有编译进相关驱动,所以无法识别出该设备,USB转串口线的芯片是PL2303,PL2303芯片驱动已经集成到了Linux的内核源码中,只是ARM Linux 把它剪裁掉了,需要重新编译为内核模块,并加载。

以模块方式编译,加载过程如下:

在内核所在目录:

 cd omapl138/linux-3.3/
  • 配置内核:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- da850_omapl138_tl_defconfig
  • 打开配置界面:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig

进入“Device Drivers”-->

选中USB support(*),进入其中-->

USB Serial Converter Surpport配置成M,进入其中--->

选中USB Generic Serial Driver(*)

USB Prolific 2303 Single Port Serial Driver配成M

保存退出。

default Y表示默认编译到内核,有Y、M、N三种选择,M表示编译为内核模块,N表示不编译。

  • 编译模块:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules 

编译完成后,在drivers/usb/serial下,生成了pl2303.ko文件。将该文件下载到ARM板任意目录上,在ARM端命令执行

insmod pl2303.ko

加载驱动。

  • 加载了驱动后,可以通过
dmesg | grep usb 

查看加载的USB驱动信息,当看到以下信息:

usbcore: registered new interface driver usbserial

usbcore: registered new interface driver usbserial_generic

usbserial: USB Serial Driver Core

usbcore: registered new interface driver pl2303

usb 1-1: pl2303 converter now attached to ttyUSB0

说明已正确加载驱动。

  • 或者通过命令:
ls /sys/bus/usb-serial/drivers 

查看驱动已是否加载,当看到以下信息:

generic option1 pl2303

说明已正确加载驱动。

  • 可以通过命令:
ls -l /dev/ttyUSB0 

查看端口信息,如读写权限等:

crw-rw---- 1 root dialout 188, 0 2015-09-02 11:18 /dev/ttyUSB0

或者通过命令:

dmesg | grep ttyUSB0

查看信息:

[ 20.956427] usb 3-2.3: pl2303 converter now attached to ttyUSB0

[ 28.412579] type=1503 audit(1441078763.210:19): operation="open" pid=1874 parent=1852 profile="/usr/sbin/cupsd" requested_mask="w::" denied_mask="w::" fsuid=0 ouid=0 name="/dev/ttyUSB0"

[ 9994.613062] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0

[29474.242048] usb 3-2.3: pl2303 converter now attached to ttyUSB0

  • 一开始要确定连接到系统上的是哪个USB设备可以通过命令:
lsusb

显示系统中以及连接到系统的USB总线信息。

  • 可以通过
modinfo [模块名] 

查看模块信息

  • 通过
modinfo [模块名] | grep depend 

查看模块依赖

  • 通过
 cat /var/log/messages | tail  

或者

dmesg | tail 

查看系统日志。

  • 模块编译方法:
make -C ${KERNELSRC} M=${PWD} modules

其中KERNELSRC为内核源码目录,一般为

/usr/src/${shell uname -r}

M表示模块源码的当前目录

其它硬件驱动可类推。

posted @ 2020-08-30 18:48  青蛙Frog1228  阅读(257)  评论(0编辑  收藏  举报