Linux系统驱动之编写使用多buffer的应用程序

资料下载&百问网技术交流群,百万嵌入式工程师聚集地:
https://www.100ask.net/page/2248041

资料下载

coding无法使用浏览器打开,必须用git工具下载:

git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

百问网驱动大全

编写使用多buffer的应用程序

  • 本节视频编写好的程序,在GIT仓库里

    • IMX6ULL\source\03_LCD\14_use_multi_framebuffer
    • STM32MP157\source\A7\03_LCD\14_use_multi_framebuffer
  • 参考程序:应用基础课程里使用Framebuffer的精简程序

    • IMX6ULL\source\03_LCD\14_use_multi_framebuffer\reference\07_framebuffer
    • STM32MP157\source\A7\03_LCD\14_use_multi_framebuffer\reference\07_framebuffer
  • 参考程序:使用多buffer的APP,在GIT仓库里

    • IMX6ULL\source\03_LCD\13_multi_framebuffer_example\testcamera
    • STM32MP157\source\A7\03_LCD\13_multi_framebuffer_example\testcamera

1. 编写一个支持单buffer、多buffer的APP

循环显示整屏幕的红、绿、蓝、黑、白。

2. 编译程序

2.1 设置工具链
  • 对于IMX6ULL

    export ARCH=arm
    export CROSS_COMPILE=arm-linux-gnueabihf-
    export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
    
  • 对于STM32MP157

    source /home/book/100ask_stm32mp157_pro-sdk/ToolChain/openstlinux_eglfs-linux-gnueabi/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
    export ARCH=arm
    export CROSS_COMPILE=arm-ostl-linux-gnueabi-
    
2.2 编译

设置好工具链后,把14_use_multi_framebuffer上传到Ubuntu,在该目录下执行make即可

3. 上机测试

3.1 恢复内核使用自带的LCD驱动
  • 恢复驱动程序:修改drivers/video/fbdev/Makefile,恢复内核自带的mxsfb.c,如下:
obj-$(CONFIG_FB_MXS)             += mxsfb.o
#obj-$(CONFIG_FB_MXS)             += lcd_drv.o
  • 恢复设备树

    • 把GIT仓库中的文件复制到内核arch/arm/boo/dts目录
      • doc_and_source_for_drivers\IMX6ULL\source\03_LCD\11_lcd_drv_imx6ull_ok\origin
  • 重新编译内核、设备树

    make zImage
    make dtbs
    
  • 替换内核、设备树

    • 把编译出来的arch/arm/boot/zImagearch/arm/boot/dts/100ask_imx6ull-14x14.dtb
    • 放到开发板的/boot目录
3.2 禁止开发板自带的GUI程序

在开发板上执行以下命令:

[root@100ask:~]# mv /etc/init.d/S99myirhmi2 /etc/
[root@100ask:~]# reboot
3.3 把测试程序放到板子上、执行

以下命令在开发板中执行。

  • 挂载NFS

    • vmware使用NAT(假设windowsIP为192.168.1.100)

      [root@100ask:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 
      192.168.1.100:/home/book/nfs_rootfs /mnt
      
    • vmware使用桥接,或者不使用vmware而是直接使用服务器:假设Ubuntu IP为192.168.1.137

      [root@100ask:~]#  mount -t nfs -o nolock,vers=3 192.168.1.137:/home/book/nfs_rootfs /mnt
      
  • 复制、执行程序

    [root@100ask:~]# cp /mnt/multi_framebuffer_test   /bin
    [root@100ask:~]# multi_framebuffer_test single 或 multi_framebuffer_test double
    

4. LCD自动黑屏

为了省电,LCD在10分钟左右会自动黑屏。
如果你正在运行multi_framebuffer_test程序,可能会有如下提示(以IMX6ULL为例):

[  961.147548] mxsfb 21c8000.lcdif: can't wait for VSYNC when fb is blank

这表示:当屏幕为blank(黑屏)时,无法等待VSYNC。

我们可以禁止LCD自动黑屏,执行以下命令即可:

#close lcd sleep
echo -e "\033[9;0]" > /dev/tty1
echo -e "\033[?25l"  > /dev/tty1

资料下载&百问网技术交流群,百万嵌入式工程师聚集地:
https://www.100ask.net/page/2248041

百问网技术论坛:
http://bbs.100ask.net/

百问网嵌入式视频官网:
https://www.100ask.net/index

百问网开发板:
淘宝:https://100ask.taobao.com/
天猫:https://weidongshan.tmall.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值