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加深了理解。一个流程下来,主要分为下面四步:
- uboot源码配置文件在顶层到boards.cfg中,这里用的是com335x_emmc_512_config——>得到MLO和uboot.bin;
- kernel的配置文件是在arch/arm/configs/目录下,这里用的evb335x-ii_defconfig,可以使用make ARCH=arm menuconfig来配置,编译的时候记得make distclean/mrproper——>得到zImage;
- 编译dts文件,arch/arm/boot/dts目录——>得到am335x-boneblack.dtb;
- 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就可以了。
其他不错的资料:
- https://eewiki.net/display/linuxonarm/BeagleBone+Black Robert Nelson, BeagleBone的维护者
- http://www.armhf.com/boards/beaglebone-black/ Ubuntu镜像
- http://www.csksoft.net/blog/post/mk802_dev_intro.html 陈士凯先生的MK802系列教程同时推荐他的那本书《Intel Edison 互动开发指南》
- http://wiki.wrtnode.cc/index.php?title=WRTnode%E6%B7%BB%E5%8A%A0%E5%AF%B9_RoboPeak_Mini_USB_Display%E7%9A%84%E6%94%AF%E6%8C%81
1. 在wrtnode的网页中,有显示图片以及作为终端使用的命令
cat /tmp/picture.bmp > /dev/fb0picture.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这个库来显示文字