男人至死都是孩子——大佬在D1开发板上移植魂斗罗游戏
-
小白通过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就可以交叉编译。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通过这几个键就可以玩魂斗罗啦,嘻嘻。
这个是我的HDMI显示器图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版本 绘制点是一点一点计算,如果屏幕比较大,应该就比较慢(文章转载自:WhyCan Forum 哇酷开发者社区 )
(原文链接:https://whycan.com/t_7253.html ) -
windows 用 QtCreator 编译 qt4-NES4_5_512_480_640_480\Qt\Qt.pro 运行成功。
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号