0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【赛昉科技昉·星光RISC-V单板计算机试用体验】基于framebuffer的hdmi显示测试

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-15 11:29 次阅读
本文来源电子发烧友社区,作者:李先生, 帖子地址:https://bbs.elecfans.com/jishu_2286690_1_1.html


前言


本文介绍使用framebuffer进行hdmi的显示输出测试。为后续的图形界面的移植(比如LVGL)做好准备。
前提是已经了解应用程序的开发流程,https://bbs.elecfans.com/jishu_2286643_1_1.html
编写代码


  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
  10. #include
  11. int main(int argc, char *argv[])
  12. {
  13. int fd = -1;
  14. int ret = -1;
  15. uint8_t *p_fb = 0;
  16. struct fb_fix_screeninfo finfo;
  17. struct fb_var_screeninfo vinfo;
  18. memset(&finfo,0,sizeof(finfo));
  19. memset(&vinfo,0,sizeof(vinfo));
  20. /* 打开设备 */
  21. fd = open(argv[1],O_RDWR);
  22. if(fd < 0)
  23. {
  24. fprintf(stderr,"open %s err, %sn",argv[1],strerror(errno));
  25. return -1;
  26. }
  27. /* 获取设备信息 */
  28. ret = ioctl(fd, FBIOGET_FSCREENINFO, &finfo);
  29. if(ret < 0)
  30. {
  31. fprintf(stderr,"ioctl finfo err, %sn",strerror(errno));
  32. close(fd);
  33. return -1;
  34. }
  35. ret = ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);
  36. if(ret < 0)
  37. {
  38. fprintf(stderr,"ioctl vinfo err, %sn",strerror(errno));
  39. close(fd);
  40. return -1;
  41. }
  42. /* mmap 这里假设bits_per_pixel为32位, 所以p_fb定义为unsigned int *p_fb, 写buffer也是按照unsigned int 写, 实际应该根据bits_per_pixel大小进行读写 */
  43. unsigned long len = vinfo.xres_virtual* vinfo.yres_virtual * vinfo.bits_per_pixel / 8;
  44. p_fb = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  45. if(p_fb == NULL)
  46. {
  47. fprintf(stderr,"mmap len %ld errn",len);
  48. close(fd);
  49. return -1;
  50. }
  51. fprintf(stderr,"x = %d y = %d bits = %d len = %ldn",vinfo.xres_virtual,vinfo.yres_virtual,vinfo.bits_per_pixel,len);
  52. volatile int times = 30;
  53. while(times--)
  54. {
  55. if(vinfo.bits_per_pixel == 16)
  56. {
  57. for(unsigned int i=0; i< len/2; )
  58. {
  59. *((uint16_t*)(p_fb + i)) = 0xF800;
  60. i+=2;
  61. }
  62. usleep(atoi(argv[2])*1000);
  63. for(unsigned int i=0; i< len/2;)
  64. {
  65. *((uint16_t*)(p_fb + i)) = 0x07E0;
  66. i+=2;
  67. }
  68. usleep(atoi(argv[2])*1000);
  69. for(unsigned int i=0; i< len/2;)
  70. {
  71. *((uint16_t*)(p_fb + i)) = 0x001F;
  72. i+=2;
  73. }
  74. usleep(atoi(argv[2])*1000);
  75. }
  76. else
  77. {
  78. for(unsigned int i=0; i< len/4; )
  79. {
  80. *((uint32_t*)(p_fb + i)) = 0xFF0000;
  81. i+=4;
  82. }
  83. usleep(atoi(argv[2])*1000);
  84. for(unsigned int i=0; i< len/4;)
  85. {
  86. *((uint32_t*)(p_fb + i)) = 0x00FF00;
  87. i+=4;
  88. }
  89. usleep(atoi(argv[2])*1000);
  90. for(unsigned int i=0; i< len/4;)
  91. {
  92. *((uint32_t*)(p_fb + i)) = 0x0000FF;
  93. i+=4;
  94. }
  95. usleep(atoi(argv[2])*1000);
  96. }
  97. }
  98. munmap(p_fb,len);
  99. close(fd);
  100. return 0;
  101. }
复制代码


导入代码到开发板

https://bbs.elecfans.com/jishu_2286643_1_1.html,使用rz导入不再赘述。
编译

gcc framebuffer.c -o framebuffer回车
运行

关闭桌面系统,否则桌面系统在显示,framebufer无法显示。
输入sudo init 3回车 提示输入密码时输入starfive回车。
用鼠标键盘
输入用户名riscv
密码starfive登录
输入
sudo ./framebuffer /dev/fb 1000
提示输入密码时输入starfive回车。
查看效果
poYBAGKoQyyAJe2HAA2a0lBh_JY279.png
pYYBAGKoQy-AS71oAAxWBelIR7U139.png






poYBAGKoQzOACmInAA8CQcqJJ8o691.png
总结

开发板运行了桌面系统自带编译环境,所以不需要交叉编译,开发起来比较方便。
sudo init 3切换到命令行模式
sudo init 5切换到桌面模式

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RISC-V
    +关注

    关注

    41

    文章

    1906

    浏览量

    45074
  • 赛昉科技
    +关注

    关注

    3

    文章

    126

    浏览量

    14146
收藏 人收藏

    评论

    相关推荐

    信用卡大小的 RISC-V 单板计算机介绍

    信用卡大小的 RISC-V 单板计算机 —— Mars Mars 由深圳市群芯闪耀科技有限公司(Milk-V)设计并推出,搭载科技
    发表于 04-12 16:39

    ·星光 2 高性能RISC-V单板计算机体验】为 Ubuntu 安装 Docker 及常用软件

    ·星光 2 高性能RISC-V单板计算机体验】为 Ubuntu 安装 Docker 及常用软件 目的 为了更好的利用星光2,决定使用容器
    发表于 02-21 17:54

    ·星光 2 高性能RISC-V单板计算机体验】VisionFive2开箱+安装Ubuntu

    ·星光 2 高性能RISC-V单板计算机体验】VisionFive2开箱+安装Ubuntu 前言 很感谢
    发表于 02-21 17:49

    ·星光 2 高性能RISC-V单板计算机试用体验】开箱及装载Debian系统

    上周收到了·星光 2高性能RISC-V单板计算机开发板,在此非常感谢科技提供的
    发表于 01-24 00:32

    ·星光 2 高性能RISC-V单板计算机体验】在·星光2上安装配置新编译的OpenWRT

    本文是《【·星光 2 高性能RISC-V单板计算机体验】在·星光2上编译OpenWRT》的下
    发表于 11-18 11:22

    ·星光 2 高性能RISC-V单板计算机体验】+6手把手实战Linux控制小车

    体验】4连接HDMI显示图形界面 - RISC-V技术论坛 【·星光 2 高性能RISC-V
    发表于 10-12 10:05

    ·星光 2 高性能RISC-V单板计算机体验】星光 2 功耗测评

    星光 2是迄今最高性能单板机。 搭载高性能·惊鸿7110搭载64位高性能四核RISC-V CPU,2MB的二级缓存,工作频率最高可达1.5 GHz。
    发表于 09-28 10:34

    VisionFive 2单板计算机成功支持Docker容器解决方案

    科技进一步获取。 关于 VisionFive 2 VisionFive 2 是全球第一款集成 3D GPU 的高性能量产 RISC-V 单板计算机,它优越的性能与合理的价格使其成为
    发表于 09-08 11:45

    RISC-V + OpenCV 计算机视觉】用 VisionFive 2 ·星光 2 进行物体识别

    广泛应用于视频监控、自动驾驶等领域。 基于Debain操作系统和OpenCV框架,科技在VisionFive 2(·星光 2)RISC-V
    发表于 09-08 11:42

    ·星光 2 高性能RISC-V单板计算机体验】原创3 控制螺旋桨电路的升力大小

    控制螺旋桨电路的升力大小,·星光 2 高性能RISC-V单板计算机反应敏捷,控制到位,值得上手! GPIO接口也非常多,非常全。如下图: 谢谢!
    发表于 08-31 16:45

    ·星光 2 高性能RISC-V单板计算机体验】2更换Debian操作系统

    接上两篇:【·星光 2 高性能RISC-V单板计算机体验】1初识科技StarFive -
    发表于 08-31 00:03

    ·星光 2 高性能RISC-V单板计算机体验】+1控制小车前进后退

    感谢 电子发烧友论坛网 感谢 上海科技有限公司 下面用GPIO方式控制小车前进与后退,如视频所示。 GPIO接口控制效果不错,接下来再用这款“单板计算机”做一些项目。
    发表于 08-30 20:15

    ·星光 2 高性能RISC-V单板计算机体验】使用之一:星光 2开箱之硬件分析

    ·星光 2 是全球首款集成了GPU的高性能RISC-V单板计算机。与·星光1 相比( J
    发表于 07-28 15:02

    【昉·星光 2 高性能RISC-V单板计算机体验】+3、系统功能测试

    【昉·星光 2 高性能RISC-V单板计算机体验】+3、系统功能测试
    的头像 发表于 07-26 08:59 945次阅读
    【昉·<b class='flag-5'>星光</b> 2 高性能<b class='flag-5'>RISC-V</b><b class='flag-5'>单板计算机</b>体验】+3、系统功能<b class='flag-5'>测试</b>

    RISC-V专题】·星光 2(VisionFive 2)RISC-V单板计算机免费试用

    VisionFive 2是全球首款集成3D GPU的高性能量产RISC-V 单板计算机 。与上一代相比,VisionFive 2全面升级,在处理器工作频率、多媒体处理能力、可扩展性等方面都有显着提升
    发表于 05-16 11:26