提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本文介绍嵌入式linux开发板连接USB热敏打印机的步骤。


提示:以下是本篇文章正文内容,下面案例可供参考

一、开发环境

  • 硬件环境: OKMX6ULL
  • 打印机型号:BT58S
  • 虚拟机:Ubuntu

二、Linux内核环境配置

1. 配置Linux内核

  • 切换到内核源码路径,打开menuconfig工具。
root@ubuntu:/# cd /home/forlinx/work/linux-4.1.15
root@ubuntu:/home/forlinx/work/linux-4.1.15# make menuconfig

在这里插入图片描述

  • 依次进入如下目录,将USB Printer support选中:
Device Drivers  --->
	[*] USB support  ---> 
		<*>   USB Printer support

在这里插入图片描述

  • 按键盘的左右方向键,选中Save,点击回车保存。
    在这里插入图片描述
  • 保存文件名不用修改,默认为.config
    在这里插入图片描述
  • 然后,一路exit退出menuconfig工具,配置项完成。

2. 内核编译

  • 将刚才生成的.config文件复制到 linux-4.1.15/arch/arm/configs/imx6ull_defconfig
root@ubuntu:/home/forlinx/work/linux-4.1.15# cp .config arch/arm/configs/imx6ull_defconfig
  • 编译zImage
# 备注:需要切换到root用户(sudo su)
root@ubuntu:/home/forlinx/work/linux-4.1.15# . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
root@ubuntu:/home/forlinx/work/linux-4.1.15# make imx6ull_defconfig
root@ubuntu:/home/forlinx/work/linux-4.1.15# make zImage
  • 编译成功后会在 linux-4.1.15/arch/arm/boot/路径下生成 zImage

三、将编译好的内核下载到板子中

  • 将zImage拷贝到u盘
root@ubuntu:/home/forlinx/work/linux-4.1.15# cp arch/arm/boot/zImage /run/forlinx/upan
  • 将u盘中的zImage拷贝到板子里
root@fl-imx6ull:/# cp /run/media/sda1/zImage /run/media/mmcblk1p1/zImage
root@fl-imx6ull:/# sync 
root@fl-imx6ull:/# reboot
  • 重启后,拷贝完成。

四、测试

  • 插入USB打印机后,显示如下信息:
root@fl-imx6ull:/# usb 1-1.2: new full-speed USB device number 8 using ci_hdrc
usblp 1-1.2:1.0: usblp0: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x28E9 pid 0x0289
  • 识别到打印机,打印机路径:
/dev/usb/lp0.
  • 设置打印机访问权限为lpadmin组
$ ls -l /dev/usb/lp0
crw-rw---- 1 root lpadmin 180, 0 Apr 26 03:34 /dev/usb/lp0
$
$
$ sudo chown root:lpadmin /dev/usb/lp0

  • 打印hello world
root@fl-imx6ull:/# echo "hello world" > dev/usb/lp0
  • 打印机打印成功

参考:

  1. Possible problem with /dev/lp in new installations
  2. 手把手教你嵌入式Linux系统驱动HP1020打印机
  3. 嵌入式Linux系统添加USB打印机功能
  4. linux支持usb打印机,不用驱动
  5. ubuntu下使用命令行调用USB热敏票据打印机

五、打印控制指令

打印中需要使用转义字符来发送控制指令:

  • ESC => ASCII码为0x1B => 使用转义字符 ‘\x1b’
  • echo -e 指令

举例:

// 显示“000”的 CODE39 条形码
// GS k 4 0 0 0 NUL
//1d 6b 04 30 30 30 00
echo -e '\x1d\x6b\x04000\x00' >/dev/usb/lp0

参考:
https://www.coder.work/article/1507248
https://stackoverflow.com/questions/30662024/

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐