BBB(四):与rp_usbdisp显示屏的那些事儿

robopeak的显示屏很特别,是一块USB接口的显示屏,也就是说只要有usb接口,再配上相应的驱动,都是可以用起来的。他们有树莓派、pcDuino、Edison、TPlink的WN703等等已经编译好的镜像,但是没有BBB的。这块屏我是在前年实习的时候买的,一直想用在BBB上,期间也尝试过多次,这次也走了些弯路,终于可以说取得一点进步了。


1. 编译带驱动的kernel,然后通过tf内存卡启动

1.1 盈鹏飞相关资料

典型的一个image包含下面这些文件,当然还有uboot的环境变量,它一般被放在了uEnv.txt中。


这里我因为在论坛上找了深圳盈鹏飞他们的资料,感觉挺详细的,所以按他们到步骤先跑一遍。后来,因为它们的evb-t335ii和BBB还是有区别的,它们可以烧写BBB的debian的image,但也只是rootfs而已。硬件配置差不多,主要是软件和内核一些方面不同。参考主要是linux_evb-t335ii/linux/emmc/doc/EVB335X-II linux-3.14.43开发指南.pdf

这期间,对make, CROSS_COMPILE 以及modules加深了理解。一个流程下来,主要分为下面四步:

  1. uboot源码配置文件在顶层到boards.cfg中,这里用的是com335x_emmc_512_config——>得到MLO和uboot.bin;
  2. kernel的配置文件是在arch/arm/configs/目录下,这里用的evb335x-ii_defconfig,可以使用make ARCH=arm menuconfig来配置,编译的时候记得make distclean/mrproper——>得到zImage;
  3. 编译dts文件,arch/arm/boot/dts目录——>得到am335x-boneblack.dtb;
  4. modules文件——>得到内核模块压缩包kernel_modules.tar.gz。
1.2 Embest英蓓特

英蓓特的官网上的element14 BeagleBone Black用户手册V2.0.pdf里面有讲到编译系统及烧写的知识,也给自己有不少启发。

这篇文章就是参照用户手册来的,后文的GPIO驱动也有,还有源码分享,也很好,可以Mark下。

http://www.i3geek.com/archives/440

1.3 Ti 官网及其他

Ti提供官方SDK以及实时内核RTOS,不过他们有个Processor-SDK-Linux-Arm335x目前版本v02.00.02,Linux内核V4.1.18.

http://www.ti.com/tool/processor-sdk-am335x

还有一个(貌似这个要旧一些,编译日期02112015,推荐上面链接中的那个)

http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html

这两个是SDK的下载,那关于kernel编译的指导在http://processors.wiki.ti.com/index.php/Linux_Kernel_Users_Guide整个看下来,你会发现其实都是那几步。

这个大神也有按照官网的步骤操作的,可以算是批注版+中文翻译版,很详细,也能学到很多知识

http://blog.csdn.net/zy812248258/article/details/39253989

1.4 网友详细版

从这篇网络文章中链接地址,找到了源头,真的是手把手,很详细,明了http://wiki.beyondlogic.org/index.php/BeagleBoneBlack_Building_Kernel。而且作者用的是tftp,又学到了一些知识。我这里是checkout到了3.8,因为BBB的emmc中的是这个版本。

我感觉英蓓特那样用U盘拷贝过去的也可以,不用考虑太多的配置。

最后

最后,绕了一大圈,它其实就是个驱动模块而已,我们只要用相应的内核源代码生成rp_usbdisp.ko,然后拷贝到系统的相应目录下就行。


然后利用scp工具拷贝到/lib/modules/`uname -r`/下即可,进入执行depmod -a,解决依赖项。

接着重启BBB,然后执行modprobe rp_usbdisplay,手动加载模块,接着输入dmesg | tail可以看看系统日志信息


至此,显示屏由原来的wait for signal变成了黑色, cat /dev/urandom > /dev/fb0输出随机彩色斑点到设备上。


自动加载内核驱动模块

这里我们仿照着目录下原有的自动加载的配置文件来写,先拷贝一份,再做修改:

cd /etc/modules-load.d

cp mt7601.conf rpusbdisp.conf

vim rpusbdisp.conf

加入一句 rp_usbdisplay

然后重启BBB就可以了。

其他不错的资料:

1. 在wrtnode的网页中,有显示图片以及作为终端使用的命令

cat /tmp/picture.bmp > /dev/fb0
picture.bmp 要求是bmp格式,分辨率320*240,16位图。bmp格式的文件会有文件头,需要去掉才能显示正确,否则就会错误,如下图所示。


清空屏幕:

#dd if=/dev/zero of=/dev/fb0

2. 输入字符到RoboPeak Mini USB Display上显示

让我们来检查是否已经创建了帧缓冲的虚拟控制台:

ls /sys/class/vtconsole/vtcon*
cat /sys/class/vtconsole/vtcon1/name
cat /sys/class/vtconsole/vtcon1/bind
echo helloyake > /dev/vcs1


用户态程序控制显示屏

首先编译生成*.so的动态链接库文件,这个文件是交叉编译的,到时得放到BBB上。因为它依赖于libusb所以先交叉编译它。

这里学到一个用--host=arm-linux-gnueabihf,和CSK交流后才知道的,有太多东西要学了。


然后再make,make install

接着就是编译sdk了

编译完成后会生成以.so结尾的动态库和.a结尾的静态库。

接着把程序和librpusbdisp-drv.so拷贝到BBB上,通过ldd也可以看到链接库的情况

上文出现的error code,是因为需要取消掉内核的驱动

echo 0 > /sys/devices/virtual/vtconsole/vtcon1/bind

rmmod rp_usbdisplay

然后运行就没问题了,可以看到许多的随机矩形。

运行结果

矩形填充与复制

矩形线框


因为官方api还是比较简单,提供了几个演示的函数,后面可以使用如libfreetype这个库来显示文字


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaked19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值