您尚未登录。

楼主 # 2021-10-12 23:05:29

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)
所有的内容都通过buildroot搭建,包括uboot,内核,qt5等等。
我是通过UBUNTU18.4搭建的,如果在buildroot的下载过程中遇到了半天都下不下来,直接就强行终止,然后执行
sudo systemd-resolve --flush-caches  (UBUNTU18.4,其他的版本需要自己查)这个是刷DNS,我有的时候下载不动就用此命令。

1.apt-get update


2.sudo apt-get install -y sed make binutils build-essential  gcc g++ bash patch gzip bzip2 perl tar cpio unzip rsync file  bc wget python cvs git mercurial rsync scp subversion android-tools-mkbootimg libncurses5-dev

Bzr 注意:第2步骤是我自己摸索出来的,与韦东山老师要求安装的库的不同,请注意。


3.找一个文件夹 或者是home文件夹     mkdir -p  ~/Neza-D1/ &&  cd ~/Neza-D1/    这样就有Neza-D1文件夹了。


4.git clone https://gitee.com/weidongshan/neza-d1-buildroot.git buildroot-2021 这个是韦东山老师的buildroot,下载速度应该是比较快。


5.在buildroot-2021/configs/的文件夹下有neza-d1_defconfig,这个就是默认的配置文件。  通过make  neza-d1_defconfig    生成默认文件。然后通过
make menuconfig 进入buildroot配置,Qt5的这三个库去掉。(我是下载不下来没有办法去掉的,如果可以下载下来,也不用去掉)
Qt5-coap需要去掉
Qt5-knx 需要去掉
Qt5-mqtt需要去掉


6.make  all,这个过程非常漫长。完成之后会在buildroot/image下生成sdcard.img,通过写SD卡的工具写入就可以了。


7.写入之后,可以通过串口启动,就成功了一半,这个时候插入HDMI是不能识别,好像是sink什么什么错误。然后执行

mount -t debugfs none /sys/kernel/debug;
cd /sys/kernel/debug/dispdbg;
echo disp0 > name; 
echo switch1 > command; 
echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; 
echo 1 > start;

然后你的显示屏幕就只能显示左边一部分,然后你执行 cat /dev/urandom > /dev/fb0 应该可以看到左边一小半屏幕有雪花屏幕。


8.我的LCD是1024x600的,显示不全应该是设备树的问题,然后就修改uboot设备树和linux内核设备树。
uboot与linux内核都在 buildroot的output/build/目录下
uboot设备树在 uboot-origin_master文件夹下的 arch/boot/dts/uboot-board.dts
linux内核设备树在 linux-origin_master文件夹下的 arch/riscv/boot/dts/board.dts
两个设备树都要修改成下面这种,-就是要去掉,+就是要增加,其中dev0_output_mode是调分辨率       

<10>就是1080p
<5> 就是720p
<2> 就是360p

具体可以查文档

        disp_init_enable         = <1>;
        disp_mode                = <0>;
-       screen0_output_type      = <1>;
-       screen0_output_mode      = <4>;
-
-       screen1_output_type      = <3>;
-       screen1_output_mode      = <10>;
-
-       screen1_output_format    = <0>;
-       screen1_output_bits      = <0>;
-       screen1_output_eotf      = <4>;
-       screen1_output_cs        = <257>;
-       screen1_output_dvi_hdmi  = <2>;
-       screen1_output_range     = <2>;
-       screen1_output_scan      = <0>;
-       screen1_output_aspect_ratio = <8>;
-
-       dev0_output_type         = <1>;
-       dev0_output_mode         = <4>;
+    screen0_output_type      = <3>;
+    screen0_output_mode      = <10>;
+
+    screen0_output_format    = <0>;
+    screen0_output_bits      = <0>;
+    screen0_output_eotf      = <4>;
+    screen0_output_cs        = <257>;
+    screen0_output_dvi_hdmi  = <2>;
+    screen0_output_range     = <2>;
+    screen0_output_scan      = <0>;
+    screen0_output_aspect_ratio = <8>;
+
+    screen1_output_type      = <1>;
+    screen1_output_mode      = <4>;
+
+    dev0_output_type         = <4>;
+    dev0_output_mode         = <10>;
        dev0_screen_id           = <0>;
-       dev0_do_hpd              = <0>;
-
-       dev1_output_type         = <4>;
-       dev1_output_mode         = <10>;
-       dev1_screen_id           = <1>;
-       dev1_do_hpd              = <1>;
+       dev0_do_hpd              = <1>;

修改完成之后,在uboot-origin_master文件夹下与 linux-origin_master文件夹下都需要执行
rm  .stamp_built
然后 在buildroot目录下 make all
然后下载到sd卡,
cat /dev/urandom > /dev/fb0 应该是全屏幕的雪花



9.这个时候插入鼠标键盘虽然有打印消息但是没有/dev/input/   这个时候需要在内核加入Event interface,
修改完成还是需要 rm  .stamp_built,烧入sd卡,这个时候就有/dev/input/eventx,这个时候鼠标与键盘还是不能用在qt5中。

export QT_QPA_GENERIC_PLUGINS=tslib,evdevkeyboard:/dev/input/eventx,evdevmouse:/dev/input/eventx

这个eventx需要根据实际情况来  这个时候qt5就支持键盘了.



10.交叉编译QT5的NES模拟器,我在github下的,它那个需要很多的依赖,
例如需要继承OPENGL。我后面就改成了,只要有最基本的库就可以了。(文件会随后发出来)
qmake在 buildroot的output/host/bin目录下,有qmake就可以交叉编译。

离线

楼主 #1 2021-10-12 23:13:18

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

qt4-NES4_5_512_480_640_480.7z
这个是QT5源文件,,qt4-NES4_5_512_480_640_480/Qt/hdl.nes 拷贝到根目录可以直接一运行,接上键盘就可以直接玩。
1 2  A W S D L O通过这几个键就可以玩魂斗罗啦,嘻嘻。

离线

楼主 #2 2021-10-12 23:20:11

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

E7CD252C-F966-4CE4-BCA9-2D7C356A08FB.jpeg
这个是我的HDMI显示器图

离线

#3 2021-10-13 08:42:28

伍零壹
会员
注册时间: 2019-12-16
已发帖子: 128
积分: 86

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

怎么感觉颜色不太对

离线

楼主 #4 2021-10-13 11:02:24

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

伍零壹 说:

怎么感觉颜色不太对

显示器有一层膜的,可能与这个有关系,如果是色差太大,不排除与RGB处理无关。

离线

楼主 #5 2021-10-13 11:27:43

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

for (y = 0; y < NES_DISP_HEIGHT; y++ )//240
    {
        for (x = 0; x < NES_DISP_WIDTH; x++ )//256
        {
            *p=*(WorkFrame+(y*NES_DISP_WIDTH)+x);
            *(*(WorkFrameX+(y<<1))+(x<<1))=*p;
            *(*(WorkFrameX+(y<<1))+((x<<1)+1))=*p;
            *(*(WorkFrameX+((y<<1)+1))+(x<<1))=*p;
            *(*(WorkFrameX+((y<<1)+1))+((x<<1)+1))=*p;
        }
    }

这个是将图像放大两倍,mask一个标签
infones的linux版本  绘制点是一点一点计算,如果屏幕比较大,应该就比较慢

离线

#6 2021-10-13 13:30:57

cube
会员
注册时间: 2021-03-11
已发帖子: 145
积分: 72.5

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

楼主你好,是用 qmake 编译这个文件qt4-NES4_5_512_480_640_480\Qt\Qt.pro吗?

离线

楼主 #7 2021-10-13 14:35:22

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

cube 说:

楼主你好,是用 qmake 编译这个文件qt4-NES4_5_512_480_640_480\Qt\Qt.pro吗?

这个是qt的工程,具体操作是
1. cd ..../qt4-NES4_5_512_480_640_480/Qt/
  这个是来到Qt.pro的目录下
2.  ......output/host/bin/qmake
  在这个目录下运行对应的qmake,自动生成Makefile文件
3. make clean
  这个是清除编译的中间文件
4. make
  make的过程中,可能有报错,通过vim修修,我这个如果在Windows下编译过,好像需要去掉某个头文件,打开报错的ui_xxxxx.h,注释掉 ness...h
5.再次make
  编译成功就会有Qt这个可执行文件了,可以查看生成时间,看是不是刚刚生成的
6.将Qt 与 hdl.nes 这两个文件copy到板子的根文件,然后    cd /     ls  看有没有这两个目录,如果有就  ./Qt   声音暂时没有移植上去,谁有兴趣可以在我的基础上改一下。

离线

楼主 #8 2021-10-13 14:41:20

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

我的Qt程序是在Windows下写的,验证通过,然后将整个文件夹复制到UBUNTU,然后交叉编译。
不过需要注意的是:在Windows下的程序不要调用Windows的系统函数,否则会交叉编译不通过

离线

楼主 #9 2021-10-13 23:30:56

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 166
积分: 110

Re: 小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)

优化的一下赋值方式,假设你需要显示的部分是512x480,从以前需要循,512x480次,现在只需要循环256x240次,但是这个算法只能放大整数倍。也就是算法从以屏幕分辨率为侧重点,到以原始数据为侧重点,当然,如果可以利用硬件资源显示就完美了,不过好像实际跑起来差不多。qt4-NES4_5_512_480_640_480_try_high_speed.7z

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn