linux编译运行uart,Petalinux系列——3.使用Petalinux编译串口驱动CP210x

Petalinux系列——3.使用Petalinux编译串口驱动CP210x

.ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边,需要的时候插入内核,不需要时卸载。

传统方式编译ko文件

编译ko时需要linux的内核源码,以下面最简单的驱动为例,介绍通用的编译内核驱动的方法:

编写hello.c文件

#include

#include

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

{

printk(KERN_ERR"Hello,world.\n");

return 0x0;

}

static void hello_exit(void)

{

printk(KERN_ERR"Hello,exit.\n");

return;

}

module_init(hello_init);

module_exit(hello_exit);

编写Makefile

obj-m += hello.o

CURRENT_PATH := $(shell pwd)

LINUX_KERNEL := $(shell uname -r)

LINUX_KERNEL_PATH := {PATH to Linux Source}/linux-headers-$(LINUX_KERNEL)

all:

make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) moduels

clean:

make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean

编译ko文件

$ make

使用Petalinux编译ko文件

上面的流程比较繁琐,既要下载linux源代码,又要编写makefile,使用Petalinux,我们可以非常方便地编译ko文件。使用Petalinux既可以将内核源码中的部分驱动以module模式编译,也可以用来编译用户自己的驱动程序。下面以为PYNQ-Z2板卡编译cp210x和PWM驱动为例,介绍两种编译模式。

以module模式编译内核源码

$ petalinux-create --type project --template zynq --name PYNQ //新建一个petalinux工程

$ cd PYNQ/

$ petalinux-config --get-hw-description //导入hdf文件

$ petalinux-config -c kernel //配置内核

此时会弹出一个图形界面方便用户配置内核,由于内容过多,我们可以先搜索要编译的cp210x的位置。按下’/'键进入搜索界面,输入cp210x此处还可以看到cp210x的依赖。

f9dee540848038fd667b843318fc6fee.png

Device Drivers->USB support->USB Serial Converter support配置为module模式如下图所示

d0c6027d1e72b2f2b7574ee988230472.png

然后进入该选项,勾选USB CP210x family of UART Bridge Controllers配置为module模式如下图所示

b81cd3af59f547958cd5cecd6660c9d3.png

保存后退出。

我们在project-spec/meta-user/recipes-kernel/linux/linux-xlnx/user_xxx.cfg中看到

CONFIG_USB_SERIAL=m

# CONFIG_USB_SERIAL_GENERIC is not set

# CONFIG_USB_SERIAL_SIMPLE is not set

# CONFIG_USB_SERIAL_AIRCABLE is not set

# CONFIG_USB_SERIAL_ARK3116 is not set

# CONFIG_USB_SERIAL_BELKIN is not set

# CONFIG_USB_SERIAL_CH341 is not set

# CONFIG_USB_SERIAL_WHITEHEAT is not set

# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set

CONFIG_USB_SERIAL_CP210X=m

# CONFIG_USB_SERIAL_CYPRESS_M8 is not set

# CONFIG_USB_SERIAL_EMPEG is not set

# CONFIG_USB_SERIAL_FTDI_SIO is not set

# CONFIG_USB_SERIAL_VISOR is not set

# CONFIG_USB_SERIAL_IPAQ is not set

# CONFIG_USB_SERIAL_IR is not set

# CONFIG_USB_SERIAL_EDGEPORT is not set

# CONFIG_USB_SERIAL_EDGEPORT_TI is not set

# CONFIG_USB_SERIAL_F81232 is not set

# CONFIG_USB_SERIAL_F8153X is not set

# CONFIG_USB_SERIAL_GARMIN is not set

# CONFIG_USB_SERIAL_IPW is not set

# CONFIG_USB_SERIAL_IUU is not set

# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set

# CONFIG_USB_SERIAL_KEYSPAN is not set

# CONFIG_USB_SERIAL_KLSI is not set

# CONFIG_USB_SERIAL_KOBIL_SCT is not set

# CONFIG_USB_SERIAL_MCT_U232 is not set

# CONFIG_USB_SERIAL_METRO is not set

# CONFIG_USB_SERIAL_MOS7720 is not set

# CONFIG_USB_SERIAL_MOS7840 is not set

# CONFIG_USB_SERIAL_MXUPORT is not set

# CONFIG_USB_SERIAL_NAVMAN is not set

# CONFIG_USB_SERIAL_PL2303 is not set

# CONFIG_USB_SERIAL_OTI6858 is not set

# CONFIG_USB_SERIAL_QCAUX is not set

# CONFIG_USB_SERIAL_QUALCOMM is not set

# CONFIG_USB_SERIAL_SPCP8X5 is not set

# CONFIG_USB_SERIAL_SAFE is not set

# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set

# CONFIG_USB_SERIAL_SYMBOL is not set

# CONFIG_USB_SERIAL_TI is not set

# CONFIG_USB_SERIAL_CYBERJACK is not set

# CONFIG_USB_SERIAL_XIRCOM is not set

# CONFIG_USB_SERIAL_OPTION is not set

# CONFIG_USB_SERIAL_OMNINET is not set

# CONFIG_USB_SERIAL_OPTICON is not set

# CONFIG_USB_SERIAL_XSENS_MT is not set

# CONFIG_USB_SERIAL_WISHBONE is not set

# CONFIG_USB_SERIAL_SSU100 is not set

# CONFIG_USB_SERIAL_QT2 is not set

# CONFIG_USB_SERIAL_UPD78F0730 is not set

# CONFIG_USB_SERIAL_DEBUG is not set

然后编译工程

$ petalinux-build

编译结束后我们可以通过find指令找到ko文件

$ find . -name cp210.ko

欢迎大家关注Xilinx学术合作以及Pynq的官方公众号,里面有许多优质的学习资源等着你哦

希望了解HLS的同学可以关注公众号Xilinx学术合作以及PYNQ中文社区获取最新版《FPGA并行编程-- 以HLS实现信号处理为例》pdf ,关注任一公众号,回复 pp4fpgas 即可获得

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
This bundle contains a modified CP210x driver for the 4.10.0 kernel (Ubuntu 17.04). It contains: - Support for the CP2102N NOTE: This driver is an example of how to perform GPIO operations within the CP210x driver since the driver on kernel.org does not support GPIO at this time. This driver has only been written and tested on the Linux 3.13.0 kernel on Ubuntu 14.04. This driver is a modified version of the existing driver in the Linux 3.13.0 kernel, which is maintained at kernel.org. It is recommened to use the driver there that matches your specific kernel version: www.kernel.org Build instrutions: Ubuntu: 1. make ( your cp210x driver ) 2. cp cp210x.ko to /lib/modules//kernel/drivers/usb/serial 3. insmod /lib/modules/<kernel-version/kernel/drivers/usb/serial/usbserial.ko 4. insmod cp210x.ko RedHat: 1. yum update kernel* //need to update the kernel first otherwise your header won't match 2. yum install kernel-devel kernel-headers //get the devel and header packages. 3. reboot //your build link should be fixed after your system come back 4. make ( your cp210x driver ) // should be able to build successfully at this point 5. cp cp210x.ko to /lib/modules//kernel/drivers/usb/serial 6a. insmod /lib/modules/<kernel-version/kernel/drivers/usb/serial/usbserial.ko 6. insmod cp210x.ko 7. sudo chmod 666 /dev/ttyUSB0 8. sudo chmod 666 /dev/ttyUSB1 GPIO example: This shows how to use the two IOCTLs to set GPIO state. Build instructions: 1. g++ cp210x_gpio_example.c -o cp210x_gpio_example 2. ./cp210x_gpio_example

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值